メインコンテンツへスキップ

Capacitor iOS トラブルシューティング:よくあるエラーと解決策

Capacitor iOS でよくある問題(No such module Capacitor、プラグイン未実装、SPM/CocoaPods エラー、署名、真っ白な画面、アップロードエラーなど)を解決します。

Capacitor アプリターゲットの Xcode Signing and Capabilities タブ(チームと実行ボタンがハイライト表示)

Capacitor iOS の問題の多くは、ツールチェーンの誤り、依存関係の解決(SPM または CocoaPods)、プラグインによるコンパイルエラー、code の署名、「plugin is not implemented」や WebView が真っ白になるといったランタイムの問題の5つに分類されます。まずは bunx cap doctor、Xcode 26 が選択されていることを確認してから、 bunx cap sync ios、そして最後ではなく、Xcodeのビルドログの最初のエラーを確認してください。

このガイドでは、Capacitor 8のプロジェクトで頻繁に発生するエラーの原因と解決策をまとめています。Androidについては、以下を参照してください: Capacitor Androidトラブルシューティングガイド.

クイックトリアージチェックリスト

特定のエラーを追う前に、これらを実行してください:

bunx cap doctor            # Capacitor, CLI and plugin versions should match
node -v                    # 22 or later for Capacitor 8
xcodebuild -version        # 26.x
xcode-select -p            # should point to the Xcode you expect
bun run build && bunx cap sync ios
  • バージョン: @capacitor/core, @capacitor/ios と @capacitor/cli メジャーバージョンが一致している必要があります。不一致があると、妙なコンパイルエラーやランタイムエラーの原因となります。詳細は Capacitor のバージョン不一致エラーを修正する方法.
  • Xcodeを1つに:複数のXcodeバージョンがある場合、 xcode-select -p CLI がどれを使うかを決めます。修正するには: sudo xcode-select -s /Applications/Xcode.app.
  • どのパッケージマネージャーか: ios/App/CapApp-SPM が存在すれば、プロジェクトはSPMを使用しています。 ios/App/Podfile が存在すれば、CocoaPodsを使用しています。

ツールチェーンエラー

XcodeまたはSDKが古すぎる

症状: value of type 'WKWebView' has no member 'isInspectable'、内部のSwift構文エラー Capacitor、または compiling for iOS 15.0, but module 'X' has a minimum deployment target of iOS 16.0.

Capacitor 8 は Xcode 26 を必要とします。GitHub Actions では、 macos-latest 必ずしも最新の Xcode を含むイメージを指すとは限りません。Xcode 26 を含むイメージを固定し、明示的に選択してください:

- run: sudo xcode-select -s /Applications/Xcode_26.0.app

正確なパスについてはランナーイメージのドキュメントを確認してください。モジュールの最低要件エラーの場合、アプリのデプロイメントターゲットをプラグインの最低要件以上に引き上げるか、古いバージョンのプラグインを使用してください。

ITMS-90725: SDK version issue アップロード時

ビルドに使用された SDK が、Apple が現在受け入れているバージョンより古いです。2026年4月28日以降、アップロードには Xcode 26 と iOS 26 SDK でのビルドが必須です。詳細は Appleによる Capacitor アプリ向けのXcode 26要件. Capgo のビルド Macランナーのメンテナンスを避けたい場合、Xcode 26でビルド可能です。

Swift Package Manager エラー

Missing package product 'CapApp-SPM'

Xcode がローカルパッケージを解決していないか、キャッシュが古くなっています。

  1. File > Packages > Reset Package Caches.
  2. File > Packages > Resolve Package Versions を.
  3. アプリが CocoaPods から移行された場合は、 CapApp-SPM がプロジェクトの パッケージの依存関係 タブに追加され、App ターゲットにリンクされていることを確認してください。

product 'X' required by package 'capapp-spm' target 'CapApp-SPM' not found

プラグインの Package.swift が、npm 名から Capacitor CLI が生成したパッケージ名またはプロダクト名と一致しません。これはプラグインのバグです。プラグインをアップデートするか、 パッチを適用してください。プラグイン作成者は命名規則を Capacitor プラグインを SPM に移行する.

「インストール済みの Capacitor プラグインの一部が SPM と互換性がない」

この警告は cap sync 中に少なくとも 1 つのプラグインに Package.swift. アプリに含まれないため、呼び出すと「not implemented」で失敗します。プラグインをアップグレードするか、SPM対応のプラグインに置き換えるか、 当面は CocoaPods を使用してください.

パッケージ識別子またはターゲット名の重複

2つのプラグインがパッケージ識別子またはターゲット名を共有しています(多くの場合、次のような汎用的な名前 Plugin)。CLI 8.4 以降では、Capacitor の設定から修正できます:

const config: CapacitorConfig = {
  // ...
  experimental: {
    ios: {
      spm: {
        packageOptions: {
          '@acme/capacitor-foo': { symlink: true },
          '@acme/capacitor-bar': { moduleAliases: { Plugin: 'AcmeBarPlugin' } },
        },
      },
    },
  },
};

