显然,文件被缓存,因此只有在文件被更改时才会生成.我将环境变量设置为增加我的版本号,等等,并且独立于plist更新它们(实际上在项目构建设置中).是否有一个脚本可以用作脚本构建阶段来强制Info.plist更新?其他一些方便的方式?
小智 17
选择"编辑方案",然后从左侧的控件中选择"构建".
然后,添加预执行步骤,确保在"提供构建设置来自"下拉菜单中选择相关方案,然后将其添加到下面的编辑窗口中:
rm "${CONFIGURATION_BUILD_DIR}/${INFOPLIST_PATH}"
Run Code Online (Sandbox Code Playgroud)
这将删除缓存版本Info.plist,导致XCode在每次点击构建时重建它.
或者,如果您让Xcode预处理模板Info.plist文件,只需触摸模板即可
touch ${PROJECT_DIR}/${INFOPLIST_FILE}
Run Code Online (Sandbox Code Playgroud)
也有效.
调试预操作脚本
如果您犯了错误,预执行步骤不会提供任何信息.您可以通过将此行添加到脚本来调试构建变量的使用
echo "${CONFIGURATION_BUILD_DIR}/${INFOPLIST_PATH}" > ~/debug.txt
Run Code Online (Sandbox Code Playgroud)
然后检查内容~/debug.txt以验证运行前脚本是否已运行并查看您是否使用了正确的路径.
Gay*_*DDS 15
我也自动设置我的版本号.我创建了一个运行脚本构建阶段.关键是更新Info.plist而不是构建目录的目标构建目录副本.您还需要在复制包阶段之后运行您的运行脚本.可以直接编辑捆绑文件,因为在代码签名之前.您不想生成重新发明轮子的文件.
这是我的脚本:
# ---------------------------- IMPORTANT ----------------------------
# You must set GITHash to something like 'Set by build script' in the file
# file '<Project Name>-Info.plist' in the 'Supporting Files' group
# -------------------------------------------------------------------
#
# Get the version number from the tag in git and the number of commits as the build number
#
appVersion=$(git describe --long | cut -f 1 -d "-")
appBuild=$(git describe --long | cut -f 2 -d "-")
gitHash=$(git describe --long | cut -f 3 -d "-")
echo "From GIT Version = $appVersion Build = $appBuild"
#
# Set the version info in plist file
#
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $appVersion" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $appBuild" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
/usr/libexec/PlistBuddy -c "Set :GITHash $gitHash" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
echo "Updated ${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
Run Code Online (Sandbox Code Playgroud)
仅供参考我也使用以下代码自动设置版本并在"关于"选项卡上构建
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
NSString *appDisplayName = infoDictionary[@"CFBundleDisplayName"];
NSString *majorVersion = infoDictionary[@"CFBundleShortVersionString"];
NSString *minorVersion = infoDictionary[@"CFBundleVersion"];
self.appDescription.text = [NSString stringWithFormat:@"Dirty Dog Software\n%@\nVersion: %@(%@)",
appDisplayName, majorVersion, minorVersion];
Run Code Online (Sandbox Code Playgroud)
bos*_*acs 12
您可以尝试使用该touch命令更新时间戳,我假设是Xcode用来确定是否应该重建时间戳,例如
$ touch Info.plist
Run Code Online (Sandbox Code Playgroud)
一种方法是使用Run Script构建阶段Info.plist从Info.plist.template文件生成,然后rm Info.plist在创建bundle之后生成.来自评论的想法Dave DeLong在他的博客上发布了这里.
如果它的缓存非常严重(即即使您没有在文件历史记录中打开Info.plist,也可以rm缓存),您可能也希望在此脚本中使用缓存版本.
小智 5
在Xcode 4中,您可以使用预构建操作来触摸信息plist.
注意:这与运行脚本构建阶段不同.在Xcode检查信息plist之前发生了预构建操作,在Xcode已经检查了信息plist之后,运行脚本构建阶段似乎发生了(这就是为什么它只在每隔一次工作).
touch "${SRCROOT}/${INFOPLIST_FILE}"在脚本框中添加| 归档时间: |
|
| 查看次数: |
25721 次 |
| 最近记录: |