> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fairytech.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# iOS Setup

# SDK 이용하여 연동시

## 사전 준비

아래 2가지 항목을 `eng@fairytech.ai`로 전달해 주시면, 프로젝트 설정 후에 `Project ID`, `SDK API Key`를 회신드리도록 하겠습니다.

* 개발용 Bundle ID
* 배포용 Bundle ID

## STEP 1) Project ID, API Key 설정 (v 1.1.4 이상)

`configure` 함수를 호출하여 명시적으로 SDK를 초기화해야 합니다. 앱이 시작되는 시점인 `AppDelegate`의 `didFinishLaunchingWithOptions` 메서드 내에서 호출하는 것을 권장합니다. (SDK를 사용하기 전에만 초기화를 하면 됩니다.)

<Note>
  **Tip:** `configure` 함수는 별도의 서버 통신 없이 내부 환경 변수만 설정하는 경량화된 작업입니다. 따라서 앱 실행 시점(App Launch)에 호출하여도 앱의 성능 저하나 충돌(Crash)을 유발하지 않으므로 안심하고 사용하셔도 됩니다.
</Note>

1. **(필요시) Info.plist 설정 제거**\
   기존에 `Info.plist`에 등록되어 있던 아래 키 값들은 더 이상 사용하지 않으므로 제거해 주십시오.
   * `MomentApiKey`
   * `MomentProjectId`
2. **Configure 함수 호출**`MomentCashbackService`를 사용하기 전에 반드시 API Key와 Project ID를 설정해야 합니다.
   ```swift theme={null}
   import UIKit
   import Moment // SDK 모듈 임포트
   @main
   class AppDelegate: UIResponder, UIApplicationDelegate {
       func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
           
           // [필수] Moment SDK 초기화
           // 발급받은 API Key와 Project ID를 입력해주세요.
           MomentCashbackService.configure(
               apiKey: "YOUR_API_KEY",
               projectId: "YOUR_PROJECT_ID"
           )
           
           // (선택 사항) 개발/상용 환경에 따라 키 값을 분기 처리할 수 있습니다.
           /*
           #if DEBUG
           MomentCashbackService.configure(apiKey: "DEV_KEY", projectId: "DEV_ID")
           #else
           MomentCashbackService.configure(apiKey: "PROD_KEY", projectId: "PROD_ID")
           #endif
           */
           return true
       }
   }
   ```

**주의:** `configure` 함수를 호출하지 않고 다른 SDK 기능을 사용할 경우, 초기화 에러가 발생할 수 있습니다. 반드시 앱 실행 초기에 호출해 주십시오.

## STEP 2) Moment Cashback Framework 추가

### Swift Package Manager

1. XCode에서 Github login을 해주세요. (repo에 인증이 걸려있지 않아 아무 계정을 사용하셔도 무관합니다)
2. File → Add Packages에서 아래의 url을 넣어주세요.

```ruby theme={null}
'<https://github.com/fairytech-external/Cashback-iOS>'
```

3. Dependency rule을 **Up to Next Minor Version로 설정해주세요.**

### Cocoapods

```ruby theme={null}
platform :ios, '14.0'
use_frameworks!

target 'CashbackDemo' do
  pod 'Moment', :podspec => '<https://github.com/fairytech-external/Cashback-iOS/releases/download/${sdk_version}/Moment.podspec>'
end

```

<Info>
  현재 Cashback SDK는 공개 trunk 방식이 아닌 github repo에서 fetch 받아 설치하는 방식을 사용하고 있습니다.\
  만일 공개 trunk 방식의 Cocoapods 지원이 필요하시면 [eng@fairytech.ai](mailto:eng@fairytech.ai)로 연락주세요.
</Info>

(⬆️ sample Podfile)\
`sdk_version` 의 경우 현재 `1.1.3` 부터 사용 가능합니다.

현재 ‘Moment’는 정적 Framework로 빌드되어, pod 설치 이후 다른 추가 작업 없이 사용 가능합니다.

### xcframework direct import

1. [https://github.com/fairytech-external/Cashback-iOS에서](https://github.com/fairytech-external/Cashback-iOS%EC%97%90%EC%84%9C) 코드를 다운로드 받아주세요.
2. App Source Root > Frameworks 폴더에 다운로드 받은 `Moment.xcframework` 를 넣어주세요.
3. General > Frameworks, Libraries, and Embedded Contents에서 `Moment.xcframework` 를 Embed & Sign으로 변경해주세요.

<Frame>
  <img src="https://mintcdn.com/fairytech/W2ba7D5O-OwnnDf5/images/image-6.png?fit=max&auto=format&n=W2ba7D5O-OwnnDf5&q=85&s=fb2004fd882fd69398df3db785bf8ef5" alt="Image" width="766" height="976" data-path="images/image-6.png" />
</Frame>

4. Targets > Build Phases > Link Binary With Libraies에서 `Moment.xcframework` 가 Required되어있는지 확인해주세요.

<Frame>
  <img src="https://mintcdn.com/fairytech/W2ba7D5O-OwnnDf5/images/image-7.png?fit=max&auto=format&n=W2ba7D5O-OwnnDf5&q=85&s=3a0a922e8d803ac7d77d5d95ebbb22a8" alt="Image" width="2858" height="956" data-path="images/image-7.png" />
</Frame>

# SDK 이용하지 않고 연동시

사용하실 프로젝트의  Project ID 와 해당 project의  Web API Key 를 준비해주세요. 직접 전달드린  Project ID 및 Web API Key 를 모르실 경우, 콘솔을 통해 확인하실 수 있습니다.
