# \[iOS]SDKを導入する

## 前提条件

KARTE iOS SDKを導入するための前提条件に関しては、[公開リポジトリのREADME](https://github.com/plaidev/karte-ios-sdk?tab=readme-ov-file#requirements)をご参照ください。

SwiftUIで構築されたアプリへのSDK導入は、[SwiftUI向けの対応](/ios-sdk/implementation-for-swift-ui.md) もご覧ください。

## 導入手順

### 1. SDKをアプリに追加する

SDK導入には、下記のパッケージマネージャーを利用することが可能です。

* `CocoaPods`
* `Swift Package Manager`

#### CocoaPods

1. Podfile の編集 プロジェクトディレクトリにある `Podfile` を任意のエディタで開き、利用する Pod を指定します。

{% code title="Podfile" overflow="wrap" %}

```ruby
pod 'KarteCore' # イベントトラッキング機能を提供します。
pod 'KarteInAppMessaging' # アプリ内メッセージ機能を提供します。
pod 'KarteRemoteNotification' # プッシュ通知の受信および効果測定機能を提供します。
pod 'KarteVariables' # 設定値配信機能を提供します。
pod 'KarteVisualTracking' # ビジュアルトラッキング機能を提供します。
pod 'KarteCrashReporting' # クラッシュイベントのトラッキング機能を提供します。
pod 'KarteDebugger' # SDKイベントデバッガー機能を提供します。
```

{% endcode %}

2. Pod のインストール プロジェクトディレクトリで下記コマンドを実行し、Pod をインストールします。

{% code overflow="wrap" %}

```bash
pod install
```

{% endcode %}

KARTE SDKでは機能毎にモジュールを提供しております。 利用する機能に応じて、部分的にモジュールを導入することが可能です。

なお KarteCore 導入は必須です。

各モジュールの詳細については、[利用可能なモジュール一覧](/ios-sdk-appendix/appendix-module-ios-sdk.md)をご確認ください。

#### Swift Package Manager

Xcode より公式githubレポジトリ(<https://github.com/plaidev/karte-ios-sdk>)のパッケージを追加してください。

詳細は下記を参照してください。

* [Adding Package Dependencies to Your App | Apple Developer Documentation](https://developer.apple.com/documentation/swift_packages/adding_package_dependencies_to_your_app)

### 2. 設定ファイルをプロジェクトに追加する

SDKの初期化に必要な値（アプリケーションキーなど）が定義された設定ファイルをプロジェクトに追加します。

1. 管理画面から設定ファイルをダウンロードする 設定ファイルのダウンロード方法については[サポートサイト](https://support.karte.io/post/SRlsXvrikIKjpZcfahGdc)をご覧ください。
2. 設定ファイルをプロジェクト直下に配置する 設定ファイルを Xcodeプロジェクトのルートに追加して必要なターゲット全てに含まれるようにチェックを行います。

![](/files/xfmWELcIXG3RTYZuBSP8)

![](/files/PEvH5NFjlYxW6WXu2d0Q)

### 3. SDKの初期化コードを追加する

次にアプリケーションにSDKの初期化コードを追加します。

#### 1. SDKのインポート宣言を追加

`UIApplicationDelegate` を実装したクラスがあるファイルの先頭にインポート宣言を追加します。

{% tabs %}
{% tab title="Swift" %}
{% code title="AppDelegate.swift" overflow="wrap" %}

```swift
import KarteCore
```

{% endcode %}
{% endtab %}

{% tab title="Objective-C" %}
{% code title="AppDelegate.m" overflow="wrap" %}

```objc
@import KarteCore;
```

{% endcode %}
{% endtab %}
{% endtabs %}

※Swift UIの場合は[Swift UI向けの対応](/ios-sdk/implementation-for-swift-ui.md) をご確認ください

#### 2. SDKの初期化コードを追加

`application(_:didFinishLaunchingWithOptions:)` メソッド内に初期化コードを追加します。

{% hint style="warning" %}
**設定ファイルによるSDKの初期化について**

※設定ファイルによるSDK初期化は iOS SDK v2.12.0 以上から利用できます。 古いSDKを利用している場合は KarteApp.setup(appkey:)メソッドを利用して初期化してください。
{% endhint %}

{% tabs %}
{% tab title="Swift" %}
{% code title="AppDelegate.swift" overflow="wrap" %}

```swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  KarteApp.setup()
}
```

{% endcode %}
{% endtab %}

{% tab title="Objective-C" %}
{% code title="AppDelegate.m" overflow="wrap" %}

```objc
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  [KRTApp setupWithConfiguration:KRTConfiguration.default_];
  ...
}
```

{% endcode %}
{% endtab %}
{% endtabs %}

**SwiftUI を使用している場合** SwiftUI を使用している場合は、プロジェクト作成時には UIApplicationDelegate を継承した AppDelegate クラスがないため、AppDelegate を作成し UIApplicationDelegateAdaptor 等を利用して `App` 構造体に接続する必要があります。

{% code title="MyApp.swift" overflow="wrap" %}

```swift
@main
struct MyApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
}
```

{% endcode %}

この際、AppDelegate クラスは App 構造体よりも後に初期化されるため、現状のSDKでは `App.init()` 内等で直接KARTEのイベントを発行することはできません。 `AppDelegate.application(_:didFinishLaunchingWithOptions:)` の後にイベントを発行するようにしてください。

#### 3. 本番環境と評価環境などで利用する設定ファイルを変更したい場合

環境毎に利用する設定ファイルを変更したい場合は plist ファイルの名前を環境毎に変更します。 その後、Configuration.from で取得したインスタンスを `KarteApp.setup(configuration)` メソッドに設定してください。

{% code title="AppDelegate.swift" overflow="wrap" %}

```swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // 本番環境の設定ファイルを読み込む例
        if let plistPath = Bundle.main.path(forResource: "Karte-Production-Info", ofType: "plist"),
           let configuration = Configuration.from(plistPath: plistPath) {
            KarteApp.setup(configuration: configuration)
        }
}
```

{% endcode %}

{% hint style="warning" %}
**アプリケーションキーについて**

初期化時に指定するアプリケーションキー（Application Key）は、KARTE管理画面に記載されているAPIキーとは異なります。取得方法は[アプリケーションキーの確認方法](https://support.karte.io/post/1PbomDUORPoCrcvos2rq3T#1-0)をご確認ください。
{% endhint %}

### 4. カスタムURLスキームハンドラを追加する

KARTE for App独自の一部機能の利用に必要な実装です。ホーム画面や、KARTEで頻度高く接客を表示することが想定される画面でご対応ください。

設定方法については [KARTE独自のカスタムURLスキームをハンドリングできるようにする](/ios-sdk-appendix/concepts-custom-url-scheme-ios-sdk.md) をご覧ください。

### 5. App Tracking Transparency(ATT)の許諾情報を連携する

設定方法については [App Tracking Transparency(ATT)の許諾情報の連携](/ios-sdk-appendix/att-tracking.md) をご覧ください。

## トラブルシューティング

{% hint style="warning" %}
**Objective-C から SDK を利用する**

Objective-C から SDK を利用した場合、ビルド時にエラーが発生する場合があります。 エラーが発生した場合は、[こちら](/ios-sdk-appendix/appendix-using-objective-c-ios-sdk.md) の記事を参考にしてください。
{% endhint %}

SDK導入時にその他のビルドエラーが発生した場合は、[FAQ: SDKを導入するとビルドエラーが起きる](/app-faq/sdk-build-error.md) を参考にしてください。

***

**What’s Next**

SDKの導入が完了したら、次はイベントトラッキングの実装を行いましょう。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://app.developers.karte.io/ios-sdk/setup-ios-sdk.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
