本文僅從iOS7開(kāi)始介紹,iOS7才是iOS開(kāi)發(fā)者全面發(fā)揮自己創(chuàng)造力的真正起點(diǎn)
iOS7
UI
- 擬物化的界面風(fēng)格
- 狀態(tài)欄样傍,導(dǎo)航欄和應(yīng)用實(shí)際展示內(nèi)容不再界限:系統(tǒng)自帶的應(yīng)用都不再區(qū)分狀態(tài)欄和navigation bar调煎,而是用統(tǒng)一的顏色力求簡(jiǎn)潔;
- 程序打開(kāi)加入了動(dòng)畫(huà):從主界面到圖標(biāo)所在位置的一個(gè)放大镜遣,同時(shí)顯示應(yīng)用的載入界面;
- 新增了UIDynamicItem委托,用來(lái)為UIView制定力學(xué)模型行為;
- 引入了Sprite Kit Framework士袄,用于硬件加速的動(dòng)畫(huà)系統(tǒng)來(lái)表現(xiàn)2D和2.5D的游戲悲关,它提供了制作游戲所需要的大部分的工具,包括圖像渲染娄柳,動(dòng)畫(huà)系統(tǒng)寓辱,聲音播放以及圖像模擬的物理引擎;
多任務(wù)強(qiáng)化
- 經(jīng)常需要下載新內(nèi)容的應(yīng)用現(xiàn)在可以通過(guò)設(shè)置UIBackgroundModes為fetch來(lái)實(shí)現(xiàn)后臺(tái)下載內(nèi)容了赤拒,需要在AppDelegate里實(shí)現(xiàn)
setMinimumBackgroundFetchInterval:以及
application:performFetchWithCompletionHandler:
來(lái)處理完成的下載秫筏,這個(gè)為后臺(tái)運(yùn)行代碼提供了又一種選擇。另外需要注意開(kāi)發(fā)者僅只能指定一個(gè)最小間隔挎挖。
- 同樣是后臺(tái)下載这敬,以前只能推送提醒用戶(hù)進(jìn)入應(yīng)用下載,現(xiàn)在可以接到推送并在后臺(tái)下載蕉朵。UIBackgroundModes設(shè)為remote-notification崔涂,并實(shí)現(xiàn)
application:didReceiveRemoteNotification:fetchCompletionHandler:
- 為了后臺(tái)下載,開(kāi)發(fā)者必須使用一個(gè)新的類(lèi)NSURLSession墓造,其實(shí)就是在NSURLConnection上加了個(gè)后臺(tái)處理堪伍。
其他
- 加入AirDrop
- Inter-App Audio 應(yīng)用間的音頻
- 點(diǎn)對(duì)點(diǎn)連接 Peer-to-Peer Connectivity
- Store Kit Framework
Store Kit在內(nèi)購(gòu)方面采用了新的訂單系統(tǒng),這將可以實(shí)現(xiàn)對(duì)訂單的本機(jī)驗(yàn)證觅闽。這是一次對(duì)應(yīng)內(nèi)購(gòu)破解和有可能驗(yàn)證失敗導(dǎo)致內(nèi)購(gòu)失敗的更新,蘋(píng)果希望藉此減少內(nèi)購(gòu)的實(shí)現(xiàn)流程涮俄,減少出錯(cuò)蛉拙,同時(shí)遏制內(nèi)購(gòu)破解泛濫。前者可能沒(méi)有問(wèn)題彻亲,但是后者的話(huà)孕锄,因?yàn)閛bjc的動(dòng)態(tài)特性,決定了只要有越獄存在苞尝,內(nèi)購(gòu)破解也是早晚的事情畸肆。不過(guò)這一點(diǎn)確實(shí)方便了沒(méi)有能力架設(shè)驗(yàn)證服務(wù)器的小開(kāi)發(fā)者,這方面來(lái)說(shuō)還是很好的宙址。
原文請(qǐng)戳
iOS8
iOS9
iOS10
提到的功能模塊有:
Proactive Suggestions
Integrating with the Messages App
User Notifications
Speech Recognition
Wide Color
Adapting to the True Tone Display
App Search Enhancements
Widget Enhancements
Security and Privacy Enhancements
還沒(méi)有詳細(xì)探索的模塊是
**SiriKit **
CallKit (工作職能和這里聯(lián)系不多轴脐,還不care這里)
******Apple Pay Enhancements ******(工作職能和這里聯(lián)系不多,還不care這里)************
SiriKit
SiriKit的功能非常強(qiáng)大,支持音頻大咱、視頻恬涧、消息發(fā)送接收、搜索照片碴巾、預(yù)訂行程溯捆、管理鍛煉等等。在用到此服務(wù)時(shí)厦瓢,siri會(huì)發(fā)送Intent對(duì)象提揍,里面包括用戶(hù)的請(qǐng)求和各種數(shù)據(jù),可以對(duì)這個(gè)intent處理選擇適當(dāng)?shù)捻憫?yīng)煮仇。 這個(gè)功能主要是看這兩個(gè)頭文件(#import<Intents/Intents.h>碳锈、#import <IntentsUI/IntentsUI.h>)所涵蓋到的類(lèi)太多,前期先略過(guò)了欺抗,之后等iOS10可以推送更新了再做進(jìn)一步調(diào)研售碳。
Proactive Suggestions 系統(tǒng)預(yù)先建議
背景就是iOS9的時(shí)候系統(tǒng)給予的主動(dòng)建議會(huì)通過(guò):Spolight搜索,Safari搜索绞呈,Handoff贸人,或者siri建議。 在iOS10之后新增了佃声,鍵盤(pán)QuickType建議艺智,地圖,車(chē)載娛樂(lè)圾亏,應(yīng)用切換十拣,siri交互,鎖屏播放志鹃。 比如你正在一個(gè)應(yīng)用里看一個(gè)酒店夭问,可以使用mapitem屬性保存正在查看的這個(gè)酒店的位置,然后你切換旅行或地圖App時(shí)這個(gè)位置可以自動(dòng)提供使用曹铃。 如果你需要這樣利用系統(tǒng)來(lái)共享一個(gè)位置缰趋,那你需要指定這個(gè)位置的經(jīng)緯度,地名,電話(huà)等屬性 來(lái)便于siri的直接調(diào)起陕见。
文檔中還列出了幾種場(chǎng)景
1.在輸入框(UITextFiled)輸入時(shí)秘血,可以指定一下這個(gè)輸入框的類(lèi)型,以便系統(tǒng)可以分析出用戶(hù)的語(yǔ)義评甜。 是電話(huà)類(lèi)型就建議一些電話(huà)灰粮,是地址類(lèi)型就建議一些地址∪炭溃看下頭文件(#import <UIKit/UITextInputTraits.h>)可指定的類(lèi)型 就是這個(gè)新增的textContentType字段粘舟,里面有很多種類(lèi)型可選熔脂。
UIKIT_EXTERN ``NSString
*``const
UITextContentTypeName ``NS_AVAILABLE_IOS``(10_0);
UIKIT_EXTERN ``NSString
*``const
UITextContentTypeNamePrefix ``NS_AVAILABLE_IOS``(10_0);
UIKIT_EXTERN ``NSString
*``const
UITextContentTypeGivenName ``NS_AVAILABLE_IOS``(10_0);
UIKIT_EXTERN ``NSString
*``const
UITextContentTypeMiddleName ``NS_AVAILABLE_IOS``(10_0);
UIKIT_EXTERN ``NSString
*``const
UITextContentTypeFamilyName ``NS_AVAILABLE_IOS``(10_0);
UIKIT_EXTERN ``NSString
*``const
UITextContentTypeNameSuffix ``NS_AVAILABLE_IOS``(10_0);
UIKIT_EXTERN ``NSString
*``const
UITextContentTypeNickname ``NS_AVAILABLE_IOS``(10_0);
UIKIT_EXTERN ``NSString
*``const
UITextContentTypeJobTitle ``NS_AVAILABLE_IOS``(10_0);
UIKIT_EXTERN ``NSString
*``const
UITextContentTypeOrganizationName ``NS_AVAILABLE_IOS``(10_0);
UIKIT_EXTERN ``NSString
*``const
UITextContentTypeLocation ``NS_AVAILABLE_IOS``(10_0);
UIKIT_EXTERN ``NSString
*``const
UITextContentTypeFullStreetAddress ``NS_AVAILABLE_IOS``(10_0);
UIKIT_EXTERN ``NSString
*``const
UITextContentTypeStreetAddressLine1 ``NS_AVAILABLE_IOS``(10_0);
UIKIT_EXTERN ``NSString
*``const
UITextContentTypeStreetAddressLine2 ``NS_AVAILABLE_IOS``(10_0);
UIKIT_EXTERN ``NSString
*``const
UITextContentTypeAddressCity ``NS_AVAILABLE_IOS``(10_0);
UIKIT_EXTERN ``NSString
*``const
UITextContentTypeAddressState ``NS_AVAILABLE_IOS``(10_0);
UIKIT_EXTERN ``NSString
*``const
UITextContentTypeAddressCityAndState ``NS_AVAILABLE_IOS``(10_0);
UIKIT_EXTERN ``NSString
*``const
UITextContentTypeSublocality ``NS_AVAILABLE_IOS``(10_0);
UIKIT_EXTERN ``NSString
*``const
UITextContentTypeCountryName ``NS_AVAILABLE_IOS``(10_0);
UIKIT_EXTERN ``NSString
*``const
UITextContentTypePostalCode ``NS_AVAILABLE_IOS``(10_0);
UIKIT_EXTERN ``NSString
*``const
UITextContentTypeTelephoneNumber ``NS_AVAILABLE_IOS``(10_0);
UIKIT_EXTERN ``NSString
*``const
UITextContentTypeEmailAddress ``NS_AVAILABLE_IOS``(10_0);
UIKIT_EXTERN ``NSString
*``const
UITextContentTypeURL ``NS_AVAILABLE_IOS``(10_0);
UIKIT_EXTERN ``NSString
*``const
UITextContentTypeCreditCardNumber ``NS_AVAILABLE_IOS``(10_0);
2.如果是視頻類(lèi)App可以使用MPPlayableContentManager (#import <MediaPlayer/MPPlayableContentManager.h>)看了下,新增了一個(gè)屬性nowPlayingIdentifiers蓖乘,蘋(píng)果的意思應(yīng)該是只要你以前是用這個(gè)多媒體類(lèi)播放音樂(lè)的我就可以讓你在鎖屏頁(yè)面交互锤悄,需要配置在這個(gè)數(shù)組里。
3.如果是出行類(lèi)app可以使用MKDirectionsRequest嘉抒。 (#import <MapKit/MKDirectionsRequest.h> )這個(gè)類(lèi)里幾乎沒(méi)有新增api零聚,iOS10就新增了一個(gè)枚舉,而且看上去就是個(gè)默認(rèn)值些侍。如果要使用此功能隶症,需要配置在info.plist文件里 新增key - value ,MKDirectionsApplicationSupportedModes - MKDirectionsModeRideShare岗宣。
User Notifications 用戶(hù)通知
總體的意思就是支持了很多用戶(hù)定義的通知蚂会,并且可以捕捉到各個(gè)通知狀態(tài)的回調(diào)悍及。以往通知的概念是:大家想接收的都提前做好準(zhǔn)備各吨,然后一下全量分發(fā),沒(méi)收到也不管了痘儡,也不關(guān)心發(fā)送者】龋現(xiàn)在用戶(hù)通知做成了和網(wǎng)絡(luò)請(qǐng)求有點(diǎn)像 一個(gè)先發(fā)request再得到response的流程彪见,甚至封裝了error,可以在各個(gè)狀態(tài)的方法中做一些額外操作娱挨,并且也能取到一些字段余指,如發(fā)送者等。
此功能的頭文件入口在#import <UserNotifications/UserNotifications.h>
1.NSString+UserNotifications.h
有一個(gè)方法 localizedUserNotificationStringForKey: arguments: (提供該通知被呈現(xiàn)時(shí)的本地化字符串)跷坝,猜測(cè)下面的類(lèi)有很多initWithIdentifier的酵镜,他們的indentifier就是這個(gè)。
2.UNError.h
有一個(gè)屬性UNErrorDomain 和一個(gè)枚舉 UNErrorCode柴钻,顧名思義淮韭。
3.UNNotification.h
里面有兩個(gè)屬性,date日期 和 request顿颅,這個(gè)request是上面“8”的類(lèi)型UNNotificationRequest缸濒,點(diǎn)進(jìn)去看了下比較清晰,有identifier標(biāo)識(shí)粱腻,content內(nèi)容,trigger觸發(fā)條件斩跌, 和帶上這三個(gè)東西的初始化方法绍些。 其中內(nèi)容 和 觸發(fā)條件這兩個(gè)屬性,分別是上面“7” 和 “12”的類(lèi)型耀鸦,這個(gè)下面再談柬批。
4.UNNotificationAction.h
這個(gè)類(lèi)突出的是一個(gè)通知的動(dòng)作啸澡,有identifier,title氮帐,options(枚舉嗅虏,就是通知當(dāng)前的權(quán)限,允許上沐?拒絕皮服?前臺(tái)時(shí)允許?)屬性参咙。然后就是帶上這三個(gè)東西的初始化方法龄广。 然后比較費(fèi)解的就是下面有一個(gè)子類(lèi)UNTextInputNotificationAction ,這個(gè)子類(lèi)有兩個(gè)額外屬性蕴侧, 按鈕title择同,和文本框placeholder, 為什么會(huì)是這兩個(gè)屬性净宵? 莫非是點(diǎn)擊通知后下拉出的快速回復(fù)敲才,有一個(gè)輸入框和一個(gè)按鈕。
5.UNNotificationAttachment.h
這個(gè)里面就是URL(資源url屬性)择葡,type(附件類(lèi)型)紧武。 然后是帶上這兩個(gè)屬性的初始化方法。 下面聲明了幾個(gè)字符串常量刁岸,暫時(shí)還不知道具體用在哪里脏里,typeHint,hiddenKey虹曙,clippingRectKey迫横,TimeKey。
6.UNNotificationCategory.h
有indentifier屬性酝碳,actions(里面是數(shù)組)矾踱,minimalActions(最重要的數(shù)組,就是只能給你兩個(gè)位置顯示你顯示哪兩個(gè)疏哗,這么個(gè)意思)呛讲,intentIdentifiers屬性(應(yīng)該是和上面的動(dòng)作數(shù)組關(guān)聯(lián)的吧),options(權(quán)限相關(guān)返奉,無(wú)贝搁?允許自定義關(guān)閉?允許車(chē)載系統(tǒng)交互芽偏?)雷逆。最后就是把這些都帶上的init方法。 猜測(cè)這個(gè)類(lèi)之所以取名叫category應(yīng)該是污尉,在某個(gè)地方展示通知的時(shí)候會(huì)把所有通知一一分類(lèi)膀哲, 然后每個(gè)類(lèi)別的通知可能最多只能讓你展示幾個(gè)往产,如果不做限制應(yīng)該會(huì)展示全部通知,如果權(quán)限設(shè)置的是允許自定義關(guān)閉那可能就是支持類(lèi)似一鍵清除的操作某宪。
7.UNNotificationContent.h
消息的內(nèi)容仿村,一看就能知道應(yīng)該是一個(gè)類(lèi)似于Entity的東西,里面裝有大量的屬性:attachments(可選的附件集合)兴喂,badge(小紅點(diǎn)數(shù)量)蔼囊,body,categoryIndentifier瞻想,launchImageName(從消息里點(diǎn)開(kāi)的應(yīng)用程序應(yīng)該能看到啟動(dòng)圖對(duì)吧)压真,subtitle,threadIdentifier(與request關(guān)聯(lián))蘑险,title滴肿,userInfo,sound這個(gè)是“11”的類(lèi)型佃迄,應(yīng)該是同時(shí)來(lái)時(shí)的聲音泼差,點(diǎn)開(kāi)“11”看一下 ,就倆方法呵俏,defaultSound堆缘,soundNamed: 自定義聲音,都在~/Library/Sounds 目錄下普碎。 恩再回到剛才那個(gè)content類(lèi)里面有個(gè)子類(lèi)UNMutableNotificationContent吼肥,屬性和父類(lèi)相同,只不過(guò)是子類(lèi)的屬性都可以修改了麻车,父類(lèi)的那些屬性都是readonly的缀皱。
8.UNNotificationRequest.h 上面第3條說(shuō)過(guò)了
9.UNNotificationResponse.h
有action,也有request动猬,那也就有response啤斗,這里面有兩個(gè)屬性,notification赁咙,actionIdentifier 響應(yīng)里就這倆破玩意钮莲。 然后有個(gè)子類(lèi)UNTextInputNotificationResponse, 這里面就一個(gè)屬性u(píng)serText 彼水,看命名很好猜崔拥,應(yīng)該就是前面說(shuō)的那個(gè)有輸入框里輸入的內(nèi)容。
10.UNNotificationSettings.h
這個(gè)類(lèi)里就是一些設(shè)置了凤覆,有一個(gè)枚舉說(shuō)的是有沒(méi)有權(quán)限握童,一個(gè)枚舉說(shuō)的是不支持?禁用叛赚?啟用澡绩?。 然后下面一大波屬性俺附,小紅點(diǎn)設(shè)置肥卡,聲音設(shè)置,彈窗設(shè)置等等 都是這個(gè)枚舉類(lèi)型事镣, 最后還有個(gè)alertStyle屬性(枚舉步鉴,None?Banner璃哟?alert氛琢?)。
11.sound前面第7條說(shuō)過(guò)了
12.UNNotificationTrigger.h
有一個(gè)屬性 repeats(是否重復(fù)發(fā)通知)随闪。 下面有四個(gè)子類(lèi)阳似,push通知觸發(fā), 時(shí)間通知觸發(fā)铐伴,日歷通知觸發(fā)撮奏,地區(qū)通知觸發(fā), 時(shí)間的有timeInterval屬性当宴, 日歷的有dateComponents屬性畜吊。 然后時(shí)間和日歷的子類(lèi)都有nextTriggerDate 方法。
13.UNUserNotificationCenter.h
這里面東西多到吐了户矢,同學(xué)你記得NSNotificationCenter么玲献? 需要提一點(diǎn)的就是以前的通知中心有個(gè)方法[NSNotificationCenter defaultCenter], 這里是[UNUserNotificationCenter currentNotificationCenter]梯浪, 提醒一下到時(shí)候別說(shuō)敲不出來(lái)捌年。 方法大多是一些remove,add驱证,get等操作延窜, 還有2個(gè)代理方法:通知將要發(fā)出去時(shí)調(diào)用,收到通知的response后調(diào)用抹锄。
14.UNNotificationServiceExtension.h
里面有兩個(gè)方法逆瑞,收到通知的請(qǐng)求后調(diào)用, 系統(tǒng)將要銷(xiāo)毀時(shí)調(diào)用伙单。
通知里面有UI相關(guān)的類(lèi) #import <UserNotificationsUI/UserNotificationsUI.h>
這個(gè)類(lèi)里面就一個(gè)文件获高, 而且方法比較單一,就是收到通知調(diào)用吻育,和收到通知的響應(yīng)調(diào)用念秧。 其他方法也就是mediaPlay 和 mediaPause 。和一些多媒體播放的按鈕frame布疼,color等摊趾, 這里面的作用難道僅僅就是通知來(lái)了后播放的音樂(lè)暫時(shí)暫停下币狠,響一聲通知,再播放砾层? 具體WWDC2016上說(shuō)的鎖屏頁(yè)面的通知樣式處理的api是在下面的部件增強(qiáng)章節(jié)中漩绵。
Integrating with the Messages App 與系統(tǒng)短信 app交互
對(duì)消息額支持很大,可以模擬發(fā)消息收消息肛炮,發(fā)郵件等止吐,提供了UI界面。 也提供了一些額外擴(kuò)展的api侨糟,如表情包區(qū)域碍扔。WWDC2016上說(shuō)的各種消息內(nèi)的新操作在頭文件中都能找到Api。
此功能的頭文件入口在#import <Messages/Messages.h>
1.MSMessagesAppViewController.h
這個(gè)類(lèi)應(yīng)該就是蘋(píng)果自己的消息界面秕重,你可以繼承他寫(xiě)你自己自定義的界面不同。 屬性有:activeConversation 指的是當(dāng)前的會(huì)話(huà)對(duì)象,是上面“2”這個(gè)類(lèi)型悲幅,具體詳細(xì)可以看下面的第“2”點(diǎn)套鹅、還有個(gè)是presentationStyle(外觀樣式,枚舉類(lèi)型汰具,緊縮卓鹿?擴(kuò)張?)留荔。 接下來(lái)就是方法了:requestPresentationStyle(請(qǐng)求消息過(guò)渡到指定的樣式)吟孙,dismiss消除方法。 然后就是一波生命周期方法了聚蝶,每一類(lèi)都有will和did杰妓,會(huì)話(huà)信息將要(已經(jīng))活躍時(shí),將要(已經(jīng))解除活躍碘勉,將要(已經(jīng))選擇信息巷挥,將要(已經(jīng))收到信息,將要(已經(jīng))開(kāi)始發(fā)送验靡,將要(已經(jīng))取消發(fā)送倍宾,將要(已經(jīng))開(kāi)始過(guò)渡。
2.MSConversation.h
屬性有l(wèi)ocalParticipantIdentifier(當(dāng)前會(huì)話(huà)參與者生成的標(biāo)識(shí)胜嗓,他說(shuō)只有刪了App才會(huì)變 姑且理解成id是不會(huì)變的)高职,remoteParticipantIdentifiers(遠(yuǎn)端的標(biāo)識(shí)符數(shù)組),selectedMessage(選中的信息)辞州,以及4個(gè)對(duì)象方法 插入一條信息怔锌,插入一個(gè)標(biāo)簽,插入一段文本,插入一個(gè)附件埃元。 這四個(gè)方法都有成功的回調(diào)涝涤。
3.MSSession.h
這個(gè)類(lèi)里面是空的,解釋說(shuō)是用session來(lái)處理消息序列間的關(guān)系亚情⊥荆可能就是占個(gè)位,以后估計(jì)會(huì)添加?xùn)|西楞件。 這個(gè)MSSession是后面很多參數(shù)的類(lèi)型,應(yīng)該就是區(qū)分消息類(lèi)似于標(biāo)識(shí)符的作用裳瘪。
4.MSMessage.h
初始化方法是initWithSession 土浸,沒(méi)錯(cuò)就是上面那個(gè)MSSession。 除了初始化方法剩下的就全是屬性了:session彭羹,senderParticipantIdentifier(發(fā)送者的標(biāo)識(shí)符)黄伊,layout布局這個(gè)是“5”這個(gè)類(lèi)型,URL派殷,shouldExpire(選yes會(huì)自動(dòng)消失还最,用戶(hù)手動(dòng)選擇為這條消息續(xù)命),accessibilityLabel(殘疾人模式支持)毡惜,error拓轻。
5.MSMessageLayout.h
這個(gè)是抽象類(lèi),里面是空的经伙,就是個(gè)布局文件扶叉,繼承自NSObject。
6.MSMessageTemplateLayout.h
繼承上面那個(gè)類(lèi)帕膜,看名字是模板布局后面應(yīng)該會(huì)用的挺多的枣氧,里面的屬性有,標(biāo)題垮刹,子標(biāo)題达吞,尾部標(biāo)題,尾部子標(biāo)題荒典,圖片酪劫,多媒體URL,圖片標(biāo)題种蝶,圖片子標(biāo)題契耿。
7.MSSticker.h
應(yīng)該是消息上的表情包。 里面就有兩個(gè)屬性imageFileURL 螃征,localizedDescription 圖片和局部描述搪桂。然后是帶上這兩個(gè)屬性的初始化方法 initWithContentsOfFileURL: localizedDescription: 。
8.MSStickerView.h
這個(gè)類(lèi)就是一個(gè)view,里面包著一個(gè)sticker踢械,也就是包裹著上面那個(gè)裝飾品的view酗电。 提供了帶上sticker的初始化方法,一個(gè)常規(guī)屬性animationDuration内列,和三個(gè)方法startAnimating撵术,stopAnimating,isAnimating话瞧。
9.MSStickerBrowserViewDataSource.h
細(xì)思極恐嫩与,這個(gè)類(lèi)不就是wwdc2016上說(shuō)的那個(gè)可以在消息下面添加自定義表情的地方么。 符合datasource的風(fēng)格交排,里面就兩個(gè)方法划滋,numberOfStickersInStickerBrowserView: (返回一個(gè)總數(shù)),stickerBrowserView:stickerAtIndex:(返回這個(gè)索引下的內(nèi)容)埃篓。
10.MSStickerBrowserView.h
上面那個(gè)是datasource处坪,那這個(gè)就是用了上面數(shù)據(jù)源的view唄。 除了初始化方法架专,有兩個(gè)屬性 stickerSize(枚舉同窘,小,中部脚,大)想邦,dataSource(就是上面的“9”),還有個(gè)人reloadData方法睛低。
11.MSStickerBrowserViewController.h
上面是個(gè)view案狠, 這個(gè)就是承載上面那個(gè)view的viewcontroller∏祝肯定得有這個(gè)屬性stickerBrowserView 和初始化方法骂铁。
這個(gè)message模塊還有UI相關(guān)的api #import <MessageUI/MessageUI.h>
就是兩個(gè)VC ,MFMailComposeViewController,MFMessageComposeViewController。 這兩個(gè)都是繼承自UINavigationController. 覺(jué)得這兩個(gè)就是發(fā)郵件的編輯頁(yè)面罩抗,和發(fā)消息的編輯頁(yè)面拉庵。 發(fā)郵件的頁(yè)面里有 canSendMail (Bool方法),set主題套蒂,set發(fā)件人钞支,set收件人,set內(nèi)容操刀,set附件烁挟。 然后有一個(gè)代理,和代理方法骨坑,猜也能猜到 就是成功失敗回調(diào)撼嗓。mailComposeController:didFinishWithResult: error: 柬采。 那另一個(gè)消息和這差不多了就不說(shuō)了。
Speech Recognition 語(yǔ)音識(shí)別轉(zhuǎn)文字
這個(gè)類(lèi)里面的Api和方法調(diào)用都非常清晰且警,感覺(jué)使用起來(lái)會(huì)非常方便粉捻。真的為科大訊飛捏把汗了,科大訊飛的app(錄音寶)我看過(guò)斑芜,都還沒(méi)有說(shuō)一段語(yǔ)音能直接轉(zhuǎn)文字的功能肩刃,他們是直接把聲音文件上傳,然后24小時(shí)候再發(fā)給你轉(zhuǎn)換后的結(jié)果...而且一上來(lái)就要收費(fèi)杏头。蘋(píng)果的這個(gè)功能已經(jīng)做到了系統(tǒng)原生支持盈包,真的厲害。
此功能的頭文件入口在#import <Speech/Speech.h>
1.SFSpeechRecognitionResult.h
這個(gè)類(lèi)里有三個(gè)屬性:bestTranscription 就是最優(yōu)的轉(zhuǎn)化結(jié)果咯大州,是上面的“7”這個(gè)類(lèi)型的续语。然后再看下這個(gè)SFTranscription.h ,果然不出所料 有兩個(gè)屬性 一個(gè)是字符串類(lèi)型formattedString 一個(gè)是數(shù)組類(lèi)型的segments 厦画,恩 前者就是轉(zhuǎn)化后的字符串,后者是分割后的一個(gè)個(gè)小結(jié)果集合滥朱。 然后這個(gè)分割的一個(gè)個(gè)小結(jié)果呢又是上面“6”這個(gè)類(lèi)型根暑。那再看一下“6” 里面的屬性就是 substring, 時(shí)間戳徙邻,duration排嫌,準(zhǔn)確性,備選答案數(shù)組缰犁,這些很清晰的東西了淳地。
2.SFSpeechRecognitionRequest.h
這個(gè)類(lèi)里東西有點(diǎn)多,屬性taskHint帅容,是上面“4”這個(gè)類(lèi)型颇象,點(diǎn)開(kāi)一看就是一個(gè)枚舉,用來(lái)區(qū)分你這個(gè)語(yǔ)音識(shí)別的請(qǐng)求是哪一類(lèi)的 查找并徘?確認(rèn)遣钳?聽(tīng)寫(xiě)?無(wú)法識(shí)別麦乞?蕴茴。 接下來(lái)是兩個(gè)BOOL類(lèi)型的,shouldReportPartialResults(是否語(yǔ)音局部的一塊一塊也要處理姐直?默認(rèn)選false就是一句話(huà)全說(shuō)完了再上傳吧)倦淀,detectMultipleUtterances(假如你說(shuō)了10秒鐘,只有后5秒匹配到了結(jié)果声畏,那你前面刪了還是保留撞叽?默認(rèn)不刪),然后是分析到的關(guān)鍵字?jǐn)?shù)組,和標(biāo)識(shí)符什么的能扒。 然后這個(gè)request有兩個(gè)子類(lèi)佣渴,一個(gè)是從本地URL讀取 一個(gè)聲音文件去識(shí)別, 一個(gè)是默認(rèn)做法用話(huà)筒和AVFoundation庫(kù)接收到聲音去識(shí)別初斑,然后有幾個(gè)拼接聲音的API辛润。
3.SFSpeechRecognitionTask.h
從名字就能看出來(lái)這是語(yǔ)音識(shí)別最重要的一個(gè)類(lèi)了,里面的屬性有:state這是一個(gè)枚舉见秤,說(shuō)明當(dāng)前狀態(tài)是進(jìn)行中砂竖?已完成?被取消鹃答?等等乎澄。 接下來(lái)是三個(gè)常見(jiàn)的 isFinishing ,isCancelled 测摔,error 置济。 接下來(lái)是 isPowerAvailable (是否開(kāi)啟說(shuō)話(huà)聲音大小的監(jiān)測(cè)?)锋八,peakPower(最大聲音)浙于,averagePower(平均聲音)。 屬性就這些了挟纱,接下來(lái)就是一個(gè)協(xié)議和一波代理方法:剛剛識(shí)別出話(huà)語(yǔ)調(diào)用羞酗,猜測(cè)話(huà)語(yǔ)時(shí)調(diào)用,話(huà)說(shuō)完了調(diào)用紊服,取消時(shí)調(diào)用檀轨,等等等,你能想到的回調(diào)方法蘋(píng)果應(yīng)該都有的欺嗤。
4.上面第2條里面說(shuō)過(guò)了
5.SFSpeechRecognizer.h
和系統(tǒng)的那些相機(jī)權(quán)限参萄,通訊錄權(quán)限有點(diǎn)像, 就是現(xiàn)在的狀態(tài)是什么剂府?同意拧揽?拒絕?還是未選擇過(guò)腺占? 然后提供了方法讓用戶(hù)去選擇淤袜。 然后有些屬性:NSSet類(lèi)型的supportedLocales(支持地區(qū)方言的集合),
available是否可用衰伯,locale當(dāng)前地區(qū) 铡羡,defaultTaskHint默認(rèn)類(lèi)別,request(就是上面說(shuō)的請(qǐng)求)意鲸,隊(duì)列烦周,代理尽爆。 然后有個(gè)協(xié)議和代理方法:發(fā)現(xiàn)用戶(hù)給與的權(quán)限發(fā)生改變時(shí)調(diào)用。
6和7. 上面第1條里說(shuō)過(guò)了
Wide Color 寬域顏色
文檔的原話(huà)說(shuō):大多數(shù)的 core字打頭的圖形框架 還有AVFoundation 都大大提高了對(duì)擴(kuò)展像素和寬色域色彩空間的支持读慎。通過(guò)圖形堆棧擴(kuò)展這種方式比以往支持廣色域的顯示設(shè)備更加容易∈現(xiàn)在對(duì)UIKit擴(kuò)展可以在sRGB的色彩空間下工作,性能更好夭委,也可以在更廣泛的色域來(lái)搭配sRGB顏色幅狮。 然后說(shuō)了幾個(gè)場(chǎng)景說(shuō)建議你用sRGB吧,比如依賴(lài)于UIkit的clamp component values的應(yīng)用程序株灸,或是使用較低級(jí)別api執(zhí)行自己圖像處理的 都建議用sRGB吧崇摄。
然后看了下UIColor類(lèi)里 到底什么是sRGB? 發(fā)現(xiàn)多了兩個(gè)iOS10新增的api慌烧。
+ (UIColor *)colorWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha ``NS_AVAILABLE_IOS``(10_0);
- (UIColor *)initWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha ``NS_AVAILABLE_IOS``(10_0);
|
細(xì)節(jié)都是一樣的就是一個(gè)類(lèi)方法一個(gè)實(shí)例方法逐抑, 我理解下,就是說(shuō)建議你們以前改用colorwithRGB的地方 現(xiàn)在都換成這個(gè)方法叭屹蚊〔薨保可能大多數(shù)公司都抽成了 RGB(a,g,b,a)這種宏吧,那就在宏定義那改一下就好了汹粤。
Adapting to the True Tone Display 真彩色顯示
真彩色的顯示會(huì)根據(jù)光感應(yīng)器來(lái)進(jìn)行自動(dòng)的調(diào)節(jié)來(lái)達(dá)到特定環(huán)境下的顯示與性能平衡效果腐巢。 如果需要這個(gè)功能的話(huà)需要再info.plist里配置
UIWhitePointAdaptivityStyle
共有五種選擇:
1.UIWhitePointAdaptivityStyleStandard 標(biāo)準(zhǔn)
2.UIWhitePointAdaptivityStyleReading 閱讀
3.UIWhitePointAdaptivityStylePhoto 圖片
4.UIWhitePointAdaptivityStyleVideo 視頻
5.UIWhitePointAdaptivityStyleGame 游戲
然后他說(shuō)的很清楚,如果你是圖片處理類(lèi)的app玄括,那就直接配stylePhoto吧,如果你是閱讀類(lèi)的那就直接配styleReading吧肉瓦。 這五個(gè)形式的顯示效果從上往下遞減遭京,我理解是說(shuō)在閱讀時(shí)給你最好的效果,但如果在游戲時(shí)也給那么好的效果會(huì)影響性能泞莉,就給你一個(gè)相對(duì)次一點(diǎn)的顯示效果讓性能更流暢哪雕。
App Search Enhancements 應(yīng)用搜索增強(qiáng)
iOS10的搜索功能做了一定增強(qiáng):應(yīng)用程序內(nèi)搜索,搜索傳遞鲫趁,考慮私人差異斯嚎,結(jié)果可視化。 使用CSSearchQuery類(lèi)挨厚,調(diào)用Core Spotlight的api堡僻,可以讓你不必自己維護(hù)自己的搜索索引,關(guān)于對(duì)搜索關(guān)鍵字的處理疫剃,還有考慮到不同類(lèi)別差異導(dǎo)致搜索結(jié)果的排序都是蘋(píng)果幫你處理钉疫。
并且搜索結(jié)果可以繼續(xù)往下傳遞,假設(shè)你用Core Spotlight搜索火車(chē)站巢价,提示的是地圖類(lèi)app搜索火車(chē)站的結(jié)果牲阁,你點(diǎn)進(jìn)去后固阁,這個(gè)地圖類(lèi)app會(huì)接收到“火車(chē)站”這個(gè)字段在應(yīng)用內(nèi)也完成搜索。支持此功能也是需要配置plist文件:key-value CoreSpotlightContinuation-YES城菊,然后設(shè)置CSQueryContinuationActionType(#import<CoreSpotlight/CSSearchableItem.h>)备燃。最后傳遞的搜索字符串用continueUserActivity:restorationHandler:方法接收。
然后現(xiàn)在看一下#import <CoreSpotlight/CSSearchQuery.h>頭文件里面的結(jié)構(gòu)凌唬。
看上去這個(gè)CSSearchQuery像是一個(gè)查詢(xún)語(yǔ)句操作并齐,有創(chuàng)建,查詢(xún)成功和錯(cuò)誤等法瑟。初始化方法是initWithQueryString: attributes:冀膝。 有isCanceled屬性 和 cancel 和 start方法。 還有foundItemCount屬性霎挟,看上去是能夠得到搜索的結(jié)果個(gè)數(shù)窝剖。protectionClasses(數(shù)組),看上去像是隱私相關(guān)受保護(hù)的文件酥夭。 還有兩個(gè)block赐纱,一個(gè)是搜索結(jié)束后回調(diào),參數(shù)是NSError熬北;一個(gè)是查詢(xún)到結(jié)果時(shí)回調(diào)疙描,參數(shù)是items數(shù)組。這個(gè)items數(shù)組都是CSSearchableItem類(lèi)型讶隐,這里面有個(gè)attributeSet屬性起胰,里面可以傳入以下類(lèi)型
Widget Enhancements 鎖屏部件增強(qiáng)
現(xiàn)在鎖屏界面有了新的設(shè)計(jì),建議我們廢棄以前的notificationCenterVibrancyEffect 改用widgetPrimaryVibrancyEffect或者widgetSecondaryVibrancyEffect巫延,并且窗口的小部件可以讓你描述有多少東西可用效五,支持緊湊和擴(kuò)展兩種形態(tài)。
這些新舊的Effect效果在這個(gè)類(lèi)下炉峰,可能是之前鎖屏玩不出什么花樣所以大家沒(méi)怎么關(guān)注這里畏妖。
<NotificationCenter/NotificationCenter.h> 里面有三個(gè)頭文件
1.NCWidgetProviding.h
先來(lái)兩個(gè)方法
- (``void``)widgetPerformUpdateWithCompletionHandler:(``void
(^)(NCUpdateResult result))completionHandler;
這個(gè)方法如果實(shí)現(xiàn)了,系統(tǒng)將在適當(dāng)?shù)臅r(shí)候召喚部件更新形態(tài)疼阔,無(wú)論是在通知中心還是后臺(tái)戒劫。 需要啟用后臺(tái)更新功能,部件會(huì)在異步工作主線(xiàn)程更新婆廊,調(diào)用參數(shù)塊的工作完成后會(huì)得到相應(yīng)的結(jié)果迅细。
- (``void``)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize;
這個(gè)方法應(yīng)該是部件變化時(shí)調(diào)用,參數(shù)是最大有多大否彩。
這里聲明了一個(gè)分類(lèi)UIVibrancyEffect (NCWidgetAdditions)疯攒,里面就是本章節(jié)說(shuō)的iOS10新增API
+ (UIVibrancyEffect *)widgetPrimaryVibrancyEffect ``NS_AVAILABLE_IOS``(10_0);
+ (UIVibrancyEffect *)widgetSecondaryVibrancyEffect ``NS_AVAILABLE_IOS``(10_0);
這兩個(gè)方法名字上是老大和老二,有什么區(qū)別列荔? 都是用在選擇的文字或圖形上敬尺,默認(rèn)用上面枚尼,如果開(kāi)啟了further diminution(應(yīng)該是類(lèi)似于上面壓縮模式)就用下面的。
下面又聲明了一個(gè)分類(lèi)NSExtensionContext (NCWidgetAdditions)砂吞,里面也是iOS10的新增API
里面有兩個(gè)屬性 widgetLargestAvailableDisplayMode 署恍,widgetActiveDisplayMode 。 是兩種顯示模式是NCWidgetDisplayMode枚舉類(lèi)型蜻直,有緊縮和擴(kuò)張兩種盯质。 ,估計(jì)假如是新聞通知一個(gè)是一般大小概而,一個(gè)是點(diǎn)開(kāi)詳情的大小呼巷。 然后就是一個(gè)方法widgetMaximumSizeForDisplayMode ,返回值是CGSize取到播放模式的最大尺寸赎瑰。
2.NCWidgetController.h
里面除了個(gè)初始化方法王悍,還有一個(gè)方法
- (void)setHasContent:(BOOL)flag forWidgetWithBundleIdentifier:(NSString*)bundleID;
第一個(gè)參數(shù)默認(rèn)為yes,就是該展示時(shí)就展示餐曼,這個(gè)方法可以跨小組件間通訊压储,以及和providing app交互。
3.NCWidgetTypes.h
里面就一個(gè)枚舉類(lèi)型NCWidgetDisplayMode 源譬,前面第1點(diǎn)說(shuō)過(guò)了集惋。
Security and Privacy Enhancements 安全和保密性增強(qiáng)
安全方面在iOS10中引入了更多修改和補(bǔ)充,具體有以下幾點(diǎn):
1.在info.plist文件新增了一個(gè)key踩娘,NSAllowsArbitraryLoadsInWebContent刮刑,允許任意web頁(yè)面加載,同時(shí)蘋(píng)果會(huì)用ATS保護(hù)你的app养渴。
2.使用改進(jìn)后的SecKey API 而不是過(guò)時(shí)的 CDSA API为朋。
3.安全傳輸API中不再支持SSLv3, 建議你們盡快停用SHA1和3DES加密算法厚脉。
4.剪貼板的擴(kuò)展,因?yàn)閣wdc2016演示了可以跨設(shè)備復(fù)制粘貼啊胶惰,那肯定要做一些限制可見(jiàn)(#import <UIKit/UIPasteboard.h>)
5.這點(diǎn)最重要的傻工,建議盡快適配, 所有和用戶(hù)權(quán)限相關(guān)的地方必須在info.plist里配置里面包括
NSBluetoothPeripheralUsageDescription
NSCalendarsUsageDescription
NSCameraUsageDescription
NSContactsUsageDescription
NSHealthShareUsageDescription
NSHealthUpdateUsageDescription
NSHomeKitUsageDescription
NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription
NSMicrophoneUsageDescription
NSMotionUsageDescription
NSPhotoLibraryUsageDescription
NSRemindersUsageDescription
NSSiriUsageDescription
NSSpeechRecognitionUsageDescription
NSVideoSubscriberAccountUsageDescription
NSVoIPUsageDescription
雖然現(xiàn)在還沒(méi)有iOS10系統(tǒng)的手機(jī)孵滞,但是我用模擬器試了下中捆,親測(cè)如果我想喚起通訊錄但是沒(méi)有配置NSContactsUsageDescription,剛啟動(dòng)時(shí)不會(huì)崩潰坊饶,但是在喚起操作發(fā)生時(shí)會(huì)直接崩潰泄伪。 在info.plist設(shè)置之后就可以正常使用了。
iOS11
iOS 11支持哪些設(shè)備
- iPhone 5S, 6, 6 Plus, 6S Plus, SE, 7, 7 Plus
- iPad Air and Air 2, iPad Mini 2, 3, 4, 5代 iPad匿级,所有的 iPad Pro
- 6代 iPod Touch
iOS 新增了哪些框架
Core ML
iOS 11中蘋(píng)果新增了一個(gè)機(jī)器學(xué)習(xí)框架Core ML蟋滴,同時(shí)Apple也提供了一系列的工具用來(lái)將各類(lèi)機(jī)器學(xué)習(xí)的模型轉(zhuǎn)換為Core ML可以理解的形式染厅,從而幫助開(kāi)發(fā)者輕松的在APP里使用前人訓(xùn)練出來(lái)的模型。
ARKit
ARKit幫助開(kāi)發(fā)者更容易的在項(xiàng)目中使用AR功能津函,擴(kuò)展了應(yīng)用和游戲的應(yīng)用場(chǎng)景肖粮,三年前我在開(kāi)發(fā)帶有AR功能的App時(shí),相關(guān)的核心功能還需要像高通購(gòu)買(mǎi)SDK才能實(shí)現(xiàn)《啵現(xiàn)在有了ARKit普通開(kāi)發(fā)者也能夠開(kāi)發(fā)AR相關(guān)的功能了
其他值得注意的變更
在iOS 11系統(tǒng)中涩馆,在視頻播放界面調(diào)節(jié)音量時(shí)將不會(huì)出現(xiàn)音量提示框,一個(gè)比之前更小的音量滑動(dòng)條將會(huì)出現(xiàn)在屏幕的右上角
由于AppStore的改版允坚,原先在應(yīng)用內(nèi)設(shè)置的跳轉(zhuǎn)評(píng)分的鏈接將不會(huì)正常加載到評(píng)分界面
用戶(hù)能夠在AppStore中的產(chǎn)品頁(yè)面里直接進(jìn)行應(yīng)用內(nèi)購(gòu)買(mǎi)魂那,App必須支持新的
SKPaymentTransactionObserver
方法來(lái)支持AppStore內(nèi)的應(yīng)用內(nèi)購(gòu)買(mǎi)功能開(kāi)發(fā)者能夠在后臺(tái)回復(fù)用戶(hù)的評(píng)論了,再也不用愁無(wú)法跟AppStore里的用戶(hù)進(jìn)行溝通了
由于我們?cè)趇Tunes Connect后臺(tái)只能提供一套產(chǎn)品信息稠项,類(lèi)如應(yīng)用名稱(chēng)涯雅、圖標(biāo)、截圖等皿渗,這就要求我們考慮到不同版本AppStore界面間的兼容
新的Navigation title設(shè)計(jì)斩芭,iOS 11系統(tǒng)中大多app都采用了這個(gè)新的設(shè)計(jì),放大了導(dǎo)航欄的標(biāo)題字體乐疆。雖然個(gè)人感覺(jué)有點(diǎn)丑划乖,但是如果想要采用這項(xiàng)設(shè)計(jì)的話(huà),只需要設(shè)置
navigation bar
的prefersLargeTitles
即可挤土,當(dāng)然前提是你的導(dǎo)航欄是用的原生的navigation bar
提供了FileProvider功能讓App可以獲取用戶(hù)設(shè)備或云端上的文件
iOS 11將不再支持32位的app琴庵,如果想要讓程序運(yùn)行在iOS 11設(shè)備上,進(jìn)行64位的重新編譯是必須步驟