做者:gregg mojica,原文連接,原文日期:2015/10/11
譯者:JackAlan;校對:lfb_CD;定稿:numbbbbbios
更新: iOS 9 有個 bug 影響 APP 瘦身功能,這個 bug 在 iOS 9.0.2 被修復。從 AppStore 下載 App 時請留意。git
iOS 9 已經變成了一個大熱門。發佈幾周後,這個新的操做系統在 iOS 設備上的安裝量就超過了一半。它的普及率打破了 iOS 7 在 2013 年的記錄。github
在寫完上一篇文章以後 Search APIs and SFSafariViewController in iOS 9,咱們繼續學習如何使用 App 瘦身這個 iOS 9 中使人興奮的特性。在此教程中,咱們將探索爲何要使用 App 瘦身以及如何在本身的 App 中使用這個使人興奮的新特性。swift
在本次 WWDC 中公佈的 App 瘦身是一個使人興奮的新技術,這會改變整個下載的過程。因爲蜂窩流量消費大、iOS 設備內存限制以及網絡提速,App 瘦身是一個值得學習的相當重要的特性。進一步來講,由於 App 瘦身被推遲(稍後詳述),這也是一個絕好的時機去了解這個使人興奮的技術。api
在這篇教程中,我假設你知道如何使用 Xcode 和 IDE。若是這對你來講很陌生,或者你根本不知道 IDE 是什麼,你應該先看一下excellent free course.網絡
我還假設你已經知道如何在 AppStore 上或者 TestFlight (蘋果 beta 版 App 測試服務)上發佈 App。我不會具體到講述如何用 TestFlight,因此若是你對 TestFlight 很陌生或者對 App 發佈流程很陌生,我建議你先讀閱讀AppCoda article。這些就足夠了,不須要其餘預備知識,只要用心學習就好!架構
有了這樣的想法,那就讓咱們開始吧。app
當前市場上存在大量的 iOS 設備,所以有多種屏幕尺寸和分辨率,要想保證一個 App 在多種屏幕下的展現效果須要大量的資源(好比 png、jpeg 以及二進制的 PDF)。不幸的是,這致使用戶須要下載一個巨大的程序包(以前的 iOS 版本強制用戶下載所有 App 文件,包括他們在用 iPhone 時永遠也不會用到的 iPad 適配圖片)。16G 的 iPhone 仍然有很多人在用(而且可能短期內不會消失),因此你要縮小 App 體積從而能夠快速下載而且保證用戶有足夠的空間。App 瘦身特性讓這一切成爲可能。iview
除了代碼和圖片,如今的 App 還包括可執行代碼以及32位、64位版本(針對各類架構進行優化,好比 arm6四、arm7S 和 arm7)、3D 圖形技術(例如 OpenGL、Metal 等)、聲音和其餘文件。總之,如今的 App 已經複雜到使人難以置信。這就是 App 瘦身須要解決的問題。iphone
App 瘦身會自動檢測用戶設備類型(好比型號名稱),併爲特定的設備下載相關內容。換句話來講,若是你使用 iPad Mini 1(沒有視網膜屏,只有 1X 的分辨率),那麼只有 1X 的文件會被下載。更強大更清晰的資源(好比 iPad Mini 3 或 4)將不會下載。由於用戶只須要下載他/她須要用到的內容,這加速了下載過程,並節省了設備上的空間。
雖然這起初可能聽起來很複雜,咱們將深刻到具體的細節。幸運的是,Xcode 和 AppStore 會完成這項工做的絕大部分,開發者會輕鬆不少。所以,在本教程中不會有太多的代碼,而是重點關注理解 App 瘦身的過程和它用到的技術。
App 瘦身有三個主要方面,應用程序切片(App Slicing
)、中間代碼(Bitcode
)和按需加載資源(On Demand Resources
)。在本教程中,咱們將一一介紹。
App瘦身第一個咱們要討論的就是切片(slicing)。根據蘋果的文檔,
切片是建立和提供不一樣的目標設備的應用程序包的變體(
variant
)的過程。
一個變體(variant
)只包含可執行架構和目標設備所須要的資源。換句話來講,應用程序切片只提供給與每一個設備相關的資源(取決於屏幕分辨率和架構等等)。實際上,應用程序切片完成了 App 瘦身的大部分工做。
假設你已準備好提交 App,和以前同樣,你會上傳 .IPA 或者 .App 文件到 iTunes Connect(可是必須使用 Xcode7,由於它包含支持 App 瘦身的 iOS 9 SDK)。而後 AppStore 會對 App 進行切片,建立特定的變體(variant
),這些變體將根據功能(capabilities
)分發給每一個設備,。
爲了徹底理解 App 瘦身,你須要瞭解什麼是按需加載資源(ODR
)。 按需加載的資源就是在 App 初次安裝後須要下載的文件。例如,遊戲的特定關卡(以及和這些關卡相關的內容)只有在玩家解鎖時才能夠下載。此外,超過設置時間以後,玩家不須要的早期關卡能夠被移除,以節省設備的存儲空間。
在 Xcode 的設置中(在 Build Setting 裏),開啓按需加載資源須要把"Enable On Demand Resources"改成"YES".
App 瘦身的最後一個內容是中間代碼。中間代碼有點抽象,但在本質上,它是在 App 被下載前,蘋果優化它的新途徑。中間代碼使得 App 能夠在任何設備上儘量快速和高效執行。中間代碼能夠爲最近使用的編譯器自動編譯 App,而且對特定的架構作優化(例如 arm64 64 位處理器,如 iPhone6s 和 iPad Air 2)。
中間代碼會和上文提到的其餘瘦身技巧一塊兒使用,去除針對其餘架構的優化內容,只下載須要的優化內容,從而減小下載文件的大小。
在 iOS 中,中間代碼是一種新特性,而且在新的工程中須要手動開啓。這個過程能夠在 Build Setting 下把 Enable bitcode 修改成 YES。
儘管 Xcode 和 App Store 處理了 App 瘦身的絕大多數流程,你仍然須要採起必定的預防措施以確保你的 App 真的使用了這種新的技術。首要的,你必須使用資源目錄(asset catalogs
).在這一點上,大多數的 App 默認使用資源目錄(asset catalogs
)。若是你尚未用採用資源目錄(asset catalogs
),你現有的大部份內容能夠被轉移到一個目錄下,只須要在 Xcode的項目設置中點擊"Use Asset Catalog"按鈕,以下所示。
Xcode 的新特性之一就是Sprite Atlases
。Sprite Atlases 基本上結合使用資源目錄和 SpriteKit(Xcode 中開發 2D 遊戲用到的技術)。一樣的,若是你是用 SpriteKit,App 瘦身是必須的。
如你所見,Xcode 和蘋果的 AppStore 已經處理了絕大多數 App 瘦身的過程,這樣在你本身的 App 中使用這個技術會容易不少。可是如何測試你的 App 而且確保它已經應用了 App 瘦身?幸運的是蘋果的 TestFlight 提供了完美的解決方案。除 AppStore 的應用瘦身技術外,TestFlight 的用戶也能夠體驗這個特性。
在本篇教程的第二部分,咱們會介紹如何在 TestFlight 中使用 App 瘦身。
首先,下載這個基本空白的項目,解壓,而且在 Xcode 中運行,你將會注意到這個項目基本沒有什麼除了在資源目錄(asset catalogs
)中的一系列的圖片(以及少許的代碼)。這個資源目錄(asset catalogs
) 也包含 1x、2x和3x 版本的 App 圖標。
首先,在模擬器或者真機上運行這個 App。打開設置應用,點擊存儲和 iCloud 使用
這一項(若是不是 iOS 9 設備,點存儲
) 並選擇管理存儲空間。向下滑動到咱們剛剛編譯好的 App 並點擊它。你會注意到它大概有 17.0 MB(當上傳至 iTunes Connect 時這個大小可能略有不一樣)。
當你使用 Xcode 構建並運行一個 App 時,Xcode 不會自動處理 App 變體(variant
)並對 App 瘦身,所以整個 App 文件都在你的設備上。
下一步,在 Xcode 中單擊Product
標籤,選擇Archive
.
注意,你可能首先須要修改這個 App 的
Bundle Identifier
以匹配一個你本身建立的標識符。不然,這個 App 將不會被上傳到 iTunes Connect.
確保你在點擊"Submit"前,選擇了"Include bitcode"。若是一切順利的話,你將會看到一個綠色對號通知你此次構建已經被上傳。
如今登陸到iTunes Connect,建立一個新的 App(包含合適的 bundle ID、App 名字等等)。若是你不肯定如何作這項工做,請參閱AppCoda TestFlight tutorial.
把你本身添加爲內部測試人員。注意,一次構建保持「正在處理中」這個狀態幾小時是很尋常的。一旦這個 App 處理完成,選擇它而且按下開始測試按鈕。
一封電子郵件將會被髮送到你的地址。確保你正在使用想要測試的 iOS 設備,打開這封電子郵件。你將會進入 TestFlight 應用。
安裝這次構建,一旦完成安裝,就回到設置應用中,找到存儲,像此前同樣找到這個 App。注意,這個 App 如今接近 5.4 MB。這就是 App 瘦身的意義。
哇哦!你剛剛從你的 App 中剔除掉了 12.4 MB - 而且這只是一個很是簡單的 App。那些包含多種不一樣的資源(asset
)的 App 效果更好。
在本篇教程,咱們看到了 App 瘦身的強大。咱們討論了 App 瘦身的三個主要的方面:應用程序切片(App Slicing
)、中間代碼(Bitcode
)和按需加載資源(On Demand Resources
).
不幸的是,2015 年 9 月 24 日,蘋果在它的開發者門戶宣佈 App 瘦身已經被延遲,而且不會包含在 iOS 9(或者 9.0.1)公開發行版中:
應用程序切片目前不可用於 iOS 9 應用,由於 iCloud 建立 iOS 9 備份有問題,AppStore 中的一些 App 只能還原到相同型號的 iOS 設備。
當用戶下載你的 iOS 9 應用時,他們會獲取通用版本,而不是針對他們的設備類型的特定變體(
vatiant
)。TestFlight 將會給內部測試用戶繼續分發變體(vatiant
). 應用程序切片將會在將來的軟件更新中可使用。如今你什麼都不用作。
然而,就像我在文章的一開始中提到的,App 瘦身已經被修復而且已經爲全部運行 iOS 9.0.2 的設備準備就緒。App 瘦身是一個簡直難以想象的工具,它將會持續加速 App 下載。
本文由 SwiftGG 翻譯組翻譯,已經得到做者翻譯受權,最新文章請訪問 http://swift.gg。