iOS10和xcode8的GM版都放出了下載,我懷着忐忑的心更新了下(怕有適配問題啊!!!),先更新的xcode8,跑了下公司的項目,除了nullable字段有問題其餘都還比較順利,不過項目跑起來,仍是有一點小問題,好在不像iOS9更新時變化那麼多,而後我又給手機升級了iOS10,跑了個真機,結果一不當心測試到後半夜2點。。。浪費了一上午玩遊戲的好時光。本篇就我碰到的問題一一整理,但願有相似問題的猴們,能夠有點參考。
問題點xcode
Q:之前是能夠nullable的,如今的報錯了。安全
A:刪掉就行了app
Q:xcode8編譯的版本在訪問相機、相冊等須要用戶點擊容許開通權限的地方會崩潰A:因爲iOS10對Security and Privacy Enhancements安全和保密性加強,在申請不少私有權限時,都須要添加描述,不添加會crash。解決辦法,只需在info.plist裏配置上請求權限的描述信息就能夠了。框架
<key>NSCameraUsageDescription</key> <string>描述信息</string> <key>NSPhotoLibraryUsageDescription</key> <string>描述信息</string>ide
這裏以相機和照片權限爲例,描述信息能夠是任何字符串,跟iOS9中的訪問位置的字段是相似的性能
<key>NSLocationAlwaysUsageDescription</key> <string></string> <key>NSLocationWhenInUseUsageDescription</key> <string></string>學習
下面列出全部的key,用到的自行添加吧。測試
<key>NSPhotoLibraryUsageDescription</key> <string>App須要您的贊成,才能訪問相冊</string> <key>NSCameraUsageDescription</key> <string>App須要您的贊成,才能訪問相機</string> <key>NSMicrophoneUsageDescription</key> <string>App須要您的贊成,才能訪問麥克風</string> <key>NSLocationUsageDescription</key> <string>App須要您的贊成,才能訪問位置</string> <key>NSLocationWhenInUseUsageDescription</key> <string>App須要您的贊成,才能在使用期間訪問位置</string> <key>NSLocationAlwaysUsageDescription</key> <string>App須要您的贊成,才能始終訪問位置</string> <key>NSCalendarsUsageDescription</key> <string>App須要您的贊成,才能訪問日曆</string> <key>NSRemindersUsageDescription</key> <string>App須要您的贊成,才能訪問提醒事項</string> <key>NSMotionUsageDescription</key> <string>App須要您的贊成,才能訪問運動與健身</string> <key>NSHealthUpdateUsageDescription</key> <string>App須要您的贊成,才能訪問健康更新 </string> <key>NSHealthShareUsageDescription</key> <string>App須要您的贊成,才能訪問健康分享</string> <key>NSBluetoothPeripheralUsageDescription</key> <string>App須要您的贊成,才能訪問藍牙</string> <key>NSAppleMusicUsageDescription</key> <string>App須要您的贊成,才能訪問媒體資料庫</string>
Q:訪問當前應用的設置頁面的問題字體
NSURL *url = [NSURL URLWithString:@"prefs:root=bundleIn identifier"]; if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIApplication sharedApplication] openURL:url]; }
原本在iOS7-9上都正常工做的如上方式的跳轉設置頁面,在iOS10上點擊會報下面的錯誤優化
A:解決辦法也很簡單,實際上從iOS8開始就提供了直接跳轉設置頁面的url
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
替換成這個url就ok了,順便openUrl方法在iOS10中也廢棄了,不過仍是能夠用滴
(BOOL)openURL:(NSURL*)url NS_DEPRECATED_IOS(2_0, 10_0, "Please use openURL:options:completionHandler: instead") NS_EXTENSION_UNAVAILABLE_IOS("");
改成
(void)openURL:(NSURL)url options:(NSDictionary<NSString , id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion NS_AVAILABLE_IOS(10_0) NS_EXTENSION_UNAVAILABLE_IOS("");
Q:xcode7編譯的包,動態計算一段文字的高度時,計算出來的高度在iOS10設備上不足以容納這段文字A:由於iOS10更換了系統字體,因此會致使文字的大小跟iOS9及以前的系統有點區別,若是繼續使用xcode7編譯的話,建議在文字高度上多加5。或者直接使用xcode8編譯的包也能夠,文字的高度計算結果是正確的。至於相似YYText這樣的庫,底層使用CoreText寫的,xcode七、xcode8上都會存在這個問題,在最後的計算出來的高度上直接加5就ok了。
Q:推送中在獲取device token時,會報以下錯誤
A:打開以下設置
而後會自動生成以下文件
打開以下顯示
字段對應兩種狀態:development和production,而後再運行,便可成功獲取device token了。
xcode8開始,再也不支持iOS7,最低支持到iOS8。
不過既然iOS10都出了,並且iOS7用戶量是真心少,我以爲iOS7就能夠捨棄了,還減輕了開發成本,一些老的庫,好比ALAsset,性能真的不行了。不過仍是得聽領導安排啊哈哈。還好xcode8編譯的ipa包,裝在iOS7設備上,仍是能夠正常工做的,無非是測試時麻煩了點。
打開xcode8.0時編譯運行時出現下面問題:
39B1F3AE-530A-46B7-BE6E-379A0AA6B4DE.png
這個問題剛開始估計你們都會碰到也是第一個要解決的問題這個問題就是一個證書的設置問題,下面看兩張圖正常咱們會在BuildeSettings中設置證書:
A6682834-E135-4D55-9636-DC5E0962AF05.png
可是在xcode8.0中咱們看到下面的新特性:
06300540-83C7-44F4-9069-F198599F0086.png
相信你們都能看到在Genreal下面會有Siging,沒錯這就是新特性,爲了方便用戶來管理,你們能夠選擇Automatically manage signing。須要輸入開發者帳號!若是沒有帳號也不要緊,在下面也能夠選擇Debug、Realease、inHouse模式下對應的證書也能夠!
可是 可是 可是 若是你的證書若是是通配符類型的,可是你的app包含了好比推送、apple pay、他會報錯提示你未報含xx.id的manteid等等。因此你要生成針對你app的bundleid對應的證書!
Xcode8取消了三方插件的功能,好多教程破解能夠繼續使用,可是可能app上線可能會被拒。咱們最喜好的VVDocumenter-Xcode也不能使用了,下面是做者的感謝
9A4F4CA5-47C7-4301-9BE8-599DCA1BD5B4.png
上面也提到了咱們能夠繼續使用註釋,快捷鍵(⌥ Option + ⌘ Command + / )
iOS 10 中將通知相關的 API 都統一了,蘋果對這是作了重大改進,變的很是易用。
iOS 9 之前的通知
在調用方法時,有些方法讓人很難區分,容易寫錯方法,這讓開發者有時候很苦惱。應用在運行時和非運行時捕獲通知的路徑還不一致。應用在前臺時,是沒法直接顯示遠程通知,還須要進一步處理。已經發出的通知是不能更新的,內容發出時是不能改變的,而且只有簡單文本展現方式,擴展性根本不是很好。
iOS 10 開始的通知
全部相關通知被統一到了UserNotifications.framework框架中。增長了撤銷、更新、中途還能夠修改通知的內容。通知不在是簡單的文本了,能夠加入視頻、圖片,自定義通知的展現等等。iOS 10相對以前的通知來講更加好用易於管理,而且進行了大規模優化,對於開發者來講是一件好事。iOS 10開始對於權限問題進行了優化,申請權限就比較簡單了(本地與遠程通知集成在一個方法中)。
iOS 10 通知學習相關資料: