通過配置 Xcode 的設定選項實現 Swift 專案中 API 環境快捷切換
原文: Change your API endpoint/environment using Xcode Configurations in Swift
作者:Daniel Galasko 譯者:米廣
作為一名 iOS 開發者,你的工作往往是與服務端有通訊的 App。你可能需要線上線下或者 Dev/ Live 兩套伺服器地址,並且這 Dev / OffLine 的地址需要在公司內網裡才能用。這時候,你需要為不同開發用途的伺服器地址做很多設定。
我們肯定不想每一次切換不同開發目的的伺服器地址的時候,需要修改很多程式碼。如果你能夠讓同事併發快速的切換伺服器地址,你同事肯定給你說『哇,你好厲害』。同時,測試人員可以將 Staging/Dev/Live 不同的 Build 同時執行在同一個裝置上。本文中,我將討論如何設定來達到以上目的。全文所用到關鍵技術就是給你不同釋出用途的 App 分配不同的包名。「來都來了,往下看看唄。」
將域名設定為一個 Xcode 環境變數
在開始之前,需要在 Xcode 中做一些設定。我們通過在專案的 Info 標籤中新增如下的設定變數,以實現快捷切換伺服器地址,具體操作如下:
![1306435-9d293d3fa697b1e1.png](https://i.iter01.com/images/39689b28eafe2585f5fa00fbbd52d6b1ad99a7be8b4304b524cae40262d9a13f.png)
我通常有開發和釋出兩套配置,因為我喜歡通過修改很少量的程式碼的方式來區分開發版本和提交到 App Store 的版本。如此以來,我能方便的關閉打點統計等只為 App Store 版本所準備的功能。為此在 Target 的 Build 設定裡,新增一個新的自定義設定,我把它命名為MY_API_BASE_URL_ENDPOINT
![1306435-0e626214dbab211e.png](https://i.iter01.com/images/7be301a2edcd539b18568df9bfbb5ccb7c4a28ec3e7ce46a98dd93966c71d307.png)
上圖中展現了我們將會在執行時設定和使用的環境變數。不過我們還不能在 Swift 裡像使用環境變數那樣使用這些自定義變數。我們需要將這些變數鍵值化並存入 Info.plist 檔案,像下面這樣:![Alt text]
![1306435-ec03a14b65a08248.png](https://i.iter01.com/images/d56482b1537b1281dbf8f337d57f56e9aa8a9c834ddae13c155ddedca7055500.png)
至此,你可以像下面這樣簡單的訪問你所設定的變數:
let env = NSBundle.mainBundle().infoDictionary![“MY_API_BASE_URL_ENDPOINT”] as! String
讓我們蕩起雙槳更進一步
我喜歡在 Debug 模式下有更高的靈活性,以便於我能夠在任何時間切換我的 API 。為了達到這種目的,我們可以新增 Swift 編譯識別符號以便於我們能在程式碼中使用巨集定義指令。我尤其喜歡使用一個巨集定義來區分 Debug 和 App Store 兩種編譯模式,具體操作如下:
![1306435-02aabb8f8c4d2673.png](https://i.iter01.com/images/6be2b22190307163e0a7b4a70121bc54ff46a2682df449b236148f5c7c0ca609.png)
現在我們有能力在 Debug 模式下修改我們的環境變數了。Bravo!我們能有定義我們環境變數的 Struct 啦:
struct Configuration {
#if DEBUG
enum Environment: String {
case Production = "www.galasko.com"
case Dev = "www.galasko-dev.com"
case Staging = "www.galasko-staging.com"
}
let environment = Environment.Staging.rawValue//we can change this at any time
#else
let environment = NSBundle.mainBundle().infoDictionary!
["MY_API_BASE_URL_ENDPOINT"] as! String
#endif
}
現在,只有在 Debug 模式裡才會有我們通過列舉自定義的除錯 API。當訪問任何設定變數時,它會自動使用 Info.plist 裡的值作為預設值。
在構建時,我們只需要幾的我們設定變數的值,我們不需要改任何一行程式碼就可以實現我們想要的目的。是不是很簡潔高效~。
終極目的
如果你已經讀到了這裡,十有八九你會有不同用途的 Build。所以你需要對每一個 Build 設定不同的包名,具體操作如下:
![1306435-ae0de2da56802635.png](https://i.iter01.com/images/9cada9d2e761ce1648bbbc9bf84c534787e205ad3ad7aa6b338b36f0ed456852.png)
然後,每一個 App 會在執行時顯示不同的名字,測試員再也不會搞糊塗了:
![1306435-e9453d770d2c3268.png](https://i.iter01.com/images/718d751f4e0cb88c84d0efe3aba82e40ec2f460501f78576314b1d7f961568ad.png)
well Done , 搞完這些設定會為你節省很多時間,希望可以幫到你哦!祝你少 Bug。
相關文章
- Xcode 使用 Configuration 來配置不同的專案環境XCode
- vue專案通過命令列傳參實現多環境配置(基於@vue/cli)Vue命令列
- yml檔案中使用profile配置切換多環境
- [譯] 輕鬆管理 Swift 專案中的不同環境Swift
- jquery中點選切換的實現jQuery
- 使用maven的profile切換專案各環境的引數Maven
- webpack介面環境切換的配置-超簡單Web
- 實現Vue專案主題切換Vue
- Xcode配置測試環境和線上環境XCode
- jupyter notebook中 切換不同的Python環境Python
- Laravel 和 Lumen 中通過環境變數配置對應的 env 檔案Laravel變數
- pycharm新建專案環境設定詳解PyCharm
- Homestead 環境中 PHP 版本快速切換PHP
- Nacos 解決 laravel 多環境下配置切換Laravel
- springboot系列學習(八):yml配置檔案,多環境下的相互切換Spring Boot
- 搭建 Laravel Sail 開發環境 - Windows,docker選項設定 沒有 'ubuntu'選項LaravelAI開發環境WindowsDockerUbuntu
- pycharm切換conda環境PyCharm
- win10輸入法切換快捷鍵怎麼設定 更改鍵盤切換快捷鍵的方法一覽Win10
- 專案開發中的pro、pre、test、dev環境及SpringBoot多環境配置devSpring Boot
- 深圳java培訓:SpringBoot的yml配置及多環境切換JavaSpring Boot
- 關於使用springboot的application.yml切換dev配置環境Spring BootAPPdev
- DX12龍書 00 - 環境配置:通過 Visual Studio 2019 執行示例專案
- jenkins動態切換環境Jenkins
- 當idea配置eclipse快捷鍵時,設定全域性替換的快捷鍵IdeaEclipse
- (全)Python 的虛擬環境構建和jupyter notebook 中虛擬環境切換Python
- 【原創】vs2022配置切換多個ollvm環境LVM
- 通過配置檔案(.htaccess)實現檔案上傳
- 設定select下拉選單的預設選中項
- Nuxt.js中配置生產環境和開發環境APIUXJS開發環境API
- 利用nginx 配置vue多專案環境NginxVue
- 從原始碼研究如何不重啟Springboot專案實現redis配置動態切換原始碼Spring BootRedis
- 含有replication環境的sqlserver切換到standbySQLServer
- 通過 PHPStorm 配置 Hyperf 熱更新開發環境PHPORM開發環境
- 如何在測試環境中實現 API 模擬呼叫API
- VisualStudio —— Batch檔案設定環境變數並啟動VS專案BAT變數
- GoLand編譯器配置代理和專案環境配置GoLand編譯
- Vue 不同環境配置 API 地址VueAPI
- window環境下安裝和切換兩個python環境Python
- Django 專案如何通過載入不同 env 檔案來區分不同環境Django