Debugging Capacitor

Cap-go/capgo-skills/plugins/capacitor-quality/skills/debugging-capacitor

作者 Cap-go2cfb277a148832bdb1a835b01e4de323687b498b無授權條款72 個星標收錄於 2026年10月9日更新於 2026年10月9日儲存庫今天更新

Comprehensive debugging guide for Capacitor applications. Covers WebView debugging, native debugging, crash analysis, network inspection, and common issues. Use this skill when users report bugs, crashes, or need help diagnosing issues.

AI 產生的概覽

指導 Capacitor 行動應用程式除錯:WebView 檢查、原生偵錯工具、當機記錄與常見問題排查。

功能
此技能為 iOS 與 Android 上 Capacitor 應用程式的問題診斷提供參考指南。內容涵蓋使用 Safari Web Inspector 與 Chrome DevTools 進行 WebView 偵錯、在 Xcode 與 Android Studio 中進行原生偵錯、JavaScript 與原生端的主控台記錄,以及效能與記憶體分析。它也列出啟動當機、外掛缺少、網路請求失敗、權限遭拒、白畫面與深層連結等常見問題,並提供診斷步驟與修正方式。
適用情境
當 Capacitor 應用程式當機、行為異常,或需要在 iOS、Android 上進行診斷時使用。適合 WebView 或原生偵錯、網路與 API 故障、權限問題,以及效能或記憶體問題。
執行需求
不隨附指令碼,僅為說明性內容。依指南操作需要 Capacitor 專案以及平台工具,例如 Xcode、Safari、Android Studio、Chrome 與 adb,並可能涉及執行 npx cap sync 等指令。

Debugging Capacitor Applications

Complete guide to debugging Capacitor apps on iOS and Android.

When to Use This Skill

  • User reports app crashes
  • User needs to debug WebView/JavaScript
  • User needs to debug native code
  • User has network/API issues
  • User sees unexpected behavior
  • User asks how to debug

Quick Reference: Debugging Tools

PlatformWebView DebugNative DebugLogs
iOSSafari Web InspectorXcode DebuggerConsole.app
AndroidChrome DevToolsAndroid Studioadb logcat

WebView Debugging

iOS: Safari Web Inspector

  1. Enable on device:

    • Settings > Safari > Advanced > Web Inspector: ON
    • Settings > Safari > Advanced > JavaScript: ON
  2. Enable in Xcode (capacitor.config.ts):

