使用Fabric / Crashlytics和开源应用程序的最佳实践?

时间:2018-01-28 16:24:36

标签: ios crashlytics google-fabric

我有一个iOS应用程序,我即将开源。当应用程序处于活动状态时,我不希望在运行脚本代码中包含我的密钥和秘密,供所有人查看,分叉,下载等等。显而易见。

仍然使用Fabric / Crashlytics的最佳方法是什么,同时保持这些密钥的安全性,以便只有那些可以部署应用程序的人才能访问这些凭据?

3 个答案:

答案 0 :(得分:7)

这是一种方式:

1 - 将结构密钥存储在本地文件中。

<apiKey>
<secretKey>

2 - 在你的可可豆荚运行脚本阶段(在Xcode中的Build Phases下),让你的脚本从本地文件中获取api密钥和密钥。

apiKey=$(sed -n '1p' < localFile.txt)
secretKey=$(sed -n '2p' < localFile.txt)

3 - 在cocoa pods运行脚本阶段使用PlistBuddy将API密钥设置为Info.plist文件。像这样:

/usr/libexec/PlistBuddy -c "Set :Fabric:APIKey string $apiKey" $(PROJECT_DIR)/Info.plist

4 - 调用cocoa pods run命令。

"${PODS_ROOT}/Fabric/run" $apiKey $secretKey

编辑:完整脚本

apiKey=$(sed -n '1p' < localFile.txt)
secretKey=$(sed -n '2p' < localFile.txt)

/usr/libexec/PlistBuddy -c "Set :Fabric:APIKey string $apiKey" $(PROJECT_DIR)/Info.plist

"${PODS_ROOT}/Fabric/run" $apiKey $secretKey

答案 1 :(得分:1)

杰克的答案对我不起作用。显然$(PROJECT_DIR)/Info.plist返回的路径不正确。

但这是一个同时使用Fabric和Google登录的项目的工作示例。(截至2018年7月,此方法在Xcode 9中非常有效)

FabricApiKey=$(sed -n '2p' < app_config.txt)
FabricSecretKey=$(sed -n '4p' < app_config.txt)
GoogleReversedClientId=$(sed -n '6p' < app_config.txt)

INFO_PLIST="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH"
/usr/libexec/PlistBuddy -c "Set :Fabric:APIKey $FabricApiKey" "$INFO_PLIST"
/usr/libexec/PlistBuddy -c "Set :CFBundleURLTypes:0:CFBundleURLSchemes:0 $GoogleReversedClientId" "$INFO_PLIST"

"${PODS_ROOT}/Fabric/run" $FabricApiKey $FabricSecretKey

这是项目根目录中必须存在的app_config.txt文件的结构:

FabricApiKey:
your_key_here
FabricSecretKey:
your_secret_here
GoogleReversedClientId:
google_reversed_client_id_here

答案 2 :(得分:0)

@Jake的精彩帖子-谢谢!这是我的变体,它检查机密文件是否存在,并使用Xcode 9.4提供的一些环境变量。

#1/usr/bin/env sh
secretsFile=$PROJECT_DIR/scripts/fabric.secrets
if [ ! -f $secretsFile ]; then
    echo "warning: '$secretsFile' not found"
    exit 0
fi

apiKey=$(sed -n '1p' < $secretsFile)
secretKey=$(sed -n '2p' < $secretsFile)

/usr/libexec/PlistBuddy -c "Set :Fabric:APIKey $apiKey" $PRODUCT_SETTINGS_PATH

$PROJECT_DIR/Fabric.framework/run $apiKey $secretKey

注意:echo "warning: "部分将被Xcode检测到,并以黄色警告的形式放入构建日志中。

最后,这是一个预提交的git钩子,用于检查意外将40个字符的十六进制字符串添加到Info.plist

#!/usr/bin/env sh

files=$(ls */Info.plist)

git diff --cached --name-status | while read modificationtype thisfile; do
        if [ "$modificationtype" == 'D' ]; then continue; fi
        for file in $files
        do
            if [ ! "$thisfile" == "$file" ]; then continue; fi
            if egrep '[0-9a-fA-F]{40}' $file ; then
                echo "ERROR: API key in file: ${file}"
                exit 1
            fi  
        done
done || exit $?