iOS APP 多服務(wù)器環(huán)境分離的方法
每個(gè) App
項(xiàng)目可以有多個(gè)環(huán)境, 開發(fā)環(huán)境
、 測(cè)試環(huán)境
、 預(yù)發(fā)布環(huán)境
和 生產(chǎn)環(huán)境
,至少有 開發(fā)環(huán)境
和 生產(chǎn)環(huán)境
研發(fā)同學(xué)和測(cè)試同學(xué)經(jīng)常需要在環(huán)境間切換,產(chǎn)品同學(xué)有時(shí)候也會(huì)心血來(lái)潮的看看各種版本,也就是說(shuō),有時(shí)候需要測(cè)試版本,有時(shí)候又需要正式版本,我之前的做法就是每次切換 url
,然后重新打包,或者重新運(yùn)行,超麻煩~
那么有沒(méi)有可能在一個(gè)手機(jī)直接裝多個(gè)版本吶?
答案肯定是有滴(否則還碼這篇文章干嘛吶~)
個(gè)人覺得最好的方案就是 ------ 環(huán)境分離 ,即不同的環(huán)境對(duì)應(yīng)不同的 app
每個(gè)Target代表一個(gè)編譯的產(chǎn)品。每個(gè)Target,可以有不同的編譯源文件和資源文件。那么,實(shí)現(xiàn)環(huán)境分離的方案,就是分別建立測(cè)試環(huán)境和生產(chǎn)環(huán)境的兩個(gè)Target。默認(rèn)的Target作為生產(chǎn)環(huán)境的Target,在此基礎(chǔ)上復(fù)制多一個(gè)Target作為測(cè)試環(huán)境的Target。
一個(gè) app
只能有一個(gè)唯一標(biāo)示, iOS
使用的是 Bundle Identifier
, Android
使用的是包名,因此,在一個(gè)手機(jī)上安裝多個(gè)環(huán)境的 app
,只需要每個(gè)環(huán)境的 Bundle Identifier
或者包名不同即可, 一般做法是在后面添加環(huán)境后綴 ,比如生產(chǎn)環(huán)境為 com.shenfengfeng.myapp
,那么測(cè)試環(huán)境就可以為 com.shenfengfeng.myapp.alpha
, app
名字會(huì)更新,當(dāng)然也可以手動(dòng)改,當(dāng)然也還可以改圖標(biāo),用來(lái)在同一個(gè)手機(jī)上區(qū)分版本
但是這種做法有個(gè)不好的地方就是需要,需要針對(duì)不同的環(huán)境,申請(qǐng),不同的第三方的 appKey
、 appSecret
那么是來(lái)回注釋,還是申請(qǐng)賬號(hào),看自己取舍吧~
多環(huán)境分離演示:
概述: iOS app
可以通過(guò)創(chuàng)建不同環(huán)境的Target來(lái)實(shí)現(xiàn)環(huán)境分離,不同Target可以設(shè)置不同的 bundle id
、名稱、圖標(biāo)等。每個(gè) target
也對(duì)應(yīng)的 plist
文件
1、復(fù)制 target
,選中后右鍵,選擇 Duplicate
2、默認(rèn)的名字為 **** copy
3、修改 target
和 bundle id
,需要注意的是,在修改 target
的名字后,需要切換到 Xcode
的其他地方(比如其他 target
)后再切回來(lái),然后 display name
會(huì)自動(dòng)適配
4、項(xiàng)目結(jié)構(gòu)里面會(huì)多一個(gè)默認(rèn) target
名字的 ***.plist
文件
5、 右鍵 show in finder
,將這個(gè) plist
文件改名,并且移到項(xiàng)目的原本的 plist
文件的同級(jí)目錄,然后重新添加到項(xiàng)目中,注意選擇的 target
6、看下圖
7、因?yàn)橐苿?dòng)了新的 target
的 plist
文件,所需要重新關(guān)聯(lián)到新的 plist
文件,關(guān)聯(lián)后隨意切換后會(huì)刷新
8、按著鍵盤 option
,點(diǎn)擊 Xcode
運(yùn)行按鈕(左上方),然后點(diǎn)擊 Manage Schemes
9、重命名新創(chuàng)建 schemes
10、如圖
11、右鍵新建 AppIcon
12、選擇新的 target
對(duì)應(yīng)的 AppIcon
13、關(guān)鍵步驟
設(shè)置了不同的 target
后,代碼上可以根據(jù)不同的 target
來(lái)做不同的處理,就需要知道,當(dāng)前在編譯的是哪個(gè) target
這可以通過(guò),預(yù)編譯宏來(lái)區(qū)分,比如在 runtime alpha
的 target
的 Build Settings
中,在 Preprocessor Macros
中添加 FF_ALPHA
(也可以給 target
runtime
設(shè)置 FF_ALPHA=0
,給 runtime alpha
設(shè)置 FF_ALPHA=1
)
14、代碼中就可以如下判斷,依據(jù)實(shí)際情況
#ifdef FF_ALPHA #define FF_URL @"****" #elif ... #define FF_URL @"****" #else #define FF_URL @"****" #endif
15、結(jié)束,非常感謝看到這里的小伙伴,筆者感覺到很開心~
遇到的問(wèn)題
切換 Scheme
時(shí)候,遇到如下圖報(bào)錯(cuò)
筆者將模擬器格式化后正常, Xcode 9.*
---> Hardware → Erase All Content and Settings...
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- iOS整個(gè)APP實(shí)現(xiàn)灰色主題的示例代碼
- iOS APP實(shí)現(xiàn)微信H5支付示例總結(jié)
- iOS App使用GCD導(dǎo)致的卡頓現(xiàn)象及解決方法
- iOS實(shí)現(xiàn)app間跳轉(zhuǎn)功能
- iOS中在APP內(nèi)加入AppStore評(píng)分功能的實(shí)現(xiàn)方法
- iOS 11 AppIcon不顯示問(wèn)題小結(jié)
- iOS app 右滑返回操作的兩種方法
- iOS開發(fā)中以application/json上傳文件實(shí)例詳解
- 淺談IOS如何對(duì)app進(jìn)行安全加固
相關(guān)文章
iOS應(yīng)用進(jìn)入后臺(tái)后計(jì)時(shí)器和位置更新停止問(wèn)題的解決辦法
這篇文章主要介紹了iOS應(yīng)用進(jìn)入后臺(tái)后計(jì)時(shí)器和位置更新停止問(wèn)題的解決辦法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03iOS三級(jí)聯(lián)動(dòng)選擇器的實(shí)現(xiàn)代碼示例
本篇文章主要介紹了iOS三級(jí)聯(lián)動(dòng)選擇器的實(shí)現(xiàn)代碼示例,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下2017-09-09iOS Mask屬性的詳細(xì)介紹及應(yīng)用實(shí)例
這篇文章主要介紹了iOS Mask屬性的詳細(xì)介紹的相關(guān)資料,這里對(duì)Mask的屬性進(jìn)行了詳細(xì)說(shuō)明并附簡(jiǎn)單代碼實(shí)例,幫助大家更直接學(xué)習(xí)理解,這部分知識(shí),需要的朋友可以參考下2016-11-11