方言を話すおしゃべり猫型ロボット『ミーア』をリリースしました(こちらをクリック)

【Xcode】CococaPods・Podコマンド・ビルドエラー対応

この記事は約7分で読めます。

iPhoneアプリを開発していると、必ず一度は遭遇するXcodeのビルドエラー。

ビルドエラー対応についてまとめておく。

出典:【iOS開発】 CocoaPodsとは何なのか〜導入〜使い方まで徹底解説

CocoaPodsとは何か?

CocoaPodsは、iOSのアプリ開発で、外部ライブラリやフレームワークの依存関係を管理するツール。

https://tech-begin.com/programming-coding/ios/about-cocoapods/#:~:text=CocoaPods%E3%81%AF%E3%80%81Swift%E3%81%8A%E3%82%88%E3%81%B3Objective,%E3%81%99%E3%82%8B%E3%81%AE%E3%81%AB%E5%BD%B9%E7%AB%8B%E3%81%A1%E3%81%BE%E3%81%99%E3%80%82

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のパスが間違っている可能性があるので修正する。下記記事参照

https://qiita.com/y-matsumoto/items/74467e528c7b2c745b87

Podコマンド

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 updatePodfile.lock ファイルを更新するために使用される。

pod repo update

  • CocoaPodsのリポジトリ(ライブラリの一覧や情報が格納されている場所)を更新する。
  • 新しいライブラリや最新のバージョンがpod installpod 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の最新版にまでアップデートする必要はない。

コメント

タイトルとURLをコピーしました