> 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)

"sudo 없는" 설치는 이 과정에서 RubyGems에 관리자 권한을 부여하고 싶지 않을 때 선택할 수 있는 옵션입니다. 그러나 `sudo` 설치가 더 일반적이라는 점에 유의하세요.

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

### Roboflow CocoaPod 설치하기

먼저 `pod init` 를 프로젝트 디렉터리에서 실행하세요.

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

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

Xcode Command Line Tools가 설치되어 있지 않다면 다음을 실행하세요. `xcode-select --install` 을 입력하여 CocoaPods가 성공적으로 설치되었는지 확인하세요.

그러면 다음이 반환됩니다: `xcode-select: 오류: command line tools가 이미 설치되어 있습니다. 업데이트를 설치하려면 "Software Update"를 사용하세요` 시스템에 Command Line Tools가 이미 있는 경우입니다.

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

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

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

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

### 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, // 인스턴스 세분화
                            maxNumberPoints: 마스크 처리 포인트의 최대 수) // 인스턴스 세분화
        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)은 US 동전과 지폐를 세는 예제 iOS 앱으로, 컴퓨터 비전 모델을 iPhone에 배포하는 방법의 예시입니다. 바운딩 박스 시각화, FPS, 객체 수 세기, 이미지 업로드 등의 예제를 볼 수 있습니다.
