全國服務熱線:400-660-5510
首頁 > IOS開發>iOS 9 App Thinning
11 2017 April

iOS 9 App Thinning

發布日期:2017-04-11
瀏覽數: 3535
        App Thinning 是蘋果在去年 WWDC, 也就是 iOS 9 中推出的為 App 瘦身的一個新的技術。 App Thinning 主要分為 3 個部分:
        * App Slicing
        * Bitcode

        * On Demand Resources

        App Slicing
        我們正常的應用中都會用到圖片資源,為了適配 iPhone 6 Plus 以及 iPhone 6, 圖片資源需要包含 @2x 的圖片 和 @3x 的圖片,而 Slicing 就是在這一步進行優化,Slicing 會根據用戶在 App Store 下載的不同設備選擇對應的資源。例如:當用戶使用 iPhone 6 在 App Store 上下載 App 的時候,App Store 只會給予他 @2x 的圖片,而不會像以前一樣,不管三七二十一我把所有的資源都給你,根據蘋果的描述,這大約能節約你 30% 到 50% 的大小。而你要做的事情,僅僅是使用 Xcode 7 IDE, 并且使用其中的 Assert Catalog 管理你的資源文件。
不過 Slicing 因為 iCloud 備份的問題, 知道 iOS 9.0.2 以及 Xcode 7.0.1 才可以被使用
        Bitcode
        Bitcode 是蘋果在你 App 被下載之前做的另外一件優化。Bitcode 是你的代碼編譯為最終可執行文件的中間的一層,當你的 App 以 Bitcode 的形式提交到 iTunes Connect 的時候,iTunes Connect 會自動為合適的機器編譯出對應的代碼,例如:對于 64 位機器的 iPhone 6 或者 iPad Air 2,Bitcode 會為其編譯出適合 64 位機器可執行文件。
        對于 iOS app 來說, Bitcode 不是必須的,但 Bitcode 編譯選項為 Yes(這里應該只是一個過渡期,有些第三方庫如果不在繼續維護了需要盡快換掉), 對于 tvOS 和 watchOS 的 app,Bitcode 的的選項必須為 Yes。
        On Demand Resources
        最后一個 App Thinnig 步驟是 On Demand Resources, On Demand Resources 在游戲的制作中比較常見,主要為了一些沒用的資源在用到了才會去下載,比如,當我們設計一個游戲有 3 個關卡的時候,第一關的資源在 App 被下載的時候就已經下載好了,但是,出于對 App 大小的考慮,此時,第二關的資源是不需要下載的, 可以等到第一關結束以后,或者第一關進行到一半的時候后臺進行下載。
        On Demand Resources 中的資源包括了 圖片,音效等等, 下面是一個 On Demand Resources 的 Demo, 語言的話,我們選用 Swift.
        Demo 是這樣的: 首頁只有一個 Button,默認情況下 Assets 里面的圖片 Group 沒有被下載, 當點擊 Button 以后,會先去看 Group 時候已經存儲下載完畢, 如果沒有下載,則會去觸發一個下載請求,下載完成后,把圖片顯示到居中的位置。

        @IBAction func downloadBarButtonItemTouchUpInside(sender: UIButton) {
        let tags = NSSet(array: ["Group"])
        self.resourceRequest = NSBundleResourceRequest(tags: tags as! Set)
        self.resourceRequest?.conditionallyBeginAccessingResourcesWithCompletionHandler() {
        resourceAvailable in
        if resourceAvailable {
        dispatch_async(dispatch_get_main_queue()) {
        self.imageView.image = UIImage(named: "Group")
        }
        } else {
        self.resourceRequest?.beginAccessingResourcesWithCompletionHandler() {
        error in
        if error == nil {
        dispatch_async(dispatch_get_main_queue()) {
        self.imageView.image = UIImage(named: "Group")
        }
        } else {
        print(error)
        }
        }
        }
        }

        }

        另外,我們可以通過 Xcode 中的 Disk 來查看 On Demand Resources 的情況



?
 
 
七乐彩tuijian 音乐治疗赚钱 道教靠什么赚钱 养生粥店赚钱案例 手机种植赚钱的软件 奇仙幻旅游戏能赚钱吗 聚淘慧能赚钱 阳光彩票安卓 KK彩票群 伊利冠名跑男赚钱吗 论坛禁止赚钱网盘 海王捕鱼官网下载 內蒙六六麻将免费下载 二人对战麻将(单机版) 装修销售赚钱么 真的可以赚钱的游戏有什么 电脑代打游戏赚钱吗