# iOS SDK 연동

> CocoaPods 또는 매뉴얼 메서드를 사용하여 레벨플레이 SDK를 iOS 앱에 통합하고 앱 키로 초기화합니다.

레벨플레이 SDK는 CocoaPods, Swift 패키지 관리자 및 매뉴얼 다운로드 메커니즘을 지원하여 SDK를 통합합니다.

## 필수 조건##prerequisites

iOS 버전 지원은 네트워크별로 정의됩니다. 레벨플레이 광고와 레벨플레이 Mediation iOS 버전 12 이상, Xcode 버전 15.4 이상을 지원합니다.

iOS 14와 호환되기 위해 레벨플레이 SKAdNetwork 어트리뷰션을 지원하는 SDK 7 이상을 릴리스했습니다.

## 프로젝트에 SDK 추가##add-the-sdk-to-your-project

### CocoaPods##cocoapods

[CocoaPods](https://cocoapods.org/) 는 Objective-C 및 Swift 의 종속성 관리자로서 SDK 통합 프로세스를 자동화하고 단순화합니다. 자세한 내용은 CocoaPods의 [시작하기](https://guides.cocoapods.org/using/getting-started.html) 및 [CocaPods 사용](https://guides.cocoapods.org/using/using-cocoapods.html) 설명서를 참조하십시오.

레벨플레이 SDK를 CocoaPods와 연동하려면 Podfile에 다음 줄을 입력합니다.

```objective-c
pod 'IronSourceSDK','9.5.0.0'
```

프로젝트에서 Swift를 사용하지 않는 경우 **Project** > **Build Settings** > **Linking** > **Runpath Search Paths**로 이동하여 다음 코드를 추가합니다.

```objective-c
// needs to be first on the list 
/usr/lib/swift
```

> **Note:**
>
> 버전 8.9.0부터 Ad 품질 레벨플레이 SDK에 통합되며, 레벨플레이 구현되면 자동으로 초기화됩니다. 자세한 내용은 [광고 품질 개요](/grow/ad-quality/overview.md)를 참조하십시오.

### Swift 패키지 관리자##swift-package-manager

> **Note:**
>
> Swift 패키지 관리자를 사용하려면 지원되는 최소 레벨플레이 SDK 버전 9.3.0과 해당 어댑터 버전이 [최소 어댑터 및 네트워크 SDK 버전 섹션](#minimum-adapter)에 정의되어 있어야 합니다.

프로젝트에 패키지 종속성을 추가하려면 다음 단계를 완료하십시오.

1. Xcode에서 **파일** > **패키지 종속성 추가**로 이동합니다.
2. 표시되는 프롬프트 다음 패키지 URL을 검색합니다.
   `https://github.com/ironsource-mobile/LevelPlay-Swift-Package`
3. 종속성 규칙에서 **브랜치**를 선택합니다.
4. 텍스트 필드에 `main`를 입력합니다.

#### Mediation 네트워크 어댑터 패키지 추가##add-mediation-network-adapter-packages

각 Mediation 네트워크에는 자체 어댑터 Swift 패키지가 있으며, [IronSource Mobile GitHub 조직](https://github.com/orgs/ironsource-mobile/repositories?q=Swift-Package)에서 호스팅됩니다. 어댑터 저장소는 명명 형식 `LevelPlay-<Network>-Adapter-Swift-Package`를 사용합니다. 예를 들어 Unity Ads 어댑터는 `LevelPlay-UnityAds-Adapter-Swift-Package` 저장소에 있고 AdMob 어댑터는 `LevelPlay-AdMob-Adapter-Swift-Package` 저장소에 있습니다.

프로젝트에 Mediation 네트워크 어댑터 패키지를 추가하려면 다음 단계를 완료합니다.

1. [IronSource Mobile GitHub 조직](https://github.com/orgs/ironsource-mobile/repositories?q=Swift-Package)에서 추가하려는 네트워크의 어댑터 저장소를 찾습니다.
2. 저장소 URL을 복사합니다.
3. Xcode에서 **파일** > **패키지 종속성 추가**로 이동합니다.
4. 표시되는 프롬프트 어댑터 저장소 URL을 입력합니다.
5. 종속성 규칙에서 **정확한 버전**을 선택합니다.
6. 프로젝트에서 레벨플레이 SDK 버전과 호환되는 태그가 지정된 어댑터 버전을 입력합니다.

호환 가능한 버전을 선택하려면 [최소 어댑터 및 네트워크 SDK 버전](#minimum-adapter) 섹션과 해당 어댑터 변경 기록을 참조하십시오. 추가하려는 각 Mediation 네트워크에 대해 이 단계를 반복합니다.

#### 최소 어댑터 및 네트워크 SDK 버전##minimum-adapter

| 네트워크 이름         | 최소 어댑터 버전 | 최소 네트워크 SDK 버전 |
| --------------- | --------- | -------------- |
| Unity Ads       | 5.8.1     | 4.16.5         |
| AppLovin        | 5.7.1     | 13.6.2         |
| BidMachine      | 5.7.1     | 3.6.1          |
| Digital Turbine | 5.8.1     | 8.4.6          |
| Google AdMob    | 5.10.1    | 13.2.0         |
| HyprMX          | 5.3.1     | 6.4.6          |
| LY 광고 네트워크      | 5.4.1     | 3.0.1          |
| Meta            | 5.3.1     | 6.21.1         |
| Mintegral       | 5.18.1    | 8.1.0          |
| MobileFuse      | 5.2.0     | 1.11.0         |
| MyTarget        | 5.11.1    | 5.41.0         |
| Ogury           | 5.5.1     | 5.2.1          |
| Pangle          | 5.28.1    | 7.9.1.1        |
| Voodoo          | 5.2.1     | 3.15.1         |
| Vungle          | 5.10.1    | 7.7.4          |
| Yandex          | 5.9.1     | 8.1.0          |

### 매뉴얼 다운로드##manual-download

프로젝트에 레벨플레이 SDK를 수동으로 추가하려면 다음 단계를 완료하십시오.

1. [iOS SDK 버전 9.5.0 다운로드](https://github.com/ironsource-mobile/iOS-sdk/raw/master/9.5.0/IronSource9.5.0.zip)
2. SDK의 압축을 풀고 Xcode 프로젝트에 `IronSource.framework`를 추가합니다.
3. 에 있는 빌드 설정에 다음 링커 플래그 추가합니다. **타겟** > **빌드 설정** > **링크** > **기타 링커 플래그: -ObjC**
4. 임포트 라이브러리 - "z","sqlite3.0"
5. 임포트 프레임워크 - "JavaScriptCore","WebKit","AdSupport","SystemConfiguration"

### 레벨플레이 Mediation 데모 앱##levelplay-mediation-demo-app

통합 데모 애플리케이션 앱에 레벨플레이 Mediation 통합하는 방법을 보여 줍니다.

[iOS 데모 애플리케이션 다운로드](https://github.com/ironsource-mobile/Mediation-Demo-Apps)

## 프로퍼티 목록 파일 업데이트##update-the-property-list-file

### SKAdNetwork 지원##skadnetwork-support

SDK 7 이상을 사용하는 경우 아이언소스 네트워크 광고 표시를 활성화하다, 사용 가능하다 앱 프로퍼티 리스트 파일(Info.plist)에 아이언소스 광고 네트워크 ID를 포함해야 합니다. 

1. Xcode 프로젝트 내비게이터에서 **Info.plist** 를 선택합니다.
2. 프로퍼티 목록 에디터에서 키 옆의 **Add** (+)를 선택한 다음 **Return**을 선택합니다.
3. 키 이름을 입력 **SKAdNetworkItems**.
4. **Type** 열에서 **배열**을 선택합니다.
5. 딕셔너리 항목을 생성한 다음 단일 문자열 항목을 생성합니다.
6. 키 이름 **SKAdNetworkIdentifier** 및 다음 키 값을 입력합니다.

   ```text
   su67r6k2v3.skadnetwork
   ```

다음 코드를 사용하여 Info.plist 파일에 **SKAdNetworkIdentifier를** 추가할 수도 있습니다. 

```xml
<key>SKAdNetworkItems</key>
<array>
   <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>su67r6k2v3.skadnetwork</string>
   </dict>
</array>
```

프로퍼티 목록 편집에 대한 자세한 내용은 [Xcode 기술 자료](https://help.apple.com/xcode/mac/current/#/dev3f399a2a6)를 참조하십시오.

### 유니버설 SKAN 보고##universal-skan-reporting

광고된 앱의 모든 수요 소스에서 설치 확인 포스트백을 받으려면 앱의 Info.plist 파일에 [NSAdvertisingAttributionReportEndpoint](https://developer.apple.com/documentation/bundleresources/information_property_list/nsadvertisingattributionreportendpoint) 키를 추가하십시오.

1. Xcode 프로젝트 내비게이터에서 **Info.plist** 를 선택합니다.
2. 프로퍼티 목록 에디터에서 키 옆의 **Add** (+)를 선택한 다음 **Return**을 선택합니다.
3. 키 이름 [NSAdvertisingAttributionReportEndpoint](https://developer.apple.com/documentation/bundleresources/information_property_list/nsadvertisingattributionreportendpoint)을 입력합니다.
4. **Type** 열에서 **String**을 선택합니다.
5. 다음 URL을 입력합니다. `https://postbacks-is.com/`.

유니버설 SKAN 보고에 대한 자세한 내용은 [SKAdNetwork ID 수동 추가](/grow/levelplay/sdk/ios/skadnetwork-id-manager.md)를 참조하십시오.

### 앱 전송 보안 설정##app-transport-security-settings

모든 Mediation 네트워크에서 레벨플레이 광고 전송에 대한 무중단 지원을 보장하려면 Info.plist 파일을 다음과 같이 변경하십시오.

* 더하기 기호를 선택하여 사전 `NSAppTransportSecurity`를 추가합니다. 이 딕셔너리를 Top Level Key에 추가해야 합니다.
  * 이 사전 안에 `NSAllowsArbitraryLoads`라는 부울을 추가하고 탭을 선택하여 `YES`로 설정합니다.
* Info.plist 파일에는 충돌을 일으킬 수 있으므로 `NSAllowsArbitraryLoads` 외에 다른 예외가 포함되어 있지 않습니다.
* 앱 전송 보안에 대한 자세한 내용은 [Apple 기술 자료](https://developer.apple.com/library/prerelease/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33)를 참고하십시오.

## 레벨플레이 SDK 초기화##initialize-the-levelplay-sdk

### 필요한 파일 임포트##import-the-necessary-files

```objective-c
#import "IronSource/IronSource.h"
```

### SDK 시작##init-the-sdk

레벨플레이 SDK를 초기화하려면 다음 단계를 완료합니다.

1. 완료 핸들러 성공 및 실패를 정의합니다.
2. 해당하는 경우 appKey와 사용자 ID를 사용하여 레벨플레이 init API 호출.

사용자에게 보상을 제공하기 위해 서버 간 콜백을 사용하거나 광고 품질 사용자 여정을 사용하는 경우 초기화 요청 빌더의 일부로 사용자 ID를 추가합니다.

1. **Objective-C**

   ```objective-c
       // 앱 키와 광고 형식을 사용하여 요청 빌더를 생성합니다. 사용 가능한 경우 사용자 ID 추가
   LPMInitRequestBuilder *requestBuilder = [[LPMInitRequestBuilder alloc] initWithAppKey:@"appKey"];
   [requestBuilder withUserId:@"UserId"];

   // Build the initial request
   LPMInitRequest *initRequest = [requestBuilder build];
   // Initialize LevelPlay with the prepared request
   [레벨플레이 initWithRequest:initRequest 완료:^(LPMConfiguration *_Nullable config, NSError *_Nullable error){

      if(error) {
          // There was an error on initialization. 필요한 조치를 취하거나 재시도
      } else {
         // Initialization was successful. 이제 광고 오브젝트를 생성하고 광고를 로드하거나 다른 작업을 수행할 수 있습니다.         
      }
   }];
   ```

2. **Swift**

   ```swift
   // 앱 키와 광고 형식을 사용하여 요청 빌더를 생성합니다. 사용 가능한 경우 사용자 ID 추가
   let requestBuilder = LPMInitRequestBuilder(appKey: "appKey")
      .withUserId("UserId")
   // 초기 요청 빌드
   let initRequest = requestBuilder.build()
   // 준비된 요청으로 레벨플레이 초기화 
   LevelPlay.initWith(initRequest) 
   {config, error in
   if let error = error {
      // 초기화 시 오류가 발생했습니다. 필요한 조치를 취하거나 재시도
   } else {
      // 초기화가 성공했습니다. 이제 광고 오브젝트를 생성하고 광고를 로드하거나 다른 작업을 수행할 수 있습니다.
   }
   }
   ```

### 초기화 결과##initialization-result

* **성공**: 초기화가 성공적으로 완료되면 트리거됩니다. 이 표시를 수신하면 광고를 생성하고 로드할 수 있습니다.
* **오류**: 설정 검색해서 가져오지 못했으며 광고를 로드할 수 없습니다. 권장되는 베스트 프랙티스는 나중에 인터넷 연결이 가능하거나 오류 원인이 해결되었을 때 레벨플레이 SDK를 초기화하는 것입니다.

## 연동 확인##verify-your-integration

앱의 통합을 테스트하고, 플랫폼 설정을 검증하고, 설정된 네트워크와 관련된 광고를 검토하려면 [레벨플레이 통합 테스트 제품군](/grow/levelplay/sdk/ios/integration-test-suite.md)을 사용하십시오. 

앱에서 테스트 제품군을 활성화하다, 사용 가능하다 init를 설정하기 전에 setMetaData API 호출.

1. **Objective-C**

   ```objective-c
   [LevelPlay setMetaDataWithKey:@"is_test_suite" value:@"enable"];
   ```

2. **Swift**

   ```swift
   LevelPlay.setMetaDataWithKey("is_test_suite", value: "enable")
   ```

Mediation init가 완료되면 다음 메서드를 호출하여 테스트 제품군을 실행.

1. **Objective-C**

   ```objective-c
   [LevelPlay launchTestSuite:self];
   ```

2. **Swift**

   ```swift
   LevelPlay.launchTestSuite(self)
   ```

## 다음 단계##next-steps

1. 광고 형식을 구현하려면 다음 연동 가이드를 참고하십시오.
   * [보상형 비디오](/grow/levelplay/sdk/ios/rewarded-ads-integration.md)
   * [인터스티셜 광고](/grow/levelplay/sdk/ios/interstitial-integration.md)
   * [Banner](/grow/levelplay/sdk/ios/banner-integration.md)
   * [네이티브 광고](/grow/levelplay/sdk/ios/native-ads-integration.md)
2. 앱에 보상형 비디오, 인터스티셜 광고 또는 배너 광고를 통합합니다. iOS용 [Mediation 네트워크를 참고하십시오](/grow/levelplay/sdk/ios/mediation-networks.md).
