XCode:如何将机密信息与源代码分开?

时间:2014-06-30 18:59:18

标签: ios xcode

我是iOS开发的初学者,并尝试使用Facebook Graph API构建练习应用。

当我与Facebook API集成时,它需要我将App ID存储到Info.plist文件中 该项目。(https://developers.facebook.com/docs/ios/getting-started#configure

虽然Facebook的应用程序ID不是超级机密,但我想在GitHub上打开我的存储库,并且不得不上传App ID以及源代码困扰我。

我可以将此类文件添加到.gitignore,或者确保每次上传到GitHub时都删除机密信息,但它们显然容易出错,而且根本不优雅。

从Java背景开始,我曾经将数据库密码和其他秘密信息存储为系统环境变量,或者将它们存储在构建工具的设置文件中,例如Maven的settings.xml,这样它们就与源代码保持独立。

在iOS开发中是否存在将机密信息与存储库中的机密信息分离的已知最佳实践?

谢谢。

1 个答案:

答案 0 :(得分:4)

这种情况怎么样:

  1. 在Mac上创建文件MyId.txt(主目录或可共享的目录,例如〜/ FacebookConfidential /)以存储FacebookAppId。

  2. 在Xcode项目中添加运行脚本Build Phases,读取MyId.txt文件内容并使用plistbuddy将其设置为info plist。目的是更新信息属性列表,以便Facebook SDK可以在运行时获取Id。

    INFO_PLIST="info.plist"
    FACEBOOK_ID=$(<~/FacebookConfidential/MyId.txt)
    if [ -n ${FACEBOOK_ID} ]; then
        /usr/libexec/PlistBuddy -c "Set :FacebookAppID ${FACEBOOK_ID}" ${INFO_PLIST}
    fi
    
  3. 使用git pre-commit hook清除info plist中的FacebookAppId或将其更改为存根值,以确保FacebookAppId未提交到存储库。您可能还想在钩子中调用plistbuddy。

  4. 协作者需要执行第1步并在其系统上创建〜/ FacebookConfidential / MyId.txt。

  5. 这样,FacebookAppId就会保存在你的系统上,唯一要分享的就是路径。希望这可以解决问题。