提交APPStore审核因ipv6问题被拒
We discovered one or more bugs in your app when reviewed on iPhone running iOS 10.0.2 on Wi-Fi connected to an IPv6 network.
- Unable to log in
- Internet issue
We've attached screenshot(s) for your reference.
经过在ipv6环境下测试问题没有复现,等待结果(重新提交二进制文件后审核通过,并没有什么问题)
2016年10月27日,提交的新版本UI调整,再次被拒绝,原因是登录页面键盘遮挡按钮(以后注意,有输入的页面,键盘一定要能够随时收起,细节!)
关于CollectionView
使用storyboard创建collectionView时需要自定义header和footer,只要勾选上Section Header和Section Footer两个选项两个reuseView就会出现在storyboard里面,不需要自己去控件里拖(关键是拖也拖不进去……),分别设置好identifier,代码里面复用时要分清,虽然两个reuseView看着一样。
关于一些UI上出现的奇怪的Bug
一些界面的子控件并不是铺满整个屏幕,因此控件之间衔接的缝隙要多加注意,例如tableView或者collectionView和底部自定义Bar之间。
在collectionView的cell里面有个imageView,约束什么的都做好了,可是发现显示出来图片距离上边界的距离跟设置的怎么不一样?!怎么调都调不好,最后发现是图片的contentMode设置问题,图片超出控件显示了。
关于自定义转场的问题
项目中用到了自定义转场(present和dimiss)弹出,但是实现后发现弹出动画会有长时间卡顿,难道presentViewController方法是异步执行的?解决办法:
dispatch_async(dispatch_get_main_queue(), ^{
[self presentViewController:popupVC animated:YES completion:nil];
});
弹出后另一个controller后还想实现点击背景区域返回(dissmiss),这比单纯的点按钮返回稍微复杂,解决办法(给window添加手势):
/*添加一个点击背景返回fromVC的手势*/
- (void)addTapDismiss {
UIWindow *appWindow = [UIApplication sharedApplication].keyWindow;
UITapGestureRecognizer *tapGes = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapBehind:)];
[tapGes setNumberOfTapsRequired:1];
tapGes.cancelsTouchesInView = NO;
[appWindow addGestureRecognizer:tapGes];
}
- (void)handleTapBehind:(UITapGestureRecognizer *)sender {
if (sender.state == UIGestureRecognizerStateEnded){
CGPoint location = [sender locationInView:nil];
if (![self.view pointInside:[self.view convertPoint:location fromView:self.view.window] withEvent:nil]){
[self.view.window removeGestureRecognizer:sender];
[self dismissAction:nil];
}
}
}
关于统一性的问题
不同界面会用到相同表现形式的Cell或者View,最好能够复用,以便统一管理和更改,用单独的xib或者单独的类来定义这些公共的view应该是最好的选择。
数据格式导致的崩溃问题
1.创建字典时因为数据来源问题致使value为nil
2.使用三方库dateTool时的[NSDate dateWithString:serverDate formatString:ServerDateFormat]方法,传入的string为空时崩溃
3.往一个字符串的指定位置index插入字符,如果该字符串长度为0
4.在创建NSMutableString或者是NSMutableAttributedString时,使用initWithString方法时传入nil会崩溃
so,we should
- 不要过分相信服务器返回的数据格式
- 在对数据处理上,要进行容错处理,进行相应判断之后再处理数据,这是一个良好的编程习惯