我已将项目设置为使用运行脚本,该脚本会根据我在主分支中的提交量自动设置内部版本号:
整个脚本应该对以下方面有帮助:
#!/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现在应该为我管理此设置,因此不应该考虑快速通道)。
答案 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中指定一个输出文件夹,然后将其与快速通道同步。