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

このプロセスに RubyGems の管理者権限を付与したくない場合は、「sudo なし」のインストールも選択できます。ただし、 `sudo` こちらのインストール方法のほうが一般的です。

次のコマンドを入力して、CocoaPods が正常にインストールされていることを確認します: `pod --version` をターミナルで実行します。

### Roboflow CocoaPod のインストール

まず、 `pod init` をプロジェクトディレクトリで実行します。

次を確認してください: `Podfile` に次が指定されていること: `platform :ios, '15.4'`

次に、 `pod 'Roboflow'` を `Podfile`.

Xcode コマンドラインツールがインストールされていない場合は、次を実行します: `xcode-select --install` をターミナルで実行します。

すると次が表示されます: `xcode-select: error: command line tools はすでにインストールされています。更新をインストールするには "Software Update" を使用してください` 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` （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)は、米国の硬貨と紙幣を数える当社の iOS 例示アプリで、コンピュータービジョンモデルを iPhone にデプロイする方法の例です。バウンディングボックスの可視化、FPS、物体カウント、画像アップロードなどの例を確認できます。
