iOS不同构建分发的plist管理URL、设置和密钥的最佳实践是什么?

3
如何在不同环境中保持理智并生成不同的构建,有哪些最佳实践?以我们的应用为例,它连接到auth0以进行登录,并且我们有两个不同的环境:后端服务的stage和production。因此,我们创建了两个独立的auth0应用程序(一个用于stage,另一个用于production)。在iOS上,如何管理这些设置是最佳实践?您是否需要为stage和prod创建不同的plist文件以包含各种设置?
我们生成两种不同的应用程序构建:一个用于stage(用于测试),另一个是prod构建,用于放置在应用商店中。
2个回答

2
在Swift3中,我开始使用枚举来描述不同目标的不同行为。
步骤1 - 在目标的plist文件中指定目标类型,Alpha、Beta或Production。

Indicate the type of build in the target plist

第二步 - 我声明了一个枚举来描述所有可能的构建类型。
enum RedactedAppVersion {

  case Alpha
  case Beta
  case Production

}

第三步 - 我实现了一个懒加载的全局属性来读取plist文件。
lazy var appVersion: RedactedAppVersion = {
    if let temp = Bundle.main.object(forInfoDictionaryKey: "RedactedAppVersion") as? String {

      if temp.lowercased() == "alpha" {
        return RedactedAppVersion.Alpha
      }

      if temp.lowercased() == "beta" {
        return RedactedAppVersion.Beta
      }
    }

    return RedactedAppVersion.Production
  }()

Step 4 - 当我需要获取API的路径时,我会查询枚举值...
4a - 将以下内容添加到枚举中。
func apiPath() -> String {
    switch self {
    case .Alpha: return "https://test.redacted.com/v1/"
    case .Beta: return "https://test.redacted.com/v1/"
    case .Production: return "https://api.redacted.com/v1/"

    }
  }

我这么做可以得到正确的路径 -

4b -

,保留HTML标签,不做解释。
let path = ApplicationManagerSingleton.sharedInstance.appVersion.apiPath() + "auth/sign-up"

0
在我的公司,我们为维护不同版本做了类似但不同的事情。首先,您可以向 Plist 添加一个键。

enter image description here

然后,在您的目标构建设置中,您可以为每个需要的构建添加不同的目标环境。这可以在构建设置的用户定义区域中完成,通过添加一个新定义的对象,即TARGET_ENVIRONMENT。

enter image description here

然后,每当您需要弄清楚目标环境时,这很容易。

let targetEnvironment = NSBundle.mainBundle().objectForInfoDictionaryKey("TARGET_ENVIRONMENT") as! String

最后,正如上面所述,当您需要根据环境选择Web环境等操作时,可以在环境上进行切换并选择正确的路径。
switch targetEnvironment {
    case "STAGING":
        baseURL = "http://staging.redacted.com"
    case "PREPROD":
        baseURL = "http://preprod.redacted.com"
    case "PRODUCTION":
        baseURL = "http://production.redacted.com"
    default:
        baseURL = "http://localhost:3000"
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接