日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

App環(huán)境分離的實現(xiàn):iOS篇

 quasiceo 2016-04-05

App環(huán)境分離的實現(xiàn):iOS篇

 2016-04-04   iOS 架構(gòu) 652

原創(chuàng)文章,轉(zhuǎn)載請注明:轉(zhuǎn)載自Keegan小鋼
并標(biāo)明原文鏈接:http:///post/architecture/20160404
微信訂閱號:keeganlee_me
寫于2016-04-04


App環(huán)境分離的實現(xiàn):Android篇
App環(huán)境分離的實現(xiàn):iOS篇


說到App環(huán)境分離在iOS的實現(xiàn),我曾在iOS技術(shù)群里問過:如何實現(xiàn)在同一臺手機能同時安裝同個應(yīng)用的測試和生產(chǎn)版本?應(yīng)用名稱要有區(qū)分,圖標(biāo)也要有所區(qū)別。不要手動修改Bundle id和應(yīng)用名稱,也不要手動替換圖標(biāo),更不要維護兩個項目。如何才能簡單地實現(xiàn)?

結(jié)果發(fā)現(xiàn)很多人都不知道該怎么實現(xiàn)。其實,實現(xiàn)方案很簡單,只要建立多個Target即可。當(dāng)然,有些細節(jié)問題要注意,不然會出錯。接下來,看如何一步步地實現(xiàn)環(huán)境分離。

復(fù)制Target

關(guān)于Xcode中Target的概念,文檔中有這么一段說明:

A target specifies a product to build and contains the instructions for building the product from a set of files in a project or workspace. A target defines a single product; it organizes the inputs into the build system—the source files and instructions for processing those source files—required to build that product. Projects can contain one or more targets, each of which produces one product.

即是說,每個Target代表一個編譯的產(chǎn)品。每個Target,可以有不同的編譯源文件和資源文件。那么,實現(xiàn)環(huán)境分離的方案,就是分別建立測試環(huán)境和生產(chǎn)環(huán)境的兩個Target。默認(rèn)的Target作為生產(chǎn)環(huán)境的Target,在此基礎(chǔ)上復(fù)制多一個Target作為測試環(huán)境的Target。

如下圖,選擇默認(rèn)的Target,從右鍵菜單中選擇Duplicate,就可以復(fù)制出一個新的Target了。

新Target默認(rèn)名稱為productname copy。復(fù)制完成后,不只是TARGETS列表中多出了名為productname copy的新Target,同時也會為該新Target生成名為productname copy的新的scheme,以及在項目的根目錄下生成productname copy-Info.plist文件。

更名Target

不喜歡productname copy這樣的名字,productnameBeta這樣的名字才是測試版本該有的名字。那么,需要改名的地方有三處:target名稱、scheme名稱、plist文件名稱。

修改target名稱很簡單,只要在TARGETS列表中選中后,再點擊一下即可編輯修改名稱。修改scheme則可以在Xcode左上角的Run\Stop按鈕右邊的scheme列表菜單中選擇Manage Schemes,打開彈出框,如下圖,則可將productname copy修改為productnameBeta


plist文件則修改為productnameBeta-Info.plist,同時,我還將其移到與默認(rèn)的Info.plist文件在同個目錄下。不只是在同一個分組下,也是在同一個物理目錄下。改完plist文件后,還需要修改productnameBeta的Target的Info.plist File設(shè)置,該屬性設(shè)置了相應(yīng)Target綁定的plist文件是哪個。該屬性值本來為productname copy-Info.plist,現(xiàn)需要更改為productname/productnameBeta-Info.plist

修改配置

接下來,就要修改Target的配置,實現(xiàn)真正的環(huán)境分離了。默認(rèn)的productname的Target,作為生產(chǎn)版本,基本不需要改動,需要改的是作為測試版的productnameBeta

首先,修改productnameBeta的Bundle id,在原有的基礎(chǔ)上添加后綴“.beta”,以實現(xiàn)能和生產(chǎn)版同時安裝在同一臺設(shè)備上。

接著,修改Bundle display name,可在原有名稱的基礎(chǔ)上添加后綴“Beta”,以實現(xiàn)和生產(chǎn)版應(yīng)用名稱上的區(qū)分。

然后,需要更換圖標(biāo)了。默認(rèn)會使用AppIcon這一項Assets,但AppIcon是給生產(chǎn)版設(shè)置的圖標(biāo),既然測試版要使用不同圖標(biāo),那就需要新建一套新的App Icon,如下圖:

新建的App Icon將其命名為AppIcon-Beta,放置測試版的圖標(biāo)。并將productnameBeta的App Icons Source指定為新建的AppIcon-Beta。至此,圖標(biāo)也與生產(chǎn)版的有所區(qū)別了。

判別Target

那么,設(shè)置了不同Target后,代碼上可能需要根據(jù)不同Target做不同處理,因此,需要在代碼上能判斷當(dāng)前編譯的是哪個Target。這可以通過預(yù)編譯宏來區(qū)分。例如,我們在productnameBeta的Build Settings中,將Preprocessor Macros屬性值設(shè)置為BETA,也就是為productnameBeta定義了一個預(yù)編譯宏,宏名稱為BETA。

然后,在代碼中可以通過如下預(yù)編譯指令判斷當(dāng)前是在哪個Target下:

#ifdef BETA
    // 測試版需要執(zhí)行的代碼
#else
    // 默認(rèn)生產(chǎn)版需要執(zhí)行的代碼
#endif

寫在最后

通過多個Target可以實現(xiàn)環(huán)境的分離,本文的實現(xiàn)很簡單。而關(guān)于Target的用法也不只限于此,若想了解Target更多高級用法,可查詢相關(guān)資料,在此就不展開了。


掃描以下二維碼即可關(guān)注訂閱號。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多