メイン ブランチにあるコミットの量に基づいてビルド番号を自動的に設定する実行スクリプトを使用するようにプロジェクトをセットアップしました。
スクリプト全体は、次のいずれかに役立ちます。
#!/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 Connect にアップロードする前に、ビルド文字列をインクリメントしてください。詳細については、次を参照してください。 Xcode ヘルプ ( http://help.apple.com/xcode/mac/current/#/devba7f53ad4 )"
tl;dr
「あなたはすでにそのバージョンを提供しています。新しいバージョンを送ってください」
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 は気にする必要はありません)。