Xcode 10 构建阶段 Shell 脚本

Cod*_*rew 5 xcode10

在我们的项目中,我们从 git tag 等派生我们的发布版本,然后使用如下 shell 脚本将其写入构建文件夹的 Info.plist:

GIT_RELEASE_VERSION=$(some git command) defaults write "${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH%.*}" "CFBundleShortVersionString" "${GIT_RELEASE_VERSION#*v}"

这适用于所有过去的 Xcode 版本,但在 Xcode 10 的新构建系统中,这未能实际更新 info.list 文件中的 CFBundleShortVersionString。不过,该值已使用 Xcode 10 的旧版构建系统正确更新。

我在脚本中添加了一些 echo 并比较了新系统和旧系统上的构建日志,看不出任何区别:

echo "git release version:" ${GIT_RELEASE_VERSION} echo "info path:" ${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH%.*} echo "grv:" "${GIT_RELEASE_VERSION#*v}"

不确定是否有人在 New Build System 上遇到过类似的问题?

小智 12

问题似乎是有时您Run Script Phase会在 Xcode 创建之前执行Info.plist. 如果您想确保您的脚本阶段在特定步骤之后运行,您需要使用输入来标记您的依赖项。

例如,添加:

$(TARGET_BUILD_DIR)/$(INFOPLIST_PATH)

作为脚本阶段的输入应该强制执行您正在寻找的顺序:Xcode 将创建Info.plist,之后的某个时间,您的脚本将执行并修改Info.plist.