首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xcode 10构建阶段Shell脚本

Xcode 10构建阶段Shell脚本
EN

Stack Overflow用户
提问于 2018-09-26 18:46:53
回答 4查看 5.3K关注 0票数 6

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

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

这对于所有以前的Xcode版本都很有效,但是在Xcode 10的New系统中,这并没有真正更新info.list文件中的info.list。但是,Xcode 10‘的遗产构建系统正确地更新了该值。

我在脚本中添加了一些回声,并比较了New和Legacy系统上的构建日志,看不到任何不同之处:

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

不确定是否有人在新构建系统中遇到了类似的问题?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-10-22 19:04:43

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

例如,添加:

$(TARGET_BUILD_DIR)/$(INFOPLIST_PATH)

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

票数 14
EN

Stack Overflow用户

发布于 2019-12-10 06:40:11

(Xcode 11.2)

  • 在新建系统中,任何自定义构建步骤都将在新建系统的Process .../Info.plist步骤之前运行:

  • 若要在Xcode完成构建后运行shell脚本,可以将其添加到您的方案中,作为构建后操作:

Product > Scheme > Edit Scheme... > Build > Post-actions

  • 如果要引用任何构建系统环境变量(例如BUILT_PRODUCTS_DIRINFOPLIST_PATH),请确保从选择中更改提供的构建设置。
  • 添加您的shell脚本,但请记住,如果您编辑应用程序包中的任何文件(即Info.plist),则需要重新签名该应用程序。将此添加到post生成步骤:
代码语言:javascript
复制
export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate
/usr/bin/codesign --force --sign - --entitlements "${TARGET_TEMP_DIR}/${FULL_PRODUCT_NAME}.xcent" --timestamp=none "${CODESIGNING_FOLDER_PATH}"
票数 3
EN

Stack Overflow用户

发布于 2018-10-09 19:38:08

同样的问题..。其中一项工作是清理,然后执行完整的构建。

Xcode 10中的新构建系统在完整构建和增量构建中以不同的方式运行流程Info.plist步骤:

  • 完整构建:在处理资产之后,在链接故事板之前(链接步骤)
  • 增量:在嵌入框架之后,在签名之前。

实际问题是作为构建步骤运行的脚本&更新处理过的Info.plist文件需要始终在文件处理后但在签名之前运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52524275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档