Claude-skill-registry ios-dev
iOS/React Native development with Expo. Use when working on mobile app, running builds, debugging device issues, or setting up development environment including tethering.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/ios-dev" ~/.claude/skills/majiayu000-claude-skill-registry-ios-dev && rm -rf "$T"
manifest:
skills/data/ios-dev/SKILL.mdsource content
iOS Development Guide
Project Structure
mobile/ ├── app/ # Expo Router pages │ ├── _layout.tsx │ ├── index.tsx # Home screen │ └── room/[id].tsx # Voice call room ├── src/ │ ├── components/ # UI components │ ├── hooks/ # Custom hooks (WebRTC, Socket, Speech) │ └── types/ ├── ios/ # Native iOS project (generated by prebuild) └── .env # Environment variables
Key Commands
cd mobile # Development (WiFi - same network as Mac) npx expo start --dev-client # Development (Tethering - requires tunnel) npx expo start --dev-client --tunnel # Build for specific device npx expo run:ios --device "DEVICE_NAME" # Clean rebuild (after config changes) npx expo prebuild --platform ios --clean # List available devices xcrun xctrace list devices
Environment Configuration
# WiFi development EXPO_PUBLIC_SIGNALING_SERVER_URL=http://192.168.x.x:3001 # Production (Render server) EXPO_PUBLIC_SIGNALING_SERVER_URL=https://webrtc-signaling-xxxx.onrender.com
Tethering Development
When Mac is connected to iPhone's Personal Hotspot:
- Problem: iPhone cannot directly access devices on its own hotspot
- Solution: Use ngrok tunnel
# Install ngrok (first time) npm install -g @expo/ngrok@^4.1.0 # Start with tunnel npx expo start --dev-client --tunnel # Get tunnel URL curl -s http://127.0.0.1:4040/api/tunnels | grep -o '"public_url":"https://[^"]*"'
Important: Use HTTPS URL (iOS App Transport Security requirement)
Troubleshooting
| Issue | Solution |
|---|---|
| "Device is busy" | Unlock iPhone, reconnect USB |
| Metro connection fails | Check IP address, or use |
| "main" not registered | Restart Metro with |
| Build fails after config change | Run |
| Simulator no audio | Use real device for audio testing |
Development Workflow
- Start signaling server:
cd server && npm run dev - Start Metro:
cd mobile && npx expo start --dev-client - Open app on iPhone, enter Metro URL
- For code changes: Hot reload automatic
- For native changes: Rebuild with
npx expo run:ios --device