Xcode 14.3 における libarclite_iphoneos.a ファイルが見つからない問題の解決方法
問題の説明
FlutterアプリのiOSビルド時に、Xcode 14.3アップデート後に以下のエラーが発生します:
Error (Xcode): File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a
Error (Xcode): Linker command failed with exit code 1
この問題は主にFirebase関連プラグイン(firebase_core
, firebase_crashlytics
など)を含むFlutterプロジェクトで発生します。一般的にpod deintegrate
やpod install
などの通常の解決策では修正されません。
根本原因
Xcode 14.3の更新で、iOSデプロイメントターゲットが11.0未満の依存ライブラリがlibarclite_iphoneos.a
を必要とするようになりました。このファイルは新しいXcodeバージョンに含まれていないためリンカエラーが発生します。
主な原因は:
INFO
FlutterプラグインのiOSデプロイメントターゲットバージョンが古い(例:8.0)
効果的な解決方法
推奨ソリューション:Flutterのアップグレード(公式対応)
Flutter 3.7.11以降で公式修正が提供されています:
flutter upgrade # Flutterアップグレード
flutter clean # ビルドキャッシュ削除
flutter pub get # 依存関係再取得
以下を実行してiOSディレクトリをリセット:
cd ios
pod deintegrate
rm Podfile.lock
rm -rf Pods
pod repo update
pod install
WARNING
Apple Silicon(M1/M2チップ)ユーザーは追加処置が必要
sudo gem uninstall ffi
sudo gem install ffi -- --enable-libffi-alloc
代替解決策:Podfileの変更(即時対応)
すぐにFlutterをアップグレードできない場合は、Podfileを修正:
ios/Podfile
を開き、先頭行を変更:diff- # platform :ios, '12.0' + platform :ios, '14.0' # 最小13.0以上
post_install
ブロックを置き換え:rubypost_install do |installer| installer.generated_projects.each do |project| project.targets.each do |target| target.build_configurations.each do |config| # デプロイメントターゲットが13.0未満の場合に13.0に設定 if Gem::Version.new(config.build_settings['IPHONEOS_DEPLOYMENT_TARGET']) < Gem::Version.new('13.0') config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0' end end end end installer.pods_project.targets.each do |target| flutter_additional_ios_build_settings(target) end end
変更を適用:
bashcd ios pod install
TIP
設定値の調整ポイント
- 現行プロジェクトの対象iOSバージョンに合わせて
13.0
の値を変更可能 - Firebaseプラグインでは少なくとも
10.0
以上が必要
補助手段:特定Podの手動設定(デバッグ用)
特定のPodだけに問題がある場合、Xcodeで直接設定可能:
ios/Runner.xcworkspace
を開く- Podsディレクトリでターゲットを選択
- Build Settings > Deployment > iOS Deployment Target
- エラー表示されるPod(例:FMDB)のターゲットを11.0以上に変更
:::caution 注意 この方法は一時的解決策です。flutter clean
実行時にリセットされる可能性あり :::
CocoaPodsスクリプト修正方法
エラー発生時に提案される別の対処法(上記方法で解決しない場合):
ios/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh
開く- 44行目付近を修正:diff
if [ -L "${source}" ]; then - source="$(readlink "${source}")" + source="$(readlink -f "${source}")" fi
対応別メリット/デメリット
解決方法 | 持続性 | 作業量 | 推奨度 |
---|---|---|---|
Flutterアップグレード | ★★★ | 中 | 高(公式対応) |
Podfile修正 | ★★ | 少 | 中 |
手動設定 | ★ | 多 | 低 |
スクリプト変更 | ★ | 中 | 低 |
予防とベストプラクティス
依存ライブラリの定期的更新:
bashflutter pub outdated flutter pub upgrade
デプロイメントターゲットの適正化:
ios/Podfile
に明示的なプラットフォームバージョン指定を推奨- 新規プロジェクトではデフォルトを
13.0
以上に設定
# 新規プロジェクト推奨設定例
platform :ios, '13.0'
:::success 成功のポイント マルチプラットフォーム開発の安定化戦略:
- クロスプラットフォームチームのXcodeバージョン統一
- CI/CD環境のXcodeバージョンを固定
- Flutter安定版チャネル使用+アップグレードは公式アナウンス確認後 :::
まとめ
libarclite_iphoneos.a
エラーの主原因は古いiOSデプロイメントターゲット設定です。Flutter 3.7.11以降へのアップグレードが最適解ですが、即時対応ではPodfileの修正が効果的です。デプロイメントターゲットを13.0以上に保つことで、Xcode 14.3+環境での安定ビルドが可能になります。
緊急対応が必要な場合
リリース期限が差し迫っている場合は、一時的にXcode 14.2を併用:
gem install xcode-install
xcversion install 14.2
xcversion select 14.2
公式GitHub Issueトラッカーで最新情報を確認ください。