寫在前面的廢話
原文 https://developer.apple.com/library/prerelease/content/documentation/IDEs/Conceptual/AppDistributionGuide/AppThinning/AppThinning.html#//apple_ref/doc/uid/TP40012582-CH35-SW3
本來看了原文想自己翻譯的,突然發(fā)現(xiàn)網(wǎng)上已經(jīng)有了,so
譯文:
http://www.reibang.com/p/330303ac0410
參考:
http://www.cnbeta.com/articles/401221.htm
然后,仔細(xì)拜讀后,發(fā)現(xiàn)譯文有些沒翻譯出來,so,還是自己動手吧.
譯文
App Store和操作系統(tǒng)優(yōu)化了iOS, tvOS, 和 watchOS上的app的安裝,它們在用戶特定的設(shè)備上讓app占用最小的空間.這種優(yōu)化叫做 App 瘦身,它讓你創(chuàng)建出的app能最大限度使用設(shè)備的特性,占用最小的磁盤空間,并能適應(yīng)蘋果未來的更新.在快速下載和節(jié)約空間這兩點(diǎn)上,會提供更好的用戶體驗(yàn).
這一章描述了三種APP瘦身的方式:slicing, bitcode和 on-demand resources.
Slicing(iOS,tvOS) 切割
Slicing是針對不同設(shè)備,創(chuàng)建和交付app bundle的變體.一個變體只提供目標(biāo)設(shè)備所需要的architecture和資源.你還是可以繼續(xù)向iTunes Connect提供你開發(fā)和更新的完整app版本.App Store會根據(jù)你的app支持的設(shè)備種類創(chuàng)建不同的app變體.如圖片資源會根據(jù)它們的解決方案和設(shè)備族進(jìn)行切分.GPU資源被根據(jù)設(shè)備性能被切分.(PS:意思是不同的變體有不同的圖拍你和GPU資源).對tvOS app來說,image catelog asset中的圖片被切分,大的app icon會被移除.當(dāng)用戶安裝一個app時,下載和安裝的就是一個適合于用戶設(shè)備的app變體.
在 開發(fā)過程中,Xcode的模擬器就進(jìn)行了切割,所以你創(chuàng)建和測試的是一個本地的變體.當(dāng)你在設(shè)備(真機(jī)或模擬器)上build和run你的app時,Xcode切割了你的app.當(dāng)你創(chuàng)建Archieve時,Xcode是包含了所有的app版本的,也允許你導(dǎo)出變體.(PS:我還沒找到在哪里導(dǎo)出)
Note:app切割只支持ios9(含)以上的設(shè)備;其他的版本,App Store還是給用戶通用的app 圖1-1
切割存在于你日常的開發(fā)和發(fā)布過程中,大概有如下方面:
1. 在Xcode中,指定目標(biāo)設(shè)備,在asset catalog中為image提供多重解決方案.為了讓資源被切割,你必須使用asset catalog
2. 選擇模擬器或者真機(jī)設(shè)備,build,run
Xcode對選定的設(shè)備build一個app的變體,這樣縮短了編譯的時間,你也能在本地測試不同的變體.
3. 創(chuàng)建app的Archieve,為目標(biāo)設(shè)備在本地導(dǎo)出一個變體.
測試所有你導(dǎo)出的變體,盡早發(fā)現(xiàn)配置錯誤.
4. 上傳app到iTunes Connect
App Store從archive里創(chuàng)建不同的app變體.一共創(chuàng)建多少種變體取決于Xcode project配置的architecture和資源.
5. 在iTunes Connect中,給你的測試者們發(fā)布一個預(yù)發(fā)布版本.
測試者通過TestFlight軟件在目標(biāo)設(shè)備上安裝預(yù)發(fā)布版本.TestFlight會下載一個適用于用戶設(shè)備的app變體.
Note:在正式發(fā)布app前,為了測試App Store為用戶創(chuàng)建的變體,你只能邀請內(nèi)部測試員(存在于iTune Connect的team中的用戶)用TestFlight下載變體.如果你想邀請外部測試員(只有email的用戶),他們只好等Beta App Review審核了app后,才能下載變體.
6. 在iTunes Connect中發(fā)布app
用戶在設(shè)備上安裝app,App Store下載一個適合于用戶設(shè)備的app變體.
Bitcode
Bitcode是一個編譯過的程序的中間表示形式.你上傳到iTunes Connect的包含了bit code的app會在App Store處編譯和鏈接.包含了bit code 的app會讓蘋果在將來二次優(yōu)化你的二進(jìn)制代碼,而不需要你再提交一個新的app版本到store上了.
Note:對iOS app來說,bitcode是默認(rèn)選項,不過也是可選的.
對watchOS and tvOS app來說,bit code是必須的.如果你用了bit code,所有app和app bundle的frameworks都需要包含bit code.
當(dāng)你把你的app提交到iTunes Connect后,你可以下載build產(chǎn)生的dSYMs文件,在這里有對它的描述:https://developer.apple.com/library/prerelease/content/documentation/IDEs/Conceptual/AppDistributionGuide/AnalyzingCrashReports/AnalyzingCrashReports.html#//apple_ref/doc/uid/TP40012582-CH21-SW3
On-Demand Resources(iOS, tvOS)
On-demand resources 是資源-----如圖片和聲音-----你可以設(shè)置tag,可以通過tag成組的請求.App Store在服務(wù)器上保存了這些資源,你可以下載它們.On-demand resources支持快速下載和減小app的size.節(jié)省了app第一次啟動的時間.例如:一個game app會劃分游戲資源的層次,只有當(dāng)用戶要觸發(fā)到那一層時,app才去請求那一層的資源.(PS:類似于關(guān)卡).簡單的例子如,只有用戶購買了app中的付費(fèi)部分時,app才會去會請求付費(fèi)部分的資源.
當(dāng)On-demand resources資源不再被需要時,或者磁盤空間低時,系統(tǒng)會清理On-demand resources資源.如果你在App Store之外的渠道發(fā)布或測試,你就需要自己保存這些資源.不支持可執(zhí)行的On-demand resources(不支持代碼下載,只支持資源下載).App Store也切割(Slice)On-demand resources,這樣可以提升用戶體驗(yàn).
對用戶來說,On-demand resources是透明的,它在后臺傳輸.如圖3-1
怎樣在app中建立on-demand resources呢?參考:
on-demand resources指引:
https://developer.apple.com/library/prerelease/content/documentation/FileManagement/Conceptual/On_Demand_Resources_Guide/index.html#//apple_ref/doc/uid/TP40015083
NSBundleResourceRequest Class Reference:
https://developer.apple.com/reference/foundation/nsbundleresourcerequest