iOS9 App Thinning(應用瘦身)功能介紹

iOS9 發布后,產生了一個使 App Thinning 無法正常運行的 bug。在iOS9.0.2 版本中,這個 bug 已經被修復,App Thinning 已經可以正常使用。當你從應用商店(App Store)下載應用時,請注意這點。

iOS9 推出之后,大受歡迎。僅僅數周,已經有超過半數的 iOS 設備安裝了這一新系統。這是 iOS 歷代版本中采納速度最快的—甚至打破了 2013 年 iOS7 創下的記錄。

關于 iOS9,筆者最近發表了一篇名為Search APIs and SFSafariViewController的文章,今天,筆者將繼續探討 iOS9 上另一個令人興奮的功能——App Thinning(應用瘦身)。在這篇教程里,我們將探討 App Thinning 之所以重要的原因,以及如何在你自己的 App 上使用這一令人興奮的功能。

iOS9 App Thinning(應用瘦身)功能介紹

根據 WWDC(蘋果全球開發者大會)的發布,App Thinning 是一項可以改變整個下載進程的新技術。許多用戶反應,流量費用過高、iOS 設備的存儲空間有限,而下載速度卻不斷提升,為了適應這些問題,App Thinning 變得十分值得學習。此外,App Thinning 的發布已經推遲了,現在正是學習關于這一新技術的最好時機。

前提條件

在本教程中,筆者假設你有 Xcode 實踐經驗而且知道如何使用 IDE。如果你對此不甚了解或者不確定 IDE 是什么,也許你會想看看與此相關的優秀免費課程

此外,筆者也假設你知道如何在 App Store 上發布 app,也知道如何使用蘋果的Beta 應用測試服務 testflight。筆者不會具體說明如何使用 testflight,所以如果你對 testflight 不熟悉或者不清楚上傳發布 app 的大體流程,筆者推薦你先看一看這篇 AppCoda 上的文章除了這些和你學習的意愿之外,就沒有任何前提條件了。

以此為前提,讓我們開始吧。

App Thinning 的介紹

iOS9 App Thinning(應用瘦身)功能介紹

現今,市面上的 iOS 設備多種多樣,屏幕尺寸和分辨率更是五花八門,這導致一個app 想在多種屏幕上都能視覺效果良好,就需要大量的優化資源(即 PNG 格式,JPEG 格式以及矢量 PDF 文件等)以匹配不同尺寸的屏幕。更糟糕的是,這導致用戶的下載量大幅增加。(之前的 iOS 版本強制要求用戶下載整個 app 文件,即使用戶使用的是 iPhone,也需要下載他們絕不會使用到的 ipad 圖像文件)16g 的iPhone 還是切實存在的(短時間內也不會消失),因此,讓你的 App 變得精簡而且迅速下載可以確保用戶留有足夠的空間,并且優化用戶體驗。App Thinning 讓這一切變得可能。

現今,App 不再是由簡單的代碼和圖像組成了。現代應用不僅僅包括可執行的代碼,還有不同的 32 位,64 位版本(針對如 arm64, arm7s, 和 arm7 等多種架構的優化),3D 圖形技術(如 OpenGL, Metal 等等),還有音頻以及其他不同的文件。總之,如今 App 功能極其復雜。這就是 App Thinning 發揮作用的地方。

App Thinning 會自動檢測用戶的設備類型(即型號名稱)并且只下載當前設備所適用的內容。換句話說,如果你使用的是 iPad Mini 1(1x分辨率且非 retina 顯示屏)那么只會下載 1x分辨率(下文會有更多介紹)所使用的文件。更強大和更高分辨率的 ipad(如iPad Mini 3或 4)所使用的資源將不會被下載。因為用戶僅需下載他/她自己當前使用的特定設備所需的內容,這不僅加快了下載速度,還節約了設備的存儲空間。

盡管一開始聽起來可能有點復雜,但是筆者會深入了解細節。幸運的是,這項工作的大部分會由 Xcode 和 App Store 負責完成,這使得開發者的生活輕松了許多。因此,本教程的重點在于對 App Thinning 的深刻理解以及其實現技術,并不會有大量的代碼。

App Thinning 主要有以下三個方面:App Slicing(應用程序的劃分),Bitcode以及按需加載資源。在本教程中,筆者會一一詳述每個方面。

[站外圖片上傳中……(3)]

App Slicing

關于 App Thinning,本文探討的第一個方面就是劃分問題。根據蘋果官方文獻的描述「Slicing 是為應用捆綁包創建、分發不同變體以適應不同目標設備的過程。一個變體只包含針對某個目標設備的可執行架構與資源。」 換句話說,App Slicing僅向設備傳送與之相關的資源(取決于屏幕分辨率,架構等等)。事實上,App Slicing 負責處理 App Thinning 的主要流程。

當你準備好提交 app 時,通常會(但必須使用 Xcode7,因為它包含支持 App Thinning 的 iOS9 SDK)向 iTtunes Connect 上傳 .IPA 或 .App 文件。然后,應用商店分割該應用,創建特定的變體以適應性能不同設備。

[站外圖片上傳中……(4)]

On Demand Resources

按需加載資源

想要充分理解 App Thinning,你必須理解按需加載資源(On Demand Resources , ODR)。按需加載資源是在 app 第一次安裝后可下載的文件。舉例說明,當玩家解鎖游戲的特定關卡后可以下載新關卡(和這個關卡相關的特定內容)。此外,玩家已經通過的關卡可以被移除以便節約設備上的存儲空間。

開啟按需加載資源功能涉及改變 Xcode 中的設置(在編譯設置(Build Settings)下),將「啟用按需加載資源”選中為 是」 。

