2

我有一个 iOS,我想为其运行一个构建阶段,该阶段从 JSON 文件中读取一个值,将其导出为环境变量,然后在我的 Info.plist 中读取它。

我目前有:

在此处输入图像描述 在此处输入图像描述

# Build Scripts/SetAPIVersion
set -e

if ! which jq > /dev/null; then
echo "error: jq is missing. Be sure to git pull `dev-box` and run apply.sh"
exit 1
fi

export API_VERSION =$(cat ../src/version.json | jq .api)

echo "Set API Version to $(API_VERSION)!"

我的应用程序将构建,但该值似乎未设置。我在这里做错了什么?

4

2 回答 2

2

你可以使用这个:

plutil -replace APIVersion -string <VERSION> <PATH TO INFO>.plist

您也可以使用 PlistBuddy:

/usr/libexec/PlistBuddy -c "Set :APIVersion string <VERSION>" <PATH TO INFO>.plist

如果版本是取决于环境的静态数字,您可以使用项目构建设置user defined variable来:

用户定义的变量`

于 2018-11-13T18:53:56.703 回答
1

shell 解释器作为子进程运行。当它export是一个环境变量时,它只会影响那个 shell 解释器进程及其子进程,但不会影响父进程(即 Xcode)或其兄弟进程(其他构建阶段)。

您可以让 shell 脚本构建阶段获取一个输入文件,例如 Info.plist.in,并从中生成 Info.plist。它会根据您的喜好将输入转换为输出。例如,它可以用sed它应该有的值替换一个特殊的字符串。请务必根据需要配置运行脚本构建阶段的输入和输出。

或者,您可以让运行脚本构建阶段生成一个定义宏的头文件,例如 api_version.h which #defines API_VERSION#include该头文件位于 Info.plist 中,并在构建设置中启用 Info.plist 的预处理。再次确保运行脚本阶段的输入和输出是正确的。

于 2018-11-13T18:42:30.240 回答