【问题标题】:Defining Settings bundle based on the build configuration根据构建配置定义设置包
【发布时间】:2012-07-07 04:20:38
【问题描述】:

我已经在设备设置中出现的设置包中定义了我的 Root.plist。现在,我希望它根据我构建项目的环境类型显示不同的选项。

我在 XCode 中定义了一个 TEST 和 PROD 方案(不同的构建配置),我希望 Root.plist 为这些构建配置定义不同的。如何做到这一点?

我们是否可以定义 2 个 plist 并将它们与不同的构建配置链接,或者我们可以在编译时根据选择的构建配置或方案修改 root.plist。

请指教。

【问题讨论】:

    标签: ios xcode cocoa-touch settings.bundle


    【解决方案1】:

    简单的方法是,

    1 -- 使用现有目标的副本创建不同的目标, 2 -- 在新的目标构建阶段 elif [ ${CONFIGURATION} == "发布" ];然后 cp -r ${PROJECT_DIR}/Settings/ReleaseHHAppStore/Settings.bundle ${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app 菲

    如果需要,这将允许您进行一些更可定制的设置

    【讨论】:

      【解决方案2】:

      我使用了@abhinav 方法,但稍作修改以适应我的项目需求。我们有两个目标,都用于构建单独的应用程序。

      步骤

      在项目目录的文件系统上创建文件夹结构:

      <project_folder>/Settings/debug
      <project_folder>/Settings/production
      

      项目中创建这些组:

      Settings
        debug
        production
      

      创建一个Settings.bundle,将其添加到调试组并保存到调试文件夹。 (不要将其添加到任何目标)

      以您想要的最设置页面的方式编辑.plist(通常,调试版本有更多设置)。

      将包从调试文件夹复制到生产文件夹

      Settings.bundle生产文件夹添加到项目中的生产组(不要添加到任何目标),所以你有这个结构

      确保Settings.bundles 没有被添加到任何目标

      从生产中删除设置项.plist 您不想随 App Store 版本一起提供。

      复制捆绑资源阶段之后添加运行脚本阶段

      if [ "${CONFIGURATION}" = "Release" ]; then
      cp -r ${PROJECT_DIR}/Settings/production/Settings.bundle "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app"
      fi
      
      if [ "${CONFIGURATION}" = "Debug" ]; then
      cp -r ${PROJECT_DIR}/Settings/debug/Settings.bundle "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app"
      fi
      

      注意:我有两种构建方案:发布和调试。我已将路径用引号括起来,因为我的目标名称带有空格。

      【讨论】:

        【解决方案3】:

        我做了类似于@Abhinav 的操作,但我没有使用运行脚本,而是使用文件检查器的目标成员资格部分来确定哪个目标使用哪个 Settings.bundle。

        【讨论】:

          【解决方案4】:

          我是这样解决的:

          1) 将 2 个设置包(一个用于测试,一个用于生产)添加到项目并将它们添加到目标。

          2) 在 Runner 目标上添加一个 Run 脚本,以选择性地将所需的设置包复制到构建文件中。

          if [IS_PRODUCTION]; then
          cp -r ${PROJECT_DIR}/Settings/Prod/Settings.bundle ${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
          fi
          
          if [IS_TEST]; then
          cp -r ${PROJECT_DIR}/Settings/Test/Settings.bundle ${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
          fi
          

          3) 完成后,只需在不同的方案上运行即可查看所需的结果。

          【讨论】:

          • 网络上的所有其他解决方案似乎都表明创建多个目标是要走的路。但这对于我想要的东西来说似乎完全是矫枉过正。您的解决方案非常有效,谢谢。
          【解决方案5】:

          在不同构建中有条件地捆绑项目(例如设置捆绑)的唯一方法是复制您的目标。只需将正确的包添加到正确的目标,并保持所有代码相同。它有所不同,但从长远来看,它应该对你更好。

          【讨论】:

            猜你喜欢
            • 2023-03-05
            • 2012-12-13
            • 2011-11-10
            • 1970-01-01
            • 2020-09-04
            • 1970-01-01
            • 2016-08-16
            • 2014-05-14
            • 2016-02-26
            相关资源
            最近更新 更多