[站外圖片上傳中……(5)]

Bitcode

App Thinning 的最后一個方面是 bitcode。Bitcode 有些抽象,但在本質上它也是蘋果在用戶下載前優化app的新方式。Bitcode 使得 app 無論在何設備上都能快速高效地運行。Bitcode 使用最新的編譯器自動編譯app并且針對特定架構進行優化。(例如,針對 iPhone 6s和 iPad Air 2等 64 位處理器的 arm64)

Bitcode 不會下載應用針對不同架構的優化,而僅下載與特定設備相關的優化,使得下載量更小,同時與前文所述的 App Thinning 技術緊密合作。

Bitcode 是 iOS 上較新的功能,對于新的項目需要手動開啟。這可以通過選擇Build Settings(編譯設置)下的項目設置,將 bitcode 設為 YES 來完成。

[站外圖片上傳中……(6)]

在自己的項目中應用 App Thinning

雖然 Xcode 和 App Thinning 負責處理 App Thinning 的主要流程,但是你還是要采取一定的預防措施以確保你的 app 支持這項新技術。首先,你必須使用資產目錄。資產目錄在大部分 app 上是默認啟用的。如果你尚未啟用資產目錄,現存的許多文件都可以通過下圖的方式點擊 Xcode 項目設置中“啟用資產目錄”轉移到目錄下。

[站外圖片上傳中……(7)]

Sprite Atlases 是 Xcode7 中的新特性。Sprite Atlases 本質上就是資產目錄的組合,也是 SpriteKit(Xcode用來創建2D游戲的技術)的核心。所以說,如果你使用 SpriteKit,那么 app thinning 就是必須的。

App Thinning 的測試

正如上文所述,Xcode 和 App Store 負責處理大部分的 App Thinning 進程,讓這項技術變得真正易于在你的 app 上應用。但是,假如你想測試自己的 app 以確定它已經為 app thinning 做好準備,應該怎么辦呢?幸運的是,蘋果的 TestFlight 為我們提供了完美的解決方案。

在本教程的后半段,筆者會探討如何在 TestFlight 上使用 App Thinning。

首先,下載這個幾乎空白的項目,將它解壓縮,并在 Xcode 中運行。你會發現該項目中除了幾張資產目錄下的圖像(而沒有大量的代碼),并無太多內容。該資產目錄也包含了該應用圖標的 1x、2x、3x 版本。

[站外圖片上傳中……(8)]

首先,在模擬器或設備上運行該應用。打開設置應用程序,單擊「存儲空間與 iCloud 用量」 (在非 iOS 的 9 設備上只是「存儲」 ),然后選擇「管理存儲空間」 。向下滾動找到剛剛編譯的應用程序,然后點擊它。你會發現它大約只有 17.0 MB 大小(當上傳到 iTunes Connect 時大小可能略有不同)。
aa
[站外圖片上傳中……(9)]

當你使用 Xcode 編譯和運行一個應用時,Xcode 不會自動處理應用程序變種和 App Thinning。這樣,整個應用程序文件還是在你的設備上。

然后點擊 Xcode 的產品選項(Product tab)并且選擇存檔(Archive)。
[站外圖片上傳中……(10)]

注:你有可能需要先修改應用程序的 Bundle Identifier 去匹配你自己創建的程序。否則,該應用程序將無法上傳到 iTunes Connect 上。

[站外圖片上傳中……(11)]

確保你在選擇「提交」之前選擇了「包含 bitcode」。如果一切順利,你會看到一個綠色的對號提示你項目已經成功更新了。

現在點擊這里 登錄 iTunes Connect ,創建一個新的應用程序(填入適當的捆綁包 ID,應用程序名稱等)。如果你不確定怎么做,請參考AppCoda TestFlight 教程

[站外圖片上傳中……(12)]

將自己添加為內部測試員。要注意,在建立項目時數個小時都處于「處理中狀態并不尋常。一旦應用程序處理完畢,就選中它并按下 開始測試」。

你將會收到一封電子郵件。請確保使用你想測試的 iOS 設備,并接受郵件邀請。你會被帶到 TestFlight 應用。
[站外圖片上傳中……(13)]

安裝這個版本。完成之后,返回到應用程序設置,瀏覽存儲,找到我們之前的應用程序。發現這個應用程序現在僅有 5.4MB 了。這就是 App Thinning 的杰作!
[站外圖片上傳中……(14)]

哇!你的一個非常精簡的應用程序都節省了 12.4MB 的存儲空間。那么,包含多個不同資源的應用程序將會得到更加顯著的大小變化!

概要

在本文中,我們了解了 App Thininng 的功能,討論了 App Thinning 的三個主要方面:app slicing,按需分配資源以及 bitcode。

不幸的是,2015年9月24日,蘋果在其開發者門戶網站宣布,App Thinning 已被推遲,并沒有包含在 iOS9(或9.0.1)的公開發布中:

然而,正如筆者在本文一開始提到過的,App Thinning 已經得到修復,所有運行 iOS 9.0.2 的設備都可以使用該功能。App thinning 是一種絕佳的工具,它將大大加快應用程序的下載速度!

原文地址:http://www.appcoda.com/app-thinning/

OneAPM Mobile Insight ,監控網絡請求及網絡錯誤,提升用戶留存。訪問 OneAPM 官方網站感受更多應用性能優化體驗,想閱讀更多技術文章,請訪問 OneAPM 官方技術博客

本文轉自 OneAPM 官方博客

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,619評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,155評論 3 425
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,635評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,539評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,255評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,646評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,655評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,838評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,399評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,146評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,338評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,893評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,565評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,983評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,257評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,059評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,296評論 2 376

推薦閱讀更多精彩內容