Use when working with camera, photos, audio, haptics, ShazamKit, or Now Playing. Covers AVCaptureSession, PHPicker, PhotosPicker, AVFoundation, Core Haptics, audio recognition, MediaPlayer, CarPlay, MusicKit.
You MUST use this skill for ANY camera, photo, audio, haptic, or media playback work.
| Symptom / Task | Reference |
|---|---|
| Camera capture, AVCaptureSession | See skills/camera-capture.md |
| Camera API (RotationCoordinator, etc.) | See skills/camera-capture-ref.md |
| Camera freezes, black preview, rotation | See skills/camera-capture-diag.md |
| Photo pickers, library access | See skills/photo-library.md |
| PHPicker, PhotosPicker API reference | See skills/photo-library-ref.md |
| Audio, AVFoundation, spatial audio | See skills/avfoundation-ref.md |
| Audio recognition, ShazamKit | See skills/shazamkit.md |
| ShazamKit API reference | See skills/shazamkit-ref.md |
| Haptic feedback, Core Haptics | See skills/haptics.md |
| Now Playing metadata, remote commands | See skills/now-playing.md |
| CarPlay Now Playing | See skills/now-playing-carplay.md |
| MusicKit Now Playing | See skills/now-playing-musickit.md |
digraph media {
start [label="Media task" shape=ellipse];
what [label="Which media feature?" shape=diamond];
start -> what;
what -> "skills/camera-capture.md" [label="camera capture"];
what -> "skills/photo-library.md" [label="photo pickers\n/ library"];
what -> "skills/avfoundation-ref.md" [label="audio / AVFoundation"];
what -> "skills/shazamkit.md" [label="ShazamKit\n/ audio recognition"];
what -> "skills/haptics.md" [label="haptic feedback"];
what -> "skills/now-playing.md" [label="Now Playing\n/ remote commands"];
}
skills/camera-capture.md (patterns), skills/camera-capture-ref.md (API), skills/camera-capture-diag.md (debugging)skills/photo-library.md, skills/photo-library-ref.mdskills/avfoundation-ref.mdskills/shazamkit.md, skills/shazamkit-ref.mdskills/haptics.mdskills/now-playing.md, skills/now-playing-carplay.md, skills/now-playing-musickit.mdcamera-auditor agentCamera + permissions (camera access denied, Info.plist missing):
ShazamKit + microphone permissions:
Now Playing + background audio:
Photo library + privacy:
| Thought | Reality |
|---|---|
| "Camera capture is just AVCaptureSession setup" | Camera has interruption handlers, rotation, and threading requirements. |
| "I'll add haptics with a simple API call" | Haptic design has patterns for each interaction type matching HIG. |
| "ShazamKit is just SHSession + a delegate" | iOS 17+ has SHManagedSession which eliminates all AVAudioEngine boilerplate. |
| "Now Playing info is just setting metadata" | Remote commands, artwork handling, and state sync have 15+ gotchas. |
| "I'll use UIImagePickerController for photos" | PHPicker/PhotosPicker are the modern API — no permissions required. |
User: "How do I set up a camera preview?"
→ Read: skills/camera-capture.md
User: "Camera freezes when I get a phone call"
→ Read: skills/camera-capture-diag.md
User: "How do I let users pick photos in SwiftUI?"
→ Read: skills/photo-library.md
User: "Implement haptic feedback for button taps"
→ Read: skills/haptics.md
User: "Now Playing info doesn't appear on Lock Screen"
→ Read: skills/now-playing.md
User: "How do I identify songs with ShazamKit?"
→ Read: skills/shazamkit.md
User: "Check my camera code for issues"
→ Launch: camera-auditor agent