Help us improve
Share bugs, ideas, or general feedback.
Test deep links and URL schemes in the iOS Simulator. Reads navigation/linking config, constructs test URLs, fires them via xcrun simctl, and verifies the resulting screen. Triggers on "test deep link", "test this URL scheme", "verify navigation to", "does deeplink work", "open URL in simulator", "test universal link".
npx claudepluginhub ryanthedev/react-native-foundations.skillHow this skill is triggered — by the user, by Claude, or both
Slash command
/react-native-foundations:deeplink-testThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
**On load:** Read `../../.claude-plugin/plugin.json` from this skill's base directory. Display `deeplink-test v{version}` before proceeding.
Build, launch, and visually test iOS/SwiftUI apps in the Simulator using computer use. Automated screen navigation, crash log analysis, state testing (empty/error/loading), and memory leak detection. Use when you need to test an iOS app, run it in the Simulator, check for crashes, or verify UI flows.
Tests and exploits deep link vulnerabilities (URL Schemes, App Links) in Android/iOS apps, identifying unauthorized access, data injection, Intent hijacking, and redirection manipulation via ADB, Frida, and static analysis.
Tests and exploits deep link vulnerabilities in Android/iOS apps including URL scheme injection, intent hijacking, and redirect manipulation. Use for mobile app security assessments.
Share bugs, ideas, or general feedback.
On load: Read ../../.claude-plugin/plugin.json from this skill's base directory. Display deeplink-test v{version} before proceeding.
Test deep links by reading the project's navigation config, constructing URLs, firing them into the iOS Simulator, and verifying the correct screen loads.
| Skill / Resource | Why |
|---|---|
ios-sim | Step 5 — subagent uses capture.sh view (via xcrun simctl screenshot directly) to verify the screen after firing the deep link |
refs/react-native-docs | Step 2 — docs search for deep linking patterns and universal link configuration |
${CLAUDE_SKILL_DIR}/scripts/openurl.sh <url> — Validates and opens a URL in the booted simulatorSearch the user's project for navigation/linking config:
Glob: **/linking.{ts,js,tsx,jsx}
Glob: **/navigation/**/*.{ts,js,tsx,jsx}
Grep: "linking" or "prefixes" or "screens" in navigation files
Look for linking config objects containing prefixes and screens mapping.
Grep the docs directory for deep linking reference:
${CLAUDE_SKILL_DIR}/../../refs/react-native-docs/
Search terms: "deep link", "linking", "URL scheme", "universal link"
From the linking config, build a URL: {prefix}{path}.
If the user provided a specific URL, use it directly.
If testing a screen name, map it through the screens config to find the path.
${CLAUDE_SKILL_DIR}/scripts/openurl.sh "scheme://path/to/screen"
This wraps xcrun simctl openurl booted with validation.
Dispatch a subagent to capture and verify the simulator screen.
Dispatch Agent:
subagent_type: general-purpose
model: haiku
description: "deeplink-test: verify deep link screen"
prompt: |
A deep link was just fired into the iOS Simulator.
Expected destination: [EXPECTED_SCREEN]
URL fired: [URL]
1. Wait 2 seconds for navigation to settle, then run:
xcrun simctl io booted screenshot /tmp/deeplink-verify.jpg
2. Read /tmp/deeplink-verify.jpg to see the screen.
3. Analyze and return:
- Screen loaded: What screen/view is currently visible
- Match: Does it match the expected destination? (PASS / FAIL)
- Navigation state: Tab, stack depth, header title if visible
- Errors: Any error messages, crash screens, or "not found" states
- Details: Notable UI elements confirming the correct screen
Return text only. Be concise.
Report to the user:
| Scenario | URL | Expected |
|---|---|---|
| Home screen | myapp://home | Home tab active |
| Product detail | myapp://product/123 | Product screen with ID 123 |
| Nested settings | myapp://settings/profile | Profile under settings stack |
| Universal link | https://myapp.com/share/abc | Share screen with ID abc |
| Invalid path | myapp://nonexistent | Fallback or error screen |
xcrun simctl list devices booted to confirm a simulator is running before testingapple-app-site-association file/product/:id, test with real IDs from the app's data