1个适用于企业和App Store的应用程序

时间:2015-06-29 16:02:14

标签: ios objective-c xcode swift

我们有一个应用程序,我们为企业和应用程序商店构建。这需要我们做几个设置

  1. 捆绑标识符
  2. 开发团队
  3. 目前我们使用2个分支,其中企业分支作为主分支,应用程序商店分支作为辅助分支,我们只需在提交之前将master合并到app store分支。

    我想消除这一步并同时构建两个版本。

    最好的方法是什么?

    我有一个额外的要求。它是一个混合的Swift和objective-c项目,我希望能够拥有特定于应用商店版本的代码和特定于企业版本的代码。我设想使用类似#ifdef

    的东西

    对此解决方案的任何建议,或者将其保留在2个分支上都是最具技术意义的。

4 个答案:

答案 0 :(得分:2)

  1. 首先,您可以在设置中复制Release Configuration以添加AppStore配置。 enter image description here

  2. 为您拥有的每个配置添加Prepocessor宏。enter image description here

  3. 管理您拥有App Store构建配置的方案 enter image description here

  4. 您现在将拥有两个目标,但您需要逐个构建。

  5. 对于代码部分,在代码中,您必须管理代码中的每个宏。

答案 1 :(得分:1)

您可以在项目中创建两个目标(一个用于企业,一个用于App Store),这两个目标共享相同的代码,但使用不同的代码签名标识进行签名。这样您还可以为企业版和App Store版本设置单独的预处理器宏。

答案 2 :(得分:1)

这取决于Enterprise和Apple Store版本之间的差异。

如果它的业务逻辑存在差异,那么拥有两个分支可能是有意义的,因为app版本可能有不同的规范,因此很难支持一个代码库。

如果只是配置差异,那么我建议使用两个目标(Enterprise,AppStore) 在每个目标构建设置中设置合适的宏。

企业目标示例:
Enterprise

AppStore目标构建设置必须做同样的事情。

代码中的用法:

Settings *settings = nil;
#ifdef ENTERPRISE_VERSION
    settings = [[EnterpriseSettings alloc] init];
#else
    settings = [[AppStoreSettings alloc] init];
#endif

在Swift中,您可以使用#if / #else / #endif宏:

var settings: Settings! = nil
#if ENTERPRISE_VERSION
    settings = EnterpriseSettings()
#else
    settings = AppStoreSettings()
#endif

答案 3 :(得分:0)

在Xcode中,您可以复制构建目标。然后,您可以为每个目标指定自己的团队和捆绑。此外,您可以定义自己的宏以在代码中进行变化和/或从每个目标中包含/排除某些源代码文件