我希望配置jenkins工作,构建iOS应用程序,但我想为dev,staging和prod构建3个不同的应用程序。你们为这种建筑工作采取的最佳方法是什么?
答案 0 :(得分:1)
要做到这一点并不简单,具体取决于您需要的复杂程度。此外,它还需要对证书,配置文件,Xcode构建设置以及您选择的CI服务器有相当好的理解。这是我们使用的完整设置。
方法 - 使用配置
如果您不需要调试/发布/分发配置,请使用这些配置。添加用户定义的构建设置并在应用的info.plist中引用它,并根据需要从您的应用访问plist。请参阅以下相同的方法:
方法 - 构建时属性
您在寻找的变体类型最好在构建时指定。要为Xcode执行此操作:
在您应用的info.plist中添加对此的引用。您可以将构建设置插入Info.plist中!这是设置显示名称的示例,但您可以将其用于任何事情。从应用程序的代码中轻松访问它也很不错(无论如何,大多数第三方服务都会定义API密钥等等)。
定义构建时env var。在这里,我使用Jenkins的Xcode插件来指定它,但您可以通过CLI传递它,或者您正在进行CI构建。
此时,您几乎可以使用构建时参数更改info.plist中的任何内容。是时候使用它了!
简单版本 - 捆绑包ID和名称
如果您只有一个具有不同参数的应用程序,您可以使用上述信息和有效负载配置3个不同的版本,包含3个不同的参数。
如果要同时安装不同的应用程序,请以不同方式指定产品名称和软件包ID(如com.your.company。{$ CUSTOM_BUNDLE_ID})。 只要您使用com.your.company等通配符AppID,就可以使用此功能。 *。
证书,证书,更多证书
如果您正在使用扩展程序或APNS或其他任何需要显式AppID(无通配符)的内容,那么如果您想要多个同时安装的应用程序,那么您的生活会更加艰难。您基本上必须为3个不同的ID生成3个证书/配置文件,并在代码签名时指定它们。
令人讨厌,但它主要是一次性费用,而且有些情况下这很有用。
是吗?
同样,如果您正在使用通配符证书,那么大多数情况下都是。如果你不是,那么你也必须调整其他参数,包括(但可能不限于): - 需要根据构建配置指定不同的权利 - 在扩展中设置对这些名称的引用(例如,WatchKit) - ??? 0_o ???
我们做了什么
我们的应用程序融合了以上所有要求:
特定应用的多个同步版本(内部,用于 例)。我们使用CUSTOM_PRODUCT_NAME来允许用户区分 例如,v2.5和v2.6。在特定环境中的应用程序 会互相覆盖。
a的多个同时环境 特别的应用。我们实际上使用企业发行版配置文件 内部分配以及测试。对于开发人员,我们使用标准 开发证书。对于prod,我们使用非企业产品证书。
权利/扩展属性也是根据自定义的 构建配置。例如,"发布"对我们来说总是使用 企业证书/属性集。
因为我们允许我们的应用交叉 在环境中,我们还有一个由a调用的自定义视图控制器 隐藏的手势,允许我们的用户指向特定的前端 客户端(dev,staging,prod)对任何其他后端(dev,staging, PROD)。
它可能看起来很复杂,但它很好地为我们服务,而且大部分都是设置成本。这里有一些活动部件。在SO帖子中不是最简单的完全布局,所以请根据您的需要随意提出澄清。
答案 1 :(得分:0)
我们决定在应用程序中提供一种功能,以便在不同的环境中进行选择。根据您选择的环境,在应用程序中更改配置设置。
答案 2 :(得分:0)
我们使用多个SCM选项,以便我们可以从两个存储库中克隆/签出。我们将不同环境的配置值存储在不同的分支中。
即使它"感觉"有点不对,它适用于我们,我们可以获得限制不同开发人员的权限并保持配置更改历史记录的好处。
编辑:多个SCM选项来自此插件:https://wiki.jenkins-ci.org/display/JENKINS/Multiple+SCMs+Plugin