CocoaPodsの概要とセットアップ
- CocoaPodsを使用するiOSプロジェクトを含むモノレポ構成である。
- Kotlin MultiplatformプロジェクトがCocoaPodsに依存している。
Kotlin/Nativeは、CocoaPods依存関係マネージャーとの統合を提供します。Podライブラリへの依存関係を追加したり、KotlinプロジェクトをCocoaPodsの依存関係として使用したりできます。
IntelliJ IDEAまたはAndroid StudioでPodの依存関係を直接管理でき、コードハイライトや補完などの追加機能をすべて利用できます。Xcodeに切り替えることなく、GradleでKotlinプロジェクト全体をビルドできます。
Swift/Objective-Cコードを変更したり、Appleシミュレーターまたはデバイスでアプリケーションを実行したりする場合にのみXcodeが必要です。Xcodeで作業するには、最初にPodfileを更新してください。
CocoaPodsで作業するための環境をセットアップする
CocoaPods依存関係マネージャーを、選択したインストールツールを使用してインストールします。
RVMをまだ持っていない場合はインストールします。
Rubyをインストールします。特定のバージョンを選択できます。
bashrvm install ruby 3.0.0
CocoaPodsをインストールします。
bashsudo gem install -n /usr/local/bin cocoapods
GitHubからrbenvをまだ持っていない場合はインストールします。
Rubyをインストールします。特定のバージョンを選択できます。
bashrbenv install 3.0.0
Rubyバージョンを特定のディレクトリのローカル、またはマシン全体のグローバルに設定します。
bashrbenv global 3.0.0
CocoaPodsをインストールします。
bashsudo gem install -n /usr/local/bin cocoapods
このインストール方法はApple Mチップ搭載デバイスでは動作しません。CocoaPodsで作業するための環境をセットアップするには、他のツールを使用してください。
macOSで利用可能なデフォルトのRubyを使用して、CocoaPods依存関係マネージャーをインストールできます。
sudo gem install cocoapods
HomebrewによるCocoaPodsのインストールは、互換性の問題を引き起こす可能性があります。
CocoaPodsをインストールすると、HomebrewはXcodeとの連携に必要なXcodeprojgemもインストールします。 しかし、それはHomebrewでは更新できず、インストールされたXcodeprojが最新のXcodeバージョンをまだサポートしていない場合、Podのインストールでエラーが発生します。この場合は、CocoaPodsをインストールするために他のツールを試してください。
Homebrewをまだ持っていない場合はインストールします。
CocoaPodsをインストールします。
bashbrew install cocoapods
インストール中に問題が発生した場合は、考えられる問題と解決策セクションを確認してください。
プロジェクトを作成する
CocoaPods環境がセットアップされたら、Podで動作するようにKotlin Multiplatformプロジェクトを設定できます。以下の手順では、新規に生成されたプロジェクトでの設定を示します。
macOSでKotlin Multiplatform IDEプラグインまたはKotlin Multiplatformウェブウィザードを使用して、AndroidおよびiOS用の新しいプロジェクトを生成します。 ウェブウィザードを使用する場合は、アーカイブを展開し、IDEにプロジェクトをインポートします。
gradle/libs.versions.toml
ファイルで、[plugins]
ブロックにKotlin CocoaPods Gradleプラグインを追加します。textkotlinCocoapods = { id = "org.jetbrains.kotlin.native.cocoapods", version.ref = "kotlin" }
プロジェクトのルート
build.gradle.kts
ファイルに移動し、plugins {}
ブロックに以下のエイリアスを追加します。kotlinalias(libs.plugins.kotlinCocoapods) apply false
CocoaPodsを統合したいモジュール(例:
composeApp
モジュール)を開き、build.gradle.kts
ファイルのplugins {}
ブロックに以下のエイリアスを追加します。kotlinalias(libs.plugins.kotlinCocoapods)
これで、Kotlin MultiplatformプロジェクトでCocoaPodsを設定する準備ができました。
プロジェクトを設定する
マルチプラットフォームプロジェクトでKotlin CocoaPods Gradleプラグインを設定するには:
プロジェクトの共有モジュールの
build.gradle(.kts)
で、CocoaPodsプラグインとKotlin Multiplatformプラグインを適用します。IDEプラグインまたはウェブウィザードでプロジェクトを作成した場合は、この手順をスキップしてください。
kotlinplugins { kotlin("multiplatform") version "2.2.20" kotlin("native.cocoapods") version "2.2.20" }
cocoapods
ブロックでPodspecファイルのversion
、summary
、homepage
、およびbaseName
を設定します。kotlinplugins { kotlin("multiplatform") version "2.2.20" kotlin("native.cocoapods") version "2.2.20" } kotlin { cocoapods { // Required properties // ここで必要なPodバージョンを指定します // 指定しない場合、Gradleプロジェクトバージョンが使用されます version = "1.0" summary = "Some description for a Kotlin/Native module" homepage = "Link to a Kotlin/Native module homepage" // Optional properties // Gradleプロジェクト名を変更する代わりに、ここでPod名を構成します name = "MyCocoaPod" framework { // Required properties // フレームワーク名の構成。非推奨の'frameworkName'の代わりにこのプロパティを使用します baseName = "MyFramework" // Optional properties // フレームワークのリンクタイプを指定します。デフォルトは動的です。 isStatic = false // 依存関係のエクスポート // 別のプロジェクトモジュールがある場合は、コメントを解除して指定します。 // export(project(":<your other KMP module>")) transitiveExport = false // これがデフォルトです。 } // カスタムXcode構成をNativeBuildTypeにマッピングします xcodeConfigurationToNativeBuildType["CUSTOM_DEBUG"] = NativeBuildType.DEBUG xcodeConfigurationToNativeBuildType["CUSTOM_RELEASE"] = NativeBuildType.RELEASE } }
Kotlin DSLの完全な構文は、Kotlin Gradleプラグインリポジトリを参照してください。
IntelliJ IDEAでBuild | Reload All Gradle Projectsを実行(またはAndroid StudioでFile | Sync Project with Gradle Filesを実行)して、プロジェクトを再インポートします。
Xcodeビルド時の互換性問題を避けるために、Gradle wrapperを生成します。
適用すると、CocoaPodsプラグインは以下を実行します。
debug
およびrelease
フレームワークの両方を、すべてのmacOS、iOS、tvOS、watchOSターゲットの出力バイナリとして追加します。- プロジェクトのPodspecファイルを生成する
podspec
タスクを作成します。
Podspec
ファイルには、出力フレームワークへのパスと、Xcodeプロジェクトのビルドプロセス中にこのフレームワークのビルドを自動化するスクリプトフェーズが含まれます。
Xcode用のPodfileを更新する
KotlinプロジェクトをXcodeプロジェクトにインポートしたい場合は:
KotlinプロジェクトのiOS部分で、Podfileに変更を加えます。
プロジェクトにGit、HTTP、またはカスタムPodspecリポジトリの依存関係がある場合は、PodfileにPodspecへのパスを指定します。
例えば、
podspecWithFilesExample
に依存関係を追加する場合、PodfileにPodspecへのパスを宣言します。rubytarget 'ios-app' do # ... other dependencies ... pod 'podspecWithFilesExample', :path => 'cocoapods/externalSources/url/podspecWithFilesExample' end
:path
にはPodへのファイルパスを含める必要があります。カスタムPodspecリポジトリからライブラリを追加する場合は、Podfileの冒頭にスペックの場所を指定します。
rubysource 'https://github.com/Kotlin/kotlin-cocoapods-spec.git' target 'kotlin-cocoapods-xcproj' do # ... other dependencies ... pod 'example' end
プロジェクトディレクトリで
pod install
を実行します。pod install
を初めて実行すると、.xcworkspace
ファイルが作成されます。このファイルには、元の.xcodeproj
とCocoaPodsプロジェクトが含まれます。.xcodeproj
を閉じ、代わりに新しい.xcworkspace
ファイルを開きます。これにより、プロジェクトの依存関係に関する問題を回避できます。IntelliJ IDEAでBuild | Reload All Gradle Projectsを実行(またはAndroid StudioでFile | Sync Project with Gradle Filesを実行)して、プロジェクトを再インポートします。
Podfileにこれらの変更を加えない場合、podInstall
タスクは失敗し、CocoaPodsプラグインはログにエラーメッセージを表示します。
考えられる問題と解決策
CocoaPodsのインストール
Rubyのインストール
CocoaPodsはRubyでビルドされており、macOSで利用可能なデフォルトのRubyでインストールできます。Ruby 1.9以降には、CocoaPods依存関係マネージャーのインストールに役立つRubyGemsパッケージ管理フレームワークが内蔵されています。
CocoaPodsのインストールや動作に問題が発生している場合は、このガイドに従ってRubyをインストールするか、RubyGemsのウェブサイトを参照してフレームワークをインストールしてください。
バージョンの互換性
最新のKotlinバージョンを使用することをお勧めします。現在のバージョンが1.7.0より古い場合、追加でcocoapods-generate
プラグインをインストールする必要があります。
ただし、cocoapods-generate
はRuby 3.0.0以降と互換性がありません。この場合、Rubyをダウングレードするか、Kotlinを1.7.0以降にアップグレードしてください。
Xcode使用時のビルドエラー
CocoaPodsのインストール方法によっては、Xcodeでビルドエラーが発生する場合があります。一般的に、Kotlin GradleプラグインはPATH
内のpod
実行可能ファイルを発見しますが、これは環境によって一貫性がない場合があります。
CocoaPodsのインストールパスを明示的に設定するには、プロジェクトのlocal.properties
ファイルに手動で、またはシェルコマンドを使用して追加します。
コードエディタを使用している場合は、
local.properties
ファイルに以下の行を追加します。textkotlin.apple.cocoapods.bin=/Users/Jane.Doe/.rbenv/shims/pod
ターミナルを使用している場合は、以下のコマンドを実行します。
shellecho -e "kotlin.apple.cocoapods.bin=$(which pod)" >> local.properties
モジュールまたはフレームワークが見つからない
Podのインストール時に、C interopの問題に関連するmodule 'SomeSDK' not found
またはframework 'SomeFramework' not found
エラーが発生する場合があります。これらのエラーを解決するには、以下の解決策を試してください。
パッケージを更新する
インストールツールとインストール済みパッケージ(gem)を更新します。
RVMを更新します。
bashrvm get stable
RubyのパッケージマネージャーであるRubyGemsを更新します。
bashgem update --system
インストールされているすべてのgemを最新バージョンにアップグレードします。
bashgem update
Rbenvを更新します。
bashcd ~/.rbenv git pull
RubyのパッケージマネージャーであるRubyGemsを更新します。
bashgem update --system
インストールされているすべてのgemを最新バージョンにアップグレードします。
bashgem update
Homebrewパッケージマネージャーを更新します。
bashbrew update
インストールされているすべてのパッケージを最新バージョンにアップグレードします。
bashbrew upgrade
フレームワーク名を指定する
ダウンロードされたPodディレクトリ
[shared_module_name]/build/cocoapods/synthetic/IOS/Pods/...
内でmodule.modulemap
ファイルを探します。モジュール内のフレームワーク名(例:
SDWebImageMapKit {}
)を確認します。フレームワーク名がPod名と一致しない場合は、明示的に指定します。kotlinpod("SDWebImage/MapKit") { moduleName = "SDWebImageMapKit" }
ヘッダーを指定する
Podに.modulemap
ファイルが含まれていない場合(例:pod("NearbyMessages")
)、メインヘッダーを明示的に指定します。
pod("NearbyMessages") {
version = "1.1.1"
headers = "GNSMessages.h"
}
詳細については、CocoaPodsドキュメントを確認してください。何も解決せず、このエラーが引き続き発生する場合は、YouTrackで問題を報告してください。
Rsyncエラー
rsync error: some files could not be transferred
エラーに遭遇する場合があります。これは、Xcodeのアプリケーションターゲットでユーザースクリプトのサンドボックス化が有効になっている場合に発生する既知の問題です。
この問題を解決するには:
アプリケーションターゲットでユーザースクリプトのサンドボックス化を無効にします。
サンドボックス化されている可能性のあるGradleデーモンプロセスを停止します。
shell./gradlew --stop