我之前从未实现过In App Purchase,所以我使用了MKStoreKit包装器,并且有一个可行的实现.MKStoreKit将所有收据保存在UserDefaults .plist中作为BOOL,因此盗版者在"破解"状态下分发应用内购买非常简单.完成第一次购买后,可以分发捆绑包,并可以重新创建.plist以启用IAP解锁.
我想扩展MKStoreKit以在iOS钥匙串中创建In App Purchase验证数据.是否有任何缺点或可能的原因导致付费用户失败,不可靠或任何其他原因导致这样做总体上是个坏主意?我知道盗版是不可避免的,我绝对不想疏远付费用户,但我觉得UserDefaults .plist太容易绕过了.
在我的场景中,购买时会将一个简单的字符串放入钥匙串中.这样,如果二进制文件已分发,则尚未启用解锁.当然,有可能提出一种解决方法,但需要花费更多精力并知道如何找到TRUE/FALSE标志并使其始终返回正确的值.通过模糊处理,我甚至可以使跟踪它变得更加困难.
感谢您的所有见解,我感谢答案,避免强制性的不可避免的盗版,处理它的回复.我对这个解决方案的技术可行性更感兴趣.
在这种情况下我不需要指定方向,我只需要检测它,但我遇到了麻烦.我有条件代码,只能在肖像中工作,如果设备在横向,我需要做其他事情.由于deviceOrientation不一定与interfaceOrientation相同,我无法想出一种测试纵向模式的方法.
我在Google上找到的大多数教程都是强制横向或进行某种轮换的方法.我唯一想做的就是确定方向是什么.这是我的代码,它不起作用:
-(void)viewDidLoad {
[super viewDidLoad];
//currentOrientation is declared as UIInterfaceOrientation currentOrientation
currentOrientation = [[UIApplication sharedApplication] statusBarOrientation];
NSLog(@"%@",currentOrientation); // == NULL
}
Run Code Online (Sandbox Code Playgroud)
我需要有条件地确定interfaceOrientation和program的值.谢谢你的帮助!
试图在Swift UIViewController子类中符合UITableViewDataSource和UITableViewDelegate.
class GameList: UIViewController {
var aTableView:UITableView = UITableView()
override func viewDidLoad() {
super.viewDidLoad()
aTableView.delegate = self
aTableView.dataSource = self
self.view.addSubview(aTableView)
//errors on both lines for not conforming
}
}
Run Code Online (Sandbox Code Playgroud)
文档说你应该遵循这class条线,:但这通常是超类的去处.另一个:不起作用.在超类之后使用逗号分隔列表也不起作用
答案如下. class GameList: UIViewController, UITableViewDataSource, UITableViewDelegate {
还必须采用每个协议的所有必需方法,这是我最初没有做到的.
在iOS 4.1上成功从iPhone相机获取图片后,您可以使用该密钥
@"UIImagePickerControllerMediaMetadata"
Run Code Online (Sandbox Code Playgroud)
返回有关图片的信息.该词典中的一个关键是
@"Orientation"
Run Code Online (Sandbox Code Playgroud)
从我的实验来看,肖像和颠倒分别是6和8,景观是1和3.看看这段代码:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSDictionary *metaData = [info objectForKey:@"UIImagePickerControllerMediaMetadata"];
id orientation = [metaData objectForKey:@"Orientation"];
NSLog(@"Class: %@",[orientation class]);
Run Code Online (Sandbox Code Playgroud)
NSLog说"Class:NSCFNumber"
我需要比较这个对象的值来确定如何继续.横向是1或3,纵向是6或8.我不确定要键入方向或调用什么.NSNumber和NSInteger总是告诉我,我正在使用没有强制转换的指针制作整数.
谢谢你的时间!
UIKeyboardTypeNumberPad在iPad上不显示数字键盘.而是显示UIKeyboardTypeNumbersAndPunctuation键盘.
有没有我遗失的东西,或者是否已将其从iPad OS中移除?
谢谢你的指导!
在python中,很容易构建一个字典或数组,并将其解压缩到具有可变参数的函数
我有这个:
- (BOOL) executeUpdate:(NSString*)sql, ... {
Run Code Online (Sandbox Code Playgroud)
手动方式是这样的:
[db executeUpdate:@"insert into test (a, b, c, d, e) values (?, ?, ?, ?, ?)" ,
@"hi'", // look! I put in a ', and I'm not escaping it!
[NSString stringWithFormat:@"number %d", i],
[NSNumber numberWithInt:i],
[NSDate date],
[NSNumber numberWithFloat:2.2f]];
Run Code Online (Sandbox Code Playgroud)
但我不能硬编码我正在调用的参数,我想:
NSMutableArray *values = [NSMutableArray array];
for (NSString *fieldName in props) {
..
..
[values addObject : value]
}
[db executeUpdate:@"insert into test (a, b, c, d, e) values (?, ?, ?, ?, …Run Code Online (Sandbox Code Playgroud) 我似乎在switch语句中创建新的局部变量时遇到问题.我认为它是我的类标题中的东西,但是甚至在尝试分配新的NSObject时遇到错误.这是我的语法:
-(NSArray *)charactersFromChapter:(NSInteger)number {
NSObject *noError = [[NSObject alloc] init];
//line above does not cause error
NSArray *characters;
switch (number) {
case 1:
NSObject *obj = [[NSObject alloc] init];
//error happens in line above (Expected expression)
characters = [NSArray arrayWithObject:obj];
break;
case 2:
break;
case 3:
break;
}
return characters;
}
Run Code Online (Sandbox Code Playgroud) 我创建了一个NSOperation子类来处理一些zip存档操作.无论如何,如果我覆盖-start或者-main这段代码总是发生:
if ([NSThread isMainThread]) {
NSLog(@"I am in the main thread");
return;
}
Run Code Online (Sandbox Code Playgroud)
知道发生了什么事吗?
我试过添加这个块:
- (void) start { //also tried overriding main
if ([NSThread isMainThread]) {
NSLog(@"In main thread, trying again");
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self start];
});
return;
//hard working code etc...
//cpu intensive zip operations...
}
Run Code Online (Sandbox Code Playgroud)
但这会导致崩溃,EXC_BAD_ACCESS违规指向该dispatch_async线.
objective-c nsoperation nsoperationqueue grand-central-dispatch ios
这不是编程问题,而是关于SDK和IDE.在过去的几年里,我已经积累了大量不同的XCode安装,现在我的硬盘已经满了.每个SDK的时钟大约为5演出,而我的存储空间也很低,我有几个问题
3个问题:
我想清理我的硬盘驱动器,我在160 GB驱动器上剩余大约18 GB.我想重新开始并重新安装OSX,下载一个新的SDK,但我仍然有针对3.1.2的应用程序,我不想被迫只支持4.0.
谢谢
我最近更新了开发者会员资格.我的新合同于5月19日生效.上周我进入并浏览了我的iAd收入,并注意到我的所有iAd应用都是"红色"并且没有收到广告.在扩展细节以找出原因之后,iAd模块告诉我我的iAd合同已经过期.但是,合同,银行和税务模块报告一切正常,我的iAd合同将在2013年5月19日生效.
顺便说一下,我收入的最后一天是今年5月19日.
我打电话给Apple支持,有一个跟进电话,请求我提交截图,但我没有收到任何回复.还有其他人经历过这个吗?


ios ×7
iphone ×5
objective-c ×3
cocoa-touch ×2
ipad ×2
anti-piracy ×1
cocoa ×1
iad ×1
keychain ×1
macos ×1
nsnumber ×1
nsoperation ×1
orientation ×1
protocols ×1
sdk ×1
swift ×1
uikit ×1
xcode ×1