記錄對iOS10的適配工作? ????

iOS10正式版開始推送脖岛,趕著ddl做的iOS10適配工作也算是完成了,這里記錄下iOS10適配中做的工作怎栽。

僅是適配,不包括利用iOS10新特性做的新功能宿饱。做的工作有這樣幾個方面:

  • Swift轉(zhuǎn)換
  • Today extension UI適配
  • entitlements文件增加aps
  • info.plist增加權(quán)限字段
  • UITableView生命周期適配
  • pbxproj文件適配證書部分
  • IDFA可被用戶禁用

現(xiàn)在依次來介紹一下


Swift轉(zhuǎn)換



使用Xcode8 beta打開項目后熏瞄,Xcode8會提示轉(zhuǎn)換項目中的Swift代碼。

按照Xcode的提示谬以,轉(zhuǎn)換至Swift 2.3就ok了强饮。轉(zhuǎn)換過程中,Xcode會自動更新pbxproj中紀錄的Swift版本为黎。

這部分比較順利邮丰,沒有遇到什么坑。


Today extension UI適配



iOS10對today extension做了一些調(diào)整铭乾,主要體現(xiàn)在:

  • 視覺調(diào)整剪廉,背景色變淺,去除了左側(cè)margin
  • 支持“展開”和“收起”操作炕檩,展開和收起兩種狀態(tài)分別有最高高度限制
視覺調(diào)整



用Xcode8構(gòu)建的app斗蒋,可以看到today extension的背景色,由深灰色變成了淺灰色,左側(cè)的margin也取消了泉沾。

支持展開和收起操作



iOS10中捞蚂,today extension支持展開/收起操作,收起時視圖高度固定跷究,展開時視圖高度可變姓迅。

iOS10中,NCWidgetProviding協(xié)議新增了一個回調(diào):

// If implemented, called when the active display mode changes.
// The widget may wish to change its preferredContentSize to better accommodate the new display mode.
- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize NS_AVAILABLE_IOS(10_0);

用戶點擊展開/收起后俊马,這個方法會調(diào)用队贱。注釋中建議在這個方法中設(shè)置today extension的preferredContentSize

展開和收起模式下高度的限制可以通過

- (CGSize)widgetMaximumSizeForDisplayMode:(NCWidgetDisplayMode)displayMode

方法獲得潭袱。

有人討論說柱嫌,收起模式下調(diào)整高度無效( How to resize the height of widget in iOS 10? ),個人理解NCWidgetDisplayMode的注釋中,已經(jīng)表示了收起模式下的視圖高度是固定的:

typedef NS_ENUM(NSInteger, NCWidgetDisplayMode) {
    NCWidgetDisplayModeCompact, // Fixed height
    NCWidgetDisplayModeExpanded, // Variable height
} NS_ENUM_AVAILABLE_IOS(10_0);

展開模式下屯换,不同機型/橫豎屏编丘,視圖的最高高度限制也都是不同的。比如iPhone SE下測試彤悔,豎屏最大高度為396嘉抓,iPhone 6s下測試,豎屏最大高度為528晕窑。


entitlements文件增加aps



升級到Xcode8后抑片,發(fā)現(xiàn)構(gòu)建的包,在注冊remote notification的杨赤,獲取device token的時候失敗了敞斋,錯誤信息為:

no valid 'aps-environment' 
entitlement string found for application

原來在Xcode7中,push notifications開關(guān)只有一個步驟:將push notifications加入到app id疾牲。

但是Xcode8中植捎,打開push notifications開關(guān)有兩個步驟:
多了一步寫entitlements文件的步驟

所以,用Xcode8打開工程后阳柔,應(yīng)該重新打開一次push notification開關(guān)焰枢,之后entitlements文件中會多出兩行:

<key>aps-environment</key>
<string>development</string>

有了這兩行之后,才可以正常注冊device token舌剂。

但是為什么這個值是development呢济锄?難道正式上線前不需要改為production么?

神奇的是霍转,如果用

codesign --display --entitlements :- ./myApp.app

命令荐绝,可以看到app文件內(nèi)的entitlement。如果用production證書簽名谴忧,可以看到:

<key>aps-environment</key>
<string>production</string>

可能是蘋果在簽名過程中很泊,會自動更新aps-environment字段角虫?

網(wǎng)上發(fā)現(xiàn)的一個關(guān)于這個問題的討論
和蘋果的一個replyXcode 8 Beta: aps-environment entitlement is missing


Info.plist增加權(quán)限字段



使用Xcode8構(gòu)建的app,在使用相冊等權(quán)限時會崩潰委造。錯誤信息為:

