debugging-capacitor by cap-go/capgo-skills
npx skills add https://github.com/cap-go/capgo-skills --skill debugging-capacitor在 iOS 和 Android 上调试 Capacitor 应用程序的完整指南。
| 平台 | WebView 调试 | 原生调试 | 日志 |
|---|---|---|---|
| iOS | Safari Web 检查器 | Xcode 调试器 | Console.app |
| Android | Chrome DevTools | Android Studio 调试器 | adb logcat |
在设备上启用 :
在 Xcode 中启用 (capacitor.config.ts):
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
const config: CapacitorConfig = {
ios: {
webContentsDebuggingEnabled: true, // iOS 16.4+ 必需
},
};
3. 连接 Safari :
* 在 Mac 上打开 Safari
* 开发菜单 > [设备名称] > [应用程序名称]
* 如果没有开发菜单:Safari > 设置 > 高级 > 显示开发菜单
4. 调试 :
* 控制台:查看 JavaScript 日志
* 网络:检查 API 调用
* 元素:检查 DOM
* 源代码:设置断点
const config: CapacitorConfig = {
android: {
webContentsDebuggingEnabled: true,
},
};
2. 连接 Chrome :
* 在电脑上打开 Chrome
* 导航到 `chrome://inspect`
* 您的设备/模拟器应该会出现
* 在您的应用程序下点击“inspect”
3. 调试功能 :
* 控制台:JavaScript 日志
* 网络:API 请求
* 性能:性能分析
* 应用程序:存储、Cookie
安装 "Debugger for Chrome" 扩展:
// .vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "attach",
"name": "附加到 Android WebView",
"port": 9222,
"webRoot": "${workspaceFolder}/dist"
}
]
}
bunx cap open ios
设置断点 :
breakpoint set --name methodName使用调试器运行 :
LLDB 控制台命令 :
# 打印变量
po myVariable
# 打印对象描述
p myObject
# 继续执行
continue
# 单步跳过
next
# 单步进入
step
# 打印回溯
bt
5. 查看崩溃日志 : * 窗口 > 设备和模拟器 * 选择设备 > 查看设备日志
bunx cap open android
附加调试器 :
设置断点 :
调试控制台 :
# 评估表达式
myVariable
# 运行方法
myObject.toString()
5. Logcat 快捷方式 :
* 视图 > 工具窗口 > Logcat
* 按包名过滤:package:com.yourapp
// 基本日志记录
console.log('调试信息:', data);
console.warn('警告:', issue);
console.error('错误:', error);
// 分组日志
console.group('API 调用');
console.log('URL:', url);
console.log('响应:', response);
console.groupEnd();
// 表格格式
console.table(arrayOfObjects);
// 计时
console.time('operation');
// ... 操作
console.timeEnd('operation');
import os.log
let logger = Logger(subsystem: "com.yourapp", category: "MyPlugin")
// 日志级别
logger.debug("调试消息")
logger.info("信息消息")
logger.warning("警告消息")
logger.error("错误消息")
// 带数据
logger.info("用户 ID: \(userId)")
// 传统 NSLog (在 Console.app 中显示)
NSLog("传统日志: %@", message)
import android.util.Log
// 日志级别
Log.v("MyPlugin", "详细消息")
Log.d("MyPlugin", "调试消息")
Log.i("MyPlugin", "信息消息")
Log.w("MyPlugin", "警告消息")
Log.e("MyPlugin", "错误消息")
// 带异常
Log.e("MyPlugin", "发生错误", exception)
诊断 :
# iOS - 检查崩溃日志
xcrun simctl spawn booted log stream --level debug | grep -i crash
# Android - 检查 logcat
adb logcat *:E | grep -i "fatal\|crash"
常见原因 :
解决方案检查清单 :
bunx cap synccd ios/App && pod install错误 :Error: "MyPlugin" plugin is not implemented on ios/android
诊断 :
import { Capacitor } from '@capacitor/core';
// 检查插件是否存在
console.log('插件:', Capacitor.Plugins);
console.log('MyPlugin 可用:', !!Capacitor.Plugins.MyPlugin);
解决方案 :
bun add @capgo/plugin-namebunx cap sync诊断 :
// 添加请求拦截器
const originalFetch = window.fetch;
window.fetch = async (...args) => {
console.log('Fetch:', args[0]);
try {
const response = await originalFetch(...args);
console.log('响应状态:', response.status);
return response;
} catch (error) {
console.error('Fetch 错误:', error);
throw error;
}
};
常见原因 :
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
2. Android 明文传输被阻止 :添加到 capacitor.config.ts:
server: {
cleartext: true, // 仅用于开发!
}
3. CORS 问题 :使用原生 HTTP:
import { CapacitorHttp } from '@capacitor/core';
const response = await CapacitorHttp.request({
method: 'GET',
url: 'https://api.example.com/data',
});
诊断 :
import { Permissions } from '@capacitor/core';
// 检查权限状态
const status = await Permissions.query({ name: 'camera' });
console.log('相机权限:', status.state);
iOS :检查 Info.plist 是否有使用说明:
<key>NSCameraUsageDescription</key>
<string>我们需要相机权限来扫描文档</string>
Android :检查 AndroidManifest.xml:
<uses-permission android:name="android.permission.CAMERA" />
诊断 :
dist/ 文件夹是否存在webDir解决方案 :
# 重新构建 Web 资源
bun run build
# 同步到原生端
bunx cap sync
# 检查配置
cat capacitor.config.ts
诊断 :
import { App } from '@capacitor/app';
App.addListener('appUrlOpen', (event) => {
console.log('深度链接:', event.url);
});
iOS :检查关联域权利和 apple-app-site-association 文件。
Android :检查 AndroidManifest.xml 中的意图过滤器。
// 标记性能
performance.mark('start');
// ... 操作
performance.mark('end');
performance.measure('operation', 'start', 'end');
const measures = performance.getEntriesByName('operation');
console.log('持续时间:', measures[0].duration);
使用 Chrome DevTools 内存标签页:
# 使用 Leaks 工具运行
xcrun instruments -t Leaks -D output.trace YourApp.app
添加到 build.gradle:
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.12'
调试问题时:
rm -rf node_modules && bun install)每周安装次数
73
仓库
GitHub 星标数
18
首次出现
2026年2月6日
安全审计
安装于
gemini-cli67
opencode65
github-copilot63
codex63
kimi-cli61
amp61
Complete guide to debugging Capacitor apps on iOS and Android.
| Platform | WebView Debug | Native Debug | Logs |
|---|---|---|---|
| iOS | Safari Web Inspector | Xcode Debugger | Console.app |
| Android | Chrome DevTools | Android Studio | adb logcat |
Enable on device :
Enable in Xcode (capacitor.config.ts):
const config: CapacitorConfig = {
ios: {
webContentsDebuggingEnabled: true, // Required for iOS 16.4+
},
};
3. Connect Safari :
* Open Safari on Mac
* Develop menu > [Device Name] > [App Name]
* If no Develop menu: Safari > Settings > Advanced > Show Develop menu
4. Debug :
* Console: View JavaScript logs
* Network: Inspect API calls
* Elements: Inspect DOM
* Sources: Set breakpoints
const config: CapacitorConfig = {
android: {
webContentsDebuggingEnabled: true,
},
};
2. Connect Chrome :
* Open Chrome on computer
* Navigate to `chrome://inspect`
* Your device/emulator should appear
* Click "inspect" under your app
3. Debug features :
* Console: JavaScript logs
* Network: API requests
* Performance: Profiling
* Application: Storage, cookies
Install "Debugger for Chrome" extension:
// .vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "attach",
"name": "Attach to Android WebView",
"port": 9222,
"webRoot": "${workspaceFolder}/dist"
}
]
}
bunx cap open ios
Set breakpoints :
breakpoint set --name methodName in LLDBRun with debugger :
LLDB Console commands :
# Print variable
po myVariable
# Print object description
p myObject
# Continue execution
continue
# Step over
next
# Step into
step
# Print backtrace
bt
5. View crash logs : * Window > Devices and Simulators * Select device > View Device Logs
bunx cap open android
Attach debugger :
Set breakpoints :
Debug console :
# Evaluate expression
myVariable
# Run method
myObject.toString()
5. Logcat shortcuts :
* View > Tool Windows > Logcat
* Filter by package: package:com.yourapp
// Basic logging
console.log('Debug info:', data);
console.warn('Warning:', issue);
console.error('Error:', error);
// Grouped logs
console.group('API Call');
console.log('URL:', url);
console.log('Response:', response);
console.groupEnd();
// Table format
console.table(arrayOfObjects);
// Timing
console.time('operation');
// ... operation
console.timeEnd('operation');
import os.log
let logger = Logger(subsystem: "com.yourapp", category: "MyPlugin")
// Log levels
logger.debug("Debug message")
logger.info("Info message")
logger.warning("Warning message")
logger.error("Error message")
// With data
logger.info("User ID: \(userId)")
// Legacy NSLog (shows in Console.app)
NSLog("Legacy log: %@", message)
import android.util.Log
// Log levels
Log.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 exception
Log.e("MyPlugin", "Error occurred", exception)
Diagnosis :
# iOS - Check crash logs
xcrun simctl spawn booted log stream --level debug | grep -i crash
# Android - Check logcat
adb logcat *:E | grep -i "fatal\|crash"
Common causes :
Solution checklist :
bunx cap synccd ios/App && pod installError : Error: "MyPlugin" plugin is not implemented on ios/android
Diagnosis :
import { Capacitor } from '@capacitor/core';
// Check if plugin exists
console.log('Plugins:', Capacitor.Plugins);
console.log('MyPlugin available:', !!Capacitor.Plugins.MyPlugin);
Solutions :
bun add @capgo/plugin-namebunx cap syncDiagnosis :
// Add request interceptor
const 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 :
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
2. Android cleartext blocked : Add to capacitor.config.ts:
server: {
cleartext: true, // Only for development!
}
3. CORS issues : Use native HTTP:
import { CapacitorHttp } from '@capacitor/core';
const response = await CapacitorHttp.request({
method: 'GET',
url: 'https://api.example.com/data',
});
Diagnosis :
import { Permissions } from '@capacitor/core';
// Check permission status
const status = await Permissions.query({ name: 'camera' });
console.log('Camera permission:', status.state);
iOS : Check Info.plist has usage descriptions:
<key>NSCameraUsageDescription</key>
<string>We need camera access to scan documents</string>
Android : Check AndroidManifest.xml:
<uses-permission android:name="android.permission.CAMERA" />
Diagnosis :
dist/ folder existswebDir in capacitor.config.tsSolutions :
# Rebuild web assets
bun run build
# Sync to native
bunx cap sync
# Check config
cat capacitor.config.ts
Diagnosis :
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.
// Mark performance
performance.mark('start');
// ... operation
performance.mark('end');
performance.measure('operation', 'start', 'end');
const measures = performance.getEntriesByName('operation');
console.log('Duration:', measures[0].duration);
Use Chrome DevTools Memory tab:
# Run with Leaks instrument
xcrun instruments -t Leaks -D output.trace YourApp.app
Add to build.gradle:
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.12'
When debugging issues:
rm -rf node_modules && bun install)Weekly Installs
73
Repository
GitHub Stars
18
First Seen
Feb 6, 2026
Security Audits
Gen Agent Trust HubFailSocketPassSnykPass
Installed on
gemini-cli67
opencode65
github-copilot63
codex63
kimi-cli61
amp61
Genkit JS 开发指南:AI 应用构建、错误排查与最佳实践
6,100 周安装