【问题标题】:1 App Built for Enterprise and App Store1 款专为企业和 App Store 打造的应用
【发布时间】:2015-06-29 16:02:14
【问题描述】:

我们有一个为企业和应用商店构建的应用。这需要我们进行一些设置

  1. 包标识符
  2. 开发团队

目前我们使用了2个分支,企业分支作为master,app store分支作为secondary,我们只是在提交之前将master合并到app store分支中。

我想省去这一步,同时构建两个版本。

最好的方法是什么?

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

关于解决此问题的任何建议,或者将其保留在 2 个分支上是否最具有技术意义。

【问题讨论】:

  • 这应该是两个独立的问题。您的第一个问题与objective-c 或swift 没有任何关系。
  • 嗯,我需要做这两件事,它们可能相关也可能不相关,这可能取决于我得到的答案。

标签: ios objective-c xcode swift


【解决方案1】:
  1. 首先,您可以在设置中复制发布配置以添加 AppStore 配置。

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

  3. 管理您的方案以获得 App Store 构建配置

  4. 您现在将有两个目标,但您需要一个接一个地构建。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      如果是业务逻辑差异,那么有两个分支可能是有意义的,因为应用程序版本可以有不同的规范,因此很难支持一个代码库。

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

      企业目标示例:

      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
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-31
          • 1970-01-01
          相关资源
          最近更新 更多