App環(huán)境分離的實現(xiàn):iOS篇原創(chuàng)文章,轉(zhuǎn)載請注明:轉(zhuǎn)載自Keegan小鋼 App環(huán)境分離的實現(xiàn):Android篇 說到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的概念,文檔中有這么一段說明:
即是說,每個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 修改配置接下來,就要修改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,如下圖: 判別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)注訂閱號。 |
|