dog*_*god 25 ios apple-watch watchkit
Watchkit应用程序和扩展的版本和内部版本号(或版本和简短版本)必须设置为与包含应用程序相同的值.
我使用环境变量Info.plist在构建时动态设置应用程序版本.这也适用于Watchkit扩展,但不适用于Watchkit应用程序.
我使用的环境变量必须在主应用和扩展的plist中提供${}(对于${VERSION}我设置的变量VERSION).
如果我为Watchkit应用程序执行相同的操作,它将获取字符串本身,而不是值.如果我提供美元和括号,变量中没有数据.
知道如何设置Watchkit应用程序的变量吗?
Tho*_*sen 17
我用它来更新所有目标:
#!/bin/bash
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$SRCROOT/Great WatchKit App/Info.plist"
Run Code Online (Sandbox Code Playgroud)
Luc*_*ien 14
我CFBundleVersion是mastergit repo 上我的分支上的提交数量.
在我的主要应用目标上,Build Phases> + New Run Script Phase我添加了此脚本:
# Set the build number to the count of Git commits
buildNumber=$(git rev-list --count HEAD)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$SRCROOT/app WatchKit Extension/Info.plist"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$SRCROOT/app WatchKit App/Info.plist"
Run Code Online (Sandbox Code Playgroud)
从app WatchKit App该app应该是你的应用程序的名称,但检查的确切路径.
stk 的答案是正确的,但我也想添加我的发现。
解决该问题的一种方法是使用agvtools:
在OSX > 其他 > 外部构建系统中创建一个新目标 ,添加与此类似的运行脚本:
#!/bin/bash
#read vesion number from version.txt in project root
VERSION=$(head -n 1 version.txt)
BUILD=`git rev-list $(git rev-parse --abbrev-ref HEAD) | wc -l | awk '{ print $1 }'`
echo "${VERSION} (${BUILD})"
agvtool new-marketing-version ${VERSION}
agvtool new-version -all ${BUILD}
exit 0
Run Code Online (Sandbox Code Playgroud)
我有一个version.txt文件,其中仅包含我的版本号(营销版本或短捆绑版本),可以通过任何 CI 系统轻松调整该文件,并使用我的 git SHA 的数量作为构建号(捆绑版本)调整源VERSION并BUILD使其适合您的要求
在构建/归档之前运行为新目标创建的方案。
如果您需要将此作为主要目标的依赖项 - 这将失败,因为它将停止执行以下目标(如果有人知道如何防止这种情况,我将感谢您的提示)
但是您仍然可以通过为每个 plist 执行如下脚本来实现这一点(类似于 stk 提供的):
#!/bin/sh
#
# usage:
# set-version-in-plist.sh 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"
${PLISTBUDDY} -c "Set :CFBundleShortVersionString $2" "$1";
${PLISTBUDDY} -c "Set :CFBundleVersion $3" "$1";
Run Code Online (Sandbox Code Playgroud)
将此脚本保存为文件,使其可执行 ( chmod +x SCRIPTNAME) 然后使用提到的参数为所有 plist 执行它
该解决方案不如agvtools解决方案那么方便,但在依赖项中使用时它不应该停止您的构建......
您可以在没有构建脚本的情况下更新所有目标的构建版本。(您也可以使用它来更新营销/简短构建版本;在这种情况下,忽略对 CFBundleVersion 的更改)。
打开您的项目设置并将 CURRENT_PROJECT_VERSION(当前项目版本)设置为所需的版本号。在所有目标中,使 sur CURRENT_PROJECT_VERSION 为空(因此它的值是从项目继承的)。然后在所有 Info.plist 文件中将 CFBundleShortVersionString(捆绑版本字符串,短)和 CFBundleVersion(捆绑版本/构建版本)设置为 $(CURRENT_PROJECT_VERSION)。
如果您想在每次构建时增加您的 CFBundleVersion(或让它反映您的 git SHA)。按照 doggod 的描述使用 agvtool 或参见https://developer.apple.com/library/ios/qa/qa1827/_index.html。
这是迄今为止跨目标同步内部版本号和营销版本的最简单方法。
确保项目的Current Project Version和Marketing Version已设置。这将是您的内部版本号和营销版本的唯一事实来源。通过单击导航器中的项目,单击项目(目标上方),然后在过滤器中键入“版本控制”来查找这些设置。
在您的目标中,转到Build Settings选项卡并设置Current Project Version为$(CURRENT_PROJECT_VERSION)。
在您的 .plist 文件中设置Bundle version(与 相同CFBundleVersion)为$(CURRENT_PROJECT_VERSION).
在您的目标中,转到Build Settings选项卡并设置Marketing Version为$(MARKETING_VERSION)
在您的 .plist 文件中设置Bundle version string (short)(与 相同CFBundleShortVersionString)为$(MARKETING_VERSION).
这是我关于该主题的博客文章的链接,其中包含更多有用的屏幕截图。
我有一个附加到我的主要应用程序目标的运行脚本。它将在构建应用程序时传播 WatchKit 扩展和 WatchKit 应用程序。
它是完全可重复使用的。享受!
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
buildNumberDec=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumberDec" "${PROJECT_DIR}/${INFOPLIST_FILE}"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumberDec" "$SRCROOT/${PRODUCT_NAME} WatchKit Extension/Info.plist"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumberDec" "$SRCROOT/${PRODUCT_NAME} WatchKit App/Info.plist"
Run Code Online (Sandbox Code Playgroud)
好吧,如果 \xc2\xb4 不能像这样工作,请使用Run Script Build Phase. 做这样的事情:
#!/bin/sh\nINFOPLIST="${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"\necho "writing to $INFOPLIST"\nPLISTCMD="Set :CFBundleVersion $(git rev-list --all|wc -l)"\necho -n "$INFOPLIST" | xargs -0 /usr/libexec/PlistBuddy -c "$PLISTCMD"\nRun Code Online (Sandbox Code Playgroud)\n\n我没有\xc2\xb4t为你的WatchKit应用程序提供正确的路径,所以你必须自己改变它。
\n| 归档时间: |
|
| 查看次数: |
10686 次 |
| 最近记录: |