内部版本号不是由 fastlane 设置的,而是由 Xcode 设置的
Build number is not set by fastlane, but is set by Xcode
我已经将我的项目设置为使用 运行 脚本,该脚本会根据我在主分支中的提交数量自动设置内部版本号:
整个脚本,对大家有帮助吗:
#!/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 管理我的部署时,它没有更新内部版本号,所以我得到这个错误:
ERROR ITMS-90189: "Redundant Binary Upload. You've already uploaded a
build with build number '#' for version number '#'. Make sure you
increment the build string before you upload your app to App Store
Connect. Learn more in Xcode Help
(http://help.apple.com/xcode/mac/current/#/devba7f53ad4)."
tl;博士
"You already gave us that version, send us a new one"
对于 fastlane,这是我用来部署测试版的精简版:
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 现在应该为我管理这个,所以 fastlane 不应该担心)。
想通了这个,原来很简单。
当 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: .
通过为我的 build_app
函数更改 output_directory
,我可以将 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 中指定一个输出文件夹,然后将其与 fastlane 同步。
我已经将我的项目设置为使用 运行 脚本,该脚本会根据我在主分支中的提交数量自动设置内部版本号:
整个脚本,对大家有帮助吗:
#!/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 管理我的部署时,它没有更新内部版本号,所以我得到这个错误:
ERROR ITMS-90189: "Redundant Binary Upload. You've already uploaded a build with build number '#' for version number '#'. Make sure you increment the build string before you upload your app to App Store Connect. Learn more in Xcode Help (http://help.apple.com/xcode/mac/current/#/devba7f53ad4)."
tl;博士
"You already gave us that version, send us a new one"
对于 fastlane,这是我用来部署测试版的精简版:
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 现在应该为我管理这个,所以 fastlane 不应该担心)。
想通了这个,原来很简单。
当 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: .
通过为我的 build_app
函数更改 output_directory
,我可以将 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 中指定一个输出文件夹,然后将其与 fastlane 同步。