symlink これにより、CLI は一意のパスを持つシンボリックリンクフォルダ経由でプラグインを参照します。 moduleAliases その依存関係で競合しているモジュール名を変更します。この競合は upstream にも報告してください。

編集しないでください CapApp-SPM/Package.swift

CLI は sync のたびにそれを書き換えます。ローカルでの編集は消えます。代わりに experimental.ios.spm 設定オプションを使用してください。

CocoaPods のエラー

No such module 'Capacitor'

開いた App.xcodeproj の代わりに App.xcworkspace. 入力が不正な場合は、 bunx cap open ios。ワークスペースが開いていてエラーが続く場合は、実行してください bunx cap sync ios pods を再インストールします。

CocoaPods could not find compatible versions for pod "X"

原因は2つ:

  1. 古い spec リポジトリ: 実行 cd ios/App && pod install --repo-update.
  2. 競合するピン留め: 2つのプラグインが同じ pod の互換性のないバージョンを必要としています。エラーにチェーンが表示されます。厳密なピン留めをしているプラグインをアップグレードし、バージョンを揃えます(Firebase の場合は、すべての Firebase プラグインを同じ SDK バージョンに保ちます)、または podspec をパッチします。

それでも失敗が続く場合は、削除してください ios/App/Podfile.lock と ios/App/Pods、その後再度同期します。これによりすべての pod がアップグレードされるため、その後テストしてください。

The sandbox is not in sync with the Podfile.lock

実行 bunx cap sync ios。ブランチの切り替えや部分的なインストールの後に発生します。

Unable to find compatibility version string for object version '70'

お使いの project.pbxproj は、お使いの CocoaPods バージョンが読み取れない形式です。CocoaPods を更新してください(brew upgrade cocoapods 、または Gemfileでバージョンを上げる)。最終手段として、ファイルをバックアップしてから objectVersion.

Sandbox: rsync(...) deny(1) file-write-create

Xcode のユーザースクリプトサンドボックスが CocoaPods のフレームワーク埋め込みスクリプトをブロックしています。 ビルド設定 > ユーザースクリプトのサンドボックス まで いいえ を App ターゲットで設定してください。

could not find module 'Capacitor' for target 'x86_64-apple-ios-simulator'

シミュレータのビルドが Intel 向けに実行されています。Apple Silicon では、Xcode が Rosetta 経由で実行されているか、古い EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64 この設定は過去のワークアラウンドの名残です。Xcode をネイティブで実行し、App ターゲットおよびすべての post_install フックからその設定を削除してから、クリーンして再ビルドしてください。

コンパイルエラー

Command PhaseScriptExecution failed with a nonzero exit code

これはラッパーです。レポートナビゲータで失敗している Build Phase を展開し、スクリプトの出力を確認してください。Capacitor アプリでよくある原因は次のとおりです:

  • Run Script には node が必要ですが、Xcode はシェルプロファイルを読み込まないため、nvm、fnm、Volta でインストールした Node を見つけられません。スクリプト内で node のフルパスを使うか、スクリプトの先頭で PATH を export してください。
  • クラッシュレポートのアップロードスクリプト(Sentry、Crashlytics)に CI の認証情報が設定されていません。
  • User Script Sandboxing により CocoaPods の embed スクリプトがブロックされています(上記参照)。

'X' is only available in iOS 16.0 or newer

プラグインがデプロイターゲットより高い API を使用しています。Xcode で、CocoaPods を使っている場合は Podfile(platform :ios, '16.0')でもターゲットを上げ、プラグインの README で最小要件を確認してください。

プラグインでの Swift 6 並行処理エラー

次のようなメッセージが表示されるのは、 Sending 'x' risks causing data races プラグインやアプリのターゲットが Swift 6 言語モードを使っている場合です。Capacitor 8 は Swift 6 を正式にサポートしていません。プラグインが更新されるまで、App ターゲットは Swift 5 言語モードのままにしてください。

Code の署名

Signing for "App" requires a development team

開く App target > Signing & Capabilities チームを選択します。CIでは、次を渡します DEVELOPMENT_TEAM まで xcodebuild または署名ツールを使用します。エラーがAppではなくPodのリソースバンドルを指している場合は、Podfileでバンドルターゲットの署名を無効にします。 post_install hook。

Provisioning profile "X" doesn't include the ... entitlement

プロファイルを再生成せずにCapability(Push Notifications, Associated Domains, Sign in with Apple)を追加しました。Apple DeveloperポータルのApp IDで有効にしてから、プロファイルを更新してください。当社の iOS証明書ジェネレーター Mac のキーチェーン操作なしで証明書を作成でき、 UDID 検索ツール テストデバイスの登録を支援します。

Unable to install "App" デバイス上

