如何在 Appcelerator Titanium 中增加 iOS 版本号

How to increase iOS build number in Appcelerator Titanium

我正在直接从 titanium studio 创建分发版本以上传到 iTunes Connect 以进行 Apple Testflight 预发布测试。我当前的应用程序版本是 1.1.1,内部版本号由 titanium studio 自动设置为 1.1.1。

在 Xcode 上,大多数开发人员通常将预发布版本号 (CFBundleVersion) 维护为整数,这非常方便,每次在上传到 iTunes 之前增加 1。来自不可能的钛工作室!

在tiapp.xml中我设置了这个

<ios>
    <plist>
        <dict>
            <key>CFBundleShortVersionString</key>
            <string>1.1.1</string>
            <key>CFBundleVersion</key>
            <string>10</string>
        </dict>
    </plist>
</ios>

在我从 Titanium Studio 运行 生成后,生成文件夹下的 info.plist 变为

<ios>
    <plist>
        <dict>
            <key>CFBundleShortVersionString</key>
            <string>1.1.1</string>
            <key>CFBundleVersion</key>
            <string>1.1.1</string>
        </dict>
    </plist>
</ios>

我知道他们已经在 appcelerator 文档中提到了这一点,CFBundleVersionCFBundleShortVersionString 将从生成的 info.plist 中的 <version> 标签值变得相同。

因此,目前使用 Apple Testflight for Ti 应用程序的唯一方法是增加应用程序版本 (CFBundleShortVersionString),而不是每次上传到 iTunes Connect 时都增加 build#,这绝对不是一个好方法。从 Xcode 我可以更改构建 # 但由于某些模块和其他问题,并非所有 Ti 应用程序都会从​​ xcode 存档。

appcelerator 社区上有很多关于此问题的帖子,但尚无可接受的解决方案。在创建分发构建期间,是否有人直接从 Titanium Studio 获得了 change/increase build# 的有效解决方案?

提前致谢。

在我的原生 Xcode 项目中,我在构建阶段使用了两个小的 shell 脚本。这也适用于任何其他构建过程。

第一个:

if [ ${CONFIGURATION} == "Debug" ]; then
buildNumber=-1
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"
else
buildNumber=$(git rev-list HEAD | wc -l | tr -d ' ')
flag=""
if [ ! ${CONFIGURATION} == "Release" ]; then
flag="b"
fi;
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber$flag" "${PROJECT_DIR}/${INFOPLIST_FILE}"
fi;

然后在构建过程结束时快速重置为构建编号 -1(我的默认值):

# reset the build number to the default -1 to prevent issues in git 
commits
buildNumber=-1
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"

这些脚本将内部版本号设置为 git 次提交(请随意在此处使用您的构建方案),构建项目并将其重置为默认内部版本号。重置可防止 info.plist 文件中的持续更改。

CFBundleShortVersionString 是手动处理的,因为自动化语义版本控制对我来说感觉不对。

  grunt.registerTask('tiapp', function() {
    var tiapp = require('tiapp.xml').load();
    var version = tiapp.version.split('.');
    tiapp.version = version[0] + '.' + version[1] + '.' + (parseInt(version[2], 10) + 1);
    tiapp.write();
    grunt.log.writeln(require('util').format('Bumped version to: %s', tiapp.version));
  });

在此处查看有关将 Grunt 与 Titanium 结合使用的完整要点 https://gist.github.com/FokkeZB/4754f93f8b325156c33c

此处有更多详细信息http://tonylukasavage.com/blog/2014/01/23/automating-appcelerator-tasks-with-grunt-titanium-and-grunt-alloy/

我在新 iTunes/Testflight 中发现的是,它只将前 3 个元素视为版本号(例如 1.0.0),向其中添加第 4 个元素会导致 iTunesConnect/testflight 处理它作为同一版本的构建版本(例如 1.0.0.1)

这让我可以在 itunesconnect 上创建 1.0.0 版本,并在同一版本下为 1.0.0.1 后续上传 刚刚更改了 tiap.xml

中的版本标签