Skip to content

KotlinプロジェクトをCocoaPodsの依存関係として使用する

Kotlinプロジェクト全体をPodの依存関係として使用できます。そのためには、プロジェクトのPodfileにその依存関係を含め、生成されたPodspecを含むプロジェクトディレクトリへの名前とパスを指定する必要があります。

CocoaPodsの統合アプローチは、直接統合で使用される embedAndSignAppleFrameworkForXcode メカニズムと併用することはできません。

この依存関係は、プロジェクトと共に自動的にビルド(および再ビルド)されます。このアプローチにより、対応するGradleタスクやXcodeのビルドステップを手動で記述する必要がなくなり、Xcodeへのインポートが簡素化されます。

1つまたは複数のターゲットを持つXcodeプロジェクトとKotlinプロジェクトの間に依存関係を追加できます。また、Kotlinプロジェクトと複数のXcodeプロジェクトの間に依存関係を追加することも可能です。ただし、その場合はXcodeプロジェクトごとに手動で pod install を呼び出す必要があります。単一のXcodeプロジェクトの場合は、自動的に行われます。

  • Kotlin/Nativeモジュールに依存関係を正しくインポートするには、Podfileに use_modular_headers! または use_frameworks! ディレクティブが含まれている必要があります。
  • 最小デプロイターゲット(minimum deployment target)のバージョンを指定せず、依存するPodがより高いデプロイターゲットを必要とする場合、エラーが発生します。

1つのターゲットを持つXcodeプロジェクト

1つのターゲットを持つXcodeプロジェクトで、KotlinプロジェクトをPodの依存関係として使用するには:

  1. Xcodeプロジェクトがない場合は作成します。

  2. Xcodeで、アプリケーションターゲットの Build Options にある User Script Sandboxing を無効にしてください。

    CocoaPodsのサンドボックス化を無効にする

  3. KotlinプロジェクトのiOS部分にPodfileを作成します。

  4. 共有モジュール(shared module)の build.gradle(.kts) ファイルで、podfile = project.file() を使用してPodfileへのパスを追加します。

    このステップにより、Podfileに対して pod install を呼び出すことで、XcodeプロジェクトをKotlinプロジェクトの依存関係と同期させることができます。

  5. Podライブラリの最小デプロイターゲットのバージョンを指定します。

    kotlin
    kotlin {
        iosArm64()
    
        cocoapods {
            version = "2.0"
            summary = "CocoaPods test library"
            homepage = "https://github.com/JetBrains/kotlin"
            ios.deploymentTarget = "16.0"
    
            pod("SDWebImage") {
                version = "5.20.0"
            }
            podfile = project.file("../ios-app/Podfile")
        }
    }
  6. Podfileに、Xcodeプロジェクトに含めたいKotlinプロジェクトの名前とパスを追加します。

    ruby
    target 'ios-app' do
        use_frameworks!
        platform :ios, '16.0'
    
        # Pods for iosApp
        pod 'kotlin_library', :path => '../kotlin-library'
    end
  7. プロジェクトディレクトリで pod install を実行します。

    初めて pod install を実行すると、.xcworkspace ファイルが作成されます。このファイルには、元の .xcodeproj とCocoaPodsプロジェクトが含まれています。

  8. .xcodeproj を閉じ、代わりに新しい .xcworkspace ファイルを開きます。これにより、プロジェクトの依存関係に関する問題を回避できます。

  9. IntelliJ IDEAで Build | Reload All Gradle Projects を実行します(Android Studioの場合は File | Sync Project with Gradle Files)。これにより、プロジェクトが再インポートされます。

複数のターゲットを持つXcodeプロジェクト

複数のターゲットを持つXcodeプロジェクトで、KotlinプロジェクトをPodの依存関係として使用するには:

  1. Xcodeプロジェクトがない場合は作成します。

  2. KotlinプロジェクトのiOS部分にPodfileを作成します。

  3. 共有モジュール(shared module)の build.gradle(.kts) ファイルで、podfile = project.file() を使用してプロジェクトのPodfileへのパスを追加します。

    このステップにより、Podfileに対して pod install を呼び出すことで、XcodeプロジェクトをKotlinプロジェクトの依存関係と同期させることができます。

  4. pod() を使用して、プロジェクトで使用したいPodライブラリへの依存関係を追加します。

  5. 各ターゲットに対して、Podライブラリ의 最小デプロイターゲットのバージョンを指定します。

    kotlin
    kotlin {
        iosArm64()
        tvosArm64()
    
        cocoapods {
            version = "2.0"
            summary = "CocoaPods test library"
            homepage = "https://github.com/JetBrains/kotlin"
            ios.deploymentTarget = "16.0"
            tvos.deploymentTarget = "16.0"
    
            pod("SDWebImage") {
                version = "5.20.0"
            }
            // Podfileへのパスを指定
            podfile = project.file("../severalTargetsXcodeProject/Podfile")
        }
    }
  6. Podfileに、Xcodeプロジェクトに含めたいKotlinプロジェクトの名前とパスを追加します。

    ruby
    target 'iosApp' do
      use_frameworks!
      platform :ios, '16.0'
    
      # Pods for iosApp
      pod 'kotlin_library', :path => '../kotlin-library'
    end
    
    target 'TVosApp' do
      use_frameworks!
      platform :tvos, '16.0'
    
      # Pods for TVosApp
      pod 'kotlin_library', :path => '../kotlin-library'
    end
  7. プロジェクトディレクトリで pod install を実行します。

    初めて pod install を実行すると、.xcworkspace ファイルが作成されます。このファイルには、元の .xcodeproj とCocoaPodsプロジェクトが含まれています。

  8. .xcodeproj を閉じ、代わりに新しい .xcworkspace ファイルを開きます。これにより、プロジェクトの依存関係に関する問題を回避できます。

  9. IntelliJ IDEAで Build | Reload All Gradle Projects を実行します(Android Studioの場合は File | Sync Project with Gradle Files)。これにより、プロジェクトが再インポートされます。

次のステップ