🎯

ios-device-screenshot

🎯Skill

from 0xbigboss/claude-code

VibeIndex|
What it does

Captures screenshots from physical iOS devices connected via USB using pymobiledevice3, supporting iOS versions 16 and 17+.

ios-device-screenshot

Installation

Install skill:
npx skills add https://github.com/0xbigboss/claude-code --skill ios-device-screenshot
34
Last UpdatedJan 27, 2026

Skill Details

SKILL.md

Take screenshots from physical iOS devices connected via USB using pymobiledevice3. Use when capturing screenshots from real iPhones/iPads (not simulators), debugging on-device, or needing high-fidelity device captures. Triggers on physical iOS device screenshots, pymobiledevice3 usage, or USB-connected device capture tasks.

Overview

# iOS Device Screenshot

Take screenshots from physical iOS devices connected via USB using pymobiledevice3.

Installation

```bash

# Install pymobiledevice3 using uv (recommended)

uv tool install pymobiledevice3

# Or with pipx

pipx install pymobiledevice3

```

Prerequisites

  1. Physical iOS device connected via USB
  2. Developer Mode enabled on the device (Settings > Privacy & Security > Developer Mode)
  3. Device trusted - approve "Trust This Computer" prompt on device

Usage

For iOS 17+ (including iOS 26+)

iOS 17+ requires a tunneld daemon running with root privileges:

```bash

# Terminal 1: Start tunneld (requires sudo, runs continuously)

sudo pymobiledevice3 remote tunneld

# Terminal 2: Take screenshot via DVT (Developer Tools)

pymobiledevice3 developer dvt screenshot --tunnel "" /path/to/screenshot.png

```

The --tunnel "" flag tells it to use the tunneld for device communication.

For iOS 16 and earlier

```bash

pymobiledevice3 developer screenshot /path/to/screenshot.png

```

Quick Reference

```bash

# List connected devices

xcrun devicectl list devices

# Check iOS version

ideviceinfo -k ProductVersion

# Check if developer image is mounted

ideviceimagemounter list

# Auto-mount developer image if needed

pymobiledevice3 mounter auto-mount --tunnel ""

# Take screenshot (iOS 17+) - single device

pymobiledevice3 developer dvt screenshot --tunnel "" ~/Desktop/screenshot.png

# Take screenshot with specific device UDID (required for multiple devices)

# First get UDIDs from: xcrun devicectl list devices

# Pass UDID directly to --tunnel (NOT --udid flag which doesn't work with tunneld)

pymobiledevice3 developer dvt screenshot --tunnel "00008101-001E05A41144001E" ~/Desktop/screenshot.png

```

Important: When multiple devices are connected, pass the UDID directly to --tunnel (not --udid). The --tunnel "" syntax prompts for interactive selection which fails in non-interactive shells.

Troubleshooting

"InvalidServiceError" or "Failed to start service"

  1. Ensure tunneld is running: ps aux | grep tunneld
  2. If not running: sudo pymobiledevice3 remote tunneld
  3. Use the DVT command instead of regular screenshot: developer dvt screenshot instead of developer screenshot

"DeveloperDiskImage not mounted"

```bash

pymobiledevice3 mounter auto-mount --tunnel ""

```

Multiple devices connected

Specify the target device with --udid:

```bash

# List devices first

xcrun devicectl list devices

# Use specific UDID

pymobiledevice3 developer dvt screenshot --tunnel "" --udid "40182233-00C8-51ED-8C68-174E14E4B4C9" /tmp/screenshot.png

```

Key Discovery

For iOS 17+, the regular pymobiledevice3 developer screenshot command often fails even with tunneld running. The solution is to use the DVT (Developer Tools) variant:

```bash

# This fails on iOS 17+:

pymobiledevice3 developer screenshot --tunnel "" /tmp/screenshot.png

# This works on iOS 17+:

pymobiledevice3 developer dvt screenshot --tunnel "" /tmp/screenshot.png

```

Integration Example

```bash

#!/bin/bash

# Take iOS device screenshot and open it

OUTPUT="/tmp/ios-screenshot-$(date +%Y%m%d-%H%M%S).png"

# Check if tunneld is running, start if not

if ! pgrep -f "pymobiledevice3 remote tunneld" > /dev/null; then

echo "Starting tunneld (requires sudo)..."

sudo pymobiledevice3 remote tunneld &

sleep 3

fi

# Take screenshot

pymobiledevice3 developer dvt screenshot --tunnel "" "$OUTPUT"

if [ -f "$OUTPUT" ]; then

echo "Screenshot saved to: $OUTPUT"

open "$OUTPUT" # macOS: open in Preview

else

echo "Failed to capture screenshot"

exit 1

fi

```

More from this repository10

🎯
react-best-practices🎯Skill

Guides React developers in writing clean, efficient components by providing best practices for hooks, effects, and component design.

🎯
python-best-practices🎯Skill

Guides Python developers in implementing type-first development with robust type checking, dataclasses, discriminated unions, and domain-specific type primitives.

🎯
openai-image-gen🎯Skill

Generates images using OpenAI's image generation API within the Claude Code environment.

🎯
tamagui-best-practices🎯Skill

Optimizes Tamagui configurations and styling patterns for high-performance, cross-platform React Native and web applications with v4 compiler settings.

🎯
playwright-best-practices🎯Skill

Provides Playwright test best practices for creating resilient, maintainable tests using user-facing locators, Page Object Models, and robust testing patterns.

🎯
go-best-practices🎯Skill

Enforces type-first Go development with custom types, interfaces, and patterns to create robust, self-documenting code with strong compile-time guarantees.

🎯
web-fetch🎯Skill

Fetches web content and converts HTML to clean markdown using intelligent content extraction and CSS selectors.

🎯
zig-best-practices🎯Skill

Enforces type-first development in Zig by leveraging tagged unions, explicit error sets, comptime validation, and type safety techniques.

🎯
typescript-best-practices🎯Skill

Enforces TypeScript best practices by guiding developers to create robust, type-safe code through compile-time validation, discriminated unions, and explicit type definitions.

🎯
gen-env🎯Skill

Generates environment configuration files or environment variables for development projects, ensuring consistent and reproducible setup across different environments.