| name | ios-watch-logs |
| description | Start real-time log streaming from connected iPhone to console and file. Shows only app's explicit log messages with [APP] prefix. Use when monitoring app behavior, debugging, or viewing logs. |
| delegate | true |
⚠️ DELEGATION REQUIRED
This skill must be executed by the instruction-follower subagent.
When you see this skill invoked, you MUST use the Task tool to delegate it:
Task(
subagent_type="instruction-follower",
description="[Brief 3-5 word description]",
prompt="Follow the instructions in .claude/skills/ios-watch-logs/skill.md to [complete task description]."
)
DO NOT execute the instructions below directly. The subagent will read this file and execute autonomously, then report back the results.
iOS Watch Logs
Overview
Streams logs from a USB-connected iPhone in real-time, filtering to show only the app's explicit log messages (those with [APP] prefix). Logs are displayed in the console and written to device-logs.txt for monitoring and debugging.
When to Use
Invoke this skill when the user:
- Asks to "watch logs"
- Wants to "see what the app is doing"
- Says "monitor the device"
- Asks to "stream logs from iPhone"
- Wants to debug or see real-time app behavior
- Says "show me the logs"
Prerequisites
- iPhone connected via USB
pymobiledevice3installed (pip3 install pymobiledevice3)- Device must be trusted
- App must be running on the device to see logs
Instructions
Navigate to the iOS app directory:
cd path/to/ios/appRun the watch-logs.py script:
./watch-logs.pyInform the user:
- The script will stream logs in real-time
- Only messages with
[APP]prefix are shown (filters out system noise) - Logs are written to
device-logs.txtin the same directory - Press Ctrl+C to stop watching
- The log file continues to grow while the script runs
Expected Output
📱 Watching logs from NoobTest...
📝 Writing to: /path/to/device-logs.txt
Streaming logs (Ctrl+C to stop):
18:31:45 [INFO] ------------ ping
18:31:45 [DEBUG] Connection successful - status 200
18:31:46 [INFO] ------------ ping
18:31:46 [DEBUG] Connection successful - status 200
Log Format
Each log line shows:
- Timestamp: HH:MM:SS (local time)
- Level: DEBUG, INFO, NOTICE, WARNING, ERROR, or FAULT
- Message: The actual log message
How It Works
The script:
- Runs
pymobiledevice3 syslog liveto stream device logs - Filters for lines matching the app name +
[APP]prefix - Extracts timestamp, level, and message
- Displays in console and writes to
device-logs.txt
Integration with Claude Code
Claude can monitor your app by reading the log file:
tail -20 device-logs.txt # View recent logs
This enables Claude to:
- See what the app is currently doing
- Debug issues by checking logs
- Verify that code changes are working
Common Issues
No logs appearing:
- Ensure the app is running on the device
- Check that Logger.shared calls use the
[APP]prefix - Verify pymobiledevice3 is installed:
pip3 install pymobiledevice3 - Device must be trusted and unlocked
pymobiledevice3 not found:
- Install it:
pip3 install pymobiledevice3 - Check PATH includes Python bin directory
Only system logs showing:
- The app's Logger must prefix messages with
[APP] - This filters out thousands of framework/system messages
- Update Logger.swift to add the prefix if missing
Stopping the Stream
Press Ctrl+C to stop watching logs. The script will terminate cleanly and device-logs.txt will remain with all captured logs.
Notes
- This runs continuously in the foreground (blocks the terminal)
- Run in a separate terminal window if you need to work while monitoring
- The log file is overwritten each time the script starts
- Only OSLog messages at INFO level and above appear (DEBUG may not show)