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

时间:2015-04-10 06:09:39

标签: ios iphone xcode titanium appcelerator

我正在直接从钛工作室创建分发构建,以便在iTunes Connect上进行Apple Testflight预发布测试。我目前的应用版本是1.1.1,内置编号由钛工作室自动设置为1.1.1。

在Xcode上,大多数开发人员通常将Prerelease内部版本号(CFBundleVersion)维护为Integer,在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应用程序的唯一方法是每次在iTunes Connect上传时都增加应用程序版本(CFBundleShortVersionString)而不是build#,这绝对不是一个好方法。从Xcode我可以更改Build#,但由于某些模块和其他问题,并非所有Ti应用都会从xcode存档。

在appcelerator社区上有很多关于此问题的帖子,但还没有可接受的解决方案。有没有人有一个可行的解决方案来在创建分发版本时直接从Titanium Studio更改/增加构建#?

提前致谢。

3 个答案:

答案 0 :(得分:11)

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

这允许我在itunesconnect上创建1.0.0版本,并在同一版本下创建1.0.0.1的后续上载 刚刚更改了tiap.xml中的version标签

答案 1 :(得分:2)

  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));
  });

在此https://gist.github.com/FokkeZB/4754f93f8b325156c33c

看到使用Grunt和钛的完整要点

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

答案 2 :(得分:1)

在我的原生Xcode项目中,我在Build Phases中使用了两个小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是手动处理的,因为自动语义版本控制对我来说是错误的。