- 首先新建一个multiBuild的新项目
- 我们选中项目 --> PROJECT --> Info --> Configurations中可以看到Xcode已经帮我们配置了Debug和Release两套环境
- 实际开发中只有这两套环境是不够的,比如通常我们还需要一套预发布的生产环境(习惯叫做Staging)。怎么创建Staging环境呢?其实很简单,只需要点击Configurations下面的+号就会有个小弹窗让你选择是复制Debug还是Release环境,这时我们根据需要选择就好,比我这里选择了Debug,并给新的环境命名为Staging。
- 有了Staging环境我们怎么用起来? 比如我们要支持三套网络环境Debug、Staging、Release。我们可以在项目--> TARGET --> Build Setting 中搜索flags,然后找到 Swift Compiler - Custom Flags
上图我们可以看到Debug 和 Staging 环境中已经帮我们定义了一个DEBUG 标志,这里我们把Staging中的DEBUG标志删掉,因为我们不需要它,它是我们创建Staging环境的时候从Debug环境中复制而来的,然后我们在Staging环境中添加一个STAGING的标志
- 然后在网络请求中我们就可以根据是Debug、Staging、Release来设置不同的url了
struct ContentView: View {
var baseUrl: String {
#if DEBUG
return "http://debug"
#elseif STAGING
return "http://staging"
#else
return "http://release"
#endif
}
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
Text(baseUrl)
}
.padding()
}
}
这样我们运行或者打包时,就是根据不同的Build Configuration来获取相应的baseUrl了。具体使用如下:
在Xcode 顶部点击项目名,选择 Edit Scheme,然后在 Run --> Info --> Build Configuration 下选择 Debug
然后运行项目,运行结果如下:
同上,把 Build Configuration 选择Staging
运行结果如下:
同上,把 Build Configuration 选择Release
运行结果如下:
这样多套网络环境就配置好了
其他运用
app 升级跳转的运用
- 比如当用点击升级app的时候,如果是Release版的,跳转到App Store 相应地址;如果是Staging版的,跳转到内部分发网站。 这种情况我们就可以自定一个Setting, 具体如下: 项目 --> TARGET --> Build Settings 左上角+号,选择Add User-Defined Setting
这样在User-Defined下就会添加一个NEW_SETTING
把新建的这个NEW_SETTING改成APP_STORE_URL,然后在Debug、Release、Staging中分别设置不同的URL,如下:
然后我们在项目的info.plist 中添加一个APP_STORE_URL的key,对应Value就是我们设置的APP_STORE_URL
这样我们就可以在获取跳转链接的时候直接从info.plist中取了,会根据不同的环境取到相应的值
let appStoreUrlString = Bundle.main.object(forInfoDictionaryKey: "APP_STORE_URL")
- 同样其他的不同环境配置不同内容的都可以用上面的方式处理,比如不同环境Wechat SDK 的id不一样,或者不同环境UMeng SDK 的id不一样,都可以用这种方式配置