【问题标题】:XCode: How to separate confidential information from source code?XCode:如何将机密信息与源代码分开?
【发布时间】:2014-06-30 18:59:18
【问题描述】:

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

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

虽然 Facebook 的 app id 不是超级机密,但我想在 GitHub 上开源我的存储库,不得不上传 App ID 和源代码让我很困扰。

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

来自Java背景,我曾经将数据库密码和其他机密信息存储为系统环境变量,或者将它们存储在构建工具的设置文件中,例如Maven的settings.xml,以便与源代码分开维护.

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

谢谢。

【问题讨论】:

  • 你看过 NSUserDefaults 吗?

标签: ios xcode


【解决方案1】:

这个场景怎么样:

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

  2. 在您的 Xcode 项目构建阶段中添加运行脚本,读取 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。

这样,FacebookAppId 就保存在您的系统上,唯一要共享的是路径。希望这能有所启发。

【讨论】:

    猜你喜欢
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 2021-05-08
    相关资源
    最近更新 更多