【问题标题】:Define iOS Bundle Identifier in a header file在头文件中定义 iOS Bundle Identifier
【发布时间】:2015-06-30 06:48:21
【问题描述】:

我试图为同一个应用维护两个捆绑标识符:一个用于开发状态,另一个用于 AppStore。这使我可以将“官方”版本和开发版本都安装在完全相同的设备上而不会发生冲突。

我需要的是一种通过头文件控制捆绑标识符的简单方法。在 Xcode 中,我指定了以下设置:

  1. 预处理 Info.plist 文件设置为
  2. Info.plist 预处理器前缀文件设置为ux_defines.h

ux_defines.h 如下:

// Set this to 0 to switch bundle id to official
#define USE_DEBUG_PRODUCT          1


#if (USE_DEBUG_PRODUCT == 1)
#  define MACRO_APPID com.companyname.appname_dbg
#else
#  define MACRO_APPID com.companyname.appname
#endif

Info.plist 中,我指定了Bundle Identifier 如下:

<key>CFBundleIdentifier</key>
<string>MACRO_APPID</string>

但是,当我为设备构建时,Xcode 总是给我一个错误:Failed to code sign "App Name"。另一方面,如果我保持包标识符硬编码但在Info.plist 中定义一个自定义选项,一切都会顺利进行。例如以下选项:

<key>FooBar</key>
<string>MACRO_APPID</string>

...被正确地预处理为:

<key>FooBar</key>
<string>com.companyname.appname_dbg</string>

... 或

<key>FooBar</key>
<string>com.companyname.appname</string>

... 取决于标头中MACRO_APPID 的值。该错误似乎仅特定于捆绑标识符。

如何设置项目并避免这些错误?

【问题讨论】:

    标签: ios xcode build preprocessor


    【解决方案1】:

    不确定如何解决您遇到的错误。但是,我可以建议一种稍微复杂一些但应该适合您的不同方法:

    1. 通过复制现有配置来创建新的构建配置(在项目设置导航器 -> 信息 -> 配置中)。例如,您可以将其命名为“开发”。

    2. 通过复制现有方案为您的目标创建一个新方案,并将其运行操作设置为使用您的新构建配置。

    3. 创建 2 个xcconfig 文件 - 一个用于每个构建配置,两个变量都用于您的包 ID,但具有正确的配置值:APP_BUNDLE_ID=com.companyname.appname_dbgAPP_BUNDLE_ID=com.companyname.appname。在“配置”下的项目信息中,为每个构建配置设置适当的 xcconfig 文件。

    4. 最后,在您的 Info.plist 文件中,使用来自 xcconfig - ${APP_BUNDLE_ID} 的变量作为您的 Bundle 标识符。

    现在您可以选择使用哪个包标识符,只需选择要运行的方案而不是编辑头文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2016-07-07
      相关资源
      最近更新 更多