@mmerterden/multi-agent-pipeline 8.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2623 -0
- package/LICENSE +21 -0
- package/README.md +852 -0
- package/docs/FIGMA_PIPELINE.md +138 -0
- package/docs/GENERICITY-REVIEW.md +277 -0
- package/docs/STABILITY-FIX-PLAN.md +168 -0
- package/docs/adr/0001-three-model-triage.md +81 -0
- package/docs/adr/0002-instruction-driven-flag.md +62 -0
- package/docs/adr/0003-unified-shared-skills.md +55 -0
- package/docs/adr/0004-zero-dependency-philosophy.md +60 -0
- package/docs/adr/0005-lazy-phase-docs.md +68 -0
- package/docs/adr/0006-skills-core-external-split.md +52 -0
- package/docs/adr/0007-multi-tool-adapter-framework.md +110 -0
- package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +98 -0
- package/docs/adr/README.md +33 -0
- package/docs/architecture.md +181 -0
- package/docs/best-practices.md +93 -0
- package/docs/features.md +274 -0
- package/docs/performance.md +116 -0
- package/docs/recovery-guide.md +479 -0
- package/index.js +76 -0
- package/install/_adapters.mjs +69 -0
- package/install/_common.mjs +150 -0
- package/install/_copilot-instructions.mjs +32 -0
- package/install/_dev-only-files.mjs +23 -0
- package/install/_platform-filter.mjs +132 -0
- package/install/_telemetry.mjs +79 -0
- package/install/claude.mjs +332 -0
- package/install/copilot.mjs +254 -0
- package/install/index.mjs +179 -0
- package/install/templates/copilot-instructions.md +319 -0
- package/install.js +24 -0
- package/package.json +78 -0
- package/pipeline/adapters/_base.mjs +288 -0
- package/pipeline/adapters/copilot-chat.mjs +158 -0
- package/pipeline/adapters/cursor.mjs +187 -0
- package/pipeline/agents/android-architect.md +42 -0
- package/pipeline/agents/backend-architect.md +43 -0
- package/pipeline/agents/code-reviewer.md +57 -0
- package/pipeline/agents/dev-critic.md +148 -0
- package/pipeline/agents/explorer.md +34 -0
- package/pipeline/agents/ios-architect.md +41 -0
- package/pipeline/agents/security-auditor.md +98 -0
- package/pipeline/agents/task-clarifier.md +113 -0
- package/pipeline/claude-md-template.md +55 -0
- package/pipeline/commands/archive-guard.md +45 -0
- package/pipeline/commands/deploy.md +54 -0
- package/pipeline/commands/figma-to-swiftui.md +295 -0
- package/pipeline/commands/multi-agent/_account-picker.md +90 -0
- package/pipeline/commands/multi-agent/_dev-context.md +111 -0
- package/pipeline/commands/multi-agent/_input-parser.md +43 -0
- package/pipeline/commands/multi-agent/_repo-picker.md +76 -0
- package/pipeline/commands/multi-agent/autopilot.md +116 -0
- package/pipeline/commands/multi-agent/channels.md +465 -0
- package/pipeline/commands/multi-agent/delete.md +66 -0
- package/pipeline/commands/multi-agent/dev-autopilot.md +120 -0
- package/pipeline/commands/multi-agent/dev-local-autopilot.md +110 -0
- package/pipeline/commands/multi-agent/dev-local.md +105 -0
- package/pipeline/commands/multi-agent/dev.md +246 -0
- package/pipeline/commands/multi-agent/diff-explain.md +68 -0
- package/pipeline/commands/multi-agent/help.md +422 -0
- package/pipeline/commands/multi-agent/issue.md +79 -0
- package/pipeline/commands/multi-agent/jira.md +132 -0
- package/pipeline/commands/multi-agent/kill.md +38 -0
- package/pipeline/commands/multi-agent/language.md +94 -0
- package/pipeline/commands/multi-agent/local-autopilot.md +139 -0
- package/pipeline/commands/multi-agent/local.md +117 -0
- package/pipeline/commands/multi-agent/log.md +25 -0
- package/pipeline/commands/multi-agent/manual-test.md +43 -0
- package/pipeline/commands/multi-agent/purge.md +39 -0
- package/pipeline/commands/multi-agent/refactor.md +188 -0
- package/pipeline/commands/multi-agent/refs/android-guide.md +250 -0
- package/pipeline/commands/multi-agent/refs/audit-guide.md +240 -0
- package/pipeline/commands/multi-agent/refs/backend-guide.md +135 -0
- package/pipeline/commands/multi-agent/refs/channels/confluence.md +153 -0
- package/pipeline/commands/multi-agent/refs/channels/issue-comment.md +141 -0
- package/pipeline/commands/multi-agent/refs/channels/jira.md +127 -0
- package/pipeline/commands/multi-agent/refs/channels/pr-review-actions.md +135 -0
- package/pipeline/commands/multi-agent/refs/channels/pr.md +139 -0
- package/pipeline/commands/multi-agent/refs/channels/wiki.md +66 -0
- package/pipeline/commands/multi-agent/refs/component-dispatch.md +92 -0
- package/pipeline/commands/multi-agent/refs/cross-cli-contract.md +326 -0
- package/pipeline/commands/multi-agent/refs/frontend-guide.md +136 -0
- package/pipeline/commands/multi-agent/refs/issue-jira-triad.md +104 -0
- package/pipeline/commands/multi-agent/refs/keychain.md +80 -0
- package/pipeline/commands/multi-agent/refs/knowledge.md +112 -0
- package/pipeline/commands/multi-agent/refs/multi-repo-integration-build.md +207 -0
- package/pipeline/commands/multi-agent/refs/phases/log-format.md +89 -0
- package/pipeline/commands/multi-agent/refs/phases/modes.md +156 -0
- package/pipeline/commands/multi-agent/refs/phases/operations.md +91 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-0-init.md +481 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-1-analysis.md +264 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-2-planning.md +278 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-3-dev.md +364 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-4-review.md +378 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-5-test.md +129 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-6-commit.md +339 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-7-report.md +361 -0
- package/pipeline/commands/multi-agent/refs/phases.md +187 -0
- package/pipeline/commands/multi-agent/refs/progress-contract.md +155 -0
- package/pipeline/commands/multi-agent/refs/rules.md +189 -0
- package/pipeline/commands/multi-agent/refs/swiftui-guide.md +254 -0
- package/pipeline/commands/multi-agent/refs/tracker-contract.md +256 -0
- package/pipeline/commands/multi-agent/refs/wiki-capture.md +109 -0
- package/pipeline/commands/multi-agent/resume.md +28 -0
- package/pipeline/commands/multi-agent/review.md +228 -0
- package/pipeline/commands/multi-agent/scan.md +74 -0
- package/pipeline/commands/multi-agent/search.md +97 -0
- package/pipeline/commands/multi-agent/setup.md +767 -0
- package/pipeline/commands/multi-agent/stack.md +48 -0
- package/pipeline/commands/multi-agent/status.md +38 -0
- package/pipeline/commands/multi-agent/sync.md +319 -0
- package/pipeline/commands/multi-agent/test.md +39 -0
- package/pipeline/commands/multi-agent/update.md +88 -0
- package/pipeline/commands/multi-agent.md +293 -0
- package/pipeline/commands/security-review.md +6 -0
- package/pipeline/commands/sim-test.md +256 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-1-analysis.json +25 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-2-plan.json +30 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-review.json +20 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-triage.json +15 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/task.json +12 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-1-analysis.json +29 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-2-plan.json +43 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-review.json +35 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-triage.json +35 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/task.json +12 -0
- package/pipeline/eval/golden-tasks/README.md +65 -0
- package/pipeline/eval/triage/01-empty-findings/expected.json +6 -0
- package/pipeline/eval/triage/01-empty-findings/input.json +5 -0
- package/pipeline/eval/triage/01-empty-findings/notes.md +7 -0
- package/pipeline/eval/triage/02-real-blocker/expected.json +15 -0
- package/pipeline/eval/triage/02-real-blocker/input.json +14 -0
- package/pipeline/eval/triage/02-real-blocker/notes.md +7 -0
- package/pipeline/eval/triage/03-out-of-scope-defer/expected.json +18 -0
- package/pipeline/eval/triage/03-out-of-scope-defer/input.json +14 -0
- package/pipeline/eval/triage/03-out-of-scope-defer/notes.md +10 -0
- package/pipeline/eval/triage/04-false-positive-reject/expected.json +18 -0
- package/pipeline/eval/triage/04-false-positive-reject/input.json +14 -0
- package/pipeline/eval/triage/04-false-positive-reject/notes.md +10 -0
- package/pipeline/eval/triage/05-mixed-classification/expected.json +43 -0
- package/pipeline/eval/triage/05-mixed-classification/input.json +38 -0
- package/pipeline/eval/triage/05-mixed-classification/notes.md +17 -0
- package/pipeline/eval/triage/06-severity-mismatch/expected.json +15 -0
- package/pipeline/eval/triage/06-severity-mismatch/input.json +14 -0
- package/pipeline/eval/triage/06-severity-mismatch/notes.md +9 -0
- package/pipeline/eval/triage/07-duplicate-reviewers/expected.json +27 -0
- package/pipeline/eval/triage/07-duplicate-reviewers/input.json +22 -0
- package/pipeline/eval/triage/07-duplicate-reviewers/notes.md +9 -0
- package/pipeline/eval/triage/08-style-misclassified/expected.json +18 -0
- package/pipeline/eval/triage/08-style-misclassified/input.json +14 -0
- package/pipeline/eval/triage/08-style-misclassified/notes.md +9 -0
- package/pipeline/eval/triage/09-cascading-finding/expected.json +23 -0
- package/pipeline/eval/triage/09-cascading-finding/input.json +22 -0
- package/pipeline/eval/triage/09-cascading-finding/notes.md +9 -0
- package/pipeline/eval/triage/10-deferred-crossref/expected.json +18 -0
- package/pipeline/eval/triage/10-deferred-crossref/input.json +14 -0
- package/pipeline/eval/triage/10-deferred-crossref/notes.md +9 -0
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/expected.json +27 -0
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/input.json +22 -0
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/notes.md +14 -0
- package/pipeline/eval/triage/README.md +54 -0
- package/pipeline/lib/account-resolver.sh +204 -0
- package/pipeline/lib/channels-multi-repo.sh +218 -0
- package/pipeline/lib/context-link-extractor.sh +192 -0
- package/pipeline/lib/credential-store-resolver.sh +57 -0
- package/pipeline/lib/credential-store.sh +226 -0
- package/pipeline/lib/fetch-confluence.sh +358 -0
- package/pipeline/lib/fetch-crashlytics.sh +314 -0
- package/pipeline/lib/fetch-fortify.sh +321 -0
- package/pipeline/lib/fetch-swagger.sh +270 -0
- package/pipeline/lib/issue-fetcher.sh +333 -0
- package/pipeline/lib/multi-repo-pipeline.sh +252 -0
- package/pipeline/lib/plan-todos.sh +284 -0
- package/pipeline/lib/post-pr-review.sh +374 -0
- package/pipeline/lib/repo-cache.sh +231 -0
- package/pipeline/lib/review-watch.sh +244 -0
- package/pipeline/lib/shadow-git.sh +222 -0
- package/pipeline/lib/submodule-detector.sh +177 -0
- package/pipeline/lib/vercel-deploy.sh +170 -0
- package/pipeline/preferences-template.json +132 -0
- package/pipeline/rules/app-store-guidelines.md +59 -0
- package/pipeline/rules/code-review.md +27 -0
- package/pipeline/rules/code-style.md +37 -0
- package/pipeline/rules/debugging.md +24 -0
- package/pipeline/rules/figma-pipeline.md +190 -0
- package/pipeline/rules/git-conventions.md +29 -0
- package/pipeline/rules/kotlin-android.md +92 -0
- package/pipeline/rules/performance.md +23 -0
- package/pipeline/rules/security.md +39 -0
- package/pipeline/rules/swiftui-qa.md +32 -0
- package/pipeline/rules/tdd.md +25 -0
- package/pipeline/rules/testing.md +37 -0
- package/pipeline/schemas/agent-state.schema.json +273 -0
- package/pipeline/schemas/analysis-output.schema.json +59 -0
- package/pipeline/schemas/clarify-output.schema.json +74 -0
- package/pipeline/schemas/dev-critic-output.schema.json +104 -0
- package/pipeline/schemas/diff-risk.schema.json +78 -0
- package/pipeline/schemas/figma-project-config.schema.json +372 -0
- package/pipeline/schemas/migrations/README.md +73 -0
- package/pipeline/schemas/migrations/figma-config-1.0.0-to-2.0.0.mjs +112 -0
- package/pipeline/schemas/migrations/prefs-2.0.0-to-2.1.0.mjs +75 -0
- package/pipeline/schemas/migrations/prefs-2.1.0-to-2.2.0.mjs +64 -0
- package/pipeline/schemas/migrations/prefs-2.2.0-to-2.3.0.mjs +36 -0
- package/pipeline/schemas/migrations/state-2.0.0-to-2.1.0.mjs +34 -0
- package/pipeline/schemas/plan-todos.schema.json +62 -0
- package/pipeline/schemas/planning-output.schema.json +57 -0
- package/pipeline/schemas/prefs.schema.json +1137 -0
- package/pipeline/schemas/reviewer-output.schema.json +55 -0
- package/pipeline/schemas/test-gap.schema.json +64 -0
- package/pipeline/schemas/token-budget.json +17 -0
- package/pipeline/schemas/triage-corpus.schema.json +31 -0
- package/pipeline/schemas/triage-output.schema.json +115 -0
- package/pipeline/scripts/.last-figma-sync-plan.json +23 -0
- package/pipeline/scripts/README-figma-smokes.md +34 -0
- package/pipeline/scripts/README.md +104 -0
- package/pipeline/scripts/aggregate-metrics.mjs +310 -0
- package/pipeline/scripts/audit-log-rotate.sh +61 -0
- package/pipeline/scripts/audit-log.sh +69 -0
- package/pipeline/scripts/benchmark-phase-0.sh +128 -0
- package/pipeline/scripts/build-skills-index.mjs +139 -0
- package/pipeline/scripts/classify-plan-safety.mjs +177 -0
- package/pipeline/scripts/cost-table.json +27 -0
- package/pipeline/scripts/diff-explain.mjs +276 -0
- package/pipeline/scripts/diff-risk-score.mjs +328 -0
- package/pipeline/scripts/eval-golden-tasks-live.mjs +294 -0
- package/pipeline/scripts/eval-golden-tasks.mjs +223 -0
- package/pipeline/scripts/eval-triage.mjs +171 -0
- package/pipeline/scripts/figma-placeholder-map.json +191 -0
- package/pipeline/scripts/fixtures/diff-risk-android.diff +40 -0
- package/pipeline/scripts/fixtures/diff-risk-ios.diff +48 -0
- package/pipeline/scripts/fixtures/install-layout.tsv +16 -0
- package/pipeline/scripts/fixtures/test-gap-node.diff +30 -0
- package/pipeline/scripts/fixtures/test-gap-python.diff +32 -0
- package/pipeline/scripts/gen-mode-dispatch.mjs +170 -0
- package/pipeline/scripts/gen-skills-index.mjs +90 -0
- package/pipeline/scripts/github-ssh-setup.sh +103 -0
- package/pipeline/scripts/import-figma-skills.sh +253 -0
- package/pipeline/scripts/keychain-save.sh +74 -0
- package/pipeline/scripts/keychain.py +294 -0
- package/pipeline/scripts/log-metric.sh +98 -0
- package/pipeline/scripts/match-skills.mjs +167 -0
- package/pipeline/scripts/memory-load.sh +46 -0
- package/pipeline/scripts/memory-save.sh +76 -0
- package/pipeline/scripts/migrate-prefs.mjs +390 -0
- package/pipeline/scripts/migrate-state.mjs +215 -0
- package/pipeline/scripts/output-quality-check.sh +125 -0
- package/pipeline/scripts/phase-banner.sh +158 -0
- package/pipeline/scripts/phase-tracker.sh +548 -0
- package/pipeline/scripts/pre-commit-check.sh +69 -0
- package/pipeline/scripts/pre-push-check.sh +77 -0
- package/pipeline/scripts/render-agent-log-cost.sh +149 -0
- package/pipeline/scripts/render-cost-summary.sh +137 -0
- package/pipeline/scripts/render-work-summary.sh +195 -0
- package/pipeline/scripts/repo-map.mjs +367 -0
- package/pipeline/scripts/run-aggregator.mjs +298 -0
- package/pipeline/scripts/scan-skills.sh +332 -0
- package/pipeline/scripts/search-logs.sh +291 -0
- package/pipeline/scripts/sign-skills.sh +67 -0
- package/pipeline/scripts/smoke-adapters.sh +207 -0
- package/pipeline/scripts/smoke-add-detail.sh +137 -0
- package/pipeline/scripts/smoke-agent-log-cost.sh +183 -0
- package/pipeline/scripts/smoke-agent-model-routing.sh +87 -0
- package/pipeline/scripts/smoke-bitbucket-contract.sh +223 -0
- package/pipeline/scripts/smoke-channels-flow.sh +130 -0
- package/pipeline/scripts/smoke-ci-workflows.sh +88 -0
- package/pipeline/scripts/smoke-clarify.sh +148 -0
- package/pipeline/scripts/smoke-commands-skills-parity.sh +87 -0
- package/pipeline/scripts/smoke-compliance-skills.sh +119 -0
- package/pipeline/scripts/smoke-cost-summary.sh +139 -0
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +198 -0
- package/pipeline/scripts/smoke-cross-phase-cohesion.sh +128 -0
- package/pipeline/scripts/smoke-delete-flow.sh +151 -0
- package/pipeline/scripts/smoke-dev-critic.sh +144 -0
- package/pipeline/scripts/smoke-diff-explain.sh +128 -0
- package/pipeline/scripts/smoke-diff-risk.sh +161 -0
- package/pipeline/scripts/smoke-dynamic-skill-loading.sh +160 -0
- package/pipeline/scripts/smoke-eval-live.sh +136 -0
- package/pipeline/scripts/smoke-existing-discovery-gate.sh +71 -0
- package/pipeline/scripts/smoke-figma-android-parity.sh +148 -0
- package/pipeline/scripts/smoke-figma-config-schema.sh +144 -0
- package/pipeline/scripts/smoke-figma-credential-store.sh +105 -0
- package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +177 -0
- package/pipeline/scripts/smoke-figma-dispatch.sh +123 -0
- package/pipeline/scripts/smoke-figma-skill-import.sh +174 -0
- package/pipeline/scripts/smoke-figma-sync.sh +149 -0
- package/pipeline/scripts/smoke-identity-isolation.sh +70 -0
- package/pipeline/scripts/smoke-install-layout.sh +241 -0
- package/pipeline/scripts/smoke-install-leak-gate.sh +125 -0
- package/pipeline/scripts/smoke-issue-comment-template.sh +86 -0
- package/pipeline/scripts/smoke-issue-jira-triad.sh +120 -0
- package/pipeline/scripts/smoke-keychain.sh +158 -0
- package/pipeline/scripts/smoke-language-axis.sh +109 -0
- package/pipeline/scripts/smoke-lib-scripts.sh +395 -0
- package/pipeline/scripts/smoke-migrate-state.sh +102 -0
- package/pipeline/scripts/smoke-mode-dispatch-drift.sh +158 -0
- package/pipeline/scripts/smoke-multi-repo-integration.sh +116 -0
- package/pipeline/scripts/smoke-multi-repo-worktree.sh +61 -0
- package/pipeline/scripts/smoke-no-token-prompt.sh +69 -0
- package/pipeline/scripts/smoke-pat-audit.sh +107 -0
- package/pipeline/scripts/smoke-per-repo-memory.sh +156 -0
- package/pipeline/scripts/smoke-personal-data.sh +82 -0
- package/pipeline/scripts/smoke-phase-0-multi-repo.sh +170 -0
- package/pipeline/scripts/smoke-phase-6-multi.sh +79 -0
- package/pipeline/scripts/smoke-phase-banner.sh +101 -0
- package/pipeline/scripts/smoke-phase-tracker.sh +255 -0
- package/pipeline/scripts/smoke-phase0-bridge-contract.sh +241 -0
- package/pipeline/scripts/smoke-phase4-triage.sh +142 -0
- package/pipeline/scripts/smoke-plan-approval-gate.sh +71 -0
- package/pipeline/scripts/smoke-plan-safety.sh +139 -0
- package/pipeline/scripts/smoke-plan-todos.sh +193 -0
- package/pipeline/scripts/smoke-pr-review-actions.sh +152 -0
- package/pipeline/scripts/smoke-pre-commit.sh +138 -0
- package/pipeline/scripts/smoke-pref-migration.sh +224 -0
- package/pipeline/scripts/smoke-prefs-language.sh +134 -0
- package/pipeline/scripts/smoke-progress-contract.sh +118 -0
- package/pipeline/scripts/smoke-push-retry.sh +75 -0
- package/pipeline/scripts/smoke-readme-counts.sh +120 -0
- package/pipeline/scripts/smoke-repo-map.sh +300 -0
- package/pipeline/scripts/smoke-review-watch.sh +134 -0
- package/pipeline/scripts/smoke-run-aggregator.sh +216 -0
- package/pipeline/scripts/smoke-schema-validation.sh +173 -0
- package/pipeline/scripts/smoke-search.sh +187 -0
- package/pipeline/scripts/smoke-shadow-git.sh +175 -0
- package/pipeline/scripts/smoke-skill-authoring.sh +142 -0
- package/pipeline/scripts/smoke-skill-language.sh +83 -0
- package/pipeline/scripts/smoke-skill-manifest.sh +138 -0
- package/pipeline/scripts/smoke-skill-scan.sh +198 -0
- package/pipeline/scripts/smoke-stack-swap.sh +132 -0
- package/pipeline/scripts/smoke-subagent-validators.sh +105 -0
- package/pipeline/scripts/smoke-sync-delegation.sh +74 -0
- package/pipeline/scripts/smoke-sync-parity.sh +92 -0
- package/pipeline/scripts/smoke-tasklist-ordering.sh +111 -0
- package/pipeline/scripts/smoke-telemetry.sh +147 -0
- package/pipeline/scripts/smoke-test-gap.sh +183 -0
- package/pipeline/scripts/smoke-token-budget.sh +67 -0
- package/pipeline/scripts/smoke-tracker-contract.sh +129 -0
- package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +65 -0
- package/pipeline/scripts/smoke-triage-memory.sh +174 -0
- package/pipeline/scripts/smoke-url-enrichment.sh +70 -0
- package/pipeline/scripts/smoke-validator-contradiction.sh +67 -0
- package/pipeline/scripts/smoke-vercel-deploy-redact.sh +129 -0
- package/pipeline/scripts/smoke-wiki-integration.sh +146 -0
- package/pipeline/scripts/smoke-work-summary.sh +163 -0
- package/pipeline/scripts/smoke-worktree-path-convention.sh +86 -0
- package/pipeline/scripts/smoke-write-state.sh +115 -0
- package/pipeline/scripts/stack-swap.sh +182 -0
- package/pipeline/scripts/sync-figma-source.sh +228 -0
- package/pipeline/scripts/sync-parity-check.sh +135 -0
- package/pipeline/scripts/test-gap-rules/android.json +25 -0
- package/pipeline/scripts/test-gap-rules/ios.json +29 -0
- package/pipeline/scripts/test-gap-rules/node.json +17 -0
- package/pipeline/scripts/test-gap-rules/python.json +19 -0
- package/pipeline/scripts/test-gap-scan.mjs +343 -0
- package/pipeline/scripts/token-budget-report.mjs +145 -0
- package/pipeline/scripts/triage-memory.mjs +258 -0
- package/pipeline/scripts/ui-tree-dumper.swift +122 -0
- package/pipeline/scripts/uninstall.mjs +331 -0
- package/pipeline/scripts/update-issue-progress.sh +146 -0
- package/pipeline/scripts/validate-analysis.mjs +132 -0
- package/pipeline/scripts/validate-diff-risk.mjs +117 -0
- package/pipeline/scripts/validate-planning.mjs +180 -0
- package/pipeline/scripts/validate-reviewer.mjs +131 -0
- package/pipeline/scripts/validate-schemas.mjs +88 -0
- package/pipeline/scripts/validate-test-gap.mjs +90 -0
- package/pipeline/scripts/validate-triage.mjs +175 -0
- package/pipeline/scripts/verify-skills.sh +126 -0
- package/pipeline/scripts/write-state.mjs +175 -0
- package/pipeline/skills/.skill-manifest.json +779 -0
- package/pipeline/skills/.skills-index.json +1771 -0
- package/pipeline/skills/figma-android/README.md +36 -0
- package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +62 -0
- package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +158 -0
- package/pipeline/skills/figma-android/figma-component-test/SKILL.md +120 -0
- package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +35 -0
- package/pipeline/skills/figma-android/figma-to-component/SKILL.md +124 -0
- package/pipeline/skills/figma-common/README.md +57 -0
- package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +277 -0
- package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +498 -0
- package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +283 -0
- package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +362 -0
- package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +206 -0
- package/pipeline/skills/figma-common/figma-commit/REVIEW.md +337 -0
- package/pipeline/skills/figma-common/figma-commit/SKILL.md +211 -0
- package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +218 -0
- package/pipeline/skills/figma-common/figma-component-start/SKILL.md +246 -0
- package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +73 -0
- package/pipeline/skills/figma-common/figma-fix/SKILL.md +316 -0
- package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +542 -0
- package/pipeline/skills/figma-common/figma-issue/SKILL.md +745 -0
- package/pipeline/skills/figma-common/figma-iterate/SKILL.md +203 -0
- package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +1015 -0
- package/pipeline/skills/figma-common/figma-mend/SKILL.md +331 -0
- package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +398 -0
- package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +104 -0
- package/pipeline/skills/figma-common/figma-review/SKILL.md +395 -0
- package/pipeline/skills/figma-common/figma-setup/SKILL.md +514 -0
- package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +592 -0
- package/pipeline/skills/figma-common/figma-skip/SKILL.md +129 -0
- package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +104 -0
- package/pipeline/skills/figma-common/figma-utility/SKILL.md +274 -0
- package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +808 -0
- package/pipeline/skills/figma-common/figma-validate/SKILL.md +633 -0
- package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +711 -0
- package/pipeline/skills/figma-common/performance-review-next/SKILL.md +233 -0
- package/pipeline/skills/figma-common/performance-start/SKILL.md +425 -0
- package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +706 -0
- package/pipeline/skills/figma-common/performance-tour/SKILL.md +418 -0
- package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +67 -0
- package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +178 -0
- package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +184 -0
- package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +219 -0
- package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +274 -0
- package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +401 -0
- package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +57 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +307 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +119 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +174 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +333 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +368 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +393 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +617 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +352 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +337 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +206 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +235 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +214 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +871 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +156 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +175 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +176 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +333 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +412 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +336 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +695 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +332 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +380 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +262 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +482 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +274 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +636 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +142 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +547 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +39 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +659 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +580 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +51 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +129 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/analytics-events.md +64 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +531 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-api.md +89 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-xhtml.md +155 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +196 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +57 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/localization-naming.md +89 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +227 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +157 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +90 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/registry.md +116 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +153 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +130 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +218 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +188 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +93 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +98 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +261 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +147 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +182 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +185 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +609 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +332 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +261 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +184 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +188 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +768 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +191 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +420 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.json +94 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +336 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +391 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +292 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/__init__.py +1 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +93 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +299 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_backfill_status.py +343 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +206 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update_http.py +149 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_phase_clis.py +281 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +332 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +176 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_review.py +98 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue.py +298 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +195 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +1298 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +228 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +1089 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +141 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +106 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +162 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +105 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +179 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +260 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +260 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +86 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +321 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +1470 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +176 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +147 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase7a.py +629 -0
- package/pipeline/skills/shared/README.md +212 -0
- package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +315 -0
- package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +348 -0
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +944 -0
- package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +51 -0
- package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +300 -0
- package/pipeline/skills/shared/core/multi-agent-delete/SKILL.md +63 -0
- package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +64 -0
- package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +56 -0
- package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +36 -0
- package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +42 -0
- package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +66 -0
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +292 -0
- package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +35 -0
- package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +38 -0
- package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +41 -0
- package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +87 -0
- package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +37 -0
- package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +53 -0
- package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +28 -0
- package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +47 -0
- package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +42 -0
- package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +191 -0
- package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +31 -0
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +61 -0
- package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +61 -0
- package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +62 -0
- package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +309 -0
- package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +55 -0
- package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +41 -0
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +184 -0
- package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +44 -0
- package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +34 -0
- package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +45 -0
- package/pipeline/skills/shared/external/agentflow/SKILL.md +199 -0
- package/pipeline/skills/shared/external/alarmkit/SKILL.md +438 -0
- package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +584 -0
- package/pipeline/skills/shared/external/android-architecture/SKILL.md +407 -0
- package/pipeline/skills/shared/external/android-jetpack-compose-expert/SKILL.md +153 -0
- package/pipeline/skills/shared/external/android-performance/SKILL.md +736 -0
- package/pipeline/skills/shared/external/android-security/SKILL.md +577 -0
- package/pipeline/skills/shared/external/android_ui_verification/SKILL.md +66 -0
- package/pipeline/skills/shared/external/api-patterns/SKILL.md +85 -0
- package/pipeline/skills/shared/external/api-security-best-practices/SKILL.md +910 -0
- package/pipeline/skills/shared/external/app-clips/SKILL.md +436 -0
- package/pipeline/skills/shared/external/app-intents/SKILL.md +489 -0
- package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +1076 -0
- package/pipeline/skills/shared/external/app-store-changelog/SKILL.md +75 -0
- package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +409 -0
- package/pipeline/skills/shared/external/app-store-review/SKILL.md +411 -0
- package/pipeline/skills/shared/external/app-store-review/references/code-signing.md +259 -0
- package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +90 -0
- package/pipeline/skills/shared/external/app-store-review/references/rejection-patterns.md +152 -0
- package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +118 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +500 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +425 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +344 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +508 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +285 -0
- package/pipeline/skills/shared/external/architecture/SKILL.md +60 -0
- package/pipeline/skills/shared/external/authentication/SKILL.md +496 -0
- package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +211 -0
- package/pipeline/skills/shared/external/background-processing/SKILL.md +499 -0
- package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +390 -0
- package/pipeline/skills/shared/external/callkit-voip/SKILL.md +461 -0
- package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +425 -0
- package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +462 -0
- package/pipeline/skills/shared/external/clean-code/SKILL.md +94 -0
- package/pipeline/skills/shared/external/closed-loop-delivery/SKILL.md +116 -0
- package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +492 -0
- package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +461 -0
- package/pipeline/skills/shared/external/compose-components/SKILL.md +441 -0
- package/pipeline/skills/shared/external/compose-navigation/SKILL.md +436 -0
- package/pipeline/skills/shared/external/compose-testing/SKILL.md +527 -0
- package/pipeline/skills/shared/external/contacts-framework/SKILL.md +425 -0
- package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +409 -0
- package/pipeline/skills/shared/external/context-compression/SKILL.md +266 -0
- package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +491 -0
- package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +435 -0
- package/pipeline/skills/shared/external/core-motion/SKILL.md +388 -0
- package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +405 -0
- package/pipeline/skills/shared/external/core-nfc/SKILL.md +495 -0
- package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +420 -0
- package/pipeline/skills/shared/external/coreml/SKILL.md +458 -0
- package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +765 -0
- package/pipeline/skills/shared/external/css-modern/SKILL.md +467 -0
- package/pipeline/skills/shared/external/database-patterns/SKILL.md +335 -0
- package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +422 -0
- package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +387 -0
- package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +298 -0
- package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +37 -0
- package/pipeline/skills/shared/external/device-integrity/SKILL.md +477 -0
- package/pipeline/skills/shared/external/docker-expert/SKILL.md +413 -0
- package/pipeline/skills/shared/external/energykit/SKILL.md +460 -0
- package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +541 -0
- package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +483 -0
- package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +326 -0
- package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +190 -0
- package/pipeline/skills/shared/external/firebase/SKILL.md +61 -0
- package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +348 -0
- package/pipeline/skills/shared/external/gradle-kotlin-dsl/SKILL.md +552 -0
- package/pipeline/skills/shared/external/healthkit/SKILL.md +498 -0
- package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +602 -0
- package/pipeline/skills/shared/external/help-skills/SKILL.md +166 -0
- package/pipeline/skills/shared/external/hig-components-content/SKILL.md +81 -0
- package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +95 -0
- package/pipeline/skills/shared/external/hig-components-status/SKILL.md +82 -0
- package/pipeline/skills/shared/external/hig-components-system/SKILL.md +101 -0
- package/pipeline/skills/shared/external/hig-foundations/SKILL.md +94 -0
- package/pipeline/skills/shared/external/hig-inputs/SKILL.md +110 -0
- package/pipeline/skills/shared/external/hig-patterns/SKILL.md +99 -0
- package/pipeline/skills/shared/external/hig-platforms/SKILL.md +81 -0
- package/pipeline/skills/shared/external/hig-technologies/SKILL.md +125 -0
- package/pipeline/skills/shared/external/homekit-matter/SKILL.md +496 -0
- package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +455 -0
- package/pipeline/skills/shared/external/html-semantic/SKILL.md +301 -0
- package/pipeline/skills/shared/external/humanizer/SKILL.md +118 -0
- package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +301 -0
- package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +140 -0
- package/pipeline/skills/shared/external/ios-debugger-agent/SKILL.md +59 -0
- package/pipeline/skills/shared/external/ios-developer/SKILL.md +217 -0
- package/pipeline/skills/shared/external/ios-localization/SKILL.md +418 -0
- package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +627 -0
- package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +462 -0
- package/pipeline/skills/shared/external/ios-networking/SKILL.md +441 -0
- package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +862 -0
- package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -0
- package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +563 -0
- package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +1116 -0
- package/pipeline/skills/shared/external/ios-security/SKILL.md +496 -0
- package/pipeline/skills/shared/external/ios-security/references/app-review-guidelines.md +174 -0
- package/pipeline/skills/shared/external/ios-security/references/cryptokit-advanced.md +297 -0
- package/pipeline/skills/shared/external/ios-security/references/file-storage-patterns.md +354 -0
- package/pipeline/skills/shared/external/ios-security/references/privacy-manifest.md +117 -0
- package/pipeline/skills/shared/external/kotlin-coroutines-expert/SKILL.md +101 -0
- package/pipeline/skills/shared/external/live-activities/SKILL.md +500 -0
- package/pipeline/skills/shared/external/live-activities/references/live-activity-patterns.md +868 -0
- package/pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md +109 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +110 -0
- package/pipeline/skills/shared/external/mapkit-location/SKILL.md +485 -0
- package/pipeline/skills/shared/external/mapkit-location/references/corelocation-patterns.md +730 -0
- package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +748 -0
- package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +479 -0
- package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +64 -0
- package/pipeline/skills/shared/external/musickit-audio/SKILL.md +395 -0
- package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +363 -0
- package/pipeline/skills/shared/external/natural-language/SKILL.md +412 -0
- package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +311 -0
- package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +418 -0
- package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +38 -0
- package/pipeline/skills/shared/external/observability-engineer/SKILL.md +235 -0
- package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +398 -0
- package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +254 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +387 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/references/paperkit-integration.md +376 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +302 -0
- package/pipeline/skills/shared/external/permissionkit/SKILL.md +446 -0
- package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +435 -0
- package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +501 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +701 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +774 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +869 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/photospicker-patterns.md +597 -0
- package/pipeline/skills/shared/external/play-store-review/SKILL.md +350 -0
- package/pipeline/skills/shared/external/push-notifications/SKILL.md +501 -0
- package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +677 -0
- package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +745 -0
- package/pipeline/skills/shared/external/python-patterns/SKILL.md +383 -0
- package/pipeline/skills/shared/external/react-best-practices/SKILL.md +290 -0
- package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +479 -0
- package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +480 -0
- package/pipeline/skills/shared/external/rest-api-design/SKILL.md +386 -0
- package/pipeline/skills/shared/external/retrofit-networking/SKILL.md +506 -0
- package/pipeline/skills/shared/external/room-database/SKILL.md +564 -0
- package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +483 -0
- package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +544 -0
- package/pipeline/skills/shared/external/speech-recognition/SKILL.md +485 -0
- package/pipeline/skills/shared/external/storekit/SKILL.md +478 -0
- package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +58 -0
- package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +755 -0
- package/pipeline/skills/shared/external/swift-charts/SKILL.md +487 -0
- package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +895 -0
- package/pipeline/skills/shared/external/swift-codable/SKILL.md +467 -0
- package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +408 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +80 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/swift-6-2-concurrency.md +233 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +187 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +341 -0
- package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +113 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/SKILL.md +124 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/actors.md +155 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/async-streams.md +67 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/bridging.md +52 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/bug-patterns.md +100 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/cancellation.md +107 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/diagnostics.md +70 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/hotspots.md +47 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/interop.md +129 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/new-features.md +224 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/structured.md +101 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/testing.md +218 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/unstructured.md +61 -0
- package/pipeline/skills/shared/external/swift-language/SKILL.md +498 -0
- package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +505 -0
- package/pipeline/skills/shared/external/swift-testing/SKILL.md +462 -0
- package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +504 -0
- package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +97 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/async-tests.md +252 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/core-rules.md +52 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/migrating-from-xctest.md +34 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +318 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/writing-better-tests.md +254 -0
- package/pipeline/skills/shared/external/swiftdata/SKILL.md +334 -0
- package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +504 -0
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +975 -0
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +675 -0
- package/pipeline/skills/shared/external/swiftdata-pro/SKILL.md +102 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/class-inheritance.md +104 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/cloudkit.md +10 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/core-rules.md +20 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/indexing.md +27 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/predicates.md +73 -0
- package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +503 -0
- package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +821 -0
- package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +553 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/SKILL.md +102 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/accessibility-patterns.md +215 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-advanced.md +403 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-basics.md +284 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-transitions.md +326 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts-accessibility.md +135 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts.md +602 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/image-optimization.md +203 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/latest-apis.md +464 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/layout-best-practices.md +266 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/liquid-glass.md +416 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/list-patterns.md +394 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-scenes.md +318 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-views.md +357 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-window-styling.md +303 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/performance-patterns.md +403 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/scroll-patterns.md +293 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/sheet-navigation-patterns.md +363 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/state-management.md +417 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/view-structure.md +389 -0
- package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +450 -0
- package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +425 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +336 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +97 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +69 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +99 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +147 -0
- package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +98 -0
- package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +262 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +207 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +177 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +169 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +178 -0
- package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +371 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +486 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +1097 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +780 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +696 -0
- package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +487 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +46 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +29 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +33 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +52 -0
- package/pipeline/skills/shared/external/swiftui-performance-audit/SKILL.md +114 -0
- package/pipeline/skills/shared/external/swiftui-pro/SKILL.md +108 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/accessibility.md +13 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/api.md +39 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/data.md +43 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/design.md +31 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/hygiene.md +9 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/navigation.md +14 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/performance.md +46 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/swift.md +56 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/views.md +35 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +103 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +428 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +534 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +948 -0
- package/pipeline/skills/shared/external/swiftui-view-refactor/SKILL.md +210 -0
- package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +273 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +151 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +95 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +51 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +111 -0
- package/pipeline/skills/shared/external/tailwind-css/SKILL.md +309 -0
- package/pipeline/skills/shared/external/testing-backend/SKILL.md +393 -0
- package/pipeline/skills/shared/external/tipkit/SKILL.md +494 -0
- package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +782 -0
- package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +336 -0
- package/pipeline/skills/shared/external/vision-framework/SKILL.md +475 -0
- package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +736 -0
- package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +738 -0
- package/pipeline/skills/shared/external/vue-composition/SKILL.md +371 -0
- package/pipeline/skills/shared/external/weatherkit/SKILL.md +410 -0
- package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +567 -0
- package/pipeline/skills/shared/external/web-accessibility/SKILL.md +373 -0
- package/pipeline/skills/shared/external/web-performance/SKILL.md +345 -0
- package/pipeline/skills/shared/external/web-testing/SKILL.md +385 -0
- package/pipeline/skills/shared/external/widgetkit/SKILL.md +497 -0
- package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +871 -0
- package/pipeline/skills/skills-index.md +205 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ios-developer
|
|
3
|
+
description: Develop native iOS applications with Swift/SwiftUI. Masters iOS 18, SwiftUI, UIKit integration, Core Data, networking, and App Store optimization.
|
|
4
|
+
risk: unknown
|
|
5
|
+
source: community
|
|
6
|
+
date_added: '2026-02-27'
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Use this skill when
|
|
10
|
+
|
|
11
|
+
- Working on ios developer tasks or workflows
|
|
12
|
+
- Needing guidance, best practices, or checklists for ios developer
|
|
13
|
+
|
|
14
|
+
## Do not use this skill when
|
|
15
|
+
|
|
16
|
+
- The task is unrelated to ios developer
|
|
17
|
+
- You need a different domain or tool outside this scope
|
|
18
|
+
|
|
19
|
+
## Instructions
|
|
20
|
+
|
|
21
|
+
- Clarify goals, constraints, and required inputs.
|
|
22
|
+
- Apply relevant best practices and validate outcomes.
|
|
23
|
+
- Provide actionable steps and verification.
|
|
24
|
+
- If detailed examples are required, open `resources/implementation-playbook.md`.
|
|
25
|
+
|
|
26
|
+
You are an iOS development expert specializing in native iOS app development with comprehensive knowledge of the Apple ecosystem.
|
|
27
|
+
|
|
28
|
+
## Purpose
|
|
29
|
+
Expert iOS developer specializing in Swift 6, SwiftUI, and native iOS application development. Masters modern iOS architecture patterns, performance optimization, and Apple platform integrations while maintaining code quality and App Store compliance.
|
|
30
|
+
|
|
31
|
+
## Capabilities
|
|
32
|
+
|
|
33
|
+
### Core iOS Development
|
|
34
|
+
- Swift 6 language features including strict concurrency and typed throws
|
|
35
|
+
- SwiftUI declarative UI framework with iOS 18 enhancements
|
|
36
|
+
- UIKit integration and hybrid SwiftUI/UIKit architectures
|
|
37
|
+
- iOS 18 specific features and API integrations
|
|
38
|
+
- Xcode 16 development environment optimization
|
|
39
|
+
- Swift Package Manager for dependency management
|
|
40
|
+
- iOS App lifecycle and scene-based architecture
|
|
41
|
+
- Background processing and app state management
|
|
42
|
+
|
|
43
|
+
### SwiftUI Mastery
|
|
44
|
+
- SwiftUI 5.0+ features including enhanced animations and layouts
|
|
45
|
+
- State management with @State, @Binding, @ObservedObject, and @StateObject
|
|
46
|
+
- Combine framework integration for reactive programming
|
|
47
|
+
- Custom view modifiers and view builders
|
|
48
|
+
- SwiftUI navigation patterns and coordinator architecture
|
|
49
|
+
- Preview providers and canvas development
|
|
50
|
+
- Accessibility-first SwiftUI development
|
|
51
|
+
- SwiftUI performance optimization techniques
|
|
52
|
+
|
|
53
|
+
### UIKit Integration & Legacy Support
|
|
54
|
+
- UIKit and SwiftUI interoperability patterns
|
|
55
|
+
- UIViewController and UIView wrapping techniques
|
|
56
|
+
- Custom UIKit components and controls
|
|
57
|
+
- Auto Layout programmatic and Interface Builder approaches
|
|
58
|
+
- Collection views and table views with diffable data sources
|
|
59
|
+
- Custom transitions and view controller animations
|
|
60
|
+
- Legacy code migration strategies to SwiftUI
|
|
61
|
+
- UIKit appearance customization and theming
|
|
62
|
+
|
|
63
|
+
### Architecture Patterns
|
|
64
|
+
- MVVM architecture with SwiftUI and Combine
|
|
65
|
+
- Clean Architecture implementation for iOS apps
|
|
66
|
+
- Coordinator pattern for navigation management
|
|
67
|
+
- Repository pattern for data abstraction
|
|
68
|
+
- Dependency injection with Swinject or custom solutions
|
|
69
|
+
- Modular architecture and Swift Package organization
|
|
70
|
+
- Protocol-oriented programming patterns
|
|
71
|
+
- Reactive programming with Combine publishers
|
|
72
|
+
|
|
73
|
+
### Data Management & Persistence
|
|
74
|
+
- Core Data with SwiftUI integration and @FetchRequest
|
|
75
|
+
- SwiftData for modern data persistence (iOS 17+)
|
|
76
|
+
- CloudKit integration for cloud storage and sync
|
|
77
|
+
- Keychain Services for secure data storage
|
|
78
|
+
- UserDefaults and property wrappers for app settings
|
|
79
|
+
- File system operations and document-based apps
|
|
80
|
+
- SQLite and FMDB for complex database operations
|
|
81
|
+
- Network caching and offline-first strategies
|
|
82
|
+
|
|
83
|
+
### Networking & API Integration
|
|
84
|
+
- URLSession with async/await for modern networking
|
|
85
|
+
- Combine publishers for reactive networking patterns
|
|
86
|
+
- RESTful API integration with Codable protocols
|
|
87
|
+
- GraphQL integration with Apollo iOS
|
|
88
|
+
- WebSocket connections for real-time communication
|
|
89
|
+
- Network reachability and connection monitoring
|
|
90
|
+
- Certificate pinning and network security
|
|
91
|
+
- Background URLSession for file transfers
|
|
92
|
+
|
|
93
|
+
### Performance Optimization
|
|
94
|
+
- Instruments profiling for memory and performance analysis
|
|
95
|
+
- Core Animation and rendering optimization
|
|
96
|
+
- Image loading and caching strategies (SDWebImage, Kingfisher)
|
|
97
|
+
- Lazy loading patterns and pagination
|
|
98
|
+
- Background processing optimization
|
|
99
|
+
- Memory management and ARC optimization
|
|
100
|
+
- Thread management and GCD patterns
|
|
101
|
+
- Battery life optimization techniques
|
|
102
|
+
|
|
103
|
+
### Security & Privacy
|
|
104
|
+
- iOS security best practices and data protection
|
|
105
|
+
- Keychain Services for sensitive data storage
|
|
106
|
+
- Biometric authentication (Touch ID, Face ID)
|
|
107
|
+
- App Transport Security (ATS) configuration
|
|
108
|
+
- Certificate pinning implementation
|
|
109
|
+
- Privacy-focused development and data collection
|
|
110
|
+
- App Tracking Transparency framework integration
|
|
111
|
+
- Secure coding practices and vulnerability prevention
|
|
112
|
+
|
|
113
|
+
### Testing Strategies
|
|
114
|
+
- XCTest framework for unit and integration testing
|
|
115
|
+
- UI testing with XCUITest automation
|
|
116
|
+
- Test-driven development (TDD) practices
|
|
117
|
+
- Mock objects and dependency injection for testing
|
|
118
|
+
- Snapshot testing for UI regression prevention
|
|
119
|
+
- Performance testing and benchmarking
|
|
120
|
+
- Continuous integration with Xcode Cloud
|
|
121
|
+
- TestFlight beta testing and feedback collection
|
|
122
|
+
|
|
123
|
+
### App Store & Distribution
|
|
124
|
+
- App Store Connect management and optimization
|
|
125
|
+
- App Store review guidelines compliance
|
|
126
|
+
- Metadata optimization and ASO best practices
|
|
127
|
+
- Screenshot automation and marketing assets
|
|
128
|
+
- App Store pricing and monetization strategies
|
|
129
|
+
- TestFlight internal and external testing
|
|
130
|
+
- Enterprise distribution and MDM integration
|
|
131
|
+
- Privacy nutrition labels and app privacy reports
|
|
132
|
+
|
|
133
|
+
### Advanced iOS Features
|
|
134
|
+
- Widget development for home screen and lock screen
|
|
135
|
+
- Live Activities and Dynamic Island integration
|
|
136
|
+
- SiriKit integration for voice commands
|
|
137
|
+
- Core ML and Create ML for on-device machine learning
|
|
138
|
+
- ARKit for augmented reality experiences
|
|
139
|
+
- Core Location and MapKit for location-based features
|
|
140
|
+
- HealthKit integration for health and fitness apps
|
|
141
|
+
- HomeKit for smart home automation
|
|
142
|
+
|
|
143
|
+
### Apple Ecosystem Integration
|
|
144
|
+
- Watch connectivity for Apple Watch companion apps
|
|
145
|
+
- WatchOS app development with SwiftUI
|
|
146
|
+
- macOS Catalyst for Mac app distribution
|
|
147
|
+
- Universal apps for iPhone, iPad, and Mac
|
|
148
|
+
- AirDrop and document sharing integration
|
|
149
|
+
- Handoff and Continuity features
|
|
150
|
+
- iCloud integration for seamless user experience
|
|
151
|
+
- Sign in with Apple implementation
|
|
152
|
+
|
|
153
|
+
### DevOps & Automation
|
|
154
|
+
- Xcode Cloud for continuous integration and delivery
|
|
155
|
+
- Fastlane for deployment automation
|
|
156
|
+
- GitHub Actions and Bitrise for CI/CD pipelines
|
|
157
|
+
- Automatic code signing and certificate management
|
|
158
|
+
- Build configurations and scheme management
|
|
159
|
+
- Archive and distribution automation
|
|
160
|
+
- Crash reporting with Crashlytics or Sentry
|
|
161
|
+
- Analytics integration and user behavior tracking
|
|
162
|
+
|
|
163
|
+
### Accessibility & Inclusive Design
|
|
164
|
+
- VoiceOver and assistive technology support
|
|
165
|
+
- Dynamic Type and text scaling support
|
|
166
|
+
- High contrast and reduced motion accommodations
|
|
167
|
+
- Accessibility inspector and audit tools
|
|
168
|
+
- Semantic markup and accessibility traits
|
|
169
|
+
- Keyboard navigation and external keyboard support
|
|
170
|
+
- Voice Control and Switch Control compatibility
|
|
171
|
+
- Inclusive design principles and testing
|
|
172
|
+
|
|
173
|
+
## Behavioral Traits
|
|
174
|
+
- Follows Apple Human Interface Guidelines religiously
|
|
175
|
+
- Prioritizes user experience and platform consistency
|
|
176
|
+
- Implements comprehensive error handling and user feedback
|
|
177
|
+
- Uses Swift's type system for compile-time safety
|
|
178
|
+
- Considers performance implications of UI decisions
|
|
179
|
+
- Writes maintainable, well-documented Swift code
|
|
180
|
+
- Keeps up with WWDC announcements and iOS updates
|
|
181
|
+
- Plans for multiple device sizes and orientations
|
|
182
|
+
- Implements proper memory management patterns
|
|
183
|
+
- Follows App Store review guidelines proactively
|
|
184
|
+
|
|
185
|
+
## Knowledge Base
|
|
186
|
+
- iOS SDK updates and new API availability
|
|
187
|
+
- Swift language evolution and upcoming features
|
|
188
|
+
- SwiftUI framework enhancements and best practices
|
|
189
|
+
- Apple design system and platform conventions
|
|
190
|
+
- App Store optimization and marketing strategies
|
|
191
|
+
- iOS security framework and privacy requirements
|
|
192
|
+
- Performance optimization tools and techniques
|
|
193
|
+
- Accessibility standards and assistive technologies
|
|
194
|
+
- Apple ecosystem integration opportunities
|
|
195
|
+
- Enterprise iOS deployment and management
|
|
196
|
+
|
|
197
|
+
## Response Approach
|
|
198
|
+
1. **Analyze requirements** for iOS-specific implementation patterns
|
|
199
|
+
2. **Recommend SwiftUI-first solutions** with UIKit integration when needed
|
|
200
|
+
3. **Provide production-ready Swift code** with proper error handling
|
|
201
|
+
4. **Include accessibility considerations** from the design phase
|
|
202
|
+
5. **Consider App Store guidelines** and review requirements
|
|
203
|
+
6. **Optimize for performance** across all iOS device types
|
|
204
|
+
7. **Implement proper testing strategies** for quality assurance
|
|
205
|
+
8. **Address privacy and security** requirements proactively
|
|
206
|
+
|
|
207
|
+
## Example Interactions
|
|
208
|
+
- "Build a SwiftUI app with Core Data and CloudKit synchronization"
|
|
209
|
+
- "Create custom UIKit components that integrate with SwiftUI views"
|
|
210
|
+
- "Implement biometric authentication with proper fallback handling"
|
|
211
|
+
- "Design an accessible data visualization with VoiceOver support"
|
|
212
|
+
- "Set up CI/CD pipeline with Xcode Cloud and TestFlight distribution"
|
|
213
|
+
- "Optimize app performance using Instruments and memory profiling"
|
|
214
|
+
- "Create Live Activities for real-time updates on lock screen"
|
|
215
|
+
- "Implement ARKit features for product visualization app"
|
|
216
|
+
|
|
217
|
+
Focus on Swift-first solutions with modern iOS patterns. Include comprehensive error handling, accessibility support, and App Store compliance considerations.
|
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ios-localization
|
|
3
|
+
description: "Implement, review, or improve localization and internationalization in iOS/macOS apps — String Catalogs (.xcstrings), LocalizedStringKey, LocalizedStringResource, pluralization, FormatStyle for numbers/dates/measurements, right-to-left layout, Dynamic Type, and locale-aware formatting. Use when adding multi-language support, setting up String Catalogs, handling plural forms, formatting dates/numbers/currencies for different locales, testing localizations, or making UI work correctly in RTL languages like Arabic and Hebrew."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# iOS Localization & Internationalization
|
|
7
|
+
|
|
8
|
+
Localize iOS 26+ apps using String Catalogs, modern string types, FormatStyle, and RTL-aware layout. Localization mistakes cause App Store rejections in non-English markets, mistranslated UI, and broken layouts. Ship with correct localization from the start.
|
|
9
|
+
|
|
10
|
+
## Contents
|
|
11
|
+
|
|
12
|
+
- [String Catalogs (.xcstrings)](#string-catalogs-xcstrings)
|
|
13
|
+
- [String Types -- Decision Guide](#string-types-decision-guide)
|
|
14
|
+
- [String Interpolation in Localized Strings](#string-interpolation-in-localized-strings)
|
|
15
|
+
- [Pluralization](#pluralization)
|
|
16
|
+
- [FormatStyle -- Locale-Aware Formatting](#formatstyle-locale-aware-formatting)
|
|
17
|
+
- [Right-to-Left (RTL) Layout](#right-to-left-rtl-layout)
|
|
18
|
+
- [Common Mistakes](#common-mistakes)
|
|
19
|
+
- [Localization Review Checklist](#localization-review-checklist)
|
|
20
|
+
- [References](#references)
|
|
21
|
+
|
|
22
|
+
## String Catalogs (.xcstrings)
|
|
23
|
+
|
|
24
|
+
String Catalogs replaced `.strings` and `.stringsdict` files starting in Xcode 15 / iOS 17. They unify all localizable strings, pluralization rules, and device variations into a single JSON-based file with a visual editor.
|
|
25
|
+
|
|
26
|
+
**Why String Catalogs exist:**
|
|
27
|
+
- `.strings` files required manual key management and fell out of sync
|
|
28
|
+
- `.stringsdict` required complex XML for plurals
|
|
29
|
+
- String Catalogs auto-extract strings from code, track translation state, and support plurals natively
|
|
30
|
+
|
|
31
|
+
**How automatic extraction works:**
|
|
32
|
+
|
|
33
|
+
Xcode scans for these patterns on each build:
|
|
34
|
+
|
|
35
|
+
```swift
|
|
36
|
+
// SwiftUI -- automatically extracted (LocalizedStringKey)
|
|
37
|
+
Text("Welcome back") // key: "Welcome back"
|
|
38
|
+
Label("Settings", systemImage: "gear")
|
|
39
|
+
Button("Save") { }
|
|
40
|
+
Toggle("Dark Mode", isOn: $dark)
|
|
41
|
+
|
|
42
|
+
// Programmatic -- automatically extracted
|
|
43
|
+
String(localized: "No items found")
|
|
44
|
+
LocalizedStringResource("Order placed")
|
|
45
|
+
|
|
46
|
+
// NOT extracted -- plain String, not localized
|
|
47
|
+
let msg = "Hello" // just a String, invisible to Xcode
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Xcode adds discovered keys to the String Catalog automatically. Mark translations as Needs Review, Translated, or Stale in the editor.
|
|
51
|
+
|
|
52
|
+
For detailed String Catalog workflows, migration, and testing strategies, see `references/string-catalogs.md`.
|
|
53
|
+
|
|
54
|
+
## String Types -- Decision Guide
|
|
55
|
+
|
|
56
|
+
### LocalizedStringKey (SwiftUI default)
|
|
57
|
+
|
|
58
|
+
SwiftUI views accept `LocalizedStringKey` for their text parameters. String literals are implicitly converted -- no extra work needed.
|
|
59
|
+
|
|
60
|
+
```swift
|
|
61
|
+
// These all create a LocalizedStringKey lookup automatically:
|
|
62
|
+
Text("Welcome back")
|
|
63
|
+
Label("Profile", systemImage: "person")
|
|
64
|
+
Button("Delete") { deleteItem() }
|
|
65
|
+
NavigationTitle("Home")
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Use `LocalizedStringKey` when passing strings directly to SwiftUI view initializers. Do not construct `LocalizedStringKey` manually in most cases.
|
|
69
|
+
|
|
70
|
+
### String(localized:) -- Modern NSLocalizedString replacement
|
|
71
|
+
|
|
72
|
+
Use for any localized string outside a SwiftUI view initializer. Returns a plain `String`. Available iOS 16+.
|
|
73
|
+
|
|
74
|
+
```swift
|
|
75
|
+
// Basic
|
|
76
|
+
let title = String(localized: "Welcome back")
|
|
77
|
+
|
|
78
|
+
// With default value (key differs from English text)
|
|
79
|
+
let msg = String(localized: "error.network",
|
|
80
|
+
defaultValue: "Check your internet connection")
|
|
81
|
+
|
|
82
|
+
// With table and bundle
|
|
83
|
+
let label = String(localized: "onboarding.title",
|
|
84
|
+
table: "Onboarding",
|
|
85
|
+
bundle: .module)
|
|
86
|
+
|
|
87
|
+
// With comment for translators
|
|
88
|
+
let btn = String(localized: "Save",
|
|
89
|
+
comment: "Button title to save the current document")
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### LocalizedStringResource -- Pass localization info without resolving
|
|
93
|
+
|
|
94
|
+
Use when you need to pass a localized string to an API that resolves it later (App Intents, widgets, notifications, system frameworks). Available iOS 16+.
|
|
95
|
+
|
|
96
|
+
```swift
|
|
97
|
+
// App Intents require LocalizedStringResource
|
|
98
|
+
struct OrderCoffeeIntent: AppIntent {
|
|
99
|
+
static var title: LocalizedStringResource = "Order Coffee"
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Widgets
|
|
103
|
+
struct MyWidget: Widget {
|
|
104
|
+
var body: some WidgetConfiguration {
|
|
105
|
+
StaticConfiguration(kind: "timer",
|
|
106
|
+
provider: Provider()) { entry in
|
|
107
|
+
TimerView(entry: entry)
|
|
108
|
+
}
|
|
109
|
+
.configurationDisplayName(LocalizedStringResource("Timer"))
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Pass around without resolving yet
|
|
114
|
+
func showAlert(title: LocalizedStringResource, message: LocalizedStringResource) {
|
|
115
|
+
// Resolved at display time with the user's current locale
|
|
116
|
+
let resolved = String(localized: title)
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### When to use each type
|
|
121
|
+
|
|
122
|
+
| Context | Type | Why |
|
|
123
|
+
|---------|------|-----|
|
|
124
|
+
| SwiftUI view text parameters | `LocalizedStringKey` (implicit) | SwiftUI handles lookup automatically |
|
|
125
|
+
| Computed strings in view models / services | `String(localized:)` | Returns resolved `String` for logic |
|
|
126
|
+
| App Intents, widgets, system APIs | `LocalizedStringResource` | Framework resolves at display time |
|
|
127
|
+
| Error messages shown to users | `String(localized:)` | Resolved in catch blocks |
|
|
128
|
+
| Logging / analytics (not user-facing) | Plain `String` | No localization needed |
|
|
129
|
+
|
|
130
|
+
## String Interpolation in Localized Strings
|
|
131
|
+
|
|
132
|
+
Interpolated values in localized strings become positional arguments that translators can reorder.
|
|
133
|
+
|
|
134
|
+
```swift
|
|
135
|
+
// English: "Welcome, Alice! You have 3 new messages."
|
|
136
|
+
// German: "Willkommen, Alice! Sie haben 3 neue Nachrichten."
|
|
137
|
+
// Japanese: "Alice さん、新しいメッセージが 3 件あります。"
|
|
138
|
+
let text = String(localized: "Welcome, \(name)! You have \(count) new messages.")
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
In the String Catalog, this appears with `%@` and `%lld` placeholders that translators can reorder:
|
|
142
|
+
- English: `"Welcome, %@! You have %lld new messages."`
|
|
143
|
+
- Japanese: `"%@さん、新しいメッセージが%lld件あります。"`
|
|
144
|
+
|
|
145
|
+
**Type-safe interpolation** (preferred over format specifiers):
|
|
146
|
+
```swift
|
|
147
|
+
// Interpolation provides type safety
|
|
148
|
+
String(localized: "Score: \(score, format: .number)")
|
|
149
|
+
String(localized: "Due: \(date, format: .dateTime.month().day())")
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Pluralization
|
|
153
|
+
|
|
154
|
+
String Catalogs handle pluralization natively -- no `.stringsdict` XML required.
|
|
155
|
+
|
|
156
|
+
### Setup in String Catalog
|
|
157
|
+
|
|
158
|
+
When a localized string contains an integer interpolation, Xcode detects it and offers plural variants in the String Catalog editor. Supply translations for each CLDR plural category:
|
|
159
|
+
|
|
160
|
+
| Category | English example | Arabic example |
|
|
161
|
+
|----------|----------------|----------------|
|
|
162
|
+
| zero | (not used) | 0 items |
|
|
163
|
+
| one | 1 item | 1 item |
|
|
164
|
+
| two | (not used) | 2 items (dual) |
|
|
165
|
+
| few | (not used) | 3-10 items |
|
|
166
|
+
| many | (not used) | 11-99 items |
|
|
167
|
+
| other | 2+ items | 100+ items |
|
|
168
|
+
|
|
169
|
+
English uses only `one` and `other`. Arabic uses all six. Always supply `other` as the fallback.
|
|
170
|
+
|
|
171
|
+
```swift
|
|
172
|
+
// Code -- single interpolation triggers plural support
|
|
173
|
+
Text("\(unreadCount) unread messages")
|
|
174
|
+
|
|
175
|
+
// String Catalog entries (English):
|
|
176
|
+
// one: "%lld unread message"
|
|
177
|
+
// other: "%lld unread messages"
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Device Variations
|
|
181
|
+
|
|
182
|
+
String Catalogs support device-specific text (iPhone vs iPad vs Mac):
|
|
183
|
+
|
|
184
|
+
```swift
|
|
185
|
+
// In String Catalog editor, enable "Vary by Device" for a key
|
|
186
|
+
// iPhone: "Tap to continue"
|
|
187
|
+
// iPad: "Tap or click to continue"
|
|
188
|
+
// Mac: "Click to continue"
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Grammar Agreement (iOS 17+)
|
|
192
|
+
|
|
193
|
+
Use `^[...]` inflection syntax for automatic grammatical agreement:
|
|
194
|
+
|
|
195
|
+
```swift
|
|
196
|
+
// Automatically adjusts for gender/number in supported languages
|
|
197
|
+
Text("^[\(count) \("photo")](inflect: true) added")
|
|
198
|
+
// English: "1 photo added" / "3 photos added"
|
|
199
|
+
// Spanish: "1 foto agregada" / "3 fotos agregadas"
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## FormatStyle -- Locale-Aware Formatting
|
|
203
|
+
|
|
204
|
+
Never hard-code date, number, or measurement formats. Use `FormatStyle` (iOS 15+) so formatting adapts to the user's locale automatically.
|
|
205
|
+
|
|
206
|
+
### Dates
|
|
207
|
+
|
|
208
|
+
```swift
|
|
209
|
+
let now = Date.now
|
|
210
|
+
|
|
211
|
+
// Preset styles
|
|
212
|
+
now.formatted(date: .long, time: .shortened)
|
|
213
|
+
// US: "January 15, 2026 at 3:30 PM"
|
|
214
|
+
// DE: "15. Januar 2026 um 15:30"
|
|
215
|
+
// JP: "2026年1月15日 15:30"
|
|
216
|
+
|
|
217
|
+
// Component-based
|
|
218
|
+
now.formatted(.dateTime.month(.wide).day().year())
|
|
219
|
+
// US: "January 15, 2026"
|
|
220
|
+
|
|
221
|
+
// In SwiftUI
|
|
222
|
+
Text(now, format: .dateTime.month().day().year())
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### Numbers
|
|
226
|
+
|
|
227
|
+
```swift
|
|
228
|
+
let count = 1234567
|
|
229
|
+
count.formatted() // "1,234,567" (US) / "1.234.567" (DE)
|
|
230
|
+
count.formatted(.number.precision(.fractionLength(2)))
|
|
231
|
+
count.formatted(.percent) // For 0.85 -> "85%" (US) / "85 %" (FR)
|
|
232
|
+
|
|
233
|
+
// Currency
|
|
234
|
+
let price = Decimal(29.99)
|
|
235
|
+
price.formatted(.currency(code: "USD")) // "$29.99" (US) / "29,99 $US" (FR)
|
|
236
|
+
price.formatted(.currency(code: "EUR")) // "29,99 EUR" (DE)
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Measurements
|
|
240
|
+
|
|
241
|
+
```swift
|
|
242
|
+
let distance = Measurement(value: 5, unit: UnitLength.kilometers)
|
|
243
|
+
distance.formatted(.measurement(width: .wide))
|
|
244
|
+
// US: "3.1 miles" (auto-converts!) / DE: "5 Kilometer"
|
|
245
|
+
|
|
246
|
+
let temp = Measurement(value: 22, unit: UnitTemperature.celsius)
|
|
247
|
+
temp.formatted(.measurement(width: .abbreviated))
|
|
248
|
+
// US: "72 F" (auto-converts!) / FR: "22 C"
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Duration, PersonName, Lists
|
|
252
|
+
|
|
253
|
+
```swift
|
|
254
|
+
// Duration
|
|
255
|
+
let dur = Duration.seconds(3661)
|
|
256
|
+
dur.formatted(.time(pattern: .hourMinuteSecond)) // "1:01:01"
|
|
257
|
+
|
|
258
|
+
// Person names
|
|
259
|
+
let name = PersonNameComponents(givenName: "John", familyName: "Doe")
|
|
260
|
+
name.formatted(.name(style: .long)) // "John Doe" (US) / "Doe John" (JP)
|
|
261
|
+
|
|
262
|
+
// Lists
|
|
263
|
+
let items = ["Apples", "Oranges", "Bananas"]
|
|
264
|
+
items.formatted(.list(type: .and)) // "Apples, Oranges, and Bananas" (EN)
|
|
265
|
+
// "Apples, Oranges et Bananas" (FR)
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
For the complete FormatStyle reference, custom styles, and RTL layout, see `references/formatstyle-locale.md`.
|
|
269
|
+
|
|
270
|
+
## Right-to-Left (RTL) Layout
|
|
271
|
+
|
|
272
|
+
SwiftUI automatically mirrors layouts for RTL languages (Arabic, Hebrew, Urdu, Persian). Most views require zero changes.
|
|
273
|
+
|
|
274
|
+
### What SwiftUI auto-mirrors
|
|
275
|
+
|
|
276
|
+
- `HStack` children reverse order
|
|
277
|
+
- `.leading` / `.trailing` alignment and padding swap sides
|
|
278
|
+
- `NavigationStack` back button moves to trailing edge
|
|
279
|
+
- `List` disclosure indicators flip
|
|
280
|
+
- Text alignment follows reading direction
|
|
281
|
+
|
|
282
|
+
### What needs manual attention
|
|
283
|
+
|
|
284
|
+
```swift
|
|
285
|
+
// Testing RTL in previews
|
|
286
|
+
MyView()
|
|
287
|
+
.environment(\.layoutDirection, .rightToLeft)
|
|
288
|
+
.environment(\.locale, Locale(identifier: "ar"))
|
|
289
|
+
|
|
290
|
+
// Images that should mirror (directional arrows, progress indicators)
|
|
291
|
+
Image(systemName: "chevron.right")
|
|
292
|
+
.flipsForRightToLeftLayoutDirection(true)
|
|
293
|
+
|
|
294
|
+
// Images that should NOT mirror: logos, photos, clocks, music notes
|
|
295
|
+
|
|
296
|
+
// Forced LTR for specific content (phone numbers, code)
|
|
297
|
+
Text("+1 (555) 123-4567")
|
|
298
|
+
.environment(\.layoutDirection, .leftToRight)
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### Layout rules
|
|
302
|
+
|
|
303
|
+
- **DO** use `.leading` / `.trailing` -- they auto-flip for RTL
|
|
304
|
+
- **DON'T** use `.left` / `.right` -- they are fixed and break RTL
|
|
305
|
+
- **DO** use `HStack` / `VStack` -- they respect layout direction
|
|
306
|
+
- **DON'T** use absolute `offset(x:)` for directional positioning
|
|
307
|
+
|
|
308
|
+
## Common Mistakes
|
|
309
|
+
|
|
310
|
+
### DON'T: Use NSLocalizedString in new code
|
|
311
|
+
```swift
|
|
312
|
+
// WRONG -- legacy API, verbose, no compiler integration with String Catalogs
|
|
313
|
+
let title = NSLocalizedString("welcome_title", comment: "Welcome screen title")
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### DO: Use String(localized:) or let SwiftUI handle it
|
|
317
|
+
```swift
|
|
318
|
+
// CORRECT
|
|
319
|
+
let title = String(localized: "welcome_title",
|
|
320
|
+
defaultValue: "Welcome!",
|
|
321
|
+
comment: "Welcome screen title")
|
|
322
|
+
// Or in SwiftUI, just:
|
|
323
|
+
Text("Welcome!")
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
### DON'T: Concatenate localized strings
|
|
327
|
+
```swift
|
|
328
|
+
// WRONG -- word order varies by language
|
|
329
|
+
let greeting = String(localized: "Hello") + ", " + name + "!"
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
### DO: Use string interpolation
|
|
333
|
+
```swift
|
|
334
|
+
// CORRECT -- translators can reorder placeholders
|
|
335
|
+
let greeting = String(localized: "Hello, \(name)!")
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
### DON'T: Hard-code date/number formats
|
|
339
|
+
```swift
|
|
340
|
+
// WRONG -- US-only format
|
|
341
|
+
let formatter = DateFormatter()
|
|
342
|
+
formatter.dateFormat = "MM/dd/yyyy" // Meaningless in most countries
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### DO: Use FormatStyle
|
|
346
|
+
```swift
|
|
347
|
+
// CORRECT -- adapts to user locale
|
|
348
|
+
Text(date, format: .dateTime.month().day().year())
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
### DON'T: Use fixed-width layouts
|
|
352
|
+
```swift
|
|
353
|
+
// WRONG -- German text is ~30% longer than English
|
|
354
|
+
Text(title).frame(width: 120)
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
### DO: Use flexible layouts
|
|
358
|
+
```swift
|
|
359
|
+
// CORRECT
|
|
360
|
+
Text(title).fixedSize(horizontal: false, vertical: true)
|
|
361
|
+
// Or use VStack/wrapping that accommodates expansion
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
### DON'T: Use .left / .right for alignment
|
|
365
|
+
```swift
|
|
366
|
+
// WRONG -- does not flip for RTL
|
|
367
|
+
HStack { Spacer(); text }.padding(.left, 16)
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
### DO: Use .leading / .trailing
|
|
371
|
+
```swift
|
|
372
|
+
// CORRECT
|
|
373
|
+
HStack { Spacer(); text }.padding(.leading, 16)
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
### DON'T: Put user-facing strings as plain String outside SwiftUI
|
|
377
|
+
```swift
|
|
378
|
+
// WRONG -- not localized
|
|
379
|
+
let errorMessage = "Something went wrong"
|
|
380
|
+
showAlert(message: errorMessage)
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
### DO: Use LocalizedStringResource for deferred resolution
|
|
384
|
+
```swift
|
|
385
|
+
// CORRECT
|
|
386
|
+
let errorMessage = LocalizedStringResource("Something went wrong")
|
|
387
|
+
showAlert(message: String(localized: errorMessage))
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### DON'T: Skip pseudolocalization testing
|
|
391
|
+
Testing only in English hides truncation, layout, and RTL bugs.
|
|
392
|
+
|
|
393
|
+
### DO: Test with German (long) and Arabic (RTL) at minimum
|
|
394
|
+
Use Xcode scheme settings to override the app language without changing device locale.
|
|
395
|
+
|
|
396
|
+
## Review Checklist
|
|
397
|
+
|
|
398
|
+
- [ ] All user-facing strings use localization (`LocalizedStringKey` in SwiftUI or `String(localized:)`)
|
|
399
|
+
- [ ] No string concatenation for user-visible text
|
|
400
|
+
- [ ] Dates and numbers use `FormatStyle`, not hardcoded formats
|
|
401
|
+
- [ ] Pluralization handled via String Catalog plural variants (not manual if/else)
|
|
402
|
+
- [ ] Layout uses `.leading` / `.trailing`, not `.left` / `.right`
|
|
403
|
+
- [ ] UI tested with long text (German) and RTL (Arabic)
|
|
404
|
+
- [ ] String Catalog includes all target languages
|
|
405
|
+
- [ ] Images needing RTL mirroring use `.flipsForRightToLeftLayoutDirection(true)`
|
|
406
|
+
- [ ] App Intents and widgets use `LocalizedStringResource`
|
|
407
|
+
- [ ] No `NSLocalizedString` usage in new code
|
|
408
|
+
- [ ] Comments provided for ambiguous keys (context for translators)
|
|
409
|
+
- [ ] `@ScaledMetric` used for spacing that must scale with Dynamic Type
|
|
410
|
+
- [ ] Currency formatting uses explicit currency code, not locale default
|
|
411
|
+
- [ ] Pseudolocalization tested (accented, right-to-left, double-length)
|
|
412
|
+
- [ ] Ensure localized string types are Sendable; use @MainActor for locale-change UI updates
|
|
413
|
+
|
|
414
|
+
## References
|
|
415
|
+
|
|
416
|
+
- FormatStyle patterns: `references/formatstyle-locale.md`
|
|
417
|
+
- String Catalogs guide: `references/string-catalogs.md`
|
|
418
|
+
|