一:舊版本新浪微博 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 !