直接統合
- ローカルマシンで iOS をターゲットとした Kotlin Multiplatform プロジェクトをすでにセットアップしている。
- Kotlin Multiplatform プロジェクトに CocoaPods の依存関係がない。
Kotlin Multiplatform プロジェクトと iOS プロジェクトでコードを共有しながら同時に開発したい場合、特別なスクリプトを使用して直接統合(direct integration)をセットアップできます。
このスクリプトは、Xcode 内の iOS プロジェクトに Kotlin フレームワークを接続するプロセスを自動化します。
このスクリプトは、Xcode 環境向けに特別に設計された embedAndSignAppleFrameworkForXcode Gradle タスクを使用します。セットアップ中に、このタスクを iOS アプリビルドの Run Script フェーズに追加します。これにより、iOS アプリのビルドが実行される前に Kotlin アーティファクトがビルドされ、派生データ(derived data)に含まれるようになります。
一般的に、このスクリプトは以下の処理を行います:
- コンパイルされた Kotlin フレームワークを iOS プロジェクト構造内の正しいディレクトリにコピーします。
- 埋め込まれたフレームワークのコード署名プロセスを処理します。
- Kotlin フレームワークでのコード変更が Xcode の iOS アプリに反映されるようにします。
セットアップ方法
現在、Kotlin フレームワークの接続に CocoaPods プラグインを使用している場合は、まず移行を行ってください。プロジェクトに CocoaPods の依存関係がない場合は、このステップをスキップしてください。
CocoaPods プラグインからの移行
CocoaPods プラグインから移行するには:
Xcode で、Product | Clean Build Folder を選択するか、 ショートカットを使用してビルドディレクトリをクリーンアップします。
Podfile のあるディレクトリで、次のコマンドを実行します:
nonepod deintegratebuild.gradle(.kts)ファイルからcocoapods {}ブロックを削除します。.podspecファイルと Podfile を削除します。
プロジェクトへのフレームワークの接続
マルチプラットフォームプロジェクトから生成された Kotlin フレームワークを Xcode プロジェクトに接続するには:
embedAndSignAppleFrameworkForXcodeタスクは、binaries.framework構成オプションが宣言されている場合にのみ登録されます。Kotlin Multiplatform プロジェクトのbuild.gradle.ktsファイルで iOS ターゲットの宣言を確認してください。Xcode で、プロジェクト名をダブルクリックして iOS プロジェクト設定を開きます。
左側の Targets セクションでターゲットを選択し、Build Phases タブに移動します。
+ をクリックし、New Run Script Phase を選択します。

以下のスクリプトを調整し、新しいフェーズのスクリプトテキストフィールドに貼り付けます:
bashif [ "YES" = "$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED" ]; then echo "Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \"YES\"" exit 0 fi cd "<Path to the root of the multiplatform project>" ./gradlew :<Shared module name>:embedAndSignAppleFrameworkForXcodecdコマンドには、Kotlin Multiplatform プロジェクトのルートへのパスを指定します(例:$SRCROOT/..)。./gradlewコマンドには、共有モジュールの名前を指定します(例::sharedまたは:sharedUI)。
iOS の実行構成を開始すると、IntelliJ IDEA と Android Studio は Xcode のビルドを開始する前に Kotlin フレームワークの依存関係をビルドし、環境変数
OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTEDを "YES" に設定します。提供されたシェルスクリプトはこの変数を確認し、Xcode から Kotlin フレームワークが二重にビルドされるのを防ぎます。これをサポートしていないプロジェクトで iOS の実行構成を起動すると、IDE はビルドガードを設定するための修正を提案します。
Based on dependency analysis オプションを無効にします。

これにより、Xcode はビルドのたびにスクリプトを実行し、出力の依存関係が欠落しているという警告を毎回出さないようになります。
Run Script フェーズを上に移動し、Compile Sources フェーズの前に配置します。

Build Settings タブの Build Options にある User Script Sandboxing オプションを無効にします。

最初にサンドボックスを無効にせずに iOS プロジェクトをビルドした場合は、Gradle デーモンの再起動が必要になる場合があります。 サンドボックス化された可能性がある Gradle デーモンプロセスを停止してください:
shell./gradlew --stopXcode でプロジェクトをビルドします。すべてが正しくセットアップされていれば、プロジェクトのビルドに成功します。
デフォルトの
DebugやReleaseとは異なるカスタムビルド構成を使用している場合は、Build Settings タブの User-Defined でKOTLIN_FRAMEWORK_BUILD_TYPE設定を追加し、DebugまたはReleaseに設定してください。
次のステップ
Swift Package Manager を使用する場合も、ローカル統合を利用できます。ローカルパッケージ内の Kotlin フレームワークへの依存関係を追加する方法を確認してください。
