Loading...
Loading...
Guide to accessing device logs on iOS and Android for Capacitor apps. Covers command-line tools, GUI applications, filtering, and real-time streaming. Use this skill when users need to view device logs for debugging.
npx skill4agent add cap-go/capacitor-skills ios-android-logs# iOS - Stream logs from connected device
xcrun devicectl device log stream --device <UUID>
# iOS - Stream from simulator
xcrun simctl spawn booted log stream
# Android - Stream all logs
adb logcat
# Android - Filter by package
adb logcat --pid=$(adb shell pidof com.yourapp.id)process:YourAppsubsystem:com.yourapp"error"# List connected devices
xcrun devicectl list devices
# Stream logs from specific device
xcrun devicectl device log stream --device <DEVICE_UUID>
# Stream with predicate filter
xcrun devicectl device log stream --device <DEVICE_UUID> \
--predicate 'process == "YourApp"'
# Stream specific log levels
xcrun devicectl device log stream --device <DEVICE_UUID> \
--level error
# Save to file
xcrun devicectl device log stream --device <DEVICE_UUID> \
--predicate 'process == "YourApp"' > app_logs.txt# Stream logs from booted simulator
xcrun simctl spawn booted log stream
# Filter by process
xcrun simctl spawn booted log stream --predicate 'process == "YourApp"'
# Filter by subsystem
xcrun simctl spawn booted log stream --predicate 'subsystem == "com.yourapp"'
# Show only errors
xcrun simctl spawn booted log stream --level error
# Combine filters
xcrun simctl spawn booted log stream \
--predicate 'process == "YourApp" AND messageType == error'# Process name
--predicate 'process == "YourApp"'
# Contains text
--predicate 'eventMessage contains "error"'
# Subsystem
--predicate 'subsystem == "com.yourapp.plugin"'
# Category
--predicate 'category == "network"'
# Log level
--predicate 'messageType == error'
# Combined
--predicate 'process == "YourApp" AND messageType >= error'
# Time-based (last 5 minutes)
--predicate 'timestamp > now - 5m'| Level | Description |
|---|---|
| Default messages |
| Informational |
| Debug (hidden by default) |
| Error conditions |
| Fault/critical |
# Basic log stream
adb logcat
# Clear logs first, then stream
adb logcat -c && adb logcat
# Filter by tag
adb logcat -s MyTag:D
# Filter by priority
adb logcat *:E # Only errors and above
# Filter by package name
adb logcat --pid=$(adb shell pidof com.yourapp.id)
# Filter by multiple tags
adb logcat -s "MyPlugin:D" "Capacitor:I"
# Save to file
adb logcat > logs.txt
# Save to file with timestamp
adb logcat -v time > logs.txtpackage:com.yourapptag:MyPluginlevel:error# Install pidcat
pip install pidcat
# Stream logs for package
pidcat com.yourapp.id
# With tag filter
pidcat -t MyPlugin com.yourapp.id| Letter | Priority |
|---|---|
| V | Verbose |
| D | Debug |
| I | Info |
| W | Warn |
| E | Error |
| F | Fatal |
| S | Silent |
# Different output formats
adb logcat -v brief # Default
adb logcat -v process # PID only
adb logcat -v tag # Tag only
adb logcat -v time # With timestamp
adb logcat -v threadtime # With thread and time
adb logcat -v long # All metadata
# Colorized output
adb logcat -v color
# Show recent logs (last N lines)
adb logcat -d -t 100
# Show logs since timestamp
adb logcat -v time -T "01-25 10:00:00.000"# Capacitor core logs
adb logcat -s "Capacitor:*"
# Plugin-specific logs
adb logcat -s "CapacitorNativeBiometric:*"
# WebView logs (JavaScript console)
adb logcat -s "chromium:*"
# JavaScript errors
adb logcat | grep -i "js error\|uncaught"
# Crash logs
adb logcat | grep -iE "fatal|crash|exception"
# Network logs
adb logcat -s "OkHttp:*" "NetworkSecurityConfig:*"# Copy crash logs from device
xcrun devicectl device copy crashlog --device <UUID> ./crashes/
# View in Console.app
# User Diagnostics Reports section
# Or find at:
# Device: Settings > Privacy > Analytics & Improvements > Analytics Data
# Mac: ~/Library/Logs/DiagnosticReports/# Get tombstone (native crash)
adb shell cat /data/tombstones/tombstone_00
# Get ANR traces
adb pull /data/anr/traces.txt
# Get bugreport (comprehensive)
adb bugreport > bugreport.zip// Example MCP tool for fetching iOS logs
const logs = await mcp.ios.streamLogs({
device: 'booted',
predicate: 'process == "YourApp"',
level: 'debug',
});
// Example MCP tool for Android logs
const androidLogs = await mcp.android.logcat({
package: 'com.yourapp.id',
level: 'D',
});# iOS - JavaScript console logs
xcrun simctl spawn booted log stream \
--predicate 'eventMessage contains "JS:"'
# Android - WebView console
adb logcat chromium:I *:S | grep "console"# iOS
xcrun simctl spawn booted log stream \
--predicate 'subsystem == "com.apple.network"'
# Android
adb logcat -s "NetworkSecurityConfig:*" "OkHttp:*"# iOS - Memory pressure
xcrun simctl spawn booted log stream \
--predicate 'eventMessage contains "memory"'
# Android - Memory info
adb shell dumpsys meminfo com.yourapp.idadb devicesadb kill-server && adb start-server# iOS - Only your app
--predicate 'process == "YourApp" AND messageType >= info'
# Android - Only your package
adb logcat --pid=$(adb shell pidof com.yourapp.id)# Enable debug logs
xcrun simctl spawn booted log stream --level debugLog.d("Tag", "Debug message") // D level