This app has crashed because it attempted to access privacy-sensitive data without a usage description.  The app's Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data.

官方文檔中解釋:

Important: To protect user privacy, an iOS app linked on or after iOS 10.0, and which accesses the user’s photo library, must statically declare the intent to do so. Include the NSPhotoLibraryUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to access the user’s photo library without a corresponding purpose string, your app exits.

必須在Info.plist文件中增加NSPhotoLibraryUsageDescription鍵戳鹅,并且填入合適的描述文本

還有很多其他的權(quán)限,如相機等昏兆,也需要在Info.plist文件中聲明枫虏,具體可參考官方文檔。

有一個坑就是爬虱,如果string的值為空隶债,這行權(quán)限的聲明就會無效,遇到的時候還是崩潰:

<key>NSPhotoLibraryUsageDescription</key>
<string></string>

UITableView跑筝、UICollectionView生命周期適配



這章WWDC介紹了UITableViewUICollectionView的生命周期在iOS10中發(fā)生了改變死讹。

在iOS9及之前,一個UICollectionViewCell被重用的過程是這樣的:

  • 一個cell即將出現(xiàn)的屏幕上
  • prepareForReuse
  • cellForItemAtIndexPath
  • willDisplayCell
  • ……
  • 一個cell完全離開屏幕
  • didEndDisplayCell
  • 進入reuse queue

但在iOS10中曲梗,一個UICollectionViewCell被重用的過程變成了這樣:

  • 一個cell還沒出現(xiàn)在屏幕上
  • prepareForReuse
  • cellForItemAtIndexPath
  • 一個cell即將出現(xiàn)的屏幕上
  • ……
  • 一個cell完全離開屏幕
  • didEndDisplayCell
  • 一段時間后再進入reuse queue

所以赞警,iOS10后,cellForItemAtIndexPath被調(diào)用時虏两,并不表示這個cell即將要出現(xiàn)在了屏幕上愧旦。還是得老老實實使用willDisplayCelldidEndDisplayCell方法。


pbxproj文件適配證書部分



Xcode8支持自動管理配置文件定罢,按照文檔笤虫,只需要勾選Automatically manage signing,并配置Code Signing Identity為iOS Developer祖凫,Provisioning Profile為Automatic就可以了琼蚯。

官方文檔在這里:
How do I configure my Xcode project to use automatic provisioning?


IDFA可被用戶禁用



iOS10中,用戶可以在設(shè)置-隱私-廣告-限制廣告追蹤中禁止app讀取IDFA蝙场,這時app讀取到的IDFA就是一串0凌停。

官方文檔中這樣說:

In iOS 10.0 and later, the value of advertisingIdentifier is all zeroes when the user has limited ad tracking.

無法讀取IDFA的問題,看來暫時難以解決售滤,求支招(╥﹏╥)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市台诗,隨后出現(xiàn)的幾起案子完箩,更是在濱河造成了極大的恐慌,老刑警劉巖拉队,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弊知,死亡現(xiàn)場離奇詭異,居然都是意外死亡粱快,警方通過查閱死者的電腦和手機秩彤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門叔扼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人漫雷,你說我怎么就攤上這事瓜富。” “怎么了降盹?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵与柑,是天一觀的道長。 經(jīng)常有香客問我蓄坏,道長价捧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任涡戳,我火速辦了婚禮结蟋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘渔彰。我一直安慰自己嵌屎,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布胳岂。 她就那樣靜靜地躺著编整,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乳丰。 梳的紋絲不亂的頭發(fā)上掌测,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音产园,去河邊找鬼汞斧。 笑死,一個胖子當(dāng)著我的面吹牛什燕,可吹牛的內(nèi)容都是我干的粘勒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼屎即,長吁一口氣:“原來是場噩夢啊……” “哼庙睡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起技俐,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤乘陪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后雕擂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啡邑,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年井赌,在試婚紗的時候發(fā)現(xiàn)自己被綠了谤逼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贵扰。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖流部,靈堂內(nèi)的尸體忽然破棺而出戚绕,到底是詐尸還是另有隱情,我是刑警寧澤贵涵,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布列肢,位于F島的核電站,受9級特大地震影響宾茂,放射性物質(zhì)發(fā)生泄漏瓷马。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一跨晴、第九天 我趴在偏房一處隱蔽的房頂上張望欧聘。 院中可真熱鬧,春花似錦端盆、人聲如沸怀骤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蒋伦。三九已至,卻和暖如春焚鹊,著一層夾襖步出監(jiān)牢的瞬間痕届,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工末患, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留研叫,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓璧针,卻偏偏與公主長得像嚷炉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子探橱,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容