iOS 中针对不同构建发行版管理 plist 的 url、设置和密钥的最佳实践?

Best practices for managing urls, settings, keys for plists in iOS for different build distributions?

对于不同环境的所有不同设置并为它们生成不同的构建,让自己保持理智的最佳做法是什么?例如,我们的应用程序连接到 auth0 进行登录,我们有两个不同的环境:后端服务的阶段 + 生产环境。因此,我们为 auth0 创建了两个单独的应用程序(一个用于阶段,另一个用于生产)。在 iOS 上管理此设置的最佳做法是什么?您是否使用各种设置为 stage + prod 创建单独的 plist 文件?

我们生成了两种不同的应用程序版本:一种用于阶段(用于测试版),另一种是用于应用商店的产品版本。

在 Swift3 中,我开始使用枚举来描述不同目标的不同行为。

第 1 步 - 在目标的 plist 中,我指定了目标类型,Alpha、Beta 或 Production。

第 2 步 - 我声明一个枚举来描述所有可能的构建类型

enum RedactedAppVersion {

  case Alpha
  case Beta
  case Production

}

第 3 步 - 我实现了一个惰性全局 属性 来读取 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
  }()

第 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 - 我得到了这样的正确路径 -

let path = ApplicationManagerSingleton.sharedInstance.appVersion.apiPath() + "auth/sign-up"

在我的公司,我们做一些类似的事情,但不同的是维护不同的版本。首先,你可以在Plist中添加一个key

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

然后,任何时候您需要弄清楚您的目标环境是什么,这都很容易。

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

最后,如上所述,当您需要根据环境选择网络环境时,您可以切换环境并选择正确的路径。

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"
}