# ガイドライン2.5.1とは？Expoアプリの公開APIとSDK対策

> ガイドライン2.5.1は、公開APIのみ使用、最新iOSで動作、フレームワークは本来の用途で使うことを求めます。Expoではまずネイティブモジュールを確認しましょう。

元のページ：[ガイドライン2.5.1とは？Expoアプリの公開APIとSDK対策](https://devoria.fr/ja/blog/guideline-2-5-1-public-api-sdk-expo)
著者：[Mehdi Azizi](https://devoria.fr/ja/mehdi-azizi)
公開日：2026-11-04
内容の最終更新：2026-11-04


ガイドライン2.5.1には4つの要件があります。公開APIだけを使うこと、現行のiOSで動作すること、Appleが非推奨にしたものをやめること、各フレームワークを本来の用途で使うことです。**Expoの場合、リスクがJavaScriptのコードから来ることはまずありません。インストールしたネイティブモジュールと、ビルドに使うSDKから来ます。**

僕はSolys、TradaZen、NoleraをExpo SDK 57で公開しています。SolysはAppleのスクリーンタイムAPIを使っていて、これは用途が厳しく管理されたフレームワークです。このガイドでは審査ルールを扱います。ビルド送信時に受け取るエラーについては[ITMS-90338](https://devoria.fr/ja/blog/itms-90338-non-public-api-usage-expo)のガイドを読んでください。同じセクションにあるバックグラウンドモードについては[ガイドライン2.5.4](https://devoria.fr/ja/blog/guideline-2-5-4-background-mode-rejected)のガイドをどうぞ。

## ガイドライン2.5.1には何が書かれている？

このルールは[App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#2.5.1)のセクション2.5「Software Requirements」にあります。「Apps may only use public APIs and must run on the currently shipping OS. Keep your apps up-to-date and make sure you phase out any deprecated features, frameworks or technologies that will no longer be supported in future versions of an OS. Apps should use APIs and frameworks for their intended purposes and indicate that integration in their app description.」

要するに、義務は4つです。

1. **公開APIのみ**、つまりAppleがドキュメント化しているAPIだけを使う。
2. **現行バージョンのiOSで動くアプリ**。2026年9月からはiOS 27です。
3. **いずれ消える非推奨のものは使わない**：Appleが廃止予定と発表したものは置き換える。
4. **各フレームワークを本来の場所で使い、説明文にも記載する**：HomeKitはスマートホーム用、HealthKitはヘルスケアとフィットネス用で、ヘルスケアアプリと連携します。

そこからリジェクトのタイトルは「Guideline 2.5.1 - Performance - Software Requirements」となります。

## 公開API：Expoアプリのどこにリスクが潜んでいるか

プライベートAPIとは、Appleがドキュメント化していないシステムの関数です。Appleはその動作も、次のiOSバージョンで存在し続けることも保証しません。だから禁止されています。

あなたのJavaScriptコードがiOSに直接触れることはありません。ネイティブモジュールを経由します。Expo SDKのモジュールはExpoチームがメンテナンスしています。**それ以外のモジュールには、あなたが書いていないコードが含まれていて、Appleはそれをあなたのコードと同じように審査します。**[ITMS-90683](https://devoria.fr/ja/blog/itms-90683-missing-purpose-string-expo)のガイドでも、権限の説明文について同じ仕組みを紹介しています。Appleが判断するのはビルドに含まれるコードであって、アプリが実際に何をするかではありません。

Solysでは、2026年10月15日時点で、ネイティブiOSコードを含む直接依存が42個あり、そのうち14個がExpo SDK外のものです。RevenueCat、Sentry、AppsFlyer、そしてスクリーンタイムAPIへのブリッジである`react-native-device-activity`などです。

プライベートAPIが見つかるタイミングは2つあります。送信時には、App Store Connectの自動解析がエラーITMS-90338を返すことがあります。審査中には、レビュアーが2.5.1を引用します。

## 非推奨API：UIWebViewからUISceneへ

一番有名な例は、Webを表示する古いコンポーネントのUIWebViewです。Appleは2020年4月に新規アプリで、2020年12月にアップデートで[受け付けを停止](https://developer.apple.com/news/?id=12232019b)しました。まだこれを参照している古いライブラリがあると、送信がブロックされていました。Solysでは、後述のチェックリストの検索で参照は1つも見つかりません。

次の変更はすでに発表されています。Appleのテクニカルノート[TN3187](https://developer.apple.com/documentation/technotes/tn3187-migrating-to-the-uikit-scene-based-life-cycle)にはこう書かれています。「In the next major release following iOS 26, UIScene lifecycle will be required when building with the latest SDK; otherwise, your app won't launch.」つまり、シーンベースのライフサイクルなしでiOS 27のSDKでビルドしたアプリは起動しません。

押さえておくべき日付は3つです。

- **2026年4月から**、AppleはXcode 26を必須にしています。これは[ITMS-90725](https://devoria.fr/ja/blog/itms-90725-sdk-version-issue-expo)のガイドのテーマです。
- **2027年4月には**、Appleの[送信ページ](https://developer.apple.com/app-store/submitting/)によるとiOS 27のSDKが必須になります。
- **Expo SDK 58**は2026年9月15日からベータ版で、[Expoの発表](https://expo.dev/changelog/sdk-58-beta)によると、すでにシーン管理のコードを生成します。

Expo SDK 57とXcode 26なら、まだiOS 26のSDKでビルドしているので、今のところ何も壊れません。**AppDelegateを変更するモジュールは、2027年4月までに対応が必要です。**

## 本来の用途以外で使われるフレームワーク

レビュアーは、センシティブなフレームワークが目に見える機能に使われているか、そしてストアページにそれが記載されているかを確認します。

- **HealthKit**はヘルスケアとフィットネス用です。Appleの[ヒューマンインターフェイスガイドライン](https://developer.apple.com/design/human-interface-guidelines/healthkit)にこうあります。「If your app doesn't provide health and fitness functionality, don't request access to people's private health data.」
- **HomeKit**はスマートホーム用で、それ以外には使えません。
- **PushKit**はVoIP通話用です。[PushKitのドキュメント](https://developer.apple.com/documentation/pushkit/responding-to-voip-notifications-from-pushkit)ははっきりしています。「If you are unable to support CallKit in your app, you cannot use PushKit to handle push notifications.」通話なしでアプリを起こすVoIP通知は目的外使用です。
- **Family Controls**、つまりスクリーンタイムAPIには特別な許可が必要です。[ドキュメント](https://developer.apple.com/documentation/familycontrols)にはこうあります。「Before submitting your app to the App Store, you must request permission to use the entitlement.」

Solysでは、2026年9月23日にこの配信用の許可を申請し、Appleは当日に承認してくれました。使い方はフレームワークの目的どおりです。ユーザーが一時停止したいアプリを選び、Solysが起床後30分、45分、60分のあいだそれらをブロックします。ストアページの説明文には一文でこう書いています。「SolysはAppleのスクリーンタイム権限を使って、選択したアプリを一時停止します。」**これこそ2.5.1の最後の部分が求めていること、つまり説明文での連携の記載です。**

## ベータ版：TestFlightはOK、App Storeは不可

[App Store Connectのリリースノート](https://developer.apple.com/help/app-store-connect/release-notes/)を見ると、このルールの実際がわかります。2026年10月14日、Xcode 27.2 beta 3で作ったビルドは「for internal and external testing」、つまりTestFlight用として受け付けられています。10月5日には、Xcode 27.1 RCのビルドが「for the App Store」として受け付けられています。

**Xcodeのベータ版でビルドしたものはTestFlightには出せますが、審査には絶対に出せません。**提出するには、正式版か、AppleがApp Store向けに開放したRCが必要です。

Expoアプリについて補足が2つあります。

- **ExpoのベータはAppleのベータではありません。**Appleがチェックするのは、XcodeとiOS SDKのバージョンで、Expoのバージョンではありません。SDK 58の発表では、Xcode 27を搭載したEASイメージが近日提供予定とも書かれていました。
- **iOS 26のSDKでビルドしていても、現行iOSでのテストは必須です。**最新のiPhoneかシミュレーターで、アプリをコールドスタートしてください。

## チェックリスト：提出前のネイティブ依存

本番ビルドの前に毎回確認してください。コマンドはExpoプロジェクトのルートで実行します。

```bash
npx expo-doctor
npx expo install --check
grep -rlw "UIWebView" node_modules --include='*.m' --include='*.mm' --include='*.swift' --include='*.h'
```

1. **`npx expo-doctor`が失敗を1つも報告しない。**Solysでは2026年10月15日時点で21項目中20項目が成功でした。失敗の原因はパッチが1つ遅れたExpoパッケージ13個で、`npx expo install --check`で揃えられます。
2. **Expo SDK外の各モジュールがReact Native Directoryに載っている。**[Expoのドキュメント](https://docs.expo.dev/versions/latest/config/package-json/)にあるとおり、Expo Doctorはデフォルトでこのチェックを行います。知らないパッケージは、iOSコードを読んでみる価値があります。
3. **各ネイティブモジュールが、使っているReact Nativeのバージョンに追従している。**[Expoのバージョン表](https://docs.expo.dev/versions/latest/)では、SDK 57はReact Native 0.86に対応しています。何バージョンもリリースのないモジュールは要注意のサインです。
4. **UIWebViewの検索結果が何もない。**Appleが廃止予定と発表したAPIすべてについて同じことをしてください。
5. **センシティブなフレームワークごとに目に見える機能がある**：ヘルスケア、スクリーンタイム、通話、スマートホーム。説明文に記載し、特別な許可も承認済みであること。
6. **ビルドがXcodeの正式版で作られている。**EAS Buildのログでバージョンを確認してください。
7. **アプリが現行iOSで、新規アカウントを使ってコールドスタートできる。**
8. **AppDelegateに触れるモジュールがUISceneへの対応を表明している**こと。iOS 27のSDKへ移行する前に確認しましょう。

## 2.5.1のリジェクトにどう返信する？

メッセージには通常、問題のAPIかフレームワークの名前が書かれています。ケースは2つです。

- **フレームワークが目に見える機能に使われていない**：モジュールやケイパビリティを削除し、ビルドし直してから、2文で返信します。
- **フレームワークが実際の機能に使われている**：正確な操作手順、スクリーンショットか短い動画を示し、ストアページの説明文に連携を記載します。

**ネイティブモジュールの削除はバイナリを変更します。リモートアップデートでは不十分です。**レビュアーが組み込まれたコードしか見ない理由は[ガイドライン2.1](https://devoria.fr/ja/blog/guideline-2-1-app-store-rejection-fix)のガイドで説明しています。その後のやり取りはApp Store Connectで行います。[App Reviewへの返信](https://devoria.fr/ja/blog/apple-resolution-center-app-review-rejection-reply)のガイドも参考にしてください。

## 送信前にプロジェクトをチェックする

[Review Kit](https://devoria.fr/ja/kits/app-review)には、僕の送信前チェックリスト、修正済みのリジェクト事例、そしてExpoプロジェクトを読み直すClaude Codeのスキルをまとめています。人の目で見てほしいなら、[僕と1時間の枠を予約](https://devoria.fr/ja/coaching)してください。Appleのメッセージとあなたの依存関係を一緒に読みます。全体の進め方は[Appleにリジェクトされたアプリ](https://devoria.fr/ja/expertise/app-rejected-by-apple)のページにあります。

初めてのリリースを準備中ですか？[無料診断を受ける](https://devoria.fr/ja/diagnostic)と、僕のAppleリジェクト対策チェックリストが届きます。

## よくある質問

### 「Guideline 2.5.1 - Performance - Software Requirements」とはどういう意味？

アプリが非公開API、非推奨の技術、または本来の用途外のフレームワークを使っているとAppleが判断したときのリジェクトのタイトルです。メッセージには通常、問題の要素が書かれています。

### ガイドライン2.5.1とエラーITMS-90338の違いは？

ITMS-90338は、解析で非公開のシンボルが見つかったときにビルド送信時に受け取る自動エラーです。2.5.1は人が適用する審査ルールで、目的外のフレームワークや非推奨の技術もカバーします。

### Xcodeのベータ版でビルドしたアプリは提出できる？

できません。App Store ConnectはこうしたビルドをTestFlight用にしか受け付けません。審査には、Xcodeの正式版か、Appleがリリースノートで App Store向けに開放したRCでビルドしてください。

### Expoアプリが知らないうちにプライベートAPIを使うことはある？

あります。サードパーティのネイティブモジュール経由です。JavaScriptコード自体はiOSを呼び出しませんが、各ネイティブパッケージにはObjective-CやSwiftのコードが含まれています。リリースのたびに、Expo SDK外のモジュール一覧を確認してください。

### 今すぐExpo SDK 58に移行すべき？

2026年10月15日時点では、2.5.1のためには不要です。SDK 57はまだ受け付けられているiOS 26のSDKでビルドします。AppleがiOS 27のSDKとシーンベースのライフサイクルを必須にする2027年4月までに移行を計画しましょう。


## あなたのプロジェクト

[Review Kit](https://devoria.fr/ja/kits/app-review)：私のApp Store審査チェックリスト、修正済みのAppleのリジェクト事例、Google Play用チェックリスト、Claude Codeのスキル3つ。￥8,500。

[iOS & Android Kit](https://devoria.fr/ja/kits/ios)：Claude CodeでiPhoneとAndroidのアプリを作りましょう。私のアプリのスターターコード、ストア公開までの手順、すべてのキットが揃っています。￥17,500。

[診断：あなたとiPhoneアプリの間にあるもの](https://devoria.fr/ja/diagnostic)：7つの質問、60秒。iPhoneアプリの公開を本当に妨げているもの、4ステップのロードマップ、あなたに合ったキットがわかります。