デバイスで開発者モードを有効にし(設定 > プライバシーとセキュリティ > 開発者モード)、開発者証明書に信頼を設定し、開発ビルド用のプロビジョニングプロファイルにデバイスの UDID が含まれていることを確認してください。

ランタイムエラー

"X" plugin is not implemented on ios

JavaScript 側でネイティブ実装が見つかりませんでした。以下の順で確認してください:

  1. プラグインが package.json にあり、インストール後に bunx cap sync ios を実行しました。
  2. SPM の場合、プラグインが ios/App/CapApp-SPM/Package.swiftに表示されます。表示されない場合は、 Package.swift.
  3. CocoaPods の場合: プラグインは capacitor_pods の Podfile のブロックに存在し、 pod install 警告は出力されていませんでした。
  4. 同じJS名を登録しているプラグインが2つないこと(例:プッシュ通知プラグインが2つなど)。
  5. WKAppBoundDomains に含まれていません Info.plist、または含まれている場合、 limitsNavigationsToAppBoundDomains が設定されており、 localhost がリストされている。そうでない場合、App-bound domains がプラグインのスクリプト注入をブロックします。
  6. ビルドフォルダをクリーンして再ビルドしてください。古いビルドが残っていると、古いプラグイン登録も残ります。

起動時に画面が真っ白になる

まずSafari Web InspectorでWebViewを確認してください。真っ白な画面の多くはJavaScriptエラーが原因です。

  • 誤り webDir: capacitor.config.ts が、…を含まないフォルダを指しています index.htmlを確認してください。 ios/App/App/public.
  • ビルドターゲットが新しすぎる: バンドラーが古い WebKit ではサポートされない構文を出力しています。Capacitor 8 の最小要件は iOS 15 なので、Vite/esbuild の target を iOS 15 safari15 以降に設定し、以下を確認してください: browserslist.
  • アセットの絶対パス: base バンドラー設定で CDN やサブパスに設定すると、ローカルでの読み込みが失敗します。
  • Live reload に接続できない: 開発サーバーが LAN IP (--host 0.0.0.0)で待機している必要があります。また、スマホが同じネットワークに接続されている必要があり、アプリに ローカルネットワーク の権限(設定 > プライバシーとセキュリティ > ローカルネットワーク)が必要です。リリースビルドの前に config から server.url 削除してください。
  • Live update bundle が壊れている:アプリがOTA更新を使用している場合、不良なバンドルが画面を白くすることがあります。Capgo のアップデーターは、 notifyAppReady() が間に合わず呼び出されない場合です。 updater のドキュメント.

ノッチやホームインジケーターの下にコンテンツが重なる

追加 viewport-fit=cover をビューポートメタタグに追加し、 env(safe-area-inset-top) と env(safe-area-inset-bottom)。Capacitor 8 の System Bars プラグインは、両プラットフォームでステータスバーのスタイルと表示を制御します。

キーボードが入力フィールドを覆う

次の Keyboard プラグイン resize モード (native, body, ionic または none)、実機でテストしてください。シミュレーターではキーボードの挙動が異なります。

App Store Connect のエラー

  • ITMS-91053: Missing API declaration: アプリまたはプラグインが、プライバシーマニフェストに記載のない required-reason の API を使用しています。次を追加: PrivacyInfo.xcprivacy App ターゲットに理由とともに追加し、独自のマニフェストを同梱するプラグインを更新してください。
  • ITMS-90725: SDK version issue: Xcode 26 で再ビルドしてください。
  • Invalid Bundle. The bundle ... contains disallowed file 'Frameworks': フレームワークが extension または別のフレームワーク内に埋め込まれています。次を確認してください: 埋め込み app extension の設定。

エラーが一覧にない場合のデバッグ方法

  1. Safari Web Inspector JS エラーやネットワーク通信の確認に。デバッグビルドは iOS 16.4 以降で検査可能です。リリースビルドの場合は次を設定: ios.webContentsDebuggingEnabled: true 一時的に。
  2. Xcode コンソール ネイティブログ(Capacitor のログを含む) ⚡️ 各プラグイン呼び出しを表示するブリッジメッセージ。
  3. Console.app デバイスを選択して、クラッシュログやシステムログを確認します。
  4. 切り分ける:で新しいアプリを作成します bun create @capacitor/app、疑わしいプラグインのみを追加して、エラーが再現するか確認します。

この Capacitor アプリのデバッグ完全ガイドで紹介しています。 各ツールを詳しく掘り下げます。根本原因がプラグインのバグなら、 パッチ は通常、リリースを待つ間の最速の打開策です。

Capacitor アプリ向けの Live Updates

Web レイヤーのバグが本番で発生したら、App Store の審査を何日も待たずに Capgo で修正を配信しましょう。ネイティブの変更は通常の審査フローに残したまま、ユーザーはバックグラウンドでアップデートを受け取れます。

最新のブログ記事

Capgoは、真にプロフェッショナルなモバイルアプリを作るために必要な最高のインサイトを提供します。