【Xcode】CococaPods・Podコマンド・buid faild対応
iPhoneアプリを開発していると、必ず一度は遭遇するXcodeのビルドエラー。
ビルドエラー対応についてまとめておきます。
目次
- CocoaPodsとは何か?
- Podfileの作成:
- Podfileに使用したいライブラリを追加
- Podのインストール:
- プロジェクトの開き方の変更:
- Flutterの場合
- pubspec.yamlの編集:
- 依存関係の取得
- Podコマンド
- Podコマンドとは
- PodfileとPodfile.lock
- pod install
- pod update
- pod repo update
- Xcodeビルドエラー
- CocoaPods’s specs repository is too out-of-date
- open ios/Runner.xcworkspace
react-nativeでIOS開発しているときに頻繁に出てくるCocoaPodsとは何か?
CocoaPodsは、iOSのアプリ開発で、外部ライブラリやフレームワークの依存関係を管理するツール。
CococaPodsはRubyで開発されているため、gemを使って、CocoaPodsをインストールする
Zsh
sudo gem install cocoapods
Podfileの作成:
Xcodeプロジェクトのルートディレクトリでpod init
コマンドを実行してPodfileを作成する。
Podfileに使用したいライブラリを追加
作成されたPodfileをテキストエディタで開き、必要なライブラリを指定する。例えば、pod 'AFNetworking'
のように記述する。
Podのインストール:
Podfileに使用したいライブラリ(依存関係)を追加した後、pod install
コマンドを実行してライブラリをインストールする。
プロジェクトの開き方の変更:
pod install
を実行した後、Xcodeプロジェクトファイル(.xcodeproj)ではなく、作成されたワークスペースファイル(.xcworkspace)を使ってXcodeプロジェクトを開く。
Flutterの場合
FlutterプロジェクトでiOSプラットフォームをターゲットにする場合は、内部的にCocoaPodsを使用しているため、Flutterコマンドを実行することで必要なセットアップが自動的に行われる。→CocoaPodsの代わりにFlutterのパッケージ管理システムを使用する。
pubspec.yamlの編集:
Flutterプロジェクトのpubspec.yaml
ファイルにライブラリのバージョン(依存関係)を追加する。
依存関係の取得
コマンドラインでflutter pub get
を実行し、指定した依存関係をプロジェクトに追加する。
FlutterでPod関連のエラーが出る場合には、flutter clean→flutter pub get→ビルドを実行する。
ちなみに、Flutterを使っていてAndroidシミュレーターでbuildできない時は、flutter doctorを実行。flutterの見ているjavaのパスが間違っている可能性があるので修正する。下記記事参照
Podコマンドとは
pod
コマンドは、CocoaPodsのコマンドラインインターフェースに対してのコマンド。
pod
コマンドを実行すると、CocoaPodsが提供するさまざまな機能を使用できる。podコマンドは Podfile
を参照して動作するので Podfile
が存在するディレクトリで実行する。
PodfileとPodfile.lock
Podfile
- プロジェクトに追加したいライブラリのリストを定義するファイル
Podfile.lock
- 実際にインストールされたライブラリの具体的なバージョンを記録
- このファイルにより、開発チーム内で同じライブラリのバージョンが使用されることが保証される
pod install
- 既存の
Podfile.lock
の内容に従って依存関係をインストールするためのものであり、Podfile.lock
を更新することはない。 - Podfile.lockが存在しない場合は生成する
- プロジェクトに初めてCocoaPodsを導入する時や、新しいライブラリを追加したい場合に使用する。
pod update
- Podfile.lockを参照せずに、
Podfile
に記載された依存関係を最新バージョンに更新し、その結果をPodfile.lock
に反映する。 pod update
はPodfile.lock
ファイルを更新するために使用される。
pod repo update
- CocoaPodsのリポジトリ(ライブラリの一覧や情報が格納されている場所)を更新する。
- 新しいライブラリや最新のバージョンが
pod install
やpod update
で認識されない場合に使用する。
Xcodeビルドエラー
CocoaPods’s specs repository is too out-of-date
Zsh
Error: CocoaPods's specs repository is too out-of-date to satisfy dependencies.
To update the CocoaPods specs, run:
pod repo update
CocoaPodsの仕様リポジトリが古くて依存関係を満たせないときに発生する。
Zsh
cd ios //iosディレクトリに移動(Podfileが含まれている)
pod repo update //CocoaPodsの仕様リポジトリを最新の状態に更新する
pod install //Podfile.lockに記録されているバージョンに基づいて依存関係がインストール
open ios/Runner.xcworkspace
Zsh
Try launching Xcode and selecting "Product > Run" to fix the problem:
open ios/Runner.xcworkspace
まず、Xcodeを開いて、Xcodeのメニューバーから “Product > Run” を選択してアプリをビルドし実行する。
もし、これでRunできた場合は、FlutterのビルドシステムとXcode間の設定や依存関係に不一致が存在する可能性がある。
Flutterプロジェクトで問題が発生した場合、より詳細な情報を得るために -v
または --verbose
オプションを付けて flutter run
コマンドを実行する
Zsh
flutter run -v
すると、例えば、先ほどのメッセージの詳細エラーが下記のように出てくる。
Zsh
Unable to locate DeviceSupport directory with suffix 'DeveloperDiskImage.dmg'. This probably means you don't have Xcode installed, you will need to launch the app manually and logging output will not be shown!
ちなみに、これは、実機のiosバージョン(今回だとiOS17.1)に対応するDeveloperDiskImage.dmg がDeviceSupportフォルダ内に入っていないよというエラー
DeveloperDiskImage.dmg
- iOSデバイス(iPhoneやiPadなど)上でアプリケーションをビルドし、デバッグするために必要なシステムファイルやライブラリが含まれている。
- Xcodeの一部として提供される。Xcodeをインストールすると、そのバージョンのXcodeがサポートしているiOSデバイスのDeveloperDiskImage.dmgもダウンロードされる。
DeviceSupportディレクトリを下記コマンドで開いて確認する。
Zsh
open /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/
この場合の大抵の原因はXcodeのバージョンが古すぎて、最新の実機iOSビルドに必要なサポートファイルが含まれていないということなので、Xcodeを最新版にアップデートする。
ちなみに、Xcode-betaというバージョンもあるが、これはios-betaに対応しているので、iosでbetaを使用していなければXcode-betaの最新版にまでアップデートする必要はない。