はじめに
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であることをご承知おきください