typescript
const config: CapacitorConfig = {  ios: {    webContentsDebuggingEnabled: true, // Required for iOS 16.4+  },};
  1. Connect Safari:

    • Open Safari on Mac
    • Develop menu > [Device Name] > [App Name]
    • If no Develop menu: Safari > Settings > Advanced > Show Develop menu
  2. Debug:

    • Console: View JavaScript logs
    • Network: Inspect API calls
    • Elements: Inspect DOM
    • Sources: Set breakpoints

Android: Chrome DevTools

  1. Enable in config (capacitor.config.ts):
typescript
const config: CapacitorConfig = {  android: {    webContentsDebuggingEnabled: true,  },};
  1. Connect Chrome:

    • Open Chrome on computer
    • Navigate to chrome://inspect
    • Your device/emulator should appear
    • Click "inspect" under your app
  2. Debug features:

    • Console: JavaScript logs
    • Network: API requests
    • Performance: Profiling
    • Application: Storage, cookies

Remote Debugging with VS Code

Install "Debugger for Chrome" extension:

json
// .vscode/launch.json{  "version": "0.2.0",  "configurations": [    {      "type": "chrome",      "request": "attach",      "name": "Attach to Android WebView",      "port": 9222,      "webRoot": "${workspaceFolder}/dist"    }  ]}

Native Debugging

iOS: Xcode Debugger

  1. Open in Xcode:
bash
npx cap open ios
  1. Set breakpoints:

    • Click line number in Swift/Obj-C files
    • Or use breakpoint set --name methodName in LLDB
  2. Run with debugger:

    • Product > Run (Cmd + R)
    • Or click Play button
  3. LLDB Console commands:

lldb
# Print variablepo myVariable
# Print object descriptionp myObject
# Continue executioncontinue
# Step overnext
# Step intostep
# Print backtracebt
  1. View crash logs:
    • Window > Devices and Simulators
    • Select device > View Device Logs

Android: Android Studio Debugger

  1. Open in Android Studio:
bash
npx cap open android
  1. Attach debugger:

    • Run > Attach Debugger to Android Process
    • Select your app
  2. Set breakpoints:

    • Click line number in Java/Kotlin files
  3. Debug console:

# Evaluate expressionmyVariable
# Run methodmyObject.toString()
  1. Logcat shortcuts:
    • View > Tool Windows > Logcat
    • Filter by package: package:com.yourapp

Console Logging

JavaScript Side

typescript
// Basic loggingconsole.log('Debug info:', data);console.warn('Warning:', issue);console.error('Error:', error);
// Grouped logsconsole.group('API Call');console.log('URL:', url);console.log('Response:', response);console.groupEnd();
// Table formatconsole.table(arrayOfObjects);
// Timingconsole.time('operation');// ... operationconsole.timeEnd('operation');

Native Side (iOS)

swift
import os.log
let logger = Logger(subsystem: "com.yourapp", category: "MyPlugin")
// Log levelslogger.debug("Debug message")logger.info("Info message")logger.warning("Warning message")logger.error("Error message")
// With datalogger.info("User ID: \(userId)")
// Legacy NSLog (shows in Console.app)NSLog("Legacy log: %@", message)

Native Side (Android)

kotlin
import android.util.Log
// Log levelsLog.v("MyPlugin", "Verbose message")Log.d("MyPlugin", "Debug message")Log.i("MyPlugin", "Info message")Log.w("MyPlugin", "Warning message")Log.e("MyPlugin", "Error message")
// With exceptionLog.e("MyPlugin", "Error occurred", exception)

Common Issues and Solutions

Issue: App Crashes on Startup

Diagnosis:

bash
# iOS - Check crash logsxcrun simctl spawn booted log stream --level debug | grep -i crash
# Android - Check logcatadb logcat *:E | grep -i "fatal\|crash"

Common causes:

  1. Missing plugin registration
  2. Invalid capacitor.config
  3. Missing native dependencies

Solution checklist:

  • Run npx cap sync
  • iOS: cd ios/App && pod install
  • Check Info.plist permissions
  • Check AndroidManifest.xml permissions

Issue: Plugin Method Not Found

Error: Error: "MyPlugin" plugin is not implemented on ios/android

Diagnosis:

typescript
import { Capacitor } from '@capacitor/core';
// Check if plugin existsconsole.log('Plugins:', Capacitor.Plugins);console.log('MyPlugin available:', !!Capacitor.Plugins.MyPlugin);

Solutions:

  1. Ensure plugin is installed: npm install @capgo/plugin-name
  2. Run sync: npx cap sync
  3. Check plugin is registered (native code)

Issue: Network Requests Failing

Diagnosis:

typescript
// Add request interceptorconst originalFetch = window.fetch;window.fetch = async (...args) => {  console.log('Fetch:', args[0]);  try {    const response = await originalFetch(...args);    console.log('Response status:', response.status);    return response;  } catch (error) {    console.error('Fetch error:', error);    throw error;  }};

Common causes:

  1. iOS ATS blocking HTTP: Add to Info.plist:
xml
<key>NSAppTransportSecurity</key><dict>    <key>NSAllowsArbitraryLoads</key>    <true/></dict>
  1. Android cleartext blocked: Add to capacitor.config.ts:
typescript
server: {  cleartext: true, // Only for development!}
  1. CORS issues: Use native HTTP:
typescript
import { CapacitorHttp } from '@capacitor/core';
const response = await CapacitorHttp.request({  method: 'GET',  url: 'https://api.example.com/data',});

Issue: Permission Denied

Diagnosis:

typescript
import { Permissions } from '@capacitor/core';
// Check permission statusconst status = await Permissions.query({ name: 'camera' });console.log('Camera permission:', status.state);

iOS: Check Info.plist has usage descriptions:

xml
<key>NSCameraUsageDescription</key><string>We need camera access to scan documents</string>

Android: Check AndroidManifest.xml:

xml
<uses-permission android:name="android.permission.CAMERA" />

Issue: White Screen on Launch

Diagnosis:

  1. Check WebView console for errors (Safari/Chrome)
  2. Check if dist/ folder exists
  3. Verify webDir in capacitor.config.ts

Solutions:

bash
# Rebuild web assetsnpm run build
# Sync to nativenpx cap sync
# Check configcat capacitor.config.ts

Issue: Deep Links Not Working

Diagnosis:

typescript
import { App } from '@capacitor/app';
App.addListener('appUrlOpen', (event) => {  console.log('Deep link:', event.url);});

iOS: Check Associated Domains entitlement and apple-app-site-association file.

Android: Check intent filters in AndroidManifest.xml.

Performance Debugging

JavaScript Performance

typescript
// Mark performanceperformance.mark('start');// ... operationperformance.mark('end');performance.measure('operation', 'start', 'end');
const measures = performance.getEntriesByName('operation');console.log('Duration:', measures[0].duration);

iOS Performance (Instruments)

  1. Product > Profile (Cmd + I)
  2. Choose template:
    • Time Profiler: CPU usage
    • Allocations: Memory usage
    • Network: Network activity

Android Performance (Profiler)

  1. View > Tool Windows > Profiler
  2. Select:
    • CPU: Method tracing
    • Memory: Heap analysis
    • Network: Request timeline

Memory Debugging

JavaScript Memory Leaks

Use Chrome DevTools Memory tab:

  1. Take heap snapshot
  2. Perform action
  3. Take another snapshot
  4. Compare snapshots

iOS Memory (Instruments)

bash
# Run with Leaks instrumentxcrun instruments -t Leaks -D output.trace YourApp.app

Android Memory (LeakCanary)

Add to build.gradle:

groovy
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.12'

Debugging Checklist

When debugging issues:

  • Check WebView console (Safari/Chrome DevTools)
  • Check native logs (Xcode Console/Logcat)
  • Verify plugin is installed and synced
  • Check permissions (Info.plist/AndroidManifest)
  • Test on real device (not just simulator)
  • Try clean build (rm -rf node_modules && npm install)
  • Verify capacitor.config.ts settings
  • Check for version mismatches (capacitor packages)

Resources

來源與署名

來源:Cap-go/capgo-skills位於plugins/capacitor-quality/skills/debugging-capacitor提交2cfb277

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架