我使用Objective-C在XCode中创建了一个命令行实用程序c++工具。我希望版本号显示在创建的可执行文件的信息。所以我在构建设置的当前项目版本字段中添加了版本号1.0.0.0。然而,当我构建它时,版本号没有被添加到创建的'Unix可执行文件'。
我错过了什么吗?谢谢你的帮助。
不幸的是,从版本3开始,Xcode不会将当前项目版本嵌入到可执行文件中。我不确定这在Xcode 4中是否有改变。
几年前我遇到了这个问题。结果是:Finder中显示的版本号来自应用程序的Info.plists。对于应用程序包,Info。Plist是一个文件。在可执行文件的情况下,它必须嵌入在__TEXT节中。信息的格式。
Xcode不支持一键嵌入信息。
Xcode不预处理Info。
除非它们要放入应用程序包中(例如插入CURRENT_PROJECT_VERSION的值)。
我想出了一个解决方案,但它没有经过润色,可能不代表最佳实践。
首先,我创建一个新的stock Info。名为Info_template.plist的文件。我将CFBundleVersion
设置为${CURRENT_PROJECT_VERSION}
, CFBundleShortVersionString
设置为${CURRENT_MARKETING_VERSION}
。
然后,我添加了一个名为"预处理信息"的运行脚本阶段。使用/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
我将$(DERIVED_FILE_DIR)/Info.plist
添加到它的输出文件中。
然后,我打开目标的构建设置,并将其添加到其他链接器标志:
-sectcreate __TEXT __info_plist ${DERIVED_FILE_DIR}/Info.plist
要求链接器滚动生成的Info。Plist文件到可执行文件。
让我知道这对你是如何工作的,或者如果我遗漏了什么!