> 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/roboflow/roboflow-ko/deploy/sdks/ios-sdk.md).

# iOS SDK

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

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

## 작업 지원

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

| 작업 유형       | iOS SDK Deployment에서 지원됨 |
| ----------- | ------------------------ |
| 객체 탐지       | ✅                        |
| 분류          |                          |
| 인스턴스 세그멘테이션 | ✅ (iOS 18 이상)            |
| 시맨틱 세그멘테이션  |                          |

### CoreML Export 호환성

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

| 모델       | CoreML Export |
| -------- | ------------- |
| RF-DETR  | ✅             |
| YoloLite | ✅             |
| 분류 모델    | ✅             |

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

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

모든 iOS 기기는 온디바이스 추론을 지원하지만, iPhone 8(A11 Bionic Processor)보다 오래된 기기는 전력 효율이 더 낮은 GPU 엔진을 사용하게 됩니다.

Roboflow는 최소 iOS 버전 15.4를 요구합니다(인스턴스 세그멘테이션 모델의 경우 18.0).

## 프로토타이핑

다음과 연동하여 개발할 수 있습니다 [Roboflow Serverless Hosted API](https://docs.roboflow.com/deploy/serverless). 이 API는 온디바이스 추론과 동일한 학습된 모델을 사용합니다.

## 설치

* 설치하기 [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-less" 설치는 이 과정에서 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: error: command line tools are alreadyinstalled, use "Software Update" to install updates` 시스템에 Command Line Tools가 이미 설치되어 있는 경우입니다.

마지막으로 `pod install` 를 실행한 뒤 생성된 `.xcworkspace` 파일을 [XCode](https://developer.apple.com/xcode/).

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

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

* 다음 오류가 반환되면: "You may have encountered a bug in the Ruby interpreter or extension libraries," 먼저 `brew install cocoapods`를 실행한 다음 `pod install` 를 실행한 뒤 생성된 `.xcworkspace` XCode에서 파일을 실행하세요.
  * 터미널에 `pod --version` 을 입력하여 CocoaPods가 성공적으로 설치되었는지 확인하세요.

### Swift에서 Roboflow 사용하기

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

![](/files/82eb13b1ea5bdb7077d5e44352f516c356b3bbb5)

다음으로, 다음을 추가하여 Roboflow를 가져옵니다 `import Roboflow`를 `.xcworkspace` 파일에.

그런 다음 다음과 함께 Roboflow API 인스턴스를 만듭니다 `let rf = Roboflow(apiKey: "API_KEY")`에 대해 `modelVersion`에는 `YOUR-MODEL-VERSION-#` 를 모델 버전 번호의 정수 값으로 바꾸세요.

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

**Completion Handler 사용법:**

```swift
import Roboflow
...
//API Key로 초기화
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 또는 .balanced 또는 .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 Key로 초기화
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 앱 예제

여기서는 React Native를 사용해 이 SDK를 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` (Maintenance LTS) 및 `>=16.0.0 <17.0.0` (Active LTS)
* Node.js용 yarn 패키지를 설치해야 합니다(`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, 객체 계수, 이미지 업로드 등을 확인할 수 있습니다.
