如何根据所选目标加载基本网址

时间:2018-09-03 08:23:06

标签: ios swift

如何根据所选的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/]

基于选定的目标,我们如何加载相关的基本网址

2 个答案:

答案 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
}