はじめに
Flutterで pubspec.yaml
の version を更新しても、Xcodeで前のバージョンが残ってしまい、xcodeでarchive作成すると何度やってもバージョンとビルドがアップデートされない問題に直面した。
chatgptに聞きながら格闘してやっと解決したので、そのままchatgptに書かせて記録を残す。
🎯 発生した問題
-
pubspec.yaml
にversion: 1.0.3+13
と書いたのに、App Store Connect で「1.0.2のビルドです」と言われる -
Info.plist
は$(FLUTTER_BUILD_NAME)
として指定済み -
Xcode
側でもMARKETING_VERSION
は 1.0.3 に見える。軒並みbuild settingは何億回も確認した。 - でもビルドには古い 1.0.2 が使われ続ける
🕵️♂️ 原因
Flutterは pubspec.yaml
を元に ios/Flutter/Generated.xcconfig
を生成する。ここに:
FLUTTER_BUILD_NAME=1.0.2
のように古いバージョンが残っていると、Info.plist
に間接的に反映されてしまい、Xcodeでは最新に見えてもアーカイブ結果は旧バージョンになってしまう。
さらに project.pbxproj
に FLUTTER_BUILD_NAME=1.0.2
が直書きされているケースもあり、Generated.xcconfig
を上書きしても効かないことがある。
🔧 解決法(全部やる)
以下の手順を順番に実行:
✅ 1. ビルドキャッシュを削除
flutter clean
✅ 2. pubspec.yaml
のバージョンを確認・更新
version: 1.0.3+13
✅ 3. ios/Runner.xcodeproj/project.pbxproj
を手動で確認
FLUTTER_BUILD_NAME=1.0.2
のようなハードコードされた値がある場合、手動で削除 or $(FLUTTER_BUILD_NAME)
に修正。
- FLUTTER_BUILD_NAME = 1.0.2;
+ FLUTTER_BUILD_NAME = $(FLUTTER_BUILD_NAME);
✅ 4. MacとXcodeを再起動
-
project.pbxproj
を書き換えたら、Xcodeのキャッシュが残ることがあるため再起動は必須。 - ターミナルも念のため再起動。
✅ 5. 正しいビルドを実行
flutter pub get
flutter build ios --release --build-name=1.0.3 --build-number=13
✅ 6. Xcodeでアーカイブ
open ios/Runner.xcworkspace
メニューから Product > Archive
。Organizerでビルドバージョンが 1.0.3 (13)
になっていることを確認。
🧼 補足Tips
-
Info.plist
の記述はこのようになっている必要あり:
<key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
-
MARKETING_VERSION
はFLUTTER_BUILD_NAME
と自動で連動しないため、Xcode GUI側で変えても効かないことがある。
✅ まとめ
見落としがちな箇所 | 要チェック事項 |
---|---|
project.pbxproj |
FLUTTER_BUILD_NAME がハードコードされていないか? |
Info.plist |
バージョンは $(FLUTTER_BUILD_NAME) 指定か? |
ビルドキャッシュ |
flutter clean でクリアしたか? |
再起動 | Mac・Xcode再起動でキャッシュ解除したか? |
flutter build ios |
--build-name / --build-number を指定したか? |
記事執筆
全てChatGPTであることをご承知おきください