> 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/ja/serufuhosuto/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 Serverless Hosted API](/deployment/ja/regash/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` インストール方法のほうが一般的です。

次を入力して 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` Command Line Tools がシステムにすでにある場合。

最後に、 `pod install` を実行し、生成された `.xcworkspace` ファイルを [Xcode](https://developer.apple.com/xcode/).

![Podfile のインストール成功後のターミナル](/files/1d5cb6748e49de08d9eb57fbaf536c18479ee822)

![Podfile のインストール成功後のプロジェクトディレクトリ](/files/122ccad17fe48be9688f4a9d7da36f8bc035216d)

* 次のエラーが返る場合: "Ruby インタープリタまたは拡張ライブラリにバグがある可能性があります," まず次を実行してください `brew install cocoapods`、そして `pod install` を実行し、生成された `.xcworkspace` Xcode で生成されたファイルを開きます。
  * 次を入力して CocoaPods が正常にインストールされていることを確認してください `pod --version` をターミナルで。

### Swift で Roboflow を使う

次の場所に移動します `.xcworkspace` Xcode で生成されたファイルを開きます。

![](/files/266a7c01ac75b4a8658d3585dde9de6157c4385c)

次に、以下を追加して Roboflow をインポートします `import Roboflow`。を `.xcworkspace` ファイルに。

次に、以下で Roboflow API のインスタンスを作成します `let rf = Roboflow(apiKey: "API_KEY")`。 `modelVersion`については、 `YOUR-MODEL-VERSION-#` をモデルのバージョン番号の整数値に置き換えてください。

#### プロジェクト情報の見つけ方

**Completion Handler の使用方法:**

```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）
* 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、オブジェクト数のカウント、画像アップロードなどの例が見られます。
