如何根据所选的Xcode目标加载URL。
我为iPhone项目提供了四个环境。
1) Development [Base Url https://DemoDevelopmentURL.com/]
2) Testing (QA) [Base Url https://DemoTestURL.com/]
3) Staging (PreProduction) [Base Url https://DemoPreProductionURL.com/]
4) Production (Live) [Base Url https://DemoProductionURL.com/]
基于选定的目标,我们如何加载相关的基本网址
答案 0 :(得分:1)
通过检查目标捆绑包ID:
let baseUrl: String!
switch Bundle.main.bundleIdentifier{
case "Development bundle id":
baseUrl = "https://DemoDevelopmentURL.com/"
case "Testing bundle id":
baseUrl = "https://DemoTestURL.com/"
case "Staging bundle id":
baseUrl = "https://DemoPreProductionURL.com/"
default:
baseUrl = "https://DemoProductionURL.com/"
}
或将基本URL放在每个目标info.plist上,然后从文件中加载它:
var baseUrl: String {
guard let value = Bundle.main.object(forInfoDictionaryKey: "BaseURL") as? String else {
print("Could not find BaseURL variable in info.plist")
return "https://DemoProductionURL.com/"
}
return value
}
答案 1 :(得分:0)
通过创建其他项目配置来执行此操作。这样,您不仅可以配置基本URL,还可以基于每个配置(环境)配置其他构建设置。此外,您没有维护其他目标的开销(尽管您可以通过为每个配置设置不同的 info.plist 来使用不同的捆绑包ID进行构建)。
在您的构建设置中添加自定义编译器标志...
在方案设置中选择适当的配置...
那么您可以进行如下测试...
func baseUrl() -> URL {
#if DEBUG
return URL(string: "debug base url")
#elseif TESTING
return URL(string: "debug testing url")
#elseif STAGING
return URL(string: "debug staging url")
#elseif PRODUCTION
return URL(string: "debug production url")
#endif
}