{"id":53612,"plugin_id":"plugins_6abcb949170081919055247eaf18cfc0","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-24T13:54:35.368Z","digest":"f237e7ba06abb36eaee92ed190f3b7bb060684f82cf0a296fa8d8f963dd9def1","against":null,"payload":{"description":"Inspect an iOS project's real layout for AI agents — resolve workspace vs project, schemes, configurations, bundle identifiers, simulator destinations, and the built .app path without hard-coding versions.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":385}],"name":"ios-project-setup","skill_md_contents":"---\nname: ios-project-setup\ndescription: Inspect an iOS project's real layout for AI agents — resolve workspace vs project, schemes, configurations, bundle identifiers, simulator destinations, and the built .app path without hard-coding versions.\n---\n\n# iOS Project Setup\n\n## Purpose\n\nEstablish **what this repository actually builds** before running anything. Every\nvalue below is discovered from the project, never assumed. Do not assert a \"latest\"\nor \"recommended\" Xcode, Swift, or deployment-target version; report what is\ndeclared.\n\n## 1. Toolchain, as installed\n\n```bash\nxcode-select -p\nxcodebuild -version\nxcrun simctl list runtimes\npython3 <autonom-root>/scripts/autonom.py doctor\n```\n\n## 2. Workspace or project\n\n```bash\nls *.xcworkspace *.xcodeproj Package.swift 2>/dev/null\n```\n\n| Found | Build with |\n| --- | --- |\n| `*.xcworkspace` | `-workspace <name>.xcworkspace` — required when CocoaPods is used |\n| `*.xcodeproj` only | `-project <name>.xcodeproj` |\n| `Package.swift` | `swift build` / `swift test` |\n| `ios/` inside a Flutter app | drive Flutter; touch Xcode only for native/platform work |\n\nA Flutter repository has `pubspec.yaml` with a Flutter SDK dependency and an `ios/`\ndirectory containing `Runner.xcworkspace`. Route Dart work to the `flutter-*`\nskills; use this skill for signing, capabilities, plist, or native module work.\n\n## 3. Schemes, configurations, destinations\n\n```bash\nxcodebuild -list -workspace <name>.xcworkspace\nxcodebuild -showBuildSettings -scheme <Scheme> | grep -E 'PRODUCT_BUNDLE_IDENTIFIER|PRODUCT_NAME|IPHONEOS_DEPLOYMENT_TARGET|CONFIGURATION_BUILD_DIR'\nxcrun simctl list devices available\n```\n\nTake the bundle id from `PRODUCT_BUNDLE_IDENTIFIER` rather than reading `Info.plist`\ndirectly — the plist usually contains `$(PRODUCT_BUNDLE_IDENTIFIER)`, and per-flavor\nschemes can differ.\n\nDestination for a simulator build:\n\n```text\n-destination 'platform=iOS Simulator,id=<UDID>'      # exact, preferred\n-destination 'platform=iOS Simulator,name=iPhone 17 Pro'\n```\n\nPrefer the UDID from `autonom devices --platform ios`: a name can match several\nruntimes.\n\n## 4. Locate the built `.app`\n\n```bash\n# Flutter\nbuild/ios/iphonesimulator/Runner.app\n\n# xcodebuild with an explicit derived-data path\nbuild/DerivedData/Build/Products/<Configuration>-iphonesimulator/<PRODUCT_NAME>.app\n```\n\nPass that path to `session start --install`. Storing it in the session is what lets\n`session clear` do a full uninstall + reinstall later.\n\n## 5. Flavors and configurations\n\nMulti-flavor apps usually carry one scheme per flavor and per-configuration\n`PRODUCT_BUNDLE_IDENTIFIER` values. Confirm which scheme maps to which bundle id\nwith `-showBuildSettings` before installing, so the session's `--app-id` matches\nwhat was actually built.\n\n## Accessibility readiness\n\n`ui find` selects by label and identifier. Before a UI-automation pass, check the\napp exposes them:\n\n- SwiftUI — `.accessibilityLabel(\"Log In\")`, `.accessibilityIdentifier(\"login_button\")`\n- UIKit — `accessibilityLabel`, `accessibilityIdentifier`\n- Flutter — `Semantics(label: ..., identifier: ...)`\n\nAn identifier is worth more than a label: it survives localization, so a selector\nbuilt on it does not break when the app is translated.\n\n## Rules\n\n- Never hard-code an Xcode, Swift, or iOS version as \"current\".\n- Never modify signing settings, certificates, provisioning profiles, or\n  entitlements as a side effect of a build or test task.\n- Keep secrets out of logs: no keychain contents, API keys, or `.env` values.\n- Prefer the repository's existing build entry point over inventing a new one.\n\n## Related\n\n- `ios-debugger-agent` — build, run, and gather evidence\n- `mobile-session`, `mobile-screen`\n- `project-router` — decide whether iOS skills are needed at all\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}