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.4.7CocoaPodsをインストールします。
bashsudo gem install -n /usr/local/bin cocoapods
GitHubからrbenvをまだ持っていない場合はインストールします。
Rubyをインストールします。特定のバージョンを選択できます。
bashrbenv install 3.4.7Rubyバージョンを特定のディレクトリのローカル、またはマシン全体のグローバルに設定します。
bashrbenv global 3.4.7CocoaPodsをインストールします。
bashsudo gem install -n /usr/local/bin cocoapods
このインストール方法はApple Mチップ搭載デバイスでは動作しません。CocoaPodsで作業するための環境をセットアップするには、他のツールを使用してください。
macOSで利用可能なデフォルトのRubyを使用して、CocoaPods依存関係マネージャーをインストールできます。
sudo gem install cocoapodsHomebrewによる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 falseCocoaPodsを統合したいモジュール(例:
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.21" kotlin("native.cocoapods") version "2.2.21" }cocoapodsブロックでPodspecファイルのversion、summary、homepage、およびbaseNameを設定します。kotlinplugins { kotlin("multiplatform") version "2.2.21" kotlin("native.cocoapods") version "2.2.21" } 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バージョンを使用することをお勧めします。このCocoaPodsセットアップの最小要件バージョンは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 stableRubyのパッケージマネージャーであるRubyGemsを更新します。
bashgem update --systemインストールされているすべてのgemを最新バージョンにアップグレードします。
bashgem update
Rbenvを更新します。
bashcd ~/.rbenv git pullRubyのパッケージマネージャーである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
