原文: 對iOS10新增Api的詳細探究
本文主要是一些對iOS新功能的探索,之前發現部落格裡關于iOS新功能的分析大多是過于概括,每個功能幾句話,無法了解到具體的功能。是以本次的探索是基于Api層面,着重看一些具體用法所做的筆記,本來想分别畫個類圖來着,後來還是覺得太耗時而放棄。如果不想把蘋果iOSSDK裡的.h檔案都擺出來詳細讀,那看這篇筆記應該是個不錯的選擇。
本文以文檔的目錄為基礎,提到的功能子產品有:
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
還沒有詳細探索的子產品是
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,stopAnimating,isAnimating。
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%正确,有不同而了解歡迎一起讨論。
轉載必須注明原文連結。
轉載于:https://www.cnblogs.com/SimonGao/p/5619441.html