iOS 10 新特性介紹(轉載)

https://github.com/ChenYilong/iOS10AdaptationTipsgit

1. iOS 10 新特性以及適配點

1.1 SiriKit

全部第三方應用均可以用Siri,支持音頻、視頻、消息發送接收、搜索照片、預訂行程、管理鍛鍊等github

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),和一個自定義的界面,用於表情搜索等api

1.4 User Notifications 用戶通知

iOS 10 中之前雜亂的和通知相關的 API 都被統一了,如今開發者可使用獨立的 UserNotifications.framework 來集中管理和使用 iOS 系統中通知的功能。 在 iOS 10 中,開發者的服務器有機會在本地或者遠程通知發送給用戶以前再進行修改。 在此基礎上,Apple 還增長了撤回單條通知,更新已展現通知,中途修改通知內容,在通知中展現圖片視頻,自定義通知 UI 等一系列新功能,很是強大。xcode

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能夠幫助你支持單一登陸體驗。

2. 增長的庫

  • CallKit
  • iAd
  • Intents (Siri相關)
  • IntentsUI (Siri相關)
  • Messages
  • Speech
  • UserNotifications
  • UserNotificationsUI
  • VideoSubscriberAccount

3. 移除的庫

  • iAdJS
  • Twitter

4. 變化的接口

AVKit、Core Image、GameKit、GameplayKit、HealthKit、HomeKit、Metal、ModelIO、Photos、ReplayKit、ReplayKit、SpriteKit均有不一樣程度的改動。詳細請參考官方iOS 9.3 to iOS 10.0 API Differences

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等描述,不然應用會崩潰。
崩潰日誌:
***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.
Photo Library
NSPhotoLibraryUsageDescription
Camera
NSCameraUsageDescription
Microphone
NSMicrophoneUsageDescription
Location
NSLocationUsageDescription
Location When In Use
NSLocationWhenInUseUsageDescription
Location Always
NSLocationAlwaysUsageDescription
Calendars
NSCalendarsUsageDescription
Reminders
NSRemindersUsageDescription
Motion
NSMotionUsageDescription
Health Update
NSHealthUpdateUsageDescription
Health Share
NSHealthShareUsageDescription
Bluetooth Peripheral
NSBluetoothPeripheralUsageDescription

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
#define IsIOS7 ([[[[UIDevice currentDevice] systemVersion] substringToIndex:1] intValue]>=7)
由於substringToIndex:1 in SDK 'iOS 10.0'(Xcode 8) 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:

轉載地址: http://blog.makaiwen.com/2016/08/29/iOS10NewFeature/

相關文章
相關標籤/搜索