1.1 SiriKit
所有第三方應用都可以用Siri,支持音頻、視頻、消息發送接收、搜索照片、預訂行程、管理鍛煉等
1.2 Proactive Suggestions 系統預先建議
背景就是iOS9的時候系統給予的主動建議 通過:Spolight搜索,Safari搜索,Handoff,或者siri建議。 在iOS10之后新增了,鍵盤QuickType建議,地圖,車載娛樂,應用切換,siri交互,鎖屏播放。eg:你正在一個應用里看一個酒店,可以使用mapitem屬性保存正在查看的這個酒店的位置,然后你切換旅行或地圖App時這個位置可以自動提供使用。 如果你需要這樣利用系統來共享一個位置,那你需要指定這個位置的經緯度、地名、電話等屬性來便于siri的直接調起。
1.3 Message App Extension
在 iOS 10 里面開發者可以給 Message.app 提供兩種 App Extension,分別是可以提供一個表情包(沒錯,英文名就叫 Sticker Pack),和一個自定義的界面,用于表情搜索等
1.4 User Notifications 用戶通知
iOS 10 中以前雜亂的和通知相關的 API 都被統一了,現在開發者可以使用獨立的 UserNotifications.framework 來集中管理和使用 iOS 系統中通知的功能。 在 iOS 10 中,開發者的服務器有機會在本地或者遠程通知發送給用戶之前再進行修改。 在此基礎上,Apple 還增加了撤回單條通知,更新已展示通知,中途修改通知內容,在通知中展示圖片視頻,自定義通知 UI 等一系列新功能,非常強大。
1.5 Speech Recognition 語音識別
IOS 10 引入Speech.framework用來支持語音識別, 在app中可以識別語音并轉成文本, 語音來源可以是實時的也可以是錄音。
1.6 Wide Color 廣色域
包括Core Graphics,Core Image,Metal,AVFoundation在內的圖像框架極大的改善了對更加廣泛的像素格式和寬色域色彩空間的支持。
1.7 Adapting to the True Tone Display 真色調展示
真色調(True Tone)顯示使用環境光傳感器,可以做到配合當前環境的光線條件自動調節顯示的顏色和強度。如果你的應用是閱讀類,和環境中的白點保持一致對用戶來說就是有益的。
1.8 App Search Enhancements 應用搜索增強功能
新的CSSearchQuery類支持搜索那些你用Core Spotlight API指出的應用內內容。 使用這些API可以淘汰你應用中單獨的搜索索引,以及更好的利用Spotlight強大的搜索技術,同時,匹配規則允許用戶在不離開你應用的條件下搜索內容,就像他們在Mail,Messages和Notes中體驗到的一樣。
1.9 Widget Enhancements widget增強功能
iOS10引入了一個新的鎖屏設計,新的鎖屏現在會顯示各種widget。
1.10 Apple Pay Enhancements
在iOS10中,用戶可以從網頁上,或通過Siri和地圖的互動來使用Apple Pay進行簡單和安全的支付。 對于開發者來說,iOS10引入了可以同時在iOS和watchOS上使用的新API,支持動態支付網絡的能力,和新的沙盒測試環境。
1.11 Security and Privacy Enhancements
iOS10引入幾個變化來幫助您提高代碼的安全和維護用戶數據的隱私性。 想了解更多,請查閱https://developer.apple.com/security/。
1.12 CallKit 來電攔截相關
CallKit框架(CallKit.framework)使得VoIP應用能與iPhone UI整合到一起,從而給用戶帶來更好的體驗。 使用這個框架來讓用戶在鎖屏頁面查看和接聽打來的VoIP電話,并在Phone應用的個人收藏和最近通話視圖中管理來自VoIP通話的聯系人。 CallKit框架同樣也引入了應用擴展(app extensions),這個擴展可以進行呼叫攔截和來電識別。你可以創建一個應用擴展來將電話號碼和名稱關聯起來,或是告訴系統什么樣的號碼需要被攔截。
1.13 News Publisher Enhancements
News Publisher使用Apple News Format來讓發表設計精美的新聞、雜志、網頁內容到Apple News變的簡單。 從各大雜志或新聞機構這種獨立出版商,到個人博客,任何人都可以注冊。
1.14 Video Subscriber Account
iOS10引入了Video Subscriber Account框架(VideoSubscriberAccount.framework)來幫助應用支持流媒體認證或認證視頻點播(也被稱為TV Everywhere)與他們的有線電視或衛星電視供應商認證。 對于那些用戶注冊一次就能解鎖流媒體訂閱服務的應用來說,使用這個框架中的API可以幫助你支持單一登錄體驗。
5. 需要關注的地方
1. UITabBarController 中的改進
在iOS 10之前,tabBarItem上的文字顏色,默認是藍色,上面的新消息提醒數字badge 默認是紅色的,未選中的TabBarItem的文字顏色默認是黑色的,我們修改的話,也只能修改它的默認顏色 ,其它的就不能進行個性化定制,使用起來非常的不方便,iOS10之后我們可以輕松個性化定制了。
2. iOS10.0中字體跟隨系統設置變化大小
在以前如果說我們想改變APP中程序的字體大小,我們只能自定義字體或者使用runtime進行處理,或者都得設置UIFont,非常的不方便,從iOS 10蘋果官方允許我們自定義設置 代碼:self.labels.adjustsFontForContentSizeCategory = YES;
3. UIViewPropertyAnimator屬性動畫器
那么在iOS 10之前,我們使用UIView 做動畫效果或者自定義一些layer 的動畫,如果開始了,一般無法進行停止操作更不能暫停操作,而且一些非常復雜的動畫處理也比較麻煩,但是在iOS10,蘋果推出了一個全新的APIUIViewPropertyAnimator,可供我們處理動畫操作
4. UIColor 新增方法
在iOS10之前,UIColor中設置顏色只能通過RGB 來表示,在iOS原生還不支持#16進制寫法,還得自己寫分類去處理,我們知道RGB表示的顏色是優先的,而且也是不精準的,那么在iOS10中,蘋果官方新增了colorWithDisplayP3Red方法
5. UIApplication對象中openUrl被廢棄
在iOS 10.0以前的年代,我們要想使用應用程序去打開一個網頁或者進行跳轉,直接使用[[UIApplication sharedApplication] openURL 方法就可以了,但是在iOS 10 已經被廢棄了,因為使用這種方式,處理的結果我們不能攔截到也不能獲取到,對于開發是非常不利的,在iOS 10全新的推出了[UIApplication sharedApplication] openURL:nil options:nil completionHandler:^(BOOL success);有一個成功的回調block 可以進行監視。
6. CoreData提升了并發訪問性能
7. 刷新控件(UIRefresh Control)
iOS系統自帶的刷新控件支持所有的 UIScrollView 以及其子類,比如說 UICollectionView,UITableView。
8. GCD多線程支持創建私有隊列
9. iOS10 對隱私權限的管理
比如訪問的攝像頭、麥克風等硬件,都需要提前請求應用權限、允許后才可以使用,或者現在要提前聲明,雖然以往要求不嚴格。比如在iOS10中訪問通訊錄時,強制必須在Info.plist中加入NSContactsUsageDescription等描述,否則應用會崩潰。 崩潰日志:*This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCameraUsageDescriptionkey with a string value explaining to the user how the app uses this data.
10. 證書簽名
在Xcode 8中,代碼簽名錯誤的情況應該不會存在了。 在每一個targe中,你都可以在框中打勾來告訴Xcode讓它來代表你管理代碼簽名。 對于新項目這個選項默認是打開的。 打勾以后,Xcode為你管理certificates, provisioning profiles和 application identifiers。
11. Xib兼容問題
Xcode8上打開項目要小心,尤其是對于xib過程,在變動后可不要隨意點保存,否則當你回頭用Xcode7打開時時發現報錯了,Xcode保存的xib在xcode7上是識別不了的, 如果你在Xcode8中打開或者xib文件,會彈出如下提示框, 忽視他
12. 運行時問題 Runtime Issues
這Xcode新特性,自動識別跟蹤找到漏洞并且報告問題, 有些很難跟蹤的bug,直到您的應用程序到了用戶手中,也可能沒有被發現。 Thread Sanitizer spots:新的線程污點清理器, 解決多線程情況下的資源競爭條件,數據的變化和其它相關線程的 bug View Debugger:使用更新的帶有更大的保真度和視覺精度檢查UI約束問題的視圖調試器 Memory Debugger:可以用新的內存調試跟蹤器跟蹤發出的內存泄漏警報。
6. iOS 10 兼容適配點
1. iOS 10 對隱私權限的管理必須要改否則會crash
比如訪問的攝像頭、麥克風等硬件,都需要提前請求應用權限、允許后才可以使用,或者現在要提前聲明,雖然以往要求不嚴格。比如在iOS10中訪問通訊錄時,強制必須在Info.plist中加入NSContactsUsageDescription等描述,否則應用會崩潰。崩潰日志:***Thisapp has crashed because it attempted to access privacy-sensitivedatawithout a usage description.Theapp'sInfo.plist must contain anNSCameraUsageDescriptionkeywith a string value explaining to the user how the app uses thisdata.PhotoLibraryNSPhotoLibraryUsageDescriptionCameraNSCameraUsageDescriptionMicrophoneNSMicrophoneUsageDescriptionLocationNSLocationUsageDescriptionLocationWhenInUseNSLocationWhenInUseUsageDescriptionLocationAlwaysNSLocationAlwaysUsageDescriptionCalendarsNSCalendarsUsageDescriptionRemindersNSRemindersUsageDescriptionMotionNSMotionUsageDescriptionHealthUpdateNSHealthUpdateUsageDescriptionHealthShareNSHealthShareUsageDescriptionBluetoothPeripheralNSBluetoothPeripheralUsageDescription
2. Xib兼容問題
Xcode8上打開項目要小心,尤其是對于xib過程,在變動后可不要隨意點保存,否則當你回頭用Xcode7打開時時發現報錯了,Xcode8保存的xib在xcode7上是識別不了的, 如果你在Xcode8中打開或者xib文件,會彈出如下提示框, 忽視他
3. UIApplication對象中openUrl被廢棄不改也可以用
在iOS 10.0以前的年代,我們要想使用應用程序去打開一個網頁或者進行跳轉,直接使用[[UIApplication sharedApplication] openURL方法就可以了,但是在iOS 10 已經被廢棄了,因為使用這種方式,處理的結果我們不能攔截到也不能獲取到,對于開發是非常不利的,在iOS 10全新的推出了[UIApplication sharedApplication] openURL:nil options:nil completionHandler:^(BOOL success);有一個成功的回調block 可以進行監視。
4. 安全和保密性已聯系蓋瑞給安全團隊檢查
使用改進后的SecKey API 而不是過時的 CDSA API。 安全傳輸API中不再支持SSLv3, 建議你們盡快停用SHA1和3DES加密算法。
5. widget鎖屏界面
現在鎖屏界面有了新的設計,建議我們廢棄以前的notificationCenterVibrancyEffect 改用widgetPrimaryVibrancyEffect或者widgetSecondaryVibrancyEffect,并且窗口的小部件可以讓你描述有多少東西可用,支持緊湊和擴展兩種形態。
6. AVFoundation不改也可以用
AVCaptureStillImageOutput廢棄了, 用AVCapturePhotoOutput替換.
7. IOS版本檢查
下面的寫法會返回NO#defineIsIOS7 ([[[[UIDevice currentDevice] systemVersion] substringToIndex:1] intValue]>=7)因為substringToIndex:1inSDK'iOS 10.0'(Xcode8) means SDK'iOS 1.0'
8. 廢棄的API(不改也可以用)
CloudKit中廢棄的
CKDiscoverAllContactsOperation CKDiscoveredUserInfo CKDiscoverUserInfosOperation CKFetchRecordChangesOperation
CKSubscription中廢棄的
initWithRecordType:predicate:options: initWithRecordType:predicate:subscriptionID:options: initWithZoneID:options: initWithZoneID:subscriptionID:options: zoneID recordType predicate subscriptionOptions CKSubscriptionOptions initWithCoder:
NSPersistentStoreCoordinator中廢棄的
removeUbiquitousContentAndPersistentStoreAtURL:options:error: lock tryLock unlock metadataForPersistentStoreWithURL:error: setMetadata:forPersistentStoreOfType:URL:error: metadataForPersistentStoreOfType:URL:error: NSPersistentStoreUbiquitousTransitionType NSPersistentStoreDidImportUbiquitousContentChangesNotification setStoresFastSyncDetailsAtURL:forPersistentStore: syncWithClient:inBackground:handler:error:
UIViewController中廢棄的
ADBannerView ADInterstitialAd
SKUniform中廢棄的
uniformWithName:floatVector2: uniformWithName:floatVector3: uniformWithName:floatVector4: uniformWithName:floatMatrix2: uniformWithName:floatMatrix3: uniformWithName:floatMatrix4: initWithName:floatVector2: initWithName:floatVector3: initWithName:floatVector4: initWithName:floatMatrix2: initWithName:floatMatrix3: initWithName:floatMatrix4: floatVector2Value floatVector3Value floatVector4Value floatMatrix2Value floatMatrix3Value floatMatrix4Value
UIKit中廢棄的
UILocalNotification UIMutableUserNotificationAction UIMutableUserNotificationCategory UIUserNotificationAction UIUserNotificationCategory UIUserNotificationSettings
WatchKit中廢棄的
handleActionWithIdentifier:forLocalNotification: handleActionWithIdentifier:forRemoteNotification: didReceiveLocalNotification:withCompletion: didReceiveRemoteNotification:withCompletion: WKExtensionDelegate didReceiveRemoteNotification: handleActionWithIdentifier:forRemoteNotification: