内部版本号不是由fastlane设置的,而是由Xcode设置的

时间:2019-06-10 15:37:46

标签: ios xcode fastlane fastlane-gym

我已将项目设置为使用运行脚本,该脚本会根据我在主分支中的提交量自动设置内部版本号:

enter image description here

整个脚本应该对以下方面有帮助:

#!/bin/bash

#  update_build_number.sh
#  Usage: `update_build_number.sh [branch]`
#  Run this script after the 'Copy Bundle Resources' build phase
#  Ref: http://tgoode.com/2014/06/05/sensible-way-increment-bundle-version-cfbundleversion-xcode/

branch=${1:-'master'}
buildNumber=$(expr $(git rev-list $branch --count) - $(git rev-list HEAD..$branch --count))
echo "Updating build number to $buildNumber using branch '$branch'."
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
if [ -f "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}.dSYM/Contents/Info.plist" ]; then
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}.dSYM/Contents/Info.plist"
fi

如标题中所述,我可以将其构建到设备上,并正确设置内部版本号。或者,我可以通过Xcode存档并上传到AppStore,然后再次正确设置版本。基于这些观察,我假设此配置正确。

但是,当我使用fastlane管理部署时,它没有更新内部版本号,因此出现此错误:

  

错误ITMS-90189:“冗余二进制上传。您已经上传了一个   版本号为“#”的版本号为“#”的版本。确保你   在将应用程序上载到App Store之前增加构建字符串   连接。在Xcode帮助中了解更多信息   (http://help.apple.com/xcode/mac/current/#/devba7f53ad4)。”

tl; dr

  

“您已经给了我们该版本,请给我们发送一个新版本。”

对于fastlane,这是我用来部署Beta版的压缩版本:

default_platform(:ios)

platform :ios do
  lane :beta do
    build_app(workspace: "MyApp.xcworkspace", 
              scheme: "MyApp")
    upload_to_testflight
  end
end

最后,如果我用Xcode硬编码一个更新的内部版本号,那么fastlane将正确地交付文件,因此我假设我的设置是有效的,没有版本问题。

我也尝试过increment_build_number,但是我找不到能使它起作用的设置(此外,Xcode现在应该为我管理此设置,因此不应该考虑快速通道)。

1 个答案:

答案 0 :(得分:0)

想到了这一点,事实证明它很简单。

当Xcode构建应用程序时,构建输出将转到:

/Users/theuser/Library/Developer/Xcode/DerivedData/MyAppName/Build/Products/Debug-iphoneos

构建fastlane时,文件会按照this保存在本地目录中。

output_directory    
The directory in which the ipa file should be stored in     
Default value: .

通过更改output_directory函数的build_app,我可以将Fastlane指向Xcode使用的同一文件夹,从而使脚本可以工作。

build_app(workspace: "MyApp.xcworkspace", 
          scheme: "MyApp",
          output_directory: "/Users/theuser/Library/Developer/Xcode/DerivedData/MyApp/Build/Products/Debug-iphoneos")

但是,这里有一个不明显的陷阱。可以更改DerivedData中的文件夹,这会使以后的构建成为问题。但是,使用此answer here,您可以改为在Xcode中指定一个输出文件夹,然后将其与快速通道同步。