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バージョンを特定のディレクトリのローカル、またはマシン全体のグローバルに設定します。
bashrbenb 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
インストール中に問題が発生した場合は、考えられる問題と解決策セクションを確認してください。
プロジェクトを作成する
環境がセットアップされたら、新しいKotlin Multiplatformプロジェクトを作成できます。そのためには、Kotlin MultiplatformウェブウィザードまたはAndroid Studio用のKotlin Multiplatformプラグインを使用します。
ウェブウィザードを使用する
ウェブウィザードを使用してプロジェクトを作成し、CocoaPods統合を設定するには:
Kotlin Multiplatformウィザードを開き、プロジェクトのターゲットプラットフォームを選択します。
Downloadボタンをクリックし、ダウンロードしたアーカイブを展開します。
Android Studioで、メニューからFile | Openを選択します。
展開したプロジェクトフォルダーに移動し、Openをクリックします。
Kotlin CocoaPods Gradleプラグインをバージョンカタログに追加します。
gradle/libs.versions.toml
ファイルに、[plugins]
ブロックに以下の宣言を追加します。textkotlinCocoapods = { id = "org.jetbrains.kotlin.native.cocoapods", version.ref = "kotlin" }
プロジェクトのルート
build.gradle.kts
ファイルに移動し、plugins {}
ブロックに以下のエイリアスを追加します。kotlinalias(libs.plugins.kotlinCocoapods) apply false
CocoaPodsを統合したいモジュール(例:
composeApp
モジュール)を開き、plugins {}
ブロックに以下のエイリアスを追加します。kotlinalias(libs.plugins.kotlinCocoapods)
これで、Kotlin MultiplatformプロジェクトでCocoaPodsを設定する準備ができました。
Android Studioで
CocoaPods統合でAndroid Studioにプロジェクトを作成するには:
Android StudioにKotlin Multiplatformプラグインをインストールします。
Android Studioで、メニューからFile | New | New Projectを選択します。
プロジェクトテンプレートのリストで、Kotlin Multiplatform Appを選択し、Nextをクリックします。
アプリケーションに名前を付け、Nextをクリックします。
iOSフレームワークの配布オプションとしてCocoaPods Dependency Managerを選択します。
他のオプションはすべてデフォルトのままにします。Finishをクリックします。
プラグインがCocoaPods統合をセットアップした状態でプロジェクトを自動的に生成します。
プロジェクトを設定する
マルチプラットフォームプロジェクトでKotlin CocoaPods Gradleプラグインを設定するには:
プロジェクトの共有モジュールの
build.gradle(.kts)
で、CocoaPodsプラグインとKotlin Multiplatformプラグインを適用します。ウェブウィザードまたはAndroid Studio用のKotlin Multiplatformプラグインでプロジェクトを作成した場合は、この手順をスキップしてください。
kotlinplugins { kotlin("multiplatform") version "2.2.0" kotlin("native.cocoapods") version "2.2.0" }
cocoapods
ブロックでPodspecファイルのversion
、summary
、homepage
、baseName
を設定します。kotlinplugins { kotlin("multiplatform") version "2.2.0" kotlin("native.cocoapods") version "2.2.0" } kotlin { cocoapods { // Required properties // Specify the required Pod version here // Otherwise, the Gradle project version is used version = "1.0" summary = "Some description for a Kotlin/Native module" homepage = "Link to a Kotlin/Native module homepage" // Optional properties // Configure the Pod name here instead of changing the Gradle project name name = "MyCocoaPod" framework { // Required properties // Framework name configuration. Use this property instead of deprecated 'frameworkName' baseName = "MyFramework" // Optional properties // Specify the framework linking type. It's dynamic by default. isStatic = false // Dependency export // Uncomment and specify another project module if you have one: // export(project(":<your other KMP module>")) transitiveExport = false // This is default. } // Maps custom Xcode configuration to 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