1、iOS iAP内购审核可能失败的问题##
- Guideline 3.1.1 - Business - Payments - In-App Purchase
We noticed that your app uses in-app purchase products topurchase credits or currencies that are not consumed within the app, which is not appropriate for the App Store. - 苹果提交iAP内购审核的时候,可能出现上面的问题。出现这个问题有可能的原因是因为你的app中在iAP内购中购买的商品,能够通过其他的渠道或者方式购买。此处在AppStore是不允许的。比如,你在安卓充值100元人民币,那么如果商品一样能够使用在iOS设备上,苹果不会允许你上线的。当然这里指的是虚拟类商品。
另外就是在审核的时候不能以任何方式,通过活动或者兑换码的形式,能够获取到iAP内购中能够获取到的商品
2、App上架后,如何修改app上显示的公司名称?
- 1.先修改开发者账号中填写的公司名称。
- 2.再提交更新版本。
如何修改开发者账号中的公司名称:
登陆到Apple developer上面,在people里面的开发者列表中找到agent,让agent的这个人直接拨打苹果开发部咨询电话,修改开发者账号上的公司名或者用你注册的账号的邮箱直接写邮件:“我需要更改公司名称”到chinadev@asia.apple.com,让苹果开发部客服来处理。
1、使用系统的某些block api(如UIView的block版本写动画时),是否也考虑引用循环问题?##
- 系统的某些block api中,UIView的block版本写动画时不需要考虑,但也有一些api 需要考虑:
所谓“引用循环”是指双向的强引用,所以那些“单向的强引用”(block 强引用 self )没有问题,比如这些:
[UIView animateWithDuration:duration animations:^{ [self.superview layoutIfNeeded]; }];
[[NSOperationQueue mainQueue] addOperationWithBlock:^{ self.someProperty = xyz; }];
[[NSNotificationCenter defaultCenter] addObserverForName:@"someNotification"
object:nil
queue:[NSOperationQueue mainQueue]
usingBlock:^(NSNotification * notification) {
self.someProperty = xyz; }];
- 这些情况不需要考虑“引用循环”。
但如果你使用一些参数中可能含有 ivar 的系统 api ,如 GCD 、NSNotificationCenter就要小心一点:比如GCD 内部如果引用了 self,而且 GCD 的其他参数是 ivar,则要考虑到循环引用:
__weak __typeof__(self) weakSelf = self;
dispatch_group_async(_operationsGroup, _operationsQueue, ^
{
__typeof__(self) strongSelf = weakSelf;
[strongSelf doSomething];
[strongSelf doSomethingElse];
} );
类似的:
__weak __typeof__(self) weakSelf = self;
_observer = [[NSNotificationCenter defaultCenter] addObserverForName:@"testKey"
object:nil
queue:nil
usingBlock:^(NSNotification *note) {
__typeof__(self) strongSelf = weakSelf;
[strongSelf dismissModalViewControllerAnimated:YES];
}];
self —> _observer —> block —> self 显然这也是一个循环引用。
检测代码中是否存在循环引用问题,可使用 Facebook 开源的一个检测工具 FBRetainCycleDetector 。
4、如何用GCD同步若干个异步调用?(如根据若干个url异步加载多张图片,然后在都下载完成后合成一张整图
使用Dispatch Group追加block到Global Group Queue,这些block如果全部执行完毕,就会执行Main Dispatch Queue中的结束处理的block。
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{ /*加载图片1 */ });
dispatch_group_async(group, queue, ^{ /*加载图片2 */ });
dispatch_group_async(group, queue, ^{ /*加载图片3 */ });
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
// 合并图片
});
网友评论