我正在尝试创建一个包含多个目标的应用,因此我可以将代码用于不同的应用,只需进行少量更改。我设法通过在plist文件中设置自定义键并使用用户定义的设置条目来引用它们来处理所需的许多变量。问题是,使用Facebook SDK,我无法做到这一点。我在plist中设置了一个自定义键,如$ {FACEBOOK_APP_ID},并在我的目标上设置了一个用户定义的设置,如FACEBOOK_APP_ID,其中包含我的应用程序ID。当我编译并运行时,我得到app_id是必需的错误(当然,如果我在plist上硬编码工作正常)。有没有人知道不需要为每个目标使用不同的plist文件的解决方案?
答案 0 :(得分:4)
在没有良好解决方案的情况下挣扎了好几天后,我发现如果我将preprocess info.plist设置为Yes,我可以像往常一样将用户定义的设置添加到build-settings中,并且它们在运行时可用。现在,我只需要将三个变量输入到目标配置中,就不需要预处理文件或预处理宏。
<强>更新强>
我已将FACEBOOK_DISPLAY_NAME,FACEBOOK_APP_ID和FACEBOOK_URL_SCHEMES添加到用户定义的设置(来自Xcode中的Editor-&gt; Add Build Setting菜单),并为每个目标添加了适当的详细信息。然后在Info.plist中(我为所有目标全局使用一个)我添加了Facebook SDK指南的选项,但我添加了$ {FACEBOOK_APP_ID},$ {FACEBOOK_URL_SCHEMES}和$ {FACEBOOK_DISPLAY_NAME},而不是静态值。然后在构建设置上,我选择YES来预处理plist文件。现在我可以在每个目标的用户定义设置中更改信息并且正常工作(无需额外的预处理文件和定义宏的需要)
答案 1 :(得分:0)
您可以尝试在差异目标中使用宏,在您刚刚通过宏定义值的代码中。 exampe:
#if project1
// app id const
#endif