App Store申請でハマったMinimumOSVersionエラーの解決法

目次

はじめに

「かってに通知メモ」のApp Store申請作業中に、
しつこく出続けたエラーがようやく解決できたので記録しておきます。
同じエラーで詰まっている方の参考になれば嬉しいです。


発生したエラー

Xcodeで Validate App を実行したところ、以下の2つのエラーが表示されました。

Missing Info.plist value.
A value for the key ‘MinimumOSVersion’ in bundle
Runner.app/Frameworks/App.framework is required.
Invalid MinimumOSVersion.
MinimumOSVersion in ‘Runner.app/Frameworks/App.framework’ is ”.

App.framework の Info.plist に MinimumOSVersion が存在しない、
または空になっているというエラーです。

試してダメだったこと

Build PhasesにRun Scriptを追加

Xcodeの Build Phases に以下のスクリプトを追加しました。

PLIST="${FRAMEWORKS_FOLDER_PATH}/App.framework/Info.plist"
if [ -f "$PLIST" ]; then
    /usr/libexec/PlistBuddy -c "Delete :MinimumOSVersion" "$PLIST" 2>/dev/null
    /usr/libexec/PlistBuddy -c "Add :MinimumOSVersion string 13.0" "$PLIST"
fi

ビルドは通過するものの、エラーは解消されませんでした。
App.framework はFlutterがビルド時に生成するファイルのため、
スクリプトの実行後に上書きされてしまうのが原因でした。


解決した方法

Flutterプロジェクト内の AppFrameworkInfo.plist を直接編集することで解決しました。

ファイルの場所

ios/Flutter/AppFrameworkInfo.plist

追加した内容

</dict> の直前に以下を追記します。

<key>MinimumOSVersion</key>
<string>13.0</string>

完成形

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>CFBundleDevelopmentRegion</key>
  <string>en</string>
  <key>CFBundleExecutable</key>
  <string>App</string>
  <key>CFBundleIdentifier</key>
  <string>io.flutter.flutter.app</string>
  <key>CFBundleInfoDictionaryVersion</key>
  <string>6.0</string>
  <key>CFBundleName</key>
  <string>App</string>
  <key>CFBundlePackageType</key>
  <string>FMWK</string>
  <key>CFBundleShortVersionString</key>
  <string>1.0</string>
  <key>CFBundleSignature</key>
  <string>????</string>
  <key>CFBundleVersion</key>
  <string>1.0</string>
  <key>MinimumOSVersion</key>
  <string>13.0</string>
</dict>
</plist>

この修正後に Product → Archive → Validate App を実行したところ、
エラーが消えてそのままApp Store Connectへのアップロードが完了しました✅


まとめ

方法結果
Build PhasesのRun Script❌ 効果なし
AppFrameworkInfo.plistを直接編集✅ 解決

Run Scriptでは App.framework がFlutterによって後から上書きされてしまうため、
ソースファイルである AppFrameworkInfo.plist を直接書き換えるのが正解でした。


おわりに

あたらしいアプリ「かってに通知メモ」をApp Store に審査提出しました。

「かってに通知メモ」は自然な日本語を入力するだけで通知を設定してくれる、
ずぼら向けリマインダーアプリです。
現在App Store審査中です。通過したらまたご報告します!

目次