CocoaPods の概要とセットアップ
これはローカル統合メソッドです。以下の場合に有効です:
- CocoaPodsを使用するiOSプロジェクトでモノリポジトリがセットアップされている。
- Kotlin MultiplatformプロジェクトにCocoaPodsの依存関係がある。
Kotlin/Native は、CocoaPods dependency manager との統合を提供します。Podライブラリへの依存関係を追加したり、ネイティブターゲットを持つマルチプラットフォームプロジェクトをCocoaPodsの依存関係として使用したりできます。
IntelliJ IDEAまたはAndroid StudioでPodの依存関係を直接管理し、コードの強調表示や補完などの追加機能をすべて利用できます。GradleでKotlinプロジェクト全体をビルドでき、Xcodeに切り替える必要はまったくありません。
Swift/Objective-Cのコードを変更したり、Appleシミュレーターまたはデバイスでアプリケーションを実行したりする場合にのみ、Xcodeが必要です。Xcodeで正しく動作させるには、Podfileを更新してください。
プロジェクトと目的に応じて、KotlinプロジェクトとPodライブラリ間や、Kotlin GradleプロジェクトとXcodeプロジェクト間に依存関係を追加できます。
CocoaPodsを使用するための環境をセットアップする
任意のインストールツールを使用して、CocoaPods dependency manager をインストールします。
- RVM
- Rbenv
- Default Ruby
- Homebrew
-
Ruby version manager をまだお持ちでない場合はインストールします。
-
Rubyをインストールします。特定のバージョンを選択できます:
rvm install ruby 3.0.0
-
CocoaPodsをインストールします:
sudo gem install -n /usr/local/bin cocoapods
-
rbenv from GitHub をまだお持ちでない場合はインストールします。
-
Rubyをインストールします。特定のバージョンを選択できます:
rbenv install 3.0.0
-
特定のディレクトリに対してRubyのバージョンをローカルとして設定するか、マシン全体に対してグローバルとして設定します:
rbenv global 3.0.0
-
CocoaPodsをインストールします:
sudo gem install -n /usr/local/bin cocoapods
このインストール方法は、Apple Mチップ搭載デバイスでは動作しません。他のツールを使用して、CocoaPodsを使用するための環境をセットアップしてください。
macOSで使用できるデフォルトのRubyを使用して、CocoaPods dependency managerをインストールできます:
sudo gem install cocoapods
Homebrewを使用したCocoaPodsのインストールは、互換性の問題を引き起こす可能性があります。
CocoaPodsをインストールすると、HomebrewはXcodeでの作業に必要なXcodeproj gemもインストールします。 ただし、Homebrewで更新することはできず、インストールされたXcodeprojが最新のXcodeバージョンをまだサポートしていない場合、Podのインストールでエラーが発生します。この場合は、他のツールを試してCocoaPodsをインストールしてください。
-
Homebrew をまだお持ちでない場合はインストールします。
-
CocoaPodsをインストールします:
brew install cocoapods
インストール中に問題が発生した場合は、考えられる問題と解決策 セクションを確認してください。
プロジェクトを作成する
環境がセットアップされたら、新しいKotlin Multiplatformプロジェクトを作成できます。そのためには、Kotlin Multiplatform web wizard または Android Studio用 Kotlin Multiplatform plugin を使用します。
web wizard の使用
web wizard を使用してプロジェクトを作成し、CocoaPodsの統合を構成するには:
-
Kotlin Multiplatform wizard を開き、プロジェクトのターゲットプラットフォームを選択します。
-
Download ボタンをクリックして、ダウンロードしたアーカイブを解凍します。
-
Android Studioで、メニューの File | Open を選択します。
-
解凍したプロジェクトフォルダに移動し、Open をクリックします。
-
Kotlin CocoaPods Gradle plugin をバージョンカタログに追加します。
gradle/libs.versions.toml
ファイルで、 次の宣言を[plugins]
ブロックに追加します:kotlinCocoapods = { id = "org.jetbrains.kotlin.native.cocoapods", version.ref = "kotlin" }
-
プロジェクトのルート
build.gradle.kts
ファイルに移動し、次のエイリアスをplugins {}
ブロックに追加します:alias(libs.plugins.kotlinCocoapods) apply false
-
CocoaPodsを統合するモジュール (たとえば、
composeApp
モジュール) を開き、次のエイリアスをplugins {}
ブロックに追加します:alias(libs.plugins.kotlinCocoapods)
これで、Kotlin MultiplatformプロジェクトでCocoaPodsを使用する準備ができました。
Android Studio で
Android StudioでCocoaPods統合を使用してプロジェクトを作成するには:
-
Kotlin Multiplatform plugin をAndroid Studioにインストールします。
-
Android Studioで、メニューの File | New | New Project を選択します。
-
プロジェクトテンプレートのリストで、Kotlin Multiplatform App を選択し、Next をクリックします。
-
アプリケーションに名前を付けて、Next をクリックします。
-
iOS framework の配信オプションとして CocoaPods Dependency Manager を選択します。
-
他のオプションはすべてデフォルトのままにします。Finish をクリックします。
pluginは、CocoaPodsの統合が設定されたプロジェクトを自動的に生成します。
既存のプロジェクトを構成する
すでにプロジェクトがある場合は、Kotlin CocoaPods Gradle pluginを手動で追加および構成できます:
-
プロジェクトの
build.gradle(.kts)
で、CocoaPods pluginとKotlin Multiplatform pluginの両方を適用します:plugins {
kotlin("multiplatform") version "2.1.20"
kotlin("native.cocoapods") version "2.1.20"
} -
cocoapods
ブロックで、Podspecファイルのversion
、summary
、homepage
、およびbaseName
を構成します:plugins {
kotlin("multiplatform") version "2.1.20"
kotlin("native.cocoapods") version "2.1.20"
}
kotlin {
cocoapods {
// Required properties
// Specify the required Pod version here
// Otherwise, the Gradle project version is used
version = "1.0"
summary = "Kotlin/Nativeモジュールの説明"
homepage = "Kotlin/Nativeモジュールのホームページへのリンク"
// Optional properties
// Gradleプロジェクト名を変更する代わりに、ここでPod名を構成します
name = "MyCocoaPod"
framework {
// Required properties
// Framework name configuration. Use this property instead of deprecated '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 plugin repository を参照してください。
-
IntelliJ IDEA で Reload All Gradle Projects (または Android Studio で Sync Project with Gradle Files) を実行して、 プロジェクトを再インポートします。
-
Xcodeビルド中の互換性の問題を回避するために、Gradle wrapper を生成します。
適用されると、CocoaPods pluginは次の処理を実行します。
- すべての macOS、iOS、tvOS、および watchOS ターゲットの出力バイナリとして
debug
およびrelease
フレームワークの両方を追加します。 - プロジェクトのPodspec を生成する
podspec
タスクを作成します。
Podspec
ファイルには、出力フレームワークへのパスと、Xcodeプロジェクトのビルドプロセス中にこのフレームワークのビルドを自動化するスクリプトフェーズが含まれています。
Xcode 用 Podfile を更新する
KotlinプロジェクトをXcodeプロジェクトにインポートする場合は:
-
Podfileで変更を加えます:
-
プロジェクトにGit、HTTP、またはカスタムPodspecリポジトリの依存関係がある場合は、PodfileでPodspecへのパスを指定する必要があります。
たとえば、
podspecWithFilesExample
に依存関係を追加する場合は、PodfileでPodspecへのパスを宣言します:target 'ios-app' do
# ... その他の依存関係 ...
pod 'podspecWithFilesExample', :path => 'cocoapods/externalSources/url/podspecWithFilesExample'
end:path
には、Podへのファイルパスが含まれている必要があります。 -
カスタムPodspecリポジトリからライブラリを追加する場合は、Podfileの先頭でspecsの場所 も指定する必要があります:
source 'https://github.com/Kotlin/kotlin-cocoapods-spec.git'
target 'kotlin-cocoapods-xcproj' do
# ... その他の依存関係 ...
pod 'example'
end
-
-
プロジェクトディレクトリで
pod install
を実行します。pod install
を初めて実行すると、.xcworkspace
ファイルが作成されます。このファイルには、元の.xcodeproj
と CocoaPodsプロジェクトが含まれます。 -
.xcodeproj
を閉じて、代わりに新しい.xcworkspace
ファイルを開きます。これにより、プロジェクトの依存関係に関する問題を回避できます。 -
IntelliJ IDEA で Reload All Gradle Projects (または Android Studio で Sync Project with Gradle Files) を実行して、 プロジェクトを再インポートします。
これらの変更をPodfileに加えないと、podInstall
タスクは失敗し、CocoaPods pluginはログにエラーメッセージを表示します。
考えられる問題と解決策
CocoaPods のインストール
Ruby のインストール
CocoaPodsはRubyで構築されており、macOSで使用できるデフォルトのRubyを使用してインストールできます。 Ruby 1.9以降には、CocoaPods dependency manager のインストールに役立つ組み込みのRubyGemsパッケージ管理フレームワークがあります。
CocoaPodsのインストールと動作に問題が発生している場合は、このガイド に従ってRubyをインストールするか、RubyGems website を参照してフレームワークをインストールしてください。
バージョンの互換性
最新のKotlinバージョンを使用することをお勧めします。現在のバージョンが1.7.0より前の場合は、cocoapods-generate
pluginを別途インストールする必要があります。
ただし、cocoapods-generate
は Ruby 3.0.0 以降と互換性がありません。この場合は、Rubyをダウングレードするか、Kotlinを1.7.0以降にアップグレードしてください。
Xcode の使用時にビルドエラーが発生する
CocoaPodsのインストールのバリエーションによっては、Xcodeでビルドエラーが発生する可能性があります。
通常、Kotlin Gradle pluginは PATH
で pod
実行可能ファイルを検出しますが、これは環境によって一貫性がない場合があります。
CocoaPodsのインストールパスを明示的に設定するには、プロジェクトの local.properties
ファイルに手動で追加するか、シェルコマンドを使用して追加できます。
-
コードエディタを使用している場合は、次の行を
local.properties
ファイルに追加します:kotlin.apple.cocoapods.bin=/Users/Jane.Doe/.rbenv/shims/pod
-
ターミナルを使用している場合は、次のコマンドを実行します:
echo -e "kotlin.apple.cocoapods.bin=$(which pod)" >> local.properties
モジュールが見つかりません
C-interop の問題に関連する module 'SomeSDK' not found
エラーが発生する場合があります。
このエラーを回避するには、次の回避策を試してください:
フレームワーク名を指定する
-
ダウンロードしたPodディレクトリ
[shared_module_name]/build/cocoapods/synthetic/IOS/Pods/...
でmodule.modulemap
ファイルを探します。 -
モジュール内のフレームワーク名 (たとえば、
SDWebImageMapKit {}
) を確認します。フレームワーク名がPod名と一致しない場合は、明示的に指定します:pod("SDWebImage/MapKit") {
moduleName = "SDWebImageMapKit"
}
ヘッダーを指定する
pod("NearbyMessages")
のように、Podに .modulemap
ファイルが含まれていない場合は、メインヘッダーを明示的に指定します:
pod("NearbyMessages") {
version = "1.1.1"
headers = "GNSMessages.h"
}
詳細については、CocoaPods documentation を確認してください。それでもうまくいかず、このエラーが発生する場合は、YouTrack で問題を報告してください。
Rsync エラー
rsync error: some files could not be transferred
エラーが発生する可能性があります。これは、Xcodeのアプリケーションターゲットでユーザー・スクリプトのサンドボックスが有効になっている場合に発生する 既知の問題 です。
この問題を解決するには:
-
アプリケーションターゲットでユーザー・スクリプトのサンドボックスを無効にします:
-
サンドボックス化されている可能性のあるGradleデーモンプロセスを停止します:
./gradlew --stop