iOS 10新特性以及適配點(diǎn)
SiriKit
所有第三方應(yīng)用都可以用Siri,支持音頻、視頻如绸、消息發(fā)送接收、搜索照片旭贬、預(yù)訂行程怔接、管理鍛煉等
Proactive Suggestions系統(tǒng)預(yù)先建議
背景就是iOS9的時(shí)候系統(tǒng)給予的主動(dòng)建議通過:Spolight搜索,Safari搜索稀轨,Handoff扼脐,或者siri建議。
在iOS10之后新增了奋刽,鍵盤QuickType建議瓦侮,地圖,車載娛樂佣谐,應(yīng)用切換肚吏,siri交互,鎖屏播放台谍。eg:你正在一個(gè)應(yīng)用里看一個(gè)酒店须喂,可以使用mapitem屬性保存正在查看的這個(gè)酒店的位置吁断,然后你切換旅行或地圖App時(shí)這個(gè)位置可以自動(dòng)提供使用趁蕊。
如果你需要這樣利用系統(tǒng)來共享一個(gè)位置,那你需要指定這個(gè)位置的經(jīng)緯度仔役、地名掷伙、電話等屬性來便于siri的直接調(diào)起。
Message App Extension
在iOS 10里面開發(fā)者可以給Message.app提供兩種App Extension又兵,分別是可以提供一個(gè)表情包(沒錯(cuò)任柜,英文名就叫Sticker Pack),和一個(gè)自定義的界面沛厨,用于表情搜索等
User Notifications用戶通知
iOS 10中以前雜亂的和通知相關(guān)的API都被統(tǒng)一了宙地,現(xiàn)在開發(fā)者可以使用獨(dú)立的UserNotifications.framework來集中管理和使用iOS系統(tǒng)中通知的功能。
在iOS 10中逆皮,開發(fā)者的服務(wù)器有機(jī)會(huì)在本地或者遠(yuǎn)程通知發(fā)送給用戶之前再進(jìn)行修改宅粥。
在此基礎(chǔ)上,Apple還增加了撤回單條通知电谣,更新已展示通知秽梅,中途修改通知內(nèi)容抹蚀,在通知中展示圖片視頻,自定義通知UI等一系列新功能企垦,非常強(qiáng)大环壤。
Speech Recognition語音識(shí)別
IOS 10引入Speech.framework用來支持語音識(shí)別,在app中可以識(shí)別語音并轉(zhuǎn)成文本,語音來源可以是實(shí)時(shí)的也可以是錄音。
Wide Color廣色域
包括Core Graphics钞诡,Core Image郑现,Metal,AVFoundation在內(nèi)的圖像框架極大的改善了對(duì)更加廣泛的像素格式和寬色域色彩空間的支持荧降。
Adapting to the True Tone Display真色調(diào)展示
真色調(diào)(True Tone)顯示使用環(huán)境光傳感器懂酱,可以做到配合當(dāng)前環(huán)境的光線條件自動(dòng)調(diào)節(jié)顯示的顏色和強(qiáng)度。如果你的應(yīng)用是閱讀類誊抛,和環(huán)境中的白點(diǎn)保持一致對(duì)用戶來說就是有益的列牺。
App Search Enhancements應(yīng)用搜索增強(qiáng)功能
新的CSSearchQuery類支持搜索那些你用Core Spotlight API指出的應(yīng)用內(nèi)內(nèi)容。
使用這些API可以淘汰你應(yīng)用中單獨(dú)的搜索索引拗窃,以及更好的利用Spotlight強(qiáng)大的搜索技術(shù)瞎领,同時(shí),匹配規(guī)則允許用戶在不離開你應(yīng)用的條件下搜索內(nèi)容随夸,就像他們?cè)贛ail九默,Messages和Notes中體驗(yàn)到的一樣。
Widget Enhancements widget增強(qiáng)功能
iOS10引入了一個(gè)新的鎖屏設(shè)計(jì)宾毒,新的鎖屏現(xiàn)在會(huì)顯示各種widget驼修。
Apple Pay Enhancements
在iOS10中,用戶可以從網(wǎng)頁上诈铛,或通過Siri和地圖的互動(dòng)來使用Apple Pay進(jìn)行簡(jiǎn)單和安全的支付乙各。
對(duì)于開發(fā)者來說,iOS10引入了可以同時(shí)在iOS和watchOS上使用的新API幢竹,支持動(dòng)態(tài)支付網(wǎng)絡(luò)的能力耳峦,和新的沙盒測(cè)試環(huán)境。
Security and Privacy Enhancements
iOS10引入幾個(gè)變化來幫助您提高代碼的安全和維護(hù)用戶數(shù)據(jù)的隱私性焕毫。
想了解更多蹲坷,請(qǐng)查閱 https://developer.apple.com/security/
CallKit來電攔截相關(guān)
CallKit框架(CallKit.framework)使得VoIP應(yīng)用能與iPhone UI整合到一起,從而給用戶帶來更好的體驗(yàn)邑飒。
使用這個(gè)框架來讓用戶在鎖屏頁面查看和接聽打來的VoIP電話循签,并在Phone應(yīng)用的個(gè)人收藏和最近通話視圖中管理來自VoIP通話的聯(lián)系人。
CallKit框架同樣也引入了應(yīng)用擴(kuò)展(appextensions)疙咸,這個(gè)擴(kuò)展可以進(jìn)行呼叫攔截和來電識(shí)別县匠。你可以創(chuàng)建一個(gè)應(yīng)用擴(kuò)展來將電話號(hào)碼和名稱關(guān)聯(lián)起來,或是告訴系統(tǒng)什么樣的號(hào)碼需要被攔截。
News Publisher Enhancements
News Publisher使用Apple NewsFormat來讓發(fā)表設(shè)計(jì)精美的新聞聚唐、雜志丐重、網(wǎng)頁內(nèi)容到Apple News變的簡(jiǎn)單。
從各大雜志或新聞機(jī)構(gòu)這種獨(dú)立出版商杆查,到個(gè)人博客扮惦,任何人都可以注冊(cè)。
Video Subscriber Account
iOS10引入了Video SubscriberAccount框架(VideoSubscriberAccount.framework)來幫助應(yīng)用支持流媒體認(rèn)證或認(rèn)證視頻點(diǎn)播(也被稱為TV Everywhere)與他們的有線電視或衛(wèi)星電視供應(yīng)商認(rèn)證亲桦。
對(duì)于那些用戶注冊(cè)一次就能解鎖流媒體訂閱服務(wù)的應(yīng)用來說崖蜜,使用這個(gè)框架中的API可以幫助你支持單一登錄體驗(yàn)。
增加的庫
CallKit
iAd
Intents(Siri相關(guān))
IntentsUI(Siri相關(guān))
Messages
Speech
UserNotifications
UserNotificationsUI
VideoSubscriberAccount
移除的庫
iAdJS
變化的接口
AVKit客峭、Core Image豫领、GameKit、GameplayKit舔琅、HealthKit等恐、HomeKit、Metal备蚓、ModelIO课蔬、Photos、ReplayKit郊尝、ReplayKit二跋、SpriteKit均有不同程度的改動(dòng)。詳細(xì)請(qǐng)參考官方?iOS 9.3 toiOS 10.0 API Differences
需要關(guān)注的地方
1. UITabBarController中的改進(jìn)
在iOS 10之前流昏,tabBarItem上的文字顏色扎即,默認(rèn)是藍(lán)色,上面的新消息提醒數(shù)字badge默認(rèn)是紅色的况凉,未選中的TabBarItem的文字顏色默認(rèn)是黑色的谚鄙,我們修改的話,也只能修改它的默認(rèn)顏色茎刚,其它的就不能進(jìn)行個(gè)性化定制襟锐,使用起來非常的不方便撤逢,iOS10之后我們可以輕松個(gè)性化定制了膛锭。
2. iOS10.0中字體跟隨系統(tǒng)設(shè)置變化大小
在以前如果說我們想改變APP中程序的字體大小,我們只能自定義字體或者使用runtime進(jìn)行處理蚊荣,或者都得設(shè)置UIFont初狰,非常的不方便,從iOS 10蘋果官方允許我們自定義設(shè)置代碼:self.labels.adjustsFontForContentSizeCategory = YES;
3. UIViewPropertyAnimator屬性動(dòng)畫器
那么在iOS 10之前互例,我們使用UIView做動(dòng)畫效果或者自定義一些layer的動(dòng)畫奢入,如果開始了,一般無法進(jìn)行停止操作更不能暫停操作媳叨,而且一些非常復(fù)雜的動(dòng)畫處理也比較麻煩腥光,但是在iOS10关顷,蘋果推出了一個(gè)全新的APIUIViewPropertyAnimator,可供我們處理動(dòng)畫操作
4. UIColor新增方法
在iOS10之前武福,UIColor中設(shè)置顏色只能通過RGB來表示议双,在iOS原生還不支持#16進(jìn)制寫法,還得自己寫分類去處理捉片,我們知道RGB表示的顏色是優(yōu)先的平痰,而且也是不精準(zhǔn)的,那么在iOS10中伍纫,蘋果官方新增了colorWithDisplayP3Red方法
5. UIApplication對(duì)象中openUrl被廢棄
在iOS 10.0以前的年代宗雇,我們要想使用應(yīng)用程序去打開一個(gè)網(wǎng)頁或者進(jìn)行跳轉(zhuǎn),直接使用[[UIApplication sharedApplication] openURL方法就可以了莹规,但是在iOS10已經(jīng)被廢棄了赔蒲,因?yàn)槭褂眠@種方式,處理的結(jié)果我們不能攔截到也不能獲取到良漱,對(duì)于開發(fā)是非常不利的嘹履,在iOS 10全新的推出了[UIApplication sharedApplication] openURL:nil options:nilcompletionHandler:^(BOOL success);有一個(gè)成功的回調(diào)block可以進(jìn)行監(jiān)視。
6. CoreData提升了并發(fā)訪問性能
7.刷新控件(UIRefreshControl)
iOS系統(tǒng)自帶的刷新控件支持所有的UIScrollView以及其子類债热,比如說UICollectionView,UITableView砾嫉。
8. GCD多線程支持創(chuàng)建私有隊(duì)列
9. iOS10對(duì)隱私權(quán)限的管理
比如訪問的攝像頭、麥克風(fēng)等硬件窒篱,都需要提前請(qǐng)求應(yīng)用權(quán)限焕刮、允許后才可以使用,或者現(xiàn)在要提前聲明墙杯,雖然以往要求不嚴(yán)格配并。比如在iOS10中訪問通訊錄時(shí),強(qiáng)制必須在Info.plist中加入NSContactsUsageDescription等描述高镐,否則應(yīng)用會(huì)崩潰溉旋。
崩潰日志:
***This app has crashed because itattempted to access privacy-sensitive data without a usage description. Theapp's Info.plist must contain an NSCameraUsageDescriptionkey with a stringvalue explaining to the user how the app uses this data.
10.證書簽名
在Xcode 8中,代碼簽名錯(cuò)誤的情況應(yīng)該不會(huì)存在了嫉髓。在每一個(gè)targe中观腊,你都可以在框中打勾來告訴Xcode讓它來代表你管理代碼簽名。對(duì)于新項(xiàng)目這個(gè)選項(xiàng)默認(rèn)是打開的算行。
打勾以后梧油,Xcode為你管理certificates,provisioning profiles和application identifiers。
11. Xib兼容問題
Xcode8上打開項(xiàng)目要小心州邢,尤其是對(duì)于xib過程儡陨,在變動(dòng)后可不要隨意點(diǎn)保存,否則當(dāng)你回頭用Xcode7打開時(shí)時(shí)發(fā)現(xiàn)報(bào)錯(cuò)了,Xcode保存的xib在xcode7上是識(shí)別不了的,如果你在Xcode8中打開或者xib文件骗村,會(huì)彈出如下提示框,忽視他
12.運(yùn)行時(shí)問題Runtime Issues
這Xcode新特性,自動(dòng)識(shí)別跟蹤找到漏洞并且報(bào)告問題,有些很難跟蹤的bug嫌褪,直到您的應(yīng)用程序到了用戶手中,也可能沒有被發(fā)現(xiàn)。
Thread Sanitizer spots:新的線程污點(diǎn)清理器,解決多線程情況下的資源競(jìng)爭(zhēng)條件,數(shù)據(jù)的變化和其它相關(guān)線程的
bug View Debugger:使用更新的帶有更大的保真度和視覺精度檢查UI約束問題的視圖調(diào)試器
Memory Debugger:可以用新的內(nèi)存調(diào)試跟蹤器跟蹤發(fā)出的內(nèi)存泄漏警報(bào)胚股。
iOS 10兼容適配點(diǎn)
1. iOS 10對(duì)隱私權(quán)限的管理(必須要改否則會(huì)crash)
比如訪問的攝像頭渔扎、麥克風(fēng)等硬件,都需要提前請(qǐng)求應(yīng)用權(quán)限信轿、允許后才可以使用晃痴,或者現(xiàn)在要提前聲明,雖然以往要求不嚴(yán)格财忽。比如在iOS10中訪問通訊錄時(shí)倘核,強(qiáng)制必須在Info.plist中加入NSContactsUsageDescription等描述,否則應(yīng)用會(huì)崩潰即彪。
崩潰日志:
***This app has crashed because itattempted to access privacy-sensitive data without a usage description. Theapp's Info.plist must contain an NSCameraUsageDescriptionkey with a stringvalue 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
相關(guān)的字段:
麥克風(fēng)權(quán)限:Privacy - Microphone Usage Description 是否允許此App使用你的麥克風(fēng)紧唱?
相機(jī)權(quán)限: Privacy - Camera Usage Description 是否允許此App使用你的相機(jī)?
相冊(cè)權(quán)限: Privacy - Photo Library Usage Description 是否允許此App訪問你的媒體資料庫隶校?通訊錄權(quán)限: Privacy - Contacts Usage Description 是否允許此App訪問你的通訊錄漏益?
藍(lán)牙權(quán)限:Privacy - Bluetooth Peripheral Usage Description 是否許允此App使用藍(lán)牙?
語音轉(zhuǎn)文字權(quán)限:Privacy - Speech Recognition Usage Description 是否允許此App使用語音識(shí)別深胳?
日歷權(quán)限:Privacy - Calendars Usage Description 是否允許此App使用日歷绰疤?
定位權(quán)限:Privacy - Location When In Use Usage Description 我們需要通過您的地理位置信息獲取您周邊的相關(guān)數(shù)據(jù)
定位權(quán)限: Privacy - Location Always Usage Description 我們需要通過您的地理位置信息獲取您周邊的相關(guān)數(shù)據(jù)
2. Xib兼容問題
Xcode8上打開項(xiàng)目要小心,尤其是對(duì)于xib過程舞终,在變動(dòng)后可不要隨意點(diǎn)保存轻庆,否則當(dāng)你回頭用Xcode7打開時(shí)時(shí)發(fā)現(xiàn)報(bào)錯(cuò)了,Xcode8保存的xib在xcode7上是識(shí)別不了的,如果你在Xcode8中打開或者xib文件敛劝,會(huì)彈出如下提示框,忽視他
3. UIApplication對(duì)象中openUrl被廢棄(不改也可以用)
在iOS 10.0以前的年代余爆,我們要想使用應(yīng)用程序去打開一個(gè)網(wǎng)頁或者進(jìn)行跳轉(zhuǎn),直接使用[[UIApplication sharedApplication] openURL方法就可以了夸盟,但是在iOS
10已經(jīng)被廢棄了蛾方,因?yàn)槭褂眠@種方式,處理的結(jié)果我們不能攔截到也不能獲取到上陕,對(duì)于開發(fā)是非常不利的桩砰,在iOS 10全新的推出了[UIApplication sharedApplication] openURL:nil options:nil
completionHandler:^(BOOL success);有一個(gè)成功的回調(diào)block可以進(jìn)行監(jiān)視。
4.安全和保密性
使用改進(jìn)后的SecKey API而不是過時(shí)的CDSA API唆垃。
安全傳輸API中不再支持SSLv3五芝,建議你們盡快停用SHA1和3DES加密算法。
5. widget鎖屏界面
現(xiàn)在鎖屏界面有了新的設(shè)計(jì)辕万,建議我們廢棄以前的notificationCenterVibrancyEffect改用widgetPrimaryVibrancyEffect或者widgetSecondaryVibrancyEffect,并且窗口的小部件可以讓你描述有多少東西可用,支持緊湊和擴(kuò)展兩種形態(tài)渐尿。
6. AVFoundation不改也可以用
AVCaptureStillImageOutput廢棄了,用AVCapturePhotoOutput替換.
7. IOS版本檢查
下面的寫法會(huì)返回NO
#define IsIOS7 ([[[[UIDevice currentDevice]systemVersion] substringToIndex:1] intValue]>=7)
因?yàn)閟ubstringToIndex: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:
9.屏蔽雜亂無章的bug
更新Xcode8之后醉途,新建立工程,都會(huì)打印一堆莫名其妙看不懂的Log.
屏蔽的方法如下:
Xcode8里邊 Edit Scheme-> Run -> Arguments, 在Environment Variables里邊添加
OS_ACTIVITY_MODE = Disable
10.代碼注釋不能用的解決辦法
這個(gè)是因?yàn)樘O果解決xcode ghost砖茸,把插件屏蔽了隘擎。
解決方法
打開終端,命令運(yùn)行: sudo /usr/libexec/xpccachectl
然后必須重啟電腦后生效
注意:Xcode8內(nèi)置了開啟注釋的功能凉夯,位置在這里