一:旧版本新浪微博 SDK 在 iOS9 上会致使的 Crash
app was compiled with optimization - stepping may behave oddly; variables may not be available
打印出来这句话,而后崩溃。可能是启动的过程当中程序就崩溃。
在iOS9下,新浪微博SDK里面使用的 JSONKit 在部分机型可能致使崩溃。崩溃信息以下图。
解决:更新新浪微博SDK,新浪的SDK最新版作了对iOS9兼容。html
二:iOS9 下使用 Masonry 会引发崩溃的一种状况
咱们在使用时候一直将 leading 与 left 划为等号,这样作在 iOS8(及之前)上是正常的,但在 iOS9 上这样的观念可能会引发崩溃,好比:
1 make.left.equalTo(self.mas_leading).offset(15);
应该为:
1 make.left.equalTo(self.mas_left).offset(15);
同理 mas_training 也须要改成right
三:Xcode 升级后,旧的状态栏的样式设置方式会引发警告
: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.: CGContextTranslateCTM: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.: CGContextRestoreGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
出错缘由:设置 app 的状态栏样式的时候,使用了旧的方式,在 info.plist 里面的 View controller-based status bar appearance 默认会为 YES,即便不设置也是 YES,但通常 iOS6 的时候为了设置状态栏样式,须要将其设为NO,iOS7,8也兼容,可是到了iOS9 就会报警告。
解决办法:
删除原先的设置代码,一般老的设置方式是这样的:网络
//设置状态栏的白色 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
删除的缘由见下:app
// Setting the statusBarStyle does nothing if your application is using the default UIViewController-based status bar system. @property(readwrite, nonatomic) UIStatusBarStyle statusBarStyle NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController preferredStatusBarStyle]"); - (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle animated:(BOOL)animated NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController preferredStatusBarStyle]");
修改方式是在 Info.plist 文件中作以下修改:
将 View controller-based status bar appearance 删除(默认为 YES),或设置为YES:异步
对应的 plist 里的 XML源码:async
看起来长这样:测试
而后使用新的方式来实现状态栏的样式:atom
好比,你想将状态栏设置为白色,就能够这样写:
//设置状态栏的白色spa
-(UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; }
记得要 clean 下或者删除应用程序从新运行。
四:navigationController状态栏样式新的设置方法
若是你按照上面的方法设置了,但仍是不行。八成是 rootViewController 设置的问题,你必须设置 rootViewController,编译器才会去 rootViewController 中重载 preferredStatusBarStyle 方法。debug
另外当你在 appdelegate 中将 navigationController 设为 rootViewController 的时候:
1 self.window.rootViewController = self.navigationController;调试
由于 rootViewController 变为了 navigationController,你在 ViewController 里重写 preferredStatusBarStyle 方法是不会起做用的。因此最好的方法是
1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 self.title = @"微博@iOS程序犭袁"; 5 self.navigationController.navigationBar.barStyle = UIBarStyleBlack; 6 }
若是你仍是想重写 preferredStatusBarStyle 方法来达到做用,那最好使用分类来解决:
1 #import "UINavigationController+StatusBarStyle.h" 2 3 @implementation UINavigationController (StatusBarStyle) 4 5 - (UIStatusBarStyle)preferredStatusBarStyle 6 { 7 //also you may add any fancy condition-based code here 8 return UIStatusBarStyleLightContent; 9 } 10 11 @end
五:Xcode7 在 debug 状态下也生成 .dSYM 文件引发的警告
Xcode6 的工程升级到 Xcode7上来,会报警告:
这是 debug 编译时导出符号文件出现的告警,然而新建的Xcode7工程不会有该问题。
解决方法是让 debug 编译的时候不生成符号文件:
Xcode7 没法使用 8.x 系统的设备调试,一运行就报错 there is an intenal API error
Xcode7 调试 iOS8.x 的真机,须要确保项目名改成英文,中间含有中文会报错 there is an intenal API error
按照下面的步骤检查:
bulid settings -> packaging -> product name
六:使用了 HTML 的 iframe 元素可能致使没法从 Safari 跳转至 App
咱们都知道,从网易新闻分享一条新闻到QQ,而后从QQ中打开连接再用safari打开连接,在iOS8上,这个时候会跳转到网易新闻App。可是如今(2015年09月23日)版本的网易新闻在 iOS9 就不能正常跳转,会跳转到 App Store 页面并提示要不要打开 App Store。
这是极可能是由于使用了 HTML 的 iframe 元素,并将自定义的连接放进了该元素中
举例说明:
我以前写的一个 Demo: 模仿 《简书 App》 的效果:在html中跳转到App中的对应页面,并能从App跳转到原来的网址,在例子中直接调用自定义连接在 iOS9上是能够跳转到 App 中的,然而,若是用 iframe 元素包起来就会变不可用。
七:iOS9锁屏控制台会打印警告
加入运行以下示例代码:
- (void)viewDidLoad { [super viewDidLoad]; dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^(void) { //在这个10秒内锁屏 NSLog(@"准备休眠"); sleep(10); NSLog(@"打印成功"); }); }
应用运行过程当中锁屏,老是会出现如下提示:
1 [UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:] ** unhandled action ->{ 2 handler = remote; 3 info ={ 4 (1) = 5; 5 }; 6 }
当应用处于空闲状态时(无网络请求)锁屏对于用户而言并没有较大影响,可是当应用在执行某个异步任务时(好比下拉刷新一下列表)锁屏,从新解锁进入就可能会发现异步任务失败,控制台也会提示 Error 信息:
1 [UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:] ** unhandled action ->{ 2 handler = remote; 3 info ={ 4 (1) = 5; 5 }; 6 } 7 error in __connection_block_invoke_2: Connection interrupted
以上状况不易复现,但确有发生。在 iOS8 系统下测试并未发现此问题。对此并未找到合理的解释和对应的解决办法,若是你有解决方法,欢迎提 PR !