在Xcode中构建之前运行shell脚本[英] Run a shell script before build in Xcode

本文是小编为大家收集整理的关于在Xcode中构建之前运行shell脚本的处理方法,想解了在Xcode中构建之前运行shell脚本的问题怎么解决?在Xcode中构建之前运行shell脚本问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我需要在构建/存档之前调整我的项目的版本号.
我尝试了多件事,但到目前为止无济于事.

我用脚本添加了一个目标来更新数字,并将其添加为对我的主要目标的第一依赖性.但是因为我有多个依赖项,因为我的应用程序中有扩展,并且所有依赖项都是由Xcode并行(或至少在随机顺序)执行的.

我为我的计划添加了一个相同的结果. Xcode不等待我的预操作在继续构建之前完成(我添加了一个睡眠100来测试).

因为我更改了构建号码,脚本可以在何时启动之前完成,但还有一个副作用:由于Plist文件已经改变,因此构建甚至停止建立相关的目标.

是什么让它变得更加困难,即我想使用 agvtools 设置我的版本和构建号码.这显然启动了超出了我的控制的后台进程来改变铭文.

免责声明:我已经搜索了其他答案,没有帮助.

推荐答案

agvtools只是在Xcode构建中不起作用.它将永远停止构建. 什么工作正常是plistbuddy,虽然设置并不像漂亮而整洁.

我在我的主方案中添加了对构建的预防,以调用我的项目中的新目标:

xcodebuild -project "${SRCROOT}/MAIN_APP.xcodeproj" -scheme BuildNumberPreProcess
在目标中

buildnumberpreprocess 我有一个运行脚本:

VERSION=$(head -n 1 version.txt)
BUILD=`git rev-list $(git rev-parse --abbrev-ref HEAD) | wc -l | awk '{ print $1 }'`

echo "${VERSION} (${BUILD})"

SCRIPT="${SRCROOT}/CLIENT/Supporting Files/set-version-in-plist.sh"

"${SCRIPT}" "${SRCROOT}/MAIN_APP/Supporting Files/Info.plist" ${VERSION} ${BUILD}
"${SCRIPT}" "${SRCROOT}/EXTENSION/Info.plist" ${VERSION} ${BUILD}
...

set-version-in-plist.h:

#!/bin/sh

#  set-version-in-plist.sh
#
# usage:
# set-version-in-plist LIST VERSION BUILD
# LIST:      Info.plist path & name
# VERSION:   version number xxx.xxx.xxx
# BUILD:     build number xxxxx
#

# Location of PlistBuddy
PLISTBUDDY="/usr/libexec/PlistBuddy"

echo "$1: $2 ($3)"

${PLISTBUDDY} -c "Set :CFBundleShortVersionString $2" "$1";
${PLISTBUDDY} -c "Set :CFBundleVersion $3" "$1";

其他推荐答案

xcode有用于构建/存档的命令行工具: https ://developer.apple.com/library/ios/technotes/tn2339/_index.html

所以,您可以编写shell脚本,首先运行脚本以调整构建/版本号,然后运行Xcode Build/Archive作为命令行工具.

本文地址:https://www.itbaoku.cn/post/924389.html