Vik*_*ngh 1 xcode objective-c xcodebuild
我使用Objective-C在XCode中创建了一个Command Line Utility C++工具.我希望版本号显示在创建的可执行文件的Info中.所以我在Build设置的Current Project Version字段中添加了版本号1.0.0.0.但是,当我构建它时,版本号不会添加到创建的"Unix可执行文件"中.
我错过了什么吗?谢谢您的帮助.
不幸的是,从版本3开始,Xcode本身不会将当前项目版本嵌入到可执行文件中.我不确定Xcode 4中是否已更改.
几年前我遇到了这个问题.事实证明:
Finder中显示的版本号来自应用程序的Info.plists.对于应用程序包,Info.plist是一个文件.在可执行文件的情况下,它必须嵌入在__TEXT部分中.Info.plist的格式无论哪种方式都是相同的.
Xcode没有一键支持将Info.plists嵌入到可执行文件中,但它是可能的.
Xcode不会预处理Info.plist文件,除非它们进入应用程序包(例如插入CURRENT_PROJECT_VERSION的值).
我破解了一个解决方案,但它没有完成,可能并不代表最佳实践.
首先,我创建了一个名为Info_template.plist的新的库存Info.plist文件.我设置CFBundleVersion到${CURRENT_PROJECT_VERSION},并CFBundleShortVersionString到${CURRENT_MARKETING_VERSION}.
然后,我在构建开始时添加了一个名为"Preprocess Info.plist"的运行脚本阶段,使用/bin/sh此脚本作为shell:
set -u
if ! [[ ${CURRENT_PROJECT_VERSION:-""} && ${CURRENT_MARKETING_VERSION:-""} ]]; then
echo "Version numbers are not set" >&2
exit 1
fi
# Ghetto environment variable expansion, since Xcode does not appear to have built-in expansion for arbitrary files
{ echo "cat <<EOF"
cat ${SRCROOT}/Info_template.plist
echo "EOF"
} | sh > ${DERIVED_FILES_DIR}/Info.plist
Run Code Online (Sandbox Code Playgroud)
我添加$(DERIVED_FILE_DIR)/Info.plist了它的输出文件.
然后,我打开了目标的构建设置,并将其添加到Other Linker Flags:
-sectcreate __TEXT __info_plist ${DERIVED_FILE_DIR}/Info.plist
Run Code Online (Sandbox Code Playgroud)
这要求链接器将生成的Info.plist文件滚动到可执行文件中.
让我知道这对你有用,或者我遗漏了什么!
| 归档时间: |
|
| 查看次数: |
1063 次 |
| 最近记录: |