首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在构建时更新dSYM中的dSYM?

在构建时更新dSYM中的dSYM?
EN

Stack Overflow用户
提问于 2012-11-10 16:22:23
回答 4查看 2.6K关注 0票数 6

在我的项目中,我使用它作为构建阶段:

代码语言:javascript
复制
export PLISTBUDDY="/usr/libexec/PlistBuddy"

export INFO="${CODESIGNING_FOLDER_PATH}/Info.plist"
export RXREVISION=`git describe --tags | perl -pi -E "s/[^-]+\-([^-]+).*/\1/"`
export RXVERSION=`git describe --tags | perl -pi -E "s/([^-]+)\-[^-]+.*/\1/"`
$PLISTBUDDY $INFO -c "add CFBundleVersion string $RXREVISION"
$PLISTBUDDY $INFO -c "set :CFBundleVersion $RXREVISION"
$PLISTBUDDY $INFO -c "add CFBundleShortVersionString string $RXVERSION"
$PLISTBUDDY $INFO -c "set :CFBundleShortVersionString $RXVERSION"

这对于更新构建应用程序的Info.plist中的构建修订版非常有效,而且它不会改变我的源代码树。

我已经尝试把我的更新版本脚本在结束和之前的链接阶段。无论哪种方式,它都能够影响对构建的应用程序的更改,但是dSYM是从原始源树构建的。

构建的应用程序和构建的dSYM之间的版本号不匹配是一个问题。(HockeyApp在这里抛出一个错误。)

如果我更新我的源树中的Info.plist,我需要处理它的变化。这给我留下了两个我能看到的选择:

  1. 将Info.plist置于源代码管理之下,并让脚本直接编辑它。但这意味着我需要在每次构建后检查更改。
  2. 忽略Info.plist,让脚本直接编辑它。但是,在Info.plist中还有很多东西是我do在源代码管理下想要的。

如何获得dSYM中的版本自动更新,而不必处理源代码树中的Info.plist更改每个构建?

另外,切分:我如何在dSYM中看到版本?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-11 13:59:39

dSYM包在根文件夹中也有一个具有类似值的info.plist。您可能也可以以类似的方式修改它。

另一个选项是在一个额外的.xcconfig文件中定义版本号,并将来自info.plist的版本号包含到其中,参见这里

然后,您还可以通过使用多个独立的info.plist文件并在构建设置中引用不同的.xcconfig文件来决定需要哪种版本控制,或者发布或测试构建,而不包括源代码管理下用于测试构建的版本。

通常,我建议对每个版本的更改进行提交,因为这使得代码真正可重复,并且在源代码控制系统中也唯一地标识了它。

除此之外,Apple还指定将CFBundleVersion设置为“由一个或多个周期分隔整数组成的单调增加的字符串”,参见这里CFBundleShortVersionString是您的营销版本,例如,您的目标是开发3.0版本。

那么,对发行版构建执行以下操作如何:用新的版本号更新CFBundleVersion,用新的营销版本(如3.0 Beta 1 )更新CFBundleShortVersion,并将两者都提交,然后标记提交发布。版本号和任何其他元数据一样是源代码的一部分,特别是如果版本号也用于触发特定代码以实现兼容性、数据库升级或其他事情(通常是这样的话)。

票数 1
EN

Stack Overflow用户

发布于 2014-01-28 10:06:28

接受的答案是正确的,但没有给出如何修改dsym的plist的实际细节。在构建脚本中添加以下行将修改dsym中的plist:

代码语言:javascript
复制
cd "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app.dSYM/Contents"
$PLISTBUDDY -c "Set CFBundleVersion $RXREVISION" Info.plist  
票数 4
EN

Stack Overflow用户

发布于 2014-11-30 14:33:35

下面是我正在使用的“从git设置CFBundleVersion”构建阶段的完整脚本:

代码语言:javascript
复制
APP_INFO_PLIST="${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
DSYM_INFO_PLIST="${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist"

BUILD_NUMBER=`git rev-list HEAD --count`

/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUMBER" "$APP_INFO_PLIST"
if [ -f "$DSYM_INFO_PLIST" ] ; then
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUMBER" "$DSYM_INFO_PLIST"
fi

(注意,它必须在Xcode 6+中的“复制捆绑资源”之后运行。在Xcode 10的新构建系统中,确保将Info.plist文件指定为其输入文件的一部分。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13323728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档