我正在尝试为 iOS 构建我的颤振应用程序,它有一个我想要保护的谷歌地图密钥,而不是签入源代码控制它需要从 azure 构建,为了实现这一点,我将我的地图密钥存储为一个秘密变量天蓝色并作为本地系统环境变量,我正在使用 Sourcery https://github.com/krzysztofzablocki/Sourcery为我生成一个包含此密钥的类,这一切都有效,但只有我第二次构建,第一次构建总是失败。
所以我正在使用这个命令构建
flutter build ios --flavor dev --verbose
第一次运行会给我错误
error: Build input file cannot be found:
'/Users/martin/xxx/xxx/xxx/ios/Runner/Credentials.generated.swift' (in target
“亚军”
然后再次发出相同的命令
** BUILD SUCCEEDED **
这是我的运行脚本,它在编译源代码之前和颤振运行脚本之后调用
这将调用我的脚本,该脚本调用另一个脚本来导出地图 api 密钥并使用 .yml 文件运行 sourcery 命令,因为它的配置继承了脚本,(它还进行一些日志记录)
#!/bin/bash
echo "Generate Credentials Code"
CREDENTIALS_DIR="$SRCROOT/credentials"
# Set credentials if local script for adding environment variables exist
if [ -f "$CREDENTIALS_DIR/add_credentials_to_env.sh" ]; then
echo "Add credentials to environement"
source "$CREDENTIALS_DIR/add_credentials_to_env.sh"
echo "finished running add_credentials_to_env.sh"
fi
echo "RUN SOURCERY"
$SRCROOT/Pods/Sourcery/bin/sourcery --config "$SRCROOT/config.yml"
echo "FINISHED RUNNING SOURCERY"
for file in "$SRCROOT/Runner"/*; do
echo "$file"
done
这是我的配置文件
sources:
- .
project:
file: Runner.xcodeproj
target:
name: Runner
module: Runner
templates:
- credentials/Credentials.stencil
output:
path: ./Runner/
link:
project: Runner.xcodeproj
target: Runner
args:
mapsApiKey: ${MAPS_API_KEY_IOS}
这会在第一次构建时正确生成我的类,并且似乎已正确添加到目标中(编辑了我的密钥),但只有当我再次运行构建命令时,该应用程序才会编译。
// Generated using Sourcery 1.4.2 — https://github.com/krzysztofzablocki/Sourcery
// DO NOT EDIT
public struct Credentials {
let mapsApiKey: String
}
public let credentials = Credentials(mapsApiKey:
"xxxxxxxxxxMY_KEYxxxxxxxxxxx")
有任何想法吗?
xcode 12.5 m1 macbook pro, swift 5