Skip to content

iOS Physical Device Guide

Hướng dẫn setup và debug trên iPhone vật lý.

Prerequisites

  1. Apple Developer account (free works, nhưng 7-day re-signing limit)
  2. Developer Mode trên iPhone: Settings > Privacy & Security > Developer Mode > ON (cần restart)
  3. Xcode signing: Mở project src-tauri/gen/apple/app.xcodeproj → chọn app_iOS target → Signing & Capabilities → Automatically manage signing → chọn Team
  4. Trust profile (lần đầu): Trên iPhone: Settings > General > VPN & Device Management > Trust developer certificate

Network Setup

iPhone phải reach được Mac dev server (Vite).

Firewall

Mac firewall chặn incoming connections mặc định:

bash
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add $(which node)
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp $(which node)

Tailscale

Nếu dùng Tailscale VPN:

  • Cả Mac và iPhone cần Tailscale
  • Chọn Tailscale IP (100.x.x.x) khi --force-ip-prompt hỏi

Info.plist

File: src-tauri/gen/apple/app_iOS/Info.plist

KeyValueLý do
NSAppTransportSecurity > NSAllowsArbitraryLoadstrueCho phép HTTP dev server
NSLocalNetworkUsageDescriptionString mô tảTrigger Local Network permission
NSBonjourServices_http._tcpDiscovery protocol

Capabilities

File: src-tauri/capabilities/default.json

Quan trọng

Cần cả "windows": ["main"]"webviews": ["main"]. iOS dùng webviews, không phải windows.

Troubleshooting

Vấn đềNguyên nhânFix
Màn hình đen, không lỗiiPhone không reach Vite serverKiểm tra network, firewall, --force-ip-prompt
"error sending request... local network"iOS chặn Local NetworkThêm NSLocalNetworkUsageDescription, xóa app & cài lại
"Developer Mode disabled"Chưa bật Developer ModeSettings > Privacy & Security > Developer Mode > ON
Vite bind sai IPTAURI_DEV_HOST bị overrideDùng --force-ip-prompt
"No code signing certificates"Xcode chưa config signingMở .xcodeproj, set team

Screenshot Debugging

Dùng pymobiledevice3 để chụp màn hình từ terminal:

bash
# Terminal 1: Start tunnel daemon (giữ chạy)
sudo python3 -m pymobiledevice3 remote tunneld -p tcp

# Terminal 2: Chụp screenshot
pymobiledevice3 developer dvt screenshot --tunnel DEVICE_UDID /tmp/screenshot.png

Lấy UDID: xcrun devicectl list devices