對iOS10新增Api的詳細探究

本文主要是一些對iOS新功能的探索,以前發現博客裏關於iOS新功能的分析大可能是過於歸納,每一個功能幾句話,沒法瞭解到具體的功能。因此本次的探索是基於Api層面,着重看一些具體用法所作的筆記,原本想分別畫個類圖來着,後來仍是以爲太耗時而放棄。若是不想把蘋果iOSSDK裏的.h文件都擺出來詳細讀,那看這篇筆記應該是個不錯的選擇。web

本文以文檔的目錄爲基礎,提到的功能模塊有:算法

Proactive Suggestionsapi

Integrating with the Messages App數組

User Notifications安全

Speech Recognition網絡

Wide Colorsession

Adapting to the True Tone Displayapp

App Search Enhancements框架

Widget Enhancements異步

Security and Privacy Enhancements

 

尚未詳細探索的模塊是

SiriKit 

CallKit (工做職能和這裏聯繫很少,還不care這裏)

Apple Pay Enhancements (工做職能和這裏聯繫很少,還不care這裏)

 

SiriKit  

SiriKit的功能很是強大,支持音頻、視頻、消息發送接收、搜索照片、預訂行程、管理鍛鍊等等。在用到此服務時,siri會發送Intent對象,裏面包括用戶的請求和各類數據,能夠對這個intent處理選擇適當的響應。 這個功能主要是看這兩個頭文件(#import <Intents/Intents.h>、#import <IntentsUI/IntentsUI.h>)所涵蓋到的類太多,前期先略過了,以後等iOS10能夠推送更新了再作進一步調研。

Proactive Suggestions 系統預先建議

背景就是iOS9的時候系統給予的主動建議會經過:Spolight搜索,Safari搜索,Handoff,或者siri建議。 在iOS10以後新增了,鍵盤QuickType建議,地圖,車載娛樂,應用切換,siri交互,鎖屏播放。 好比你正在一個應用裏看一個酒店,可使用mapitem屬性保存正在查看的這個酒店的位置,而後你切換旅行或地圖App時這個位置能夠自動提供使用。  若是你須要這樣利用系統來共享一個位置,那你須要指定這個位置的經緯度,地名,電話等屬性 來便於siri的直接調起。

文檔中還列出了幾種場景

1.在輸入框(UITextFiled)輸入時,能夠指定一下這個輸入框的類型,以便系統能夠分析出用戶的語義。 是電話類型就建議一些電話,是地址類型就建議一些地址。看下頭文件(#import <UIKit/UITextInputTraits.h>)可指定的類型 就是這個新增的textContentType字段,裏面有不少種類型可選。

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.若是是視頻類App可使用MPPlayableContentManager (#import <MediaPlayer/MPPlayableContentManager.h>)看了下,新增了一個屬性nowPlayingIdentifiers,蘋果的意思應該是隻要你之前是用這個多媒體類播放音樂的我就可讓你在鎖屏頁面交互,須要配置在這個數組裏。  

3.若是是出行類app可使用MKDirectionsRequest。 (#import <MapKit/MKDirectionsRequest.h>  )這個類裏幾乎沒有新增api,iOS10就新增了一個枚舉,並且看上去就是個默認值。若是要使用此功能,須要配置在info.plist文件裏 新增key - value ,MKDirectionsApplicationSupportedModes - MKDirectionsModeRideShare。

 

User Notifications 用戶通知

整體的意思就是支持了不少用戶定義的通知,而且能夠捕捉到各個通知狀態的回調。以往通知的概念是:你們想接收的都提早作好準備,而後一下全量分發,沒收到也無論了,也不關心發送者。如今用戶通知作成了和網絡請求有點像 一個先發request再獲得response的流程,甚至封裝了error,能夠在各個狀態的方法中作一些額外操做,而且也能取到一些字段,如發送者等。

此功能的頭文件入口在#import <UserNotifications/UserNotifications.h>

1.NSString+UserNotifications.h

有一個方法 localizedUserNotificationStringForKey: arguments: (提供該通知被呈現時的本地化字符串),猜想下面的類有不少initWithIdentifier的,他們的indentifier就是這個。

2.UNError.h

有一個屬性UNErrorDomain 和一個枚舉 UNErrorCode,顧名思義。

3.UNNotification.h

裏面有兩個屬性,date日期 和 request,這個request是上面「8」的類型UNNotificationRequest,點進去看了下比較清晰,有identifier標識,content內容,trigger觸發條件, 和帶上這三個東西的初始化方法。 其中內容 和 觸發條件這兩個屬性,分別是上面「7」 和 「12」的類型,這個下面再談。

4.UNNotificationAction.h

這個類突出的是一個通知的動做,有identifier,title,options(枚舉,就是通知當前的權限,容許?拒絕?前臺時容許?)屬性。而後就是帶上這三個東西的初始化方法。 而後比較費解的就是下面有一個子類UNTextInputNotificationAction ,這個子類有兩個額外屬性, 按鈕title,和文本框placeholder, 爲何會是這兩個屬性? 莫非是點擊通知後下拉出的快速回復,有一個輸入框和一個按鈕。

5.UNNotificationAttachment.h

這個裏面就是URL(資源url屬性),type(附件類型)。 而後是帶上這兩個屬性的初始化方法。 下面聲明瞭幾個字符串常量,暫時還不知道具體用在哪裏,typeHint,hiddenKey,clippingRectKey,TimeKey。

6.UNNotificationCategory.h

有indentifier屬性,actions(裏面是數組),minimalActions(最重要的數組,就是隻能給你兩個位置顯示你顯示哪兩個,這麼個意思),intentIdentifiers屬性(應該是和上面的動做數組關聯的吧),options(權限相關,無?容許自定義關閉?容許車載系統交互?)。最後就是把這些都帶上的init方法。  猜想這個類之因此取名叫category應該是,在某個地方展現通知的時候會把全部通知一一分類, 而後每一個類別的通知可能最多隻能讓你展現幾個,若是不作限制應該會展現所有通知,若是權限設置的是容許自定義關閉那可能就是支持相似一鍵清除的操做。

7.UNNotificationContent.h

消息的內容,一看就能知道應該是一個相似於Entity的東西,裏面裝有大量的屬性:attachments(可選的附件集合),badge(小紅點數量),body,categoryIndentifier,launchImageName(從消息裏點開的應用程序應該能看到啓動圖對吧),subtitle,threadIdentifier(與request關聯),title,userInfo,sound這個是「11」的類型,應該是同時來時的聲音,點開「11」看一下 ,就倆方法,defaultSound,soundNamed: 自定義聲音,都在~/Library/Sounds 目錄下。 恩再回到剛纔那個content類裏面有個子類UNMutableNotificationContent,屬性和父類相同,只不過是子類的屬性均可以修改了,父類的那些屬性都是readonly的。

8.UNNotificationRequest.h 上面第3條說過了

9.UNNotificationResponse.h 

有action,也有request,那也就有response,這裏面有兩個屬性,notification,actionIdentifier  響應裏就這倆破玩意。 而後有個子類UNTextInputNotificationResponse, 這裏面就一個屬性userText ,看命名很好猜,應該就是前面說的那個有輸入框裏輸入的內容。

10.UNNotificationSettings.h

這個類裏就是一些設置了,有一個枚舉說的是有沒有權限,一個枚舉說的是不支持?禁用?啓用?。 而後下面一大波屬性,小紅點設置,聲音設置,彈窗設置等等 都是這個枚舉類型, 最後還有個alertStyle屬性(枚舉,None?Banner?alert?)。

11.sound前面第7條說過了

12.UNNotificationTrigger.h

有一個屬性 repeats(是否重複發通知)。 下面有四個子類,push通知觸發, 時間通知觸發,日曆通知觸發,地區通知觸發, 時間的有timeInterval屬性, 日曆的有dateComponents屬性。 而後時間和日曆的子類都有nextTriggerDate 方法。

13.UNUserNotificationCenter.h

這裏面東西多到吐了,同窗你記得NSNotificationCenter麼? 須要提一點的就是之前的通知中心有個方法[NSNotificationCenter defaultCenter], 這裏是[UNUserNotificationCenter currentNotificationCenter], 提醒一下到時候別說敲不出來。 方法大可能是一些remove,add,get等操做, 還有2個代理方法:通知將要發出去時調用,收到通知的response後調用。

14.UNNotificationServiceExtension.h

裏面有兩個方法,收到通知的請求後調用, 系統將要銷燬時調用。

 

通知裏面有UI相關的類 #import <UserNotificationsUI/UserNotificationsUI.h>

這個類裏面就一個文件, 並且方法比較單一,就是收到通知調用,和收到通知的響應調用。 其餘方法也就是mediaPlay 和 mediaPause 。和一些多媒體播放的按鈕frame,color等, 這裏面的做用難道僅僅就是通知來了後播放的音樂暫時暫停下,響一聲通知,再播放? 具體WWDC2016上說的鎖屏頁面的通知樣式處理的api是在下面的部件加強章節中。

 

Integrating with the Messages App 與系統短信 app交互

對消息額支持很大,能夠模擬發消息收消息,發郵件等,提供了UI界面。 也提供了一些額外擴展的api,如表情包區域。WWDC2016上說的各類消息內的新操做在頭文件中都能找到Api。

此功能的頭文件入口在#import <Messages/Messages.h>

1.MSMessagesAppViewController.h

這個類應該就是蘋果本身的消息界面,你能夠繼承他寫你本身自定義的界面。 屬性有:activeConversation 指的是當前的會話對象,是上面「2」這個類型,具體詳細能夠看下面的第「2」點、還有個是presentationStyle(外觀樣式,枚舉類型,緊縮?擴張?)。 接下來就是方法了:requestPresentationStyle(請求消息過渡到指定的樣式),dismiss消除方法。 而後就是一波生命週期方法了,每一類都有will和did,會話信息將要(已經)活躍時,將要(已經)解除活躍,將要(已經)選擇信息,將要(已經)收到信息,將要(已經)開始發送,將要(已經)取消發送,將要(已經)開始過渡。

2.MSConversation.h

屬性有localParticipantIdentifier(當前會話參與者生成的標識,他說只有刪了App纔會變 姑且理解成id是不會變的),remoteParticipantIdentifiers(遠端的標識符數組),selectedMessage(選中的信息),以及4個對象方法 插入一條信息,插入一個標籤,插入一段文本,插入一個附件。 這四個方法都有成功的回調。

3.MSSession.h

這個類裏面是空的,解釋說是用session來處理消息序列間的關係。可能就是佔個位,之後估計會添加東西。 這個MSSession是後面不少參數的類型,應該就是區分消息相似於標識符的做用。 

4.MSMessage.h

初始化方法是initWithSession ,沒錯就是上面那個MSSession。 除了初始化方法剩下的就全是屬性了:session,senderParticipantIdentifier(發送者的標識符),layout佈局這個是「5」這個類型,URL,shouldExpire(選yes會自動消失,用戶手動選擇爲這條消息續命),accessibilityLabel(殘疾人模式支持),error。

5.MSMessageLayout.h

這個是抽象類,裏面是空的,就是個佈局文件,繼承自NSObject。

6.MSMessageTemplateLayout.h

繼承上面那個類,看名字是模板佈局後面應該會用的挺多的,裏面的屬性有,標題,子標題,尾部標題,尾部子標題,圖片,多媒體URL,圖片標題,圖片子標題。 

7.MSSticker.h

應該是消息上的表情包。 裏面就有兩個屬性imageFileURL ,localizedDescription 圖片和局部描述。而後是帶上這兩個屬性的初始化方法 initWithContentsOfFileURL: localizedDescription: 。

8.MSStickerView.h

這個類就是一個view,裏面包着一個sticker,也就是包裹着上面那個裝飾品的view。 提供了帶上sticker的初始化方法,一個常規屬性animationDuration,和三個方法startAnimating,stopAnimatingisAnimating。

9.MSStickerBrowserViewDataSource.h

細思極恐,這個類不就是wwdc2016上說的那個能夠在消息下面添加自定義表情的地方麼。 符合datasource的風格,裏面就兩個方法,numberOfStickersInStickerBrowserView: (返回一個總數),stickerBrowserView:stickerAtIndex:(返回這個索引下的內容)。

10.MSStickerBrowserView.h

上面那個是datasource,那這個就是用了上面數據源的view唄。 除了初始化方法,有兩個屬性 stickerSize(枚舉,小,中,大),dataSource(就是上面的「9」),還有我的reloadData方法。

11.MSStickerBrowserViewController.h

上面是個view, 這個就是承載上面那個view的viewcontroller。確定得有這個屬性stickerBrowserView 和初始化方法。

 

這個message模塊還有UI相關的api   #import <MessageUI/MessageUI.h>

就是兩個VC ,MFMailComposeViewController,MFMessageComposeViewController。 這兩個都是繼承自UINavigationController.   以爲這兩個就是發郵件的編輯頁面,和發消息的編輯頁面。  發郵件的頁面裏有 canSendMail (Bool方法),set主題,set發件人,set收件人,set內容,set附件。 而後有一個代理,和代理方法,猜也能猜到 就是成功失敗回調。mailComposeController:didFinishWithResult: error:  。 那另外一個消息和這差很少了就不說了。

 

Speech Recognition 語音識別轉文字

這個類裏面的Api和方法調用都很是清晰,感受使用起來會很是方便。真的爲科大訊飛捏把汗了,科大訊飛的app(錄音寶)我看過,都尚未說一段語音能直接轉文字的功能,他們是直接把聲音文件上傳,而後24小時候再發給你轉換後的結果...並且一上來就要收費。蘋果的這個功能已經作到了系統原生支持,真的厲害。

此功能的頭文件入口在#import <Speech/Speech.h>

1.SFSpeechRecognitionResult.h

這個類裏有三個屬性:bestTranscription 就是最優的轉化結果咯,是上面的「7」這個類型的。而後再看下這個SFTranscription.h ,果真不出所料 有兩個屬性 一個是字符串類型formattedString 一個是數組類型的segments ,恩 前者就是轉化後的字符串,後者是分割後的一個個小結果集合。 而後這個分割的一個個小結果呢又是上面「6」這個類型。那再看一下「6」 裏面的屬性就是 substring, 時間戳,duration,準確性,備選答案數組,這些很清晰的東西了。

2.SFSpeechRecognitionRequest.h

這個類裏東西有點多,屬性taskHint,是上面「4」這個類型,點開一看就是一個枚舉,用來區分你這個語音識別的請求是哪一類的 查找?確認?聽寫?沒法識別?。 接下來是兩個BOOL類型的,shouldReportPartialResults(是否語音局部的一塊一塊也要處理?默認選false就是一句話全說完了再上傳吧),detectMultipleUtterances(假如你說了10秒鐘,只有後5秒匹配到告終果,那你前面刪了仍是保留?默認不刪),而後是分析到的關鍵字數組,和標識符什麼的。 而後這個request有兩個子類,一個是從本地URL讀取 一個聲音文件去識別, 一個是默認作法用話筒和AVFoundation庫接收到聲音去識別,而後有幾個拼接聲音的API。

3.SFSpeechRecognitionTask.h

從名字就能看出來這是語音識別最重要的一個類了,裏面的屬性有:state這是一個枚舉,說明當前狀態是進行中?已完成?被取消?等等。 接下來是三個常見的 isFinishing ,isCancelled ,error 。 接下來是 isPowerAvailable (是否開啓說話聲音大小的監測?),peakPower(最大聲音),averagePower(平均聲音)。 屬性就這些了,接下來就是一個協議和一波代理方法:剛剛識別出話語調用,猜想話語時調用,話說完了調用,取消時調用,等等等,你能想到的回調方法蘋果應該都有的。

4.上面第2條裏面說過了

5.SFSpeechRecognizer.h

和系統的那些相機權限,通信錄權限有點像, 就是如今的狀態是什麼?贊成?拒絕?仍是未選擇過? 而後提供了方法讓用戶去選擇。 而後有些屬性:NSSet類型的supportedLocales(支持地區方言的集合),

available是否可用,locale當前地區 ,defaultTaskHint默認類別,request(就是上面說的請求),隊列,代理。 而後有個協議和代理方法:發現用戶給與的權限發生改變時調用。

6和7. 上面第1條裏說過了 

 

Wide Color 寬域顏色

文檔的原話說:大多數的 core字打頭的圖形框架 還有AVFoundation 都大大提升了對擴展像素和寬色域色彩空間的支持。經過圖形堆棧擴展這種方式比以往支持廣色域的顯示設備更加容易。如今對UIKit擴展能夠在sRGB的色彩空間下工做,性能更好,也能夠在更普遍的色域來搭配sRGB顏色。 而後說了幾個場景說建議你用sRGB吧,好比依賴於UIkit的clamp component values的應用程序,或是使用較低級別api執行本身圖像處理的 都建議用sRGB吧。

而後看了下UIColor類裏 到底什麼是sRGB? 發現多了兩個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); //董鉑然 博客園

 

細節都是同樣的就是一個類方法一個實例方法, 我理解下,就是說建議大家之前改用colorwithRGB的地方 如今都換成這個方法叭。可能大多數公司都抽成了 RGB(a,g,b,a)這種宏吧,那就在宏定義那改一下就行了。 

 

Adapting to the True Tone Display 真彩色顯示

真彩色的顯示會根據光感應器來進行自動的調節來達到特定環境下的顯示與性能平衡效果。 若是須要這個功能的話須要再info.plist裏配置

UIWhitePointAdaptivityStyle

共有五種選擇:

1.UIWhitePointAdaptivityStyleStandard 標準

2.UIWhitePointAdaptivityStyleReading 閱讀

3.UIWhitePointAdaptivityStylePhoto 圖片

4.UIWhitePointAdaptivityStyleVideo 視頻

5.UIWhitePointAdaptivityStyleGame 遊戲

而後他說的很清楚,若是你是圖片處理類的app,那就直接配stylePhoto吧,若是你是閱讀類的那就直接配styleReading吧。 這五個形式的顯示效果從上往下遞減,我理解是說在閱讀時給你最好的效果,但若是在遊戲時也給那麼好的效果會影響性能,就給你一個相對次一點的顯示效果讓性能更流暢。

 

App Search Enhancements 應用搜索加強

iOS10的搜索功能作了必定加強:應用程序內搜索,搜索傳遞,考慮私人差別,結果可視化。 使用CSSearchQuery類,調用Core Spotlight的api,可讓你沒必要本身維護本身的搜索索引,關於對搜索關鍵字的處理,還有考慮到不一樣類別差別致使搜索結果的排序都是蘋果幫你處理。

而且搜索結果能夠繼續往下傳遞,假設你用Core Spotlight搜索火車站,提示的是地圖類app搜索火車站的結果,你點進去後,這個地圖類app會接收到「火車站」這個字段在應用內也完成搜索。支持此功能也是須要配置plist文件:key-value  CoreSpotlightContinuation-YES,而後設置CSQueryContinuationActionType(#import<CoreSpotlight/CSSearchableItem.h>)。最後傳遞的搜索字符串用continueUserActivity:restorationHandler:方法接收。

而後如今看一下#import <CoreSpotlight/CSSearchQuery.h>頭文件裏面的結構。

看上去這個CSSearchQuery像是一個查詢語句操做,有建立,查詢成功和錯誤等。初始化方法是initWithQueryString: attributes:。 有isCanceled屬性 和 cancel 和 start方法。 還有foundItemCount屬性,看上去是可以獲得搜索的結果個數。protectionClasses(數組),看上去像是隱私相關受保護的文件。 還有兩個block,一個是搜索結束後回調,參數是NSError;一個是查詢到結果時回調,參數是items數組。這個items數組都是CSSearchableItem類型,這裏面有個attributeSet屬性,裏面能夠傳入如下類型

 

Widget Enhancements 鎖屏部件加強

如今鎖屏界面有了新的設計,建議咱們廢棄之前的notificationCenterVibrancyEffect 改用widgetPrimaryVibrancyEffect或者widgetSecondaryVibrancyEffect,而且窗口的小部件可讓你描述有多少東西可用,支持緊湊和擴展兩種形態。

這些新舊的Effect效果在這個類下,多是以前鎖屏玩不出什麼花樣因此你們沒怎麼關注這裏。

#import <NotificationCenter/NotificationCenter.h> 裏面有三個頭文件

1.NCWidgetProviding.h

先來兩個方法 

- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult result))completionHandler;

這個方法若是實現了,系統將在適當的時候召喚部件更新形態,不管是在通知中心仍是後臺。 須要啓用後臺更新功能,部件會在異步工做主線程更新,調用參數塊的工做完成後會獲得相應的結果。

- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize;

這個方法應該是部件變化時調用,參數是最大有多大。

這裏聲明瞭一個分類UIVibrancyEffect (NCWidgetAdditions),裏面就是本章節說的iOS10新增API

+ (UIVibrancyEffect *)widgetPrimaryVibrancyEffect NS_AVAILABLE_IOS(10_0); 

+ (UIVibrancyEffect *)widgetSecondaryVibrancyEffect NS_AVAILABLE_IOS(10_0); 

這兩個方法名字上是老大和老二,有什麼區別? 都是用在選擇的文字或圖形上,默認用上面,若是開啓了further diminution(應該是相似於上面壓縮模式)就用下面的。

下面又聲明瞭一個分類NSExtensionContext (NCWidgetAdditions),裏面也是iOS10的新增API

裏面有兩個屬性 widgetLargestAvailableDisplayMode ,widgetActiveDisplayMode 。 是兩種顯示模式是NCWidgetDisplayMode枚舉類型,有緊縮和擴張兩種。 ,估計假如是新聞通知一個是通常大小,一個是點開詳情的大小。 而後就是一個方法widgetMaximumSizeForDisplayMode ,返回值是CGSize取到播放模式的最大尺寸。

2.NCWidgetController.h

裏面除了個初始化方法,還有一個方法

- (void)setHasContent:(BOOL)flag forWidgetWithBundleIdentifier:(NSString *)bundleID;

第一個參數默認爲yes,就是該展現時就展現,這個方法能夠跨小組件間通信,以及和providing app交互。

3.NCWidgetTypes.h

裏面就一個枚舉類型NCWidgetDisplayMode ,前面第1點說過了。

 

Security and Privacy Enhancements 安全和保密性加強

安全方面在iOS10中引入了更多修改和補充,具體有如下幾點:

1.在info.plist文件新增了一個key,NSAllowsArbitraryLoadsInWebContent,容許任意web頁面加載,同時蘋果會用ATS保護你的app。

2.使用改進後的SecKey API 而不是過期的 CDSA API。

3.安全傳輸API中再也不支持SSLv3, 建議大家儘快停用SHA1和3DES加密算法。

4.剪貼板的擴展,由於wwdc2016演示了能夠跨設備複製粘貼啊,那確定要作一些限制可見(#import <UIKit/UIPasteboard.h>

5.這點最重要的,建議儘快適配, 全部和用戶權限相關的地方必須在info.plist裏配置裏面包括

NSBluetoothPeripheralUsageDescription
NSCalendarsUsageDescription
NSCameraUsageDescription
NSContactsUsageDescription
NSHealthShareUsageDescription
NSHealthUpdateUsageDescription
NSHomeKitUsageDescription
NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription
NSMicrophoneUsageDescription
NSMotionUsageDescription
NSPhotoLibraryUsageDescription
NSRemindersUsageDescription
NSSiriUsageDescription
NSSpeechRecognitionUsageDescription
NSVideoSubscriberAccountUsageDescription
NSVoIPUsageDescription

雖然如今尚未iOS10系統的手機,可是我用模擬器試了下,親測若是我想喚起通信錄可是沒有配置NSContactsUsageDescription,剛啓動時不會崩潰,可是在喚起操做發生時會直接崩潰。 在info.plist設置以後就能夠正常使用了。

 

本文是用筆者認爲比較清晰的結構整理的,但願讀者也能有所幫助。 固然裏面也有一些地方是我本身的猜想和理解,不能保證100%正確,有不一樣而理解歡迎一塊兒討論。

轉載必須註明原文連接。 

相關文章
相關標籤/搜索