> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/deployment/ko/self-hosted/sdks/ios-sdk.md).

# iOS SDK

Roboflow Mobile iOS SDK는 더 빠른 추론을 위해, 또는 증강 현실과 같은 새로운 기능, 역량, 사용 사례를 활용하기 위해 엣지(iPad 또는 iPhone)에서 모델을 실행해야 하는 iOS 애플리케이션을 개발할 때 좋은 선택입니다.

맞춤형 컴퓨터 비전 모델이 내장된 네이티브 모바일 애플리케이션을 통해 개발자는 앱에 시각을 부여할 수 있습니다.

## 작업 지원

다음 작업 유형은 iOS SDK 배포에서 지원됩니다:

| 작업 유형   | iOS SDK 배포에서 지원됨 |
| ------- | ---------------- |
| 객체 탐지   | ✅                |
| 분류      |                  |
| 인스턴스 분할 | ✅ (iOS 18 이상)    |
| 시맨틱 분할  |                  |

### CoreML 내보내기 호환성

다음 모델 아키텍처는 온디바이스 배포를 위한 CoreML(`.mlpackage`) 내보내기를 지원합니다:

| 모델       | CoreML 내보내기 |
| -------- | ----------- |
| RF-DETR  | ✅           |
| YoloLite | ✅           |
| 분류 모델    | ✅           |

## 모델을 iOS 기기에 배포하기

### 지원되는 하드웨어 및 소프트웨어

모든 iOS 기기는 온디바이스 추론을 지원하지만, iPhone 8(A11 Bionic 프로세서)보다 오래된 기기는 전력 효율이 더 낮은 GPU 엔진으로 대체됩니다.

Roboflow는 최소 iOS 버전 15.4를 요구합니다(인스턴스 분할 모델의 경우 18.0).

## 프로토타이핑

다음과 연동하여 개발할 수 있습니다 [Roboflow 서버리스 클라우드 API](/deployment/ko/legacy/legacy-serverless.md). 온디바이스 추론과 동일한 학습된 모델을 사용합니다.

## 설치

* 설치 [CocoaPods](https://guides.cocoapods.org/using/getting-started.html) | [문제 해결 가이드](https://guides.cocoapods.org/using/troubleshooting#installing-cocoapods)

"CocoaPods는 Ruby로 만들어졌으며, macOS에 기본으로 제공되는 Ruby로 설치할 수 있습니다. Ruby 버전 관리자를 사용할 수도 있지만, 무엇을 하고 있는지 확실히 알고 있지 않다면 macOS에 기본 제공되는 표준 Ruby를 사용하는 것을 권장합니다. 기본 Ruby 설치를 사용하면 gem을 설치할 때 `sudo` 를 사용해야 합니다. (다만 이는 gem 설치하는 동안에만 문제가 됩니다.)" - [CocoaPods](https://guides.cocoapods.org/using/getting-started.html)

RubyGems에 이 과정에 대한 관리자 권한을 부여하고 싶지 않다면 "sudo 없는" 설치를 선택할 수 있습니다. 그러나 `sudo` 설치 방식이 더 일반적이라는 점을 참고하세요.

터미널에 다음을 입력하여 CocoaPods가 성공적으로 설치되었는지 확인하세요 `pod --version` 를 입력합니다.

### Roboflow CocoaPod 설치하기

먼저 다음을 실행하세요 `pod init` 을 프로젝트 디렉터리에서 실행합니다.

다음이 `Podfile` 에 다음이 지정되어 있는지 확인하세요 `platform :ios, '15.4'`

그다음 다음을 추가하세요 `pod 'Roboflow'` 을 `Podfile`.

XCode Command Line Tools가 설치되어 있지 않다면 다음을 실행하세요 `xcode-select --install` 를 입력합니다.

그러면 다음이 반환됩니다: `xcode-select: error: command line tools are alreadyinstalled, use "Software Update" to install updates` 는 명령줄 도구가 이미 시스템에 있는 경우입니다.

마지막으로 다음을 실행하세요 `pod install` 를 실행하고 생성된 `.xcworkspace` 파일을 [XCode](https://developer.apple.com/xcode/).

![Podfile 설치가 성공한 후의 터미널](/files/759eddb0406b1a62c171e87d6ac6ed6e0e7c01f2)

![Podfile 설치가 성공한 후의 프로젝트 디렉터리](/files/e2bcf9f1ba23d7e79d33177582712cceb36b4caa)

* 다음 오류가 반환되면: "Ruby 인터프리터 또는 확장 라이브러리에서 버그가 발생했을 수 있습니다," 먼저 다음을 실행하세요 `brew install cocoapods`, 그런 다음 `pod install` 를 실행하고 생성된 `.xcworkspace` 파일을 XCode에서 실행하세요.
  * 터미널에 다음을 입력하여 CocoaPods가 성공적으로 설치되었는지 확인하세요 `pod --version` 를 입력합니다.

### Swift에서 Roboflow 사용하기

다음으로 이동하세요 `.xcworkspace` 파일을 XCode에서 실행하세요.

![](/files/944656becc076744a0b2ed8ed0efa020fa09b1f4)

다음으로 Roboflow를 가져오려면 다음을 추가하세요 `import Roboflow`. 를 `.xcworkspace` 파일에 추가합니다.

그런 다음 다음을 사용해 Roboflow API 인스턴스를 생성하세요 `let rf = Roboflow(apiKey: "API_KEY")`. `modelVersion`의 경우 다음을 `YOUR-MODEL-VERSION-#` 로 바꾸세요. 모델 버전 번호의 정수 값을 사용하면 됩니다.

#### 프로젝트 정보 찾기

**완료 핸들러 사용법:**

```swift
import Roboflow
...
//API 키로 초기화
let rf = RoboflowMobile(apiKey: "API_KEY")
var model: RFModel?
...

//model은 모델의 프로젝트 이름입니다
rf.load(model: "YOUR-MODEL-ID", modelVersion: YOUR-MODEL-VERSION-#) { [self] model, error, modelName, modelType in
    if error != nil {
        print(error?.localizedDescription as Any)
    } else {
        model?.configure(threshold: threshold, overlap: overlap, maxObjects: maxObjects
                            processingMode: .performance or .balanced or .quality, // instance seg
                            maxNumberPoints: 마스크 처리 포인트의 최대 개수) // instance seg
        self.model = model
    }
    
}
...

//model?.detect는 UIImage를 받아 그 위에서 추론을 실행합니다
let img = UIImage(named: "example.jpeg") // 또는 CVPixelBuffer
model?.detect(image: img!) { predictions, error in
    if error != nil {
        print(error)
    } else {
        print(predictions)
    }
}
```

**비동기 사용법:**

비동기적으로 사용하려면 비동기 블록 안에서 Roboflow 모델을 호출해야 합니다.

```swift
import Roboflow
...
//API 키로 초기화
let rf = RoboflowMobile(apiKey: "API_KEY")
...

//model은 모델의 프로젝트 이름입니다
let (model, loadingError, modelName, modelType) = await rf.load(model: "YOUR-MODEL-ID", modelVersion: YOUR-MODEL-VERSION-#)
model!.configure(threshold: threshold, overlap: overlap, maxObjects: maxObjects)
...

//model?.detect는 UIImage를 받아 그 위에서 추론을 실행합니다
let img = UIImage(named: "example.jpeg")
let (predictions, predictionError) = await model!.detect(image: img!)
print(predictions)
```

**예측 형식:**

```
x:Float //객체 중심 x
y:Float //객체 중심 y
width:Float
height:Float
className:String
confidence:Float
color:UIColor
box:CGRect
points:[CGPoint] // 인스턴스 분할 모델만 해당
```

[CGRect](https://developer.apple.com/documentation/corefoundation/cgrect)

### 네이티브 Swift 예제

이 [roboflow-ios-starter](https://github.com/roboflow/roboflow-ios-starter) 앱은 roboflow 모델로 실시간 iOS 앱을 만드는 데 훌륭한 시작점입니다. 여기에는 카메라 설정, 모델 로딩 및 처리, 그리고 객체 탐지 및 인스턴스 분할 모델 모두를 위한 출력 그리기 코드가 포함되어 있습니다.

### React Native Expo 앱 예제

여기에서 이 SDK를 React Native의 expo 앱에 통합하는 예제도 제공합니다. 자체 하위 애플리케이션을 구성할 때 유용할 수 있습니다.

다음 두 가지가 모두 설치되어 있는지 확인하세요 [Expo](https://docs.expo.dev/) 와 [CocoaPods](https://guides.cocoapods.org/using/getting-started.html) 가 설치되어 있어야 합니다.

* `expo-cli` 는 다음 Node.js 버전을 지원합니다: `>=12.13.0 <15.0.0` (유지보수 LTS) 및 `>=16.0.0 <17.0.0` (활성 LTS)
* yarn 패키지는 Node.js용으로 설치되어 있어야 합니다(`npm install -g yarn`)

{% embed url="<https://github.com/roboflow-ai/RoboflowExpoExample>" %}

### 예제 iOS 애플리케이션 - CashCounter

다운로드 [CashCounter](https://apps.apple.com/app/roboflow-cash-counter/id1633812788), 미국 동전과 지폐를 세는 예제 iOS 앱으로, 컴퓨터 비전 모델을 iPhone에 배포하는 방법의 예시입니다. 바운딩 박스 시각화, FPS, 객체 개수 세기, 이미지 업로드 등의 예제를 볼 수 있습니다.
