在头文件中定义iOS Bundle Identifier

时间:2015-06-29 19:59:00

标签: ios xcode build preprocessor

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

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

  1. 预处理Info.plist文件设置为;
  2. Info.plist预处理器前缀文件设置为ux_defines.h
  3. 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总是给我一个错误:无法编码签名“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的值。该错误似乎仅特定于包标识符。

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

1 个答案:

答案 0 :(得分:0)

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

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

  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标识符。

  5. 现在,您可以通过选择要运行的方案而不是编辑头文件来选择要使用的包标识符。