我有一个即将开源的iOS应用程序。我不想把我的钥匙和秘密包括在运行脚本代码中,当应用程序是活的,每个人都可以查看,分叉,下载等明显的原因。
什么是最好的方式仍然使用Fabric/Crashlytics,并保持这些密钥的安全,以便只有那些可以部署的应用程序有权访问这些凭据?
发布于 2018-07-11 11:20:40
杰克的回答对我不起作用。显然,$(PROJECT_DIR)/Info.plist
返回了错误的路径。
但这里有一个同时使用Fabric和Google sign in的项目的工作示例。(从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
发布于 2018-08-27 03:03:44
@Jake发布了一篇很棒的帖子-谢谢!这是我的变体,它检查secrets文件是否存在,并使用Xcode9.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
注意: Xcode将检测到echo "warning: "
部件,并将其作为黄色警告放入构建日志中。
最后,这里是一个预提交git钩子,用于检查意外添加到Info.plist
中的40个字符的十六进制字符串
#!/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 $?
https://stackoverflow.com/questions/48488531
复制相似问题