@oriro/orirocli 0.1.8 → 0.1.11
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/ATTRIBUTION.md +53 -45
- package/LICENSE +21 -0
- package/README.md +20 -17
- package/dist/cli.js +4425 -2975
- package/package.json +64 -64
- package/skills/1password/SKILL.md +118 -118
- package/skills/1password/references/cli-examples.md +29 -29
- package/skills/1password/references/get-started.md +21 -21
- package/skills/21stdev/SKILL.md +64 -0
- package/skills/algorithmic-art/LICENSE +21 -21
- package/skills/algorithmic-art/SKILL.md +446 -446
- package/skills/algorithmic-art/templates/generator_template.js +223 -223
- package/skills/algorithmic-art/templates/viewer.html +598 -598
- package/skills/apple-notes/SKILL.md +81 -81
- package/skills/apple-reminders/SKILL.md +122 -122
- package/skills/bear-notes/SKILL.md +111 -111
- package/skills/blogwatcher/SKILL.md +73 -73
- package/skills/blucli/SKILL.md +51 -51
- package/skills/brand-guidelines/LICENSE +21 -21
- package/skills/brand-guidelines/SKILL.md +76 -76
- package/skills/business/biz-analysis/LICENSE +21 -21
- package/skills/business/biz-analysis/SKILL.md +103 -103
- package/skills/business/biz-corporate-strategy/LICENSE +21 -21
- package/skills/business/biz-corporate-strategy/SKILL.md +76 -76
- package/skills/business/biz-customer-success/LICENSE +21 -21
- package/skills/business/biz-customer-success/SKILL.md +55 -55
- package/skills/business/biz-entrepreneurship/LICENSE +21 -21
- package/skills/business/biz-entrepreneurship/SKILL.md +72 -72
- package/skills/business/biz-hr/LICENSE +21 -21
- package/skills/business/biz-hr/SKILL.md +67 -67
- package/skills/business/biz-international/LICENSE +21 -21
- package/skills/business/biz-international/SKILL.md +51 -51
- package/skills/business/biz-leadership/LICENSE +21 -21
- package/skills/business/biz-leadership/SKILL.md +106 -106
- package/skills/business/biz-marketing-strategy/LICENSE +21 -21
- package/skills/business/biz-marketing-strategy/SKILL.md +119 -119
- package/skills/business/biz-negotiation/LICENSE +21 -21
- package/skills/business/biz-negotiation/SKILL.md +152 -152
- package/skills/business/biz-operations/LICENSE +21 -21
- package/skills/business/biz-operations/SKILL.md +74 -74
- package/skills/business/biz-project/LICENSE +21 -21
- package/skills/business/biz-project/SKILL.md +203 -203
- package/skills/business/biz-risk/LICENSE +21 -21
- package/skills/business/biz-risk/SKILL.md +85 -85
- package/skills/business/biz-sales/LICENSE +21 -21
- package/skills/business/biz-sales/SKILL.md +92 -92
- package/skills/business/biz-startup-ops/LICENSE +21 -21
- package/skills/business/biz-startup-ops/SKILL.md +70 -70
- package/skills/business/biz-strategy/LICENSE +21 -21
- package/skills/business/biz-strategy/SKILL.md +233 -233
- package/skills/business/biz-supply-chain-advanced/LICENSE +21 -21
- package/skills/business/biz-supply-chain-advanced/SKILL.md +68 -68
- package/skills/business/fin-chartered-exams/LICENSE +21 -21
- package/skills/business/fin-chartered-exams/SKILL.md +69 -69
- package/skills/camsnap/SKILL.md +49 -49
- package/skills/canvas/SKILL.md +82 -82
- package/skills/canvas-design/LICENSE +21 -21
- package/skills/canvas-design/SKILL.md +140 -140
- package/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -94
- package/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -93
- package/skills/coding-agent/SKILL.md +146 -146
- package/skills/communication/comm-business-writing/LICENSE +21 -21
- package/skills/communication/comm-business-writing/SKILL.md +67 -67
- package/skills/communication/comm-cross-cultural/LICENSE +21 -21
- package/skills/communication/comm-cross-cultural/SKILL.md +88 -88
- package/skills/communication/comm-journalism/LICENSE +21 -21
- package/skills/communication/comm-journalism/SKILL.md +81 -81
- package/skills/communication/comm-linguistics/LICENSE +21 -21
- package/skills/communication/comm-linguistics/SKILL.md +82 -82
- package/skills/communication/comm-negotiation/LICENSE +21 -21
- package/skills/communication/comm-negotiation/SKILL.md +120 -120
- package/skills/communication/comm-presentations/LICENSE +21 -21
- package/skills/communication/comm-presentations/SKILL.md +93 -93
- package/skills/communication/comm-public-speaking/LICENSE +21 -21
- package/skills/communication/comm-public-speaking/SKILL.md +68 -68
- package/skills/communication/comm-writing/LICENSE +21 -21
- package/skills/communication/comm-writing/SKILL.md +69 -69
- package/skills/craft/ai-engineering/LICENSE +21 -21
- package/skills/craft/ai-engineering/SKILL.md +828 -828
- package/skills/craft/app-builder-guide/LICENSE +21 -21
- package/skills/craft/app-builder-guide/SKILL.md +332 -332
- package/skills/craft/become-an-ai-engineer-26/CONTRIBUTING.md +46 -46
- package/skills/craft/become-an-ai-engineer-26/LICENSE +21 -21
- package/skills/craft/become-an-ai-engineer-26/README.md +270 -270
- package/skills/craft/become-an-ai-engineer-26/SKILL.md +667 -667
- package/skills/craft/become-an-ai-engineer-26/community/BUILDS.md +13 -13
- package/skills/craft/become-an-ai-engineer-26/community/DISCUSSIONS.md +8 -8
- package/skills/craft/become-an-ai-engineer-26/phases/phase-0-mental-models/README.md +14 -14
- package/skills/craft/become-an-ai-engineer-26/phases/phase-0-mental-models/project/TEMPLATE.md +33 -33
- package/skills/craft/become-an-ai-engineer-26/phases/phase-1-first-agent/README.md +25 -25
- package/skills/craft/become-an-ai-engineer-26/phases/phase-1-first-agent/code/raw_loop.py +126 -126
- package/skills/craft/become-an-ai-engineer-26/phases/phase-2-architecture/README.md +17 -17
- package/skills/craft/become-an-ai-engineer-26/phases/phase-3-harness/README.md +17 -17
- package/skills/craft/become-an-ai-engineer-26/phases/phase-4-evals/README.md +21 -21
- package/skills/craft/become-an-ai-engineer-26/phases/phase-4-evals/code/.github/workflows/eval.yml +40 -40
- package/skills/craft/become-an-ai-engineer-26/phases/phase-5-production/README.md +16 -16
- package/skills/craft/become-an-ai-engineer-26/projects/1-mobile-app-slm/README.md +11 -11
- package/skills/craft/become-an-ai-engineer-26/projects/2-self-improving-coder/README.md +11 -11
- package/skills/craft/become-an-ai-engineer-26/projects/3-video-editor-agent/README.md +11 -11
- package/skills/craft/become-an-ai-engineer-26/projects/4-personal-life-os/README.md +12 -12
- package/skills/craft/become-an-ai-engineer-26/projects/5-enterprise-workflow/README.md +12 -12
- package/skills/craft/become-an-ai-engineer-26/references/benchmark-numbers.md +41 -41
- package/skills/craft/become-an-ai-engineer-26/references/mhc-stable-training.md +73 -73
- package/skills/craft/become-an-ai-engineer-26/references/stack-decisions.md +37 -37
- package/skills/craft/become-an-ai-engineer-26/references/yarn-context-extension.md +123 -123
- package/skills/craft/codex-result-handling/LICENSE +21 -21
- package/skills/craft/codex-result-handling/SKILL.md +26 -26
- package/skills/craft/debug-and-build-methodology/LICENSE +21 -21
- package/skills/craft/debug-and-build-methodology/SKILL.md +432 -432
- package/skills/craft/design/LICENSE +21 -21
- package/skills/craft/design/SKILL.md +274 -274
- package/skills/craft/dev/LICENSE +21 -21
- package/skills/craft/dev/SKILL.md +12 -12
- package/skills/craft/dev/release.md +85 -85
- package/skills/craft/dev/roll.md +50 -50
- package/skills/craft/doc-coauthoring/LICENSE +21 -21
- package/skills/craft/doc-coauthoring/SKILL.md +397 -397
- package/skills/craft/focus/LICENSE +21 -21
- package/skills/craft/focus/SKILL.md +432 -432
- package/skills/craft/focus/UPSTREAM_README.md +233 -233
- package/skills/craft/gh/LICENSE +21 -21
- package/skills/craft/gh/SKILL.md +84 -84
- package/skills/craft/gh-skill/LICENSE +21 -21
- package/skills/craft/gh-skill/SKILL.md +121 -121
- package/skills/craft/godmode/LICENSE +21 -21
- package/skills/craft/godmode/SKILL.md +87 -87
- package/skills/craft/godmode/references/android-launch.md +680 -680
- package/skills/craft/godmode/references/data-gcp.md +1038 -1038
- package/skills/craft/godmode/references/expo-eas.md +816 -816
- package/skills/craft/godmode/references/ios-launch.md +734 -734
- package/skills/craft/google-ai-latest/LICENSE +21 -21
- package/skills/craft/google-ai-latest/SKILL.md +682 -682
- package/skills/craft/gpt-5-4-prompting/LICENSE +21 -21
- package/skills/craft/gpt-5-4-prompting/SKILL.md +63 -63
- package/skills/craft/gpt-5-4-prompting/references/codex-prompt-antipatterns.md +101 -101
- package/skills/craft/gpt-5-4-prompting/references/codex-prompt-recipes.md +150 -150
- package/skills/craft/gpt-5-4-prompting/references/prompt-blocks.md +172 -172
- package/skills/craft/grill-me/LICENSE +21 -21
- package/skills/craft/grill-me/SKILL.md +13 -13
- package/skills/craft/idea-to-deploy/LICENSE +21 -21
- package/skills/craft/idea-to-deploy/SKILL.md +292 -292
- package/skills/craft/idea-to-deploy/references/auth-playbook.md +195 -195
- package/skills/craft/idea-to-deploy/references/gcp-deployment.md +268 -268
- package/skills/craft/idea-to-deploy/references/stack-selection.md +117 -117
- package/skills/craft/image-generation-engineer/LICENSE +21 -21
- package/skills/craft/image-generation-engineer/SKILL.md +183 -183
- package/skills/craft/image-generation-engineer/references/architectures.md +260 -260
- package/skills/craft/image-generation-engineer/references/foundations.md +107 -107
- package/skills/craft/image-generation-engineer/references/inference-and-serving.md +253 -253
- package/skills/craft/image-generation-engineer/references/training.md +149 -149
- package/skills/craft/marketing/LICENSE +21 -21
- package/skills/craft/marketing/SKILL.md +1954 -1954
- package/skills/craft/master-architect/LICENSE +21 -21
- package/skills/craft/master-architect/SKILL.md +361 -361
- package/skills/craft/master-architect/references/ai-ml.md +317 -317
- package/skills/craft/master-architect/references/architecture.md +268 -268
- package/skills/craft/master-architect/references/auth-playbook.md +195 -195
- package/skills/craft/master-architect/references/cloud.md +323 -323
- package/skills/craft/master-architect/references/cyber.md +839 -839
- package/skills/craft/master-architect/references/data-eng.md +366 -366
- package/skills/craft/master-architect/references/devops.md +550 -550
- package/skills/craft/master-architect/references/gcp-deployment.md +268 -268
- package/skills/craft/master-architect/references/languages.md +748 -748
- package/skills/craft/master-architect/references/legacy.md +240 -240
- package/skills/craft/master-architect/references/mobile.md +447 -447
- package/skills/craft/master-architect/references/patterns.md +451 -451
- package/skills/craft/master-architect/references/saas-patterns.md +379 -379
- package/skills/craft/master-architect/references/sdlc.md +349 -349
- package/skills/craft/master-architect/references/stack-selection.md +117 -117
- package/skills/craft/oriro-ui-2026/LICENSE +21 -21
- package/skills/craft/oriro-ui-2026/SKILL.md +329 -329
- package/skills/craft/playwright-cli/LICENSE +21 -21
- package/skills/craft/playwright-cli/SKILL.md +393 -393
- package/skills/craft/playwright-cli/references/element-attributes.md +23 -23
- package/skills/craft/playwright-cli/references/playwright-tests.md +39 -39
- package/skills/craft/playwright-cli/references/request-mocking.md +87 -87
- package/skills/craft/playwright-cli/references/running-code.md +240 -240
- package/skills/craft/playwright-cli/references/session-management.md +226 -226
- package/skills/craft/playwright-cli/references/spec-driven-testing.md +312 -312
- package/skills/craft/playwright-cli/references/storage-state.md +275 -275
- package/skills/craft/playwright-cli/references/test-generation.md +134 -134
- package/skills/craft/playwright-cli/references/tracing.md +142 -142
- package/skills/craft/playwright-cli/references/video-recording.md +150 -150
- package/skills/craft/remotion-best-practices/LICENSE +21 -21
- package/skills/craft/remotion-best-practices/SKILL.md +345 -345
- package/skills/craft/remotion-best-practices/rules/3d.md +86 -86
- package/skills/craft/remotion-best-practices/rules/assets/charts-bar-chart.tsx +165 -165
- package/skills/craft/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +89 -89
- package/skills/craft/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +101 -101
- package/skills/craft/remotion-best-practices/rules/audio-visualization.md +195 -195
- package/skills/craft/remotion-best-practices/rules/audio.md +167 -167
- package/skills/craft/remotion-best-practices/rules/calculate-metadata.md +118 -118
- package/skills/craft/remotion-best-practices/rules/compositions.md +132 -132
- package/skills/craft/remotion-best-practices/rules/display-captions.md +176 -176
- package/skills/craft/remotion-best-practices/rules/ffmpeg.md +34 -34
- package/skills/craft/remotion-best-practices/rules/get-audio-duration.md +58 -58
- package/skills/craft/remotion-best-practices/rules/get-video-dimensions.md +68 -68
- package/skills/craft/remotion-best-practices/rules/get-video-duration.md +60 -60
- package/skills/craft/remotion-best-practices/rules/gifs.md +135 -135
- package/skills/craft/remotion-best-practices/rules/google-fonts.md +72 -72
- package/skills/craft/remotion-best-practices/rules/html-in-canvas.md +122 -122
- package/skills/craft/remotion-best-practices/rules/images.md +67 -67
- package/skills/craft/remotion-best-practices/rules/import-srt-captions.md +69 -69
- package/skills/craft/remotion-best-practices/rules/light-leaks.md +73 -73
- package/skills/craft/remotion-best-practices/rules/local-fonts.md +65 -65
- package/skills/craft/remotion-best-practices/rules/lottie.md +67 -67
- package/skills/craft/remotion-best-practices/rules/maplibre.md +441 -441
- package/skills/craft/remotion-best-practices/rules/measuring-dom-nodes.md +34 -34
- package/skills/craft/remotion-best-practices/rules/measuring-text.md +140 -140
- package/skills/craft/remotion-best-practices/rules/parameters.md +109 -109
- package/skills/craft/remotion-best-practices/rules/sequencing.md +144 -144
- package/skills/craft/remotion-best-practices/rules/sfx.md +30 -30
- package/skills/craft/remotion-best-practices/rules/silence-detection.md +73 -73
- package/skills/craft/remotion-best-practices/rules/subtitles.md +36 -36
- package/skills/craft/remotion-best-practices/rules/tailwind.md +11 -11
- package/skills/craft/remotion-best-practices/rules/text-animations.md +20 -20
- package/skills/craft/remotion-best-practices/rules/timing.md +130 -130
- package/skills/craft/remotion-best-practices/rules/transcribe-captions.md +70 -70
- package/skills/craft/remotion-best-practices/rules/transitions.md +193 -193
- package/skills/craft/remotion-best-practices/rules/transparent-videos.md +102 -102
- package/skills/craft/remotion-best-practices/rules/trimming.md +51 -51
- package/skills/craft/remotion-best-practices/rules/videos.md +169 -169
- package/skills/craft/remotion-best-practices/rules/voiceover.md +94 -94
- package/skills/craft/supabase-postgres-best-practices/CHANGELOG.md +25 -25
- package/skills/craft/supabase-postgres-best-practices/LICENSE +21 -21
- package/skills/craft/supabase-postgres-best-practices/SKILL.md +69 -69
- package/skills/craft/supabase-postgres-best-practices/references/_contributing.md +166 -166
- package/skills/craft/supabase-postgres-best-practices/references/_sections.md +47 -47
- package/skills/craft/supabase-postgres-best-practices/references/_template.md +34 -34
- package/skills/craft/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -55
- package/skills/craft/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -49
- package/skills/craft/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -46
- package/skills/craft/supabase-postgres-best-practices/references/conn-limits.md +44 -44
- package/skills/craft/supabase-postgres-best-practices/references/conn-pooling.md +41 -41
- package/skills/craft/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -46
- package/skills/craft/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -54
- package/skills/craft/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -53
- package/skills/craft/supabase-postgres-best-practices/references/data-pagination.md +50 -50
- package/skills/craft/supabase-postgres-best-practices/references/data-upsert.md +50 -50
- package/skills/craft/supabase-postgres-best-practices/references/lock-advisory.md +56 -56
- package/skills/craft/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -68
- package/skills/craft/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -50
- package/skills/craft/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -54
- package/skills/craft/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -45
- package/skills/craft/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -55
- package/skills/craft/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -55
- package/skills/craft/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -44
- package/skills/craft/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -40
- package/skills/craft/supabase-postgres-best-practices/references/query-index-types.md +48 -48
- package/skills/craft/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -43
- package/skills/craft/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -45
- package/skills/craft/supabase-postgres-best-practices/references/schema-constraints.md +80 -80
- package/skills/craft/supabase-postgres-best-practices/references/schema-data-types.md +46 -46
- package/skills/craft/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -59
- package/skills/craft/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -55
- package/skills/craft/supabase-postgres-best-practices/references/schema-partitioning.md +55 -55
- package/skills/craft/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -61
- package/skills/craft/supabase-postgres-best-practices/references/security-privileges.md +54 -54
- package/skills/craft/supabase-postgres-best-practices/references/security-rls-basics.md +50 -50
- package/skills/craft/supabase-postgres-best-practices/references/security-rls-performance.md +63 -63
- package/skills/craft/uipm-banner-design/LICENSE +21 -21
- package/skills/craft/uipm-banner-design/SKILL.md +201 -201
- package/skills/craft/uipm-banner-design/references/banner-sizes-and-styles.md +129 -129
- package/skills/craft/uipm-brand/LICENSE +21 -21
- package/skills/craft/uipm-brand/SKILL.md +104 -104
- package/skills/craft/uipm-brand/references/approval-checklist.md +184 -184
- package/skills/craft/uipm-brand/references/asset-organization.md +167 -167
- package/skills/craft/uipm-brand/references/brand-guideline-template.md +161 -161
- package/skills/craft/uipm-brand/references/color-palette-management.md +203 -203
- package/skills/craft/uipm-brand/references/consistency-checklist.md +105 -105
- package/skills/craft/uipm-brand/references/logo-usage-rules.md +204 -204
- package/skills/craft/uipm-brand/references/messaging-framework.md +91 -91
- package/skills/craft/uipm-brand/references/typography-specifications.md +265 -265
- package/skills/craft/uipm-brand/references/update.md +128 -128
- package/skills/craft/uipm-brand/references/visual-identity.md +109 -109
- package/skills/craft/uipm-brand/references/voice-framework.md +99 -99
- package/skills/craft/uipm-brand/scripts/extract-colors.cjs +333 -333
- package/skills/craft/uipm-brand/scripts/inject-brand-context.cjs +324 -324
- package/skills/craft/uipm-brand/scripts/sync-brand-to-tokens.cjs +269 -269
- package/skills/craft/uipm-brand/scripts/validate-asset.cjs +361 -361
- package/skills/craft/uipm-brand/templates/brand-guidelines-starter.md +280 -280
- package/skills/craft/uipm-design/LICENSE +21 -21
- package/skills/craft/uipm-design/SKILL.md +305 -305
- package/skills/craft/uipm-design/data/cip/deliverables.csv +50 -50
- package/skills/craft/uipm-design/data/cip/industries.csv +20 -20
- package/skills/craft/uipm-design/data/cip/mockup-contexts.csv +20 -20
- package/skills/craft/uipm-design/data/cip/styles.csv +20 -20
- package/skills/craft/uipm-design/data/icon/styles.csv +16 -16
- package/skills/craft/uipm-design/data/logo/colors.csv +56 -56
- package/skills/craft/uipm-design/data/logo/industries.csv +56 -56
- package/skills/craft/uipm-design/data/logo/styles.csv +56 -56
- package/skills/craft/uipm-design/references/banner-sizes-and-styles.md +129 -129
- package/skills/craft/uipm-design/references/cip-deliverable-guide.md +111 -111
- package/skills/craft/uipm-design/references/cip-design.md +121 -121
- package/skills/craft/uipm-design/references/cip-prompt-engineering.md +94 -94
- package/skills/craft/uipm-design/references/cip-style-guide.md +76 -76
- package/skills/craft/uipm-design/references/design-routing.md +226 -226
- package/skills/craft/uipm-design/references/icon-design.md +122 -122
- package/skills/craft/uipm-design/references/logo-color-psychology.md +113 -113
- package/skills/craft/uipm-design/references/logo-design.md +92 -92
- package/skills/craft/uipm-design/references/logo-prompt-engineering.md +176 -176
- package/skills/craft/uipm-design/references/logo-style-guide.md +129 -129
- package/skills/craft/uipm-design/references/slides-copywriting-formulas.md +92 -92
- package/skills/craft/uipm-design/references/slides-create.md +5 -5
- package/skills/craft/uipm-design/references/slides-html-template.md +374 -374
- package/skills/craft/uipm-design/references/slides-layout-patterns.md +155 -155
- package/skills/craft/uipm-design/references/slides-strategies.md +97 -97
- package/skills/craft/uipm-design/references/slides.md +42 -42
- package/skills/craft/uipm-design/references/social-photos-design.md +353 -353
- package/skills/craft/uipm-design/scripts/cip/core.py +215 -215
- package/skills/craft/uipm-design/scripts/cip/generate.py +484 -484
- package/skills/craft/uipm-design/scripts/cip/render-html.py +424 -424
- package/skills/craft/uipm-design/scripts/cip/search.py +127 -127
- package/skills/craft/uipm-design/scripts/icon/generate.py +487 -487
- package/skills/craft/uipm-design/scripts/logo/core.py +175 -175
- package/skills/craft/uipm-design/scripts/logo/generate.py +362 -362
- package/skills/craft/uipm-design/scripts/logo/search.py +114 -114
- package/skills/craft/uipm-design-system/LICENSE +21 -21
- package/skills/craft/uipm-design-system/SKILL.md +255 -255
- package/skills/craft/uipm-design-system/data/slide-backgrounds.csv +11 -11
- package/skills/craft/uipm-design-system/data/slide-charts.csv +26 -26
- package/skills/craft/uipm-design-system/data/slide-color-logic.csv +14 -14
- package/skills/craft/uipm-design-system/data/slide-copy.csv +26 -26
- package/skills/craft/uipm-design-system/data/slide-layout-logic.csv +16 -16
- package/skills/craft/uipm-design-system/data/slide-layouts.csv +26 -26
- package/skills/craft/uipm-design-system/data/slide-strategies.csv +16 -16
- package/skills/craft/uipm-design-system/data/slide-typography.csv +15 -15
- package/skills/craft/uipm-design-system/references/component-specs.md +236 -236
- package/skills/craft/uipm-design-system/references/component-tokens.md +214 -214
- package/skills/craft/uipm-design-system/references/primitive-tokens.md +199 -199
- package/skills/craft/uipm-design-system/references/semantic-tokens.md +215 -215
- package/skills/craft/uipm-design-system/references/states-and-variants.md +243 -243
- package/skills/craft/uipm-design-system/references/tailwind-integration.md +257 -257
- package/skills/craft/uipm-design-system/references/token-architecture.md +226 -226
- package/skills/craft/uipm-design-system/scripts/embed-tokens.cjs +97 -97
- package/skills/craft/uipm-design-system/scripts/fetch-background.py +317 -317
- package/skills/craft/uipm-design-system/scripts/generate-slide.py +753 -753
- package/skills/craft/uipm-design-system/scripts/generate-tokens.cjs +213 -213
- package/skills/craft/uipm-design-system/scripts/html-token-validator.py +327 -327
- package/skills/craft/uipm-design-system/scripts/search-slides.py +218 -218
- package/skills/craft/uipm-design-system/scripts/slide-token-validator.py +35 -35
- package/skills/craft/uipm-design-system/scripts/slide_search_core.py +453 -453
- package/skills/craft/uipm-design-system/scripts/validate-tokens.cjs +254 -254
- package/skills/craft/uipm-design-system/templates/design-tokens-starter.json +143 -143
- package/skills/craft/uipm-slides/LICENSE +21 -21
- package/skills/craft/uipm-slides/SKILL.md +45 -45
- package/skills/craft/uipm-slides/references/copywriting-formulas.md +92 -92
- package/skills/craft/uipm-slides/references/create.md +5 -5
- package/skills/craft/uipm-slides/references/html-template.md +374 -374
- package/skills/craft/uipm-slides/references/layout-patterns.md +155 -155
- package/skills/craft/uipm-slides/references/slide-strategies.md +97 -97
- package/skills/craft/uipm-ui-ux-pro-max/LICENSE +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/SKILL.md +678 -678
- package/skills/craft/uipm-ui-ux-pro-max/data/_sync_all.py +414 -414
- package/skills/craft/uipm-ui-ux-pro-max/data/app-interface.csv +30 -30
- package/skills/craft/uipm-ui-ux-pro-max/data/charts.csv +26 -26
- package/skills/craft/uipm-ui-ux-pro-max/data/colors.csv +161 -161
- package/skills/craft/uipm-ui-ux-pro-max/data/design.csv +1775 -1775
- package/skills/craft/uipm-ui-ux-pro-max/data/draft.csv +1778 -1778
- package/skills/craft/uipm-ui-ux-pro-max/data/google-fonts.csv +1924 -1924
- package/skills/craft/uipm-ui-ux-pro-max/data/icons.csv +105 -105
- package/skills/craft/uipm-ui-ux-pro-max/data/landing.csv +35 -35
- package/skills/craft/uipm-ui-ux-pro-max/data/products.csv +162 -162
- package/skills/craft/uipm-ui-ux-pro-max/data/react-performance.csv +45 -45
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/angular.csv +51 -51
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/astro.csv +54 -54
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/flutter.csv +53 -53
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/laravel.csv +51 -51
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/react-native.csv +52 -52
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/react.csv +54 -54
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/svelte.csv +54 -54
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/threejs.csv +54 -54
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/vue.csv +50 -50
- package/skills/craft/uipm-ui-ux-pro-max/data/styles.csv +85 -85
- package/skills/craft/uipm-ui-ux-pro-max/data/typography.csv +74 -74
- package/skills/craft/uipm-ui-ux-pro-max/data/ui-reasoning.csv +162 -162
- package/skills/craft/uipm-ui-ux-pro-max/data/ux-guidelines.csv +99 -99
- package/skills/craft/uipm-ui-ux-pro-max/scripts/core.py +262 -262
- package/skills/craft/uipm-ui-ux-pro-max/scripts/design_system.py +1148 -1148
- package/skills/craft/uipm-ui-ux-pro-max/scripts/search.py +114 -114
- package/skills/craft/uipm-ui-ux-pro-max/templates/base/quick-reference.md +297 -297
- package/skills/craft/uipm-ui-ux-pro-max/templates/base/skill-content.md +375 -375
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/agent.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/augment.json +18 -18
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/claude.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/codebuddy.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/codex.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/continue.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/copilot.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/cursor.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/droid.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/gemini.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/kilocode.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/kiro.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/opencode.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/qoder.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/roocode.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/trae.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/warp.json +18 -18
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/windsurf.json +21 -21
- package/skills/craft/vercel-optimize/AGENTS.md +48 -48
- package/skills/craft/vercel-optimize/CONTRIBUTING.md +41 -41
- package/skills/craft/vercel-optimize/LICENSE +21 -21
- package/skills/craft/vercel-optimize/README.md +91 -91
- package/skills/craft/vercel-optimize/SKILL.md +325 -325
- package/skills/craft/vercel-optimize/lib/auth-route.mjs +23 -23
- package/skills/craft/vercel-optimize/lib/budget-summary.mjs +208 -208
- package/skills/craft/vercel-optimize/lib/citations.mjs +147 -147
- package/skills/craft/vercel-optimize/lib/cost-coverage.mjs +162 -162
- package/skills/craft/vercel-optimize/lib/dedup-recs.mjs +340 -340
- package/skills/craft/vercel-optimize/lib/deep-dive.mjs +371 -371
- package/skills/craft/vercel-optimize/lib/display-labels.mjs +219 -219
- package/skills/craft/vercel-optimize/lib/extract-claims.mjs +640 -640
- package/skills/craft/vercel-optimize/lib/framework-support.mjs +69 -69
- package/skills/craft/vercel-optimize/lib/gates/build-minutes-fanout.mjs +73 -73
- package/skills/craft/vercel-optimize/lib/gates/cold-start.mjs +72 -72
- package/skills/craft/vercel-optimize/lib/gates/contract.mjs +82 -82
- package/skills/craft/vercel-optimize/lib/gates/cwv-poor.mjs +95 -95
- package/skills/craft/vercel-optimize/lib/gates/external-api-slow.mjs +60 -60
- package/skills/craft/vercel-optimize/lib/gates/hard-gates.mjs +70 -70
- package/skills/craft/vercel-optimize/lib/gates/index.mjs +45 -45
- package/skills/craft/vercel-optimize/lib/gates/isr-overrevalidation.mjs +62 -62
- package/skills/craft/vercel-optimize/lib/gates/middleware-heavy.mjs +53 -53
- package/skills/craft/vercel-optimize/lib/gates/observability-events-attribution.mjs +58 -58
- package/skills/craft/vercel-optimize/lib/gates/platform-bot-protection.mjs +123 -123
- package/skills/craft/vercel-optimize/lib/gates/platform-fluid-compute.mjs +94 -94
- package/skills/craft/vercel-optimize/lib/gates/region-misconfig.mjs +71 -71
- package/skills/craft/vercel-optimize/lib/gates/route-errors.mjs +95 -95
- package/skills/craft/vercel-optimize/lib/gates/scanner-driven.mjs +150 -150
- package/skills/craft/vercel-optimize/lib/gates/select-candidates.mjs +137 -137
- package/skills/craft/vercel-optimize/lib/gates/slow-route.mjs +97 -97
- package/skills/craft/vercel-optimize/lib/gates/types.d.ts +38 -38
- package/skills/craft/vercel-optimize/lib/gates/uncached-route.mjs +103 -103
- package/skills/craft/vercel-optimize/lib/gates/usage-spike-triage.mjs +122 -122
- package/skills/craft/vercel-optimize/lib/grade-recommendation.mjs +170 -170
- package/skills/craft/vercel-optimize/lib/impact-label.mjs +128 -128
- package/skills/craft/vercel-optimize/lib/impact-magnitude.mjs +66 -66
- package/skills/craft/vercel-optimize/lib/investigation-brief.mjs +751 -751
- package/skills/craft/vercel-optimize/lib/observation-safety.mjs +217 -217
- package/skills/craft/vercel-optimize/lib/project-facts.mjs +101 -101
- package/skills/craft/vercel-optimize/lib/queries.mjs +333 -333
- package/skills/craft/vercel-optimize/lib/reconcile-candidates.mjs +388 -388
- package/skills/craft/vercel-optimize/lib/render-report.mjs +1065 -1065
- package/skills/craft/vercel-optimize/lib/repo-root.mjs +97 -97
- package/skills/craft/vercel-optimize/lib/route-normalize.mjs +224 -224
- package/skills/craft/vercel-optimize/lib/sanitizers/bot-protection-certainty.mjs +56 -56
- package/skills/craft/vercel-optimize/lib/sanitizers/cache-tag-invalidation-certainty.mjs +33 -33
- package/skills/craft/vercel-optimize/lib/sanitizers/count-correct.mjs +53 -53
- package/skills/craft/vercel-optimize/lib/sanitizers/function-duration-invocations.mjs +32 -32
- package/skills/craft/vercel-optimize/lib/sanitizers/index.mjs +87 -87
- package/skills/craft/vercel-optimize/lib/sanitizers/middleware-conflict.mjs +37 -37
- package/skills/craft/vercel-optimize/lib/sanitizers/missing-citation.mjs +16 -16
- package/skills/craft/vercel-optimize/lib/sanitizers/pre-release.mjs +75 -75
- package/skills/craft/vercel-optimize/lib/sanitizers/rate-limit.mjs +73 -73
- package/skills/craft/vercel-optimize/lib/sanitizers/rendering-mode-mislabel.mjs +42 -42
- package/skills/craft/vercel-optimize/lib/sanitizers/undeclared-dep.mjs +110 -110
- package/skills/craft/vercel-optimize/lib/sanitizers/vercel-directive-strip.mjs +37 -37
- package/skills/craft/vercel-optimize/lib/sanitizers/window-units.mjs +26 -26
- package/skills/craft/vercel-optimize/lib/scanners/cache-components-suspense-dedupe.mjs +114 -114
- package/skills/craft/vercel-optimize/lib/scanners/edge-heavy-import.mjs +102 -102
- package/skills/craft/vercel-optimize/lib/scanners/force-dynamic.mjs +39 -39
- package/skills/craft/vercel-optimize/lib/scanners/headers-in-page.mjs +43 -43
- package/skills/craft/vercel-optimize/lib/scanners/index.mjs +35 -35
- package/skills/craft/vercel-optimize/lib/scanners/large-static-asset.mjs +93 -93
- package/skills/craft/vercel-optimize/lib/scanners/max-age-without-s-maxage.mjs +47 -47
- package/skills/craft/vercel-optimize/lib/scanners/middleware-broad-matcher.mjs +53 -53
- package/skills/craft/vercel-optimize/lib/scanners/missing-cache-headers.mjs +97 -97
- package/skills/craft/vercel-optimize/lib/scanners/prisma-include-tree.mjs +39 -39
- package/skills/craft/vercel-optimize/lib/scanners/region-pin-in-config.mjs +89 -89
- package/skills/craft/vercel-optimize/lib/scanners/source-maps-production.mjs +33 -33
- package/skills/craft/vercel-optimize/lib/scanners/sveltekit-prerender-missing.mjs +47 -47
- package/skills/craft/vercel-optimize/lib/scanners/turbo-force-bypass.mjs +136 -136
- package/skills/craft/vercel-optimize/lib/scanners/unoptimized-image.mjs +127 -127
- package/skills/craft/vercel-optimize/lib/scanners/use-cache-date-stamp.mjs +112 -112
- package/skills/craft/vercel-optimize/lib/support-topics.mjs +365 -365
- package/skills/craft/vercel-optimize/lib/throttle.mjs +280 -280
- package/skills/craft/vercel-optimize/lib/util.mjs +17 -17
- package/skills/craft/vercel-optimize/lib/vercel.mjs +855 -855
- package/skills/craft/vercel-optimize/lib/verify-claim.mjs +1843 -1843
- package/skills/craft/vercel-optimize/lib/workspace-resolver.mjs +552 -552
- package/skills/craft/vercel-optimize/metadata.json +14 -14
- package/skills/craft/vercel-optimize/references/candidates.md +176 -176
- package/skills/craft/vercel-optimize/references/data-collection.md +224 -224
- package/skills/craft/vercel-optimize/references/docs-library.json +683 -683
- package/skills/craft/vercel-optimize/references/doctrine.md +108 -108
- package/skills/craft/vercel-optimize/references/observability-plus.md +109 -109
- package/skills/craft/vercel-optimize/references/playbooks/README.md +57 -57
- package/skills/craft/vercel-optimize/references/playbooks/ai-application.md +32 -32
- package/skills/craft/vercel-optimize/references/playbooks/api-service.md +30 -30
- package/skills/craft/vercel-optimize/references/playbooks/content-site.md +30 -30
- package/skills/craft/vercel-optimize/references/playbooks/ecommerce.md +30 -30
- package/skills/craft/vercel-optimize/references/playbooks/marketing.md +30 -30
- package/skills/craft/vercel-optimize/references/playbooks/saas.md +31 -31
- package/skills/craft/vercel-optimize/references/playbooks/sveltekit.md +75 -75
- package/skills/craft/vercel-optimize/references/recommendations.md +214 -214
- package/skills/craft/vercel-optimize/references/scanner-patterns.md +266 -266
- package/skills/craft/vercel-optimize/references/scoring.md +208 -208
- package/skills/craft/vercel-optimize/references/support-topics/README.md +50 -50
- package/skills/craft/vercel-optimize/references/support-topics/astro-edge-middleware-scope.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/astro-output-mode-and-isr.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/auth-preserving-parallelization.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/bot-protection-product-guardrails.md +32 -32
- package/skills/craft/vercel-optimize/references/support-topics/build-minutes-monorepo-fanout.md +32 -32
- package/skills/craft/vercel-optimize/references/support-topics/cache-components-static-shell-boundaries.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/cache-components-suspense-dedupe-pitfall.md +32 -32
- package/skills/craft/vercel-optimize/references/support-topics/cdn-cache-auth-safety.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/cold-start-initialization-bundle.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/core-web-vitals-client-bottlenecks.md +33 -33
- package/skills/craft/vercel-optimize/references/support-topics/database-egress-pooling-region.md +32 -32
- package/skills/craft/vercel-optimize/references/support-topics/dynamic-rendering-traps.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/external-api-critical-path-platform.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/external-api-critical-path.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/fast-data-transfer-payloads.md +26 -26
- package/skills/craft/vercel-optimize/references/support-topics/fluid-compute-caveats.md +26 -26
- package/skills/craft/vercel-optimize/references/support-topics/function-duration-io-and-after.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/function-invocation-reduction.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/function-region-misconfiguration-ttfb.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/image-optimization-cost-control.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/isr-revalidation-static-generation.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/middleware-proxy-edge-cost.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/next-fetch-revalidate-floor.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/next-font-cls-self-hosting.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/next-heavy-ui-lazy-load-boundaries.md +28 -28
- package/skills/craft/vercel-optimize/references/support-topics/next-image-lcp-preload-sizes.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/next-route-handler-get-cache-defaults.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/next-script-third-party-strategy.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/nextjs-version-cache-semantics.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/not-found-catchall-request-waste.md +33 -33
- package/skills/craft/vercel-optimize/references/support-topics/nuxt-route-rules-cache-isr.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/observability-events-cost-attribution.md +27 -27
- package/skills/craft/vercel-optimize/references/support-topics/post-response-work-waituntil.md +26 -26
- package/skills/craft/vercel-optimize/references/support-topics/route-error-durable-offload.md +33 -33
- package/skills/craft/vercel-optimize/references/support-topics/route-error-runtime-limits.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/runtime-cache-reusable-data.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/sveltekit-isr-prerender-safety.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/sveltekit-split-cold-start-tradeoff.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/usage-spike-triage.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/use-cache-date-stamp-isr-write-amplifier.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/use-cache-remote-shared-origin-data.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/workflow-resumable-stream-routes.md +32 -32
- package/skills/craft/vercel-optimize/references/verification.md +102 -102
- package/skills/craft/vercel-optimize/references/voice.md +76 -76
- package/skills/craft/vercel-optimize/scripts/budget-summary.mjs +58 -58
- package/skills/craft/vercel-optimize/scripts/build-docs.mjs +76 -76
- package/skills/craft/vercel-optimize/scripts/check-citations.mjs +91 -91
- package/skills/craft/vercel-optimize/scripts/check-docs-fresh.mjs +100 -100
- package/skills/craft/vercel-optimize/scripts/collect-signals.mjs +638 -638
- package/skills/craft/vercel-optimize/scripts/collect-sub-agent-outputs.mjs +306 -306
- package/skills/craft/vercel-optimize/scripts/deep-dive.mjs +358 -358
- package/skills/craft/vercel-optimize/scripts/gate-investigations.mjs +178 -178
- package/skills/craft/vercel-optimize/scripts/merge-signals.mjs +203 -203
- package/skills/craft/vercel-optimize/scripts/prepare-investigation-brief.mjs +249 -249
- package/skills/craft/vercel-optimize/scripts/reconcile-candidates.mjs +69 -69
- package/skills/craft/vercel-optimize/scripts/render-report.mjs +462 -462
- package/skills/craft/vercel-optimize/scripts/scan-codebase.mjs +361 -361
- package/skills/craft/vercel-optimize/scripts/verify-and-regen.mjs +379 -379
- package/skills/craft/vercel-optimize/scripts/verify-finding.mjs +21 -21
- package/skills/craft/web-design-guidelines/LICENSE +21 -21
- package/skills/craft/web-design-guidelines/SKILL.md +43 -43
- package/skills/craft/zero-to-live/LICENSE +21 -21
- package/skills/craft/zero-to-live/SKILL.md +422 -422
- package/skills/creative/creative-3d-modeling/LICENSE +21 -21
- package/skills/creative/creative-3d-modeling/SKILL.md +70 -70
- package/skills/creative/creative-architecture/LICENSE +21 -21
- package/skills/creative/creative-architecture/SKILL.md +94 -94
- package/skills/creative/creative-design-principles/LICENSE +21 -21
- package/skills/creative/creative-design-principles/SKILL.md +95 -95
- package/skills/creative/creative-fashion-advanced/LICENSE +21 -21
- package/skills/creative/creative-fashion-advanced/SKILL.md +68 -68
- package/skills/creative/creative-fashion-design/LICENSE +21 -21
- package/skills/creative/creative-fashion-design/SKILL.md +66 -66
- package/skills/creative/creative-game-design/LICENSE +21 -21
- package/skills/creative/creative-game-design/SKILL.md +77 -77
- package/skills/creative/creative-industrial-design/LICENSE +21 -21
- package/skills/creative/creative-industrial-design/SKILL.md +57 -57
- package/skills/creative/creative-interior-design/LICENSE +21 -21
- package/skills/creative/creative-interior-design/SKILL.md +59 -59
- package/skills/creative/creative-music-theory/LICENSE +21 -21
- package/skills/creative/creative-music-theory/SKILL.md +98 -98
- package/skills/creative/creative-photography/LICENSE +21 -21
- package/skills/creative/creative-photography/SKILL.md +87 -87
- package/skills/creative/creative-textile-science/LICENSE +21 -21
- package/skills/creative/creative-textile-science/SKILL.md +67 -67
- package/skills/creative/creative-ux/LICENSE +21 -21
- package/skills/creative/creative-ux/SKILL.md +81 -81
- package/skills/creative/creative-video/LICENSE +21 -21
- package/skills/creative/creative-video/SKILL.md +84 -84
- package/skills/creative/creative-writing-craft/LICENSE +21 -21
- package/skills/creative/creative-writing-craft/SKILL.md +91 -91
- package/skills/diagram-maker/SKILL.md +56 -56
- package/skills/diagram-maker/references/excalidraw-patterns.md +85 -85
- package/skills/diagram-maker/references/svg-template.md +112 -112
- package/skills/discord/SKILL.md +140 -140
- package/skills/education/edu-adult-learning/LICENSE +21 -21
- package/skills/education/edu-adult-learning/SKILL.md +81 -81
- package/skills/education/edu-africa-multilingual/LICENSE +21 -21
- package/skills/education/edu-africa-multilingual/SKILL.md +55 -55
- package/skills/education/edu-arabic/LICENSE +21 -21
- package/skills/education/edu-arabic/SKILL.md +60 -60
- package/skills/education/edu-australia-nz/LICENSE +21 -21
- package/skills/education/edu-australia-nz/SKILL.md +48 -48
- package/skills/education/edu-china-mandarin/LICENSE +21 -21
- package/skills/education/edu-china-mandarin/SKILL.md +58 -58
- package/skills/education/edu-critical-thinking/LICENSE +21 -21
- package/skills/education/edu-critical-thinking/SKILL.md +86 -86
- package/skills/education/edu-curriculum/LICENSE +21 -21
- package/skills/education/edu-curriculum/SKILL.md +87 -87
- package/skills/education/edu-ed-tech/LICENSE +21 -21
- package/skills/education/edu-ed-tech/SKILL.md +73 -73
- package/skills/education/edu-france/LICENSE +21 -21
- package/skills/education/edu-france/SKILL.md +42 -42
- package/skills/education/edu-germany/LICENSE +21 -21
- package/skills/education/edu-germany/SKILL.md +46 -46
- package/skills/education/edu-india-competitive/LICENSE +21 -21
- package/skills/education/edu-india-competitive/SKILL.md +159 -159
- package/skills/education/edu-india-east/LICENSE +21 -21
- package/skills/education/edu-india-east/SKILL.md +60 -60
- package/skills/education/edu-india-hindi/LICENSE +21 -21
- package/skills/education/edu-india-hindi/SKILL.md +107 -107
- package/skills/education/edu-india-south/LICENSE +21 -21
- package/skills/education/edu-india-south/SKILL.md +64 -64
- package/skills/education/edu-india-west/LICENSE +21 -21
- package/skills/education/edu-india-west/SKILL.md +68 -68
- package/skills/education/edu-indonesia-malay/LICENSE +21 -21
- package/skills/education/edu-indonesia-malay/SKILL.md +57 -57
- package/skills/education/edu-international-ib/LICENSE +21 -21
- package/skills/education/edu-international-ib/SKILL.md +61 -61
- package/skills/education/edu-japan/LICENSE +21 -21
- package/skills/education/edu-japan/SKILL.md +48 -48
- package/skills/education/edu-korea/LICENSE +21 -21
- package/skills/education/edu-korea/SKILL.md +48 -48
- package/skills/education/edu-learning-science/LICENSE +21 -21
- package/skills/education/edu-learning-science/SKILL.md +76 -76
- package/skills/education/edu-portuguese-brazil/LICENSE +21 -21
- package/skills/education/edu-portuguese-brazil/SKILL.md +51 -51
- package/skills/education/edu-russia/LICENSE +21 -21
- package/skills/education/edu-russia/SKILL.md +50 -50
- package/skills/education/edu-spain-latam/LICENSE +21 -21
- package/skills/education/edu-spain-latam/SKILL.md +55 -55
- package/skills/education/edu-special/LICENSE +21 -21
- package/skills/education/edu-special/SKILL.md +76 -76
- package/skills/education/edu-thailand/LICENSE +21 -21
- package/skills/education/edu-thailand/SKILL.md +55 -55
- package/skills/education/edu-turkey/LICENSE +21 -21
- package/skills/education/edu-turkey/SKILL.md +58 -58
- package/skills/education/edu-uk-gcse-alevel/LICENSE +21 -21
- package/skills/education/edu-uk-gcse-alevel/SKILL.md +51 -51
- package/skills/education/edu-usa-graduate/LICENSE +21 -21
- package/skills/education/edu-usa-graduate/SKILL.md +57 -57
- package/skills/education/edu-usa-sat-act/LICENSE +21 -21
- package/skills/education/edu-usa-sat-act/SKILL.md +55 -55
- package/skills/education/edu-vietnam/LICENSE +21 -21
- package/skills/education/edu-vietnam/SKILL.md +53 -53
- package/skills/eightctl/SKILL.md +54 -54
- package/skills/engineering/eng-aerospace/LICENSE +21 -21
- package/skills/engineering/eng-aerospace/SKILL.md +117 -117
- package/skills/engineering/eng-chemical/LICENSE +21 -21
- package/skills/engineering/eng-chemical/SKILL.md +63 -63
- package/skills/engineering/eng-civil/LICENSE +21 -21
- package/skills/engineering/eng-civil/SKILL.md +223 -223
- package/skills/engineering/eng-control-systems/LICENSE +21 -21
- package/skills/engineering/eng-control-systems/SKILL.md +158 -158
- package/skills/engineering/eng-cryogenics/LICENSE +21 -21
- package/skills/engineering/eng-cryogenics/SKILL.md +151 -151
- package/skills/engineering/eng-electrical/LICENSE +21 -21
- package/skills/engineering/eng-electrical/SKILL.md +70 -70
- package/skills/engineering/eng-electronics-embedded/LICENSE +21 -21
- package/skills/engineering/eng-electronics-embedded/SKILL.md +89 -89
- package/skills/engineering/eng-environmental/LICENSE +21 -21
- package/skills/engineering/eng-environmental/SKILL.md +66 -66
- package/skills/engineering/eng-manufacturing/LICENSE +21 -21
- package/skills/engineering/eng-manufacturing/SKILL.md +78 -78
- package/skills/engineering/eng-mechanical/LICENSE +21 -21
- package/skills/engineering/eng-mechanical/SKILL.md +66 -66
- package/skills/engineering/eng-project/LICENSE +21 -21
- package/skills/engineering/eng-project/SKILL.md +72 -72
- package/skills/engineering/eng-propulsion/LICENSE +21 -21
- package/skills/engineering/eng-propulsion/SKILL.md +133 -133
- package/skills/engineering/eng-robotics/LICENSE +21 -21
- package/skills/engineering/eng-robotics/SKILL.md +92 -92
- package/skills/engineering/eng-systems/LICENSE +21 -21
- package/skills/engineering/eng-systems/SKILL.md +81 -81
- package/skills/environment/env-biodiversity/LICENSE +21 -21
- package/skills/environment/env-biodiversity/SKILL.md +66 -66
- package/skills/environment/env-circular-economy/LICENSE +21 -21
- package/skills/environment/env-circular-economy/SKILL.md +71 -71
- package/skills/environment/env-climate-action/LICENSE +21 -21
- package/skills/environment/env-climate-action/SKILL.md +55 -55
- package/skills/environment/env-energy/LICENSE +21 -21
- package/skills/environment/env-energy/SKILL.md +83 -83
- package/skills/environment/env-sustainability-biz/LICENSE +21 -21
- package/skills/environment/env-sustainability-biz/SKILL.md +65 -65
- package/skills/environment/env-water/LICENSE +21 -21
- package/skills/environment/env-water/SKILL.md +67 -67
- package/skills/finance/finance-accounting/LICENSE +21 -21
- package/skills/finance/finance-accounting/SKILL.md +239 -239
- package/skills/finance/finance-banking/LICENSE +21 -21
- package/skills/finance/finance-banking/SKILL.md +54 -54
- package/skills/finance/finance-corporate/LICENSE +21 -21
- package/skills/finance/finance-corporate/SKILL.md +105 -105
- package/skills/finance/finance-crypto/LICENSE +21 -21
- package/skills/finance/finance-crypto/SKILL.md +94 -94
- package/skills/finance/finance-debt-management/LICENSE +21 -21
- package/skills/finance/finance-debt-management/SKILL.md +87 -87
- package/skills/finance/finance-insurance/LICENSE +21 -21
- package/skills/finance/finance-insurance/SKILL.md +91 -91
- package/skills/finance/finance-investing/LICENSE +21 -21
- package/skills/finance/finance-investing/SKILL.md +269 -269
- package/skills/finance/finance-options-derivatives/LICENSE +21 -21
- package/skills/finance/finance-options-derivatives/SKILL.md +68 -68
- package/skills/finance/finance-personal/LICENSE +21 -21
- package/skills/finance/finance-personal/SKILL.md +268 -268
- package/skills/finance/finance-real-estate/LICENSE +21 -21
- package/skills/finance/finance-real-estate/SKILL.md +110 -110
- package/skills/finance/finance-startup/LICENSE +21 -21
- package/skills/finance/finance-startup/SKILL.md +253 -253
- package/skills/finance/finance-tax-planning/LICENSE +21 -21
- package/skills/finance/finance-tax-planning/SKILL.md +89 -89
- package/skills/finance/finance-trading/LICENSE +21 -21
- package/skills/finance/finance-trading/SKILL.md +112 -112
- package/skills/gemini/SKILL.md +51 -51
- package/skills/gh-issues/SKILL.md +216 -216
- package/skills/gifgrep/SKILL.md +89 -89
- package/skills/github/SKILL.md +87 -87
- package/skills/gog/SKILL.md +120 -120
- package/skills/goplaces/SKILL.md +56 -56
- package/skills/graphify/SKILL.md +619 -0
- package/skills/graphify/__init__.py +28 -0
- package/skills/graphify/__main__.py +4582 -0
- package/skills/graphify/affected.py +154 -0
- package/skills/graphify/always_on/agents-md.md +12 -0
- package/skills/graphify/always_on/antigravity-rules.md +14 -0
- package/skills/graphify/always_on/claude-md.md +9 -0
- package/skills/graphify/always_on/gemini-md.md +9 -0
- package/skills/graphify/always_on/kiro-steering.md +5 -0
- package/skills/graphify/always_on/vscode-instructions.md +17 -0
- package/skills/graphify/analyze.py +724 -0
- package/skills/graphify/benchmark.py +155 -0
- package/skills/graphify/build.py +487 -0
- package/skills/graphify/cache.py +417 -0
- package/skills/graphify/callflow_html.py +2020 -0
- package/skills/graphify/cluster.py +272 -0
- package/skills/graphify/command-kilo.md +15 -0
- package/skills/graphify/dedup.py +429 -0
- package/skills/graphify/detect.py +1379 -0
- package/skills/graphify/diagnostics.py +390 -0
- package/skills/graphify/export.py +1408 -0
- package/skills/graphify/extract.py +11570 -0
- package/skills/graphify/global_graph.py +159 -0
- package/skills/graphify/google_workspace.py +223 -0
- package/skills/graphify/hooks.py +457 -0
- package/skills/graphify/ingest.py +331 -0
- package/skills/graphify/llm.py +1896 -0
- package/skills/graphify/manifest.py +4 -0
- package/skills/graphify/mcp_ingest.py +392 -0
- package/skills/graphify/multigraph_compat.py +212 -0
- package/skills/graphify/pg_introspect.py +142 -0
- package/skills/graphify/prs.py +748 -0
- package/skills/graphify/querylog.py +70 -0
- package/skills/graphify/report.py +218 -0
- package/skills/graphify/scip_ingest.py +363 -0
- package/skills/graphify/security.py +336 -0
- package/skills/graphify/semantic_cleanup.py +319 -0
- package/skills/graphify/serve.py +1309 -0
- package/skills/graphify/skill-aider.md +1246 -0
- package/skills/graphify/skill-amp.md +613 -0
- package/skills/graphify/skill-claw.md +616 -0
- package/skills/graphify/skill-codex.md +613 -0
- package/skills/graphify/skill-copilot.md +616 -0
- package/skills/graphify/skill-devin.md +1372 -0
- package/skills/graphify/skill-droid.md +613 -0
- package/skills/graphify/skill-kilo.md +625 -0
- package/skills/graphify/skill-kiro.md +615 -0
- package/skills/graphify/skill-opencode.md +608 -0
- package/skills/graphify/skill-pi.md +615 -0
- package/skills/graphify/skill-trae.md +614 -0
- package/skills/graphify/skill-vscode.md +612 -0
- package/skills/graphify/skill-windows.md +651 -0
- package/skills/graphify/skills/amp/references/add-watch.md +56 -0
- package/skills/graphify/skills/amp/references/exports.md +71 -0
- package/skills/graphify/skills/amp/references/extraction-spec.md +68 -0
- package/skills/graphify/skills/amp/references/github-and-merge.md +46 -0
- package/skills/graphify/skills/amp/references/hooks.md +33 -0
- package/skills/graphify/skills/amp/references/query.md +249 -0
- package/skills/graphify/skills/amp/references/transcribe.md +48 -0
- package/skills/graphify/skills/amp/references/update.md +179 -0
- package/skills/graphify/skills/claude/references/add-watch.md +56 -0
- package/skills/graphify/skills/claude/references/exports.md +71 -0
- package/skills/graphify/skills/claude/references/extraction-spec.md +68 -0
- package/skills/graphify/skills/claude/references/github-and-merge.md +46 -0
- package/skills/graphify/skills/claude/references/hooks.md +33 -0
- package/skills/graphify/skills/claude/references/query.md +103 -0
- package/skills/graphify/skills/claude/references/transcribe.md +48 -0
- package/skills/graphify/skills/claude/references/update.md +179 -0
- package/skills/graphify/skills/claw/references/add-watch.md +56 -0
- package/skills/graphify/skills/claw/references/exports.md +71 -0
- package/skills/graphify/skills/claw/references/extraction-spec.md +29 -0
- package/skills/graphify/skills/claw/references/github-and-merge.md +46 -0
- package/skills/graphify/skills/claw/references/hooks.md +33 -0
- package/skills/graphify/skills/claw/references/query.md +249 -0
- package/skills/graphify/skills/claw/references/transcribe.md +48 -0
- package/skills/graphify/skills/claw/references/update.md +179 -0
- package/skills/graphify/skills/codex/references/add-watch.md +56 -0
- package/skills/graphify/skills/codex/references/exports.md +71 -0
- package/skills/graphify/skills/codex/references/extraction-spec.md +29 -0
- package/skills/graphify/skills/codex/references/github-and-merge.md +46 -0
- package/skills/graphify/skills/codex/references/hooks.md +33 -0
- package/skills/graphify/skills/codex/references/query.md +249 -0
- package/skills/graphify/skills/codex/references/transcribe.md +48 -0
- package/skills/graphify/skills/codex/references/update.md +179 -0
- package/skills/graphify/skills/copilot/references/add-watch.md +56 -0
- package/skills/graphify/skills/copilot/references/exports.md +71 -0
- package/skills/graphify/skills/copilot/references/extraction-spec.md +68 -0
- package/skills/graphify/skills/copilot/references/github-and-merge.md +46 -0
- package/skills/graphify/skills/copilot/references/hooks.md +33 -0
- package/skills/graphify/skills/copilot/references/query.md +249 -0
- package/skills/graphify/skills/copilot/references/transcribe.md +48 -0
- package/skills/graphify/skills/copilot/references/update.md +179 -0
- package/skills/graphify/skills/droid/references/add-watch.md +56 -0
- package/skills/graphify/skills/droid/references/exports.md +71 -0
- package/skills/graphify/skills/droid/references/extraction-spec.md +68 -0
- package/skills/graphify/skills/droid/references/github-and-merge.md +46 -0
- package/skills/graphify/skills/droid/references/hooks.md +33 -0
- package/skills/graphify/skills/droid/references/query.md +249 -0
- package/skills/graphify/skills/droid/references/transcribe.md +48 -0
- package/skills/graphify/skills/droid/references/update.md +179 -0
- package/skills/graphify/skills/kilo/references/add-watch.md +56 -0
- package/skills/graphify/skills/kilo/references/exports.md +71 -0
- package/skills/graphify/skills/kilo/references/extraction-spec.md +68 -0
- package/skills/graphify/skills/kilo/references/github-and-merge.md +46 -0
- package/skills/graphify/skills/kilo/references/hooks.md +33 -0
- package/skills/graphify/skills/kilo/references/query.md +249 -0
- package/skills/graphify/skills/kilo/references/transcribe.md +48 -0
- package/skills/graphify/skills/kilo/references/update.md +179 -0
- package/skills/graphify/skills/kiro/references/add-watch.md +56 -0
- package/skills/graphify/skills/kiro/references/exports.md +71 -0
- package/skills/graphify/skills/kiro/references/extraction-spec.md +29 -0
- package/skills/graphify/skills/kiro/references/github-and-merge.md +46 -0
- package/skills/graphify/skills/kiro/references/hooks.md +33 -0
- package/skills/graphify/skills/kiro/references/query.md +249 -0
- package/skills/graphify/skills/kiro/references/transcribe.md +48 -0
- package/skills/graphify/skills/kiro/references/update.md +179 -0
- package/skills/graphify/skills/opencode/references/add-watch.md +56 -0
- package/skills/graphify/skills/opencode/references/exports.md +71 -0
- package/skills/graphify/skills/opencode/references/extraction-spec.md +68 -0
- package/skills/graphify/skills/opencode/references/github-and-merge.md +46 -0
- package/skills/graphify/skills/opencode/references/hooks.md +33 -0
- package/skills/graphify/skills/opencode/references/query.md +249 -0
- package/skills/graphify/skills/opencode/references/transcribe.md +48 -0
- package/skills/graphify/skills/opencode/references/update.md +179 -0
- package/skills/graphify/skills/pi/references/add-watch.md +56 -0
- package/skills/graphify/skills/pi/references/exports.md +71 -0
- package/skills/graphify/skills/pi/references/extraction-spec.md +29 -0
- package/skills/graphify/skills/pi/references/github-and-merge.md +46 -0
- package/skills/graphify/skills/pi/references/hooks.md +33 -0
- package/skills/graphify/skills/pi/references/query.md +249 -0
- package/skills/graphify/skills/pi/references/transcribe.md +48 -0
- package/skills/graphify/skills/pi/references/update.md +179 -0
- package/skills/graphify/skills/trae/references/add-watch.md +56 -0
- package/skills/graphify/skills/trae/references/exports.md +71 -0
- package/skills/graphify/skills/trae/references/extraction-spec.md +68 -0
- package/skills/graphify/skills/trae/references/github-and-merge.md +46 -0
- package/skills/graphify/skills/trae/references/hooks.md +35 -0
- package/skills/graphify/skills/trae/references/query.md +249 -0
- package/skills/graphify/skills/trae/references/transcribe.md +48 -0
- package/skills/graphify/skills/trae/references/update.md +179 -0
- package/skills/graphify/skills/vscode/references/add-watch.md +56 -0
- package/skills/graphify/skills/vscode/references/exports.md +71 -0
- package/skills/graphify/skills/vscode/references/extraction-spec.md +68 -0
- package/skills/graphify/skills/vscode/references/github-and-merge.md +46 -0
- package/skills/graphify/skills/vscode/references/hooks.md +33 -0
- package/skills/graphify/skills/vscode/references/query.md +249 -0
- package/skills/graphify/skills/vscode/references/transcribe.md +48 -0
- package/skills/graphify/skills/vscode/references/update.md +179 -0
- package/skills/graphify/skills/windows/references/add-watch.md +56 -0
- package/skills/graphify/skills/windows/references/exports.md +71 -0
- package/skills/graphify/skills/windows/references/extraction-spec.md +68 -0
- package/skills/graphify/skills/windows/references/github-and-merge.md +46 -0
- package/skills/graphify/skills/windows/references/hooks.md +33 -0
- package/skills/graphify/skills/windows/references/query.md +249 -0
- package/skills/graphify/skills/windows/references/transcribe.md +48 -0
- package/skills/graphify/skills/windows/references/update.md +179 -0
- package/skills/graphify/symbol_resolution.py +538 -0
- package/skills/graphify/transcribe.py +184 -0
- package/skills/graphify/tree_html.py +582 -0
- package/skills/graphify/validate.py +72 -0
- package/skills/graphify/watch.py +898 -0
- package/skills/graphify/wiki.py +282 -0
- package/skills/health/health-aging/LICENSE +21 -21
- package/skills/health/health-aging/SKILL.md +82 -82
- package/skills/health/health-chronic/LICENSE +21 -21
- package/skills/health/health-chronic/SKILL.md +202 -202
- package/skills/health/health-dental/LICENSE +21 -21
- package/skills/health/health-dental/SKILL.md +41 -41
- package/skills/health/health-eye-care/LICENSE +21 -21
- package/skills/health/health-eye-care/SKILL.md +56 -56
- package/skills/health/health-first-aid/LICENSE +21 -21
- package/skills/health/health-first-aid/SKILL.md +201 -201
- package/skills/health/health-fitness/LICENSE +21 -21
- package/skills/health/health-fitness/SKILL.md +111 -111
- package/skills/health/health-general/LICENSE +21 -21
- package/skills/health/health-general/SKILL.md +277 -277
- package/skills/health/health-mens/LICENSE +21 -21
- package/skills/health/health-mens/SKILL.md +53 -53
- package/skills/health/health-mental/LICENSE +21 -21
- package/skills/health/health-mental/SKILL.md +221 -221
- package/skills/health/health-naturopathy-ayurveda/LICENSE +21 -21
- package/skills/health/health-naturopathy-ayurveda/SKILL.md +60 -60
- package/skills/health/health-nutrition/LICENSE +21 -21
- package/skills/health/health-nutrition/SKILL.md +262 -262
- package/skills/health/health-pediatric/LICENSE +21 -21
- package/skills/health/health-pediatric/SKILL.md +94 -94
- package/skills/health/health-pharmacology/LICENSE +21 -21
- package/skills/health/health-pharmacology/SKILL.md +87 -87
- package/skills/health/health-pregnancy/LICENSE +21 -21
- package/skills/health/health-pregnancy/SKILL.md +71 -71
- package/skills/health/health-skin/LICENSE +21 -21
- package/skills/health/health-skin/SKILL.md +71 -71
- package/skills/health/health-sleep/LICENSE +21 -21
- package/skills/health/health-sleep/SKILL.md +81 -81
- package/skills/health/health-womens/LICENSE +21 -21
- package/skills/health/health-womens/SKILL.md +72 -72
- package/skills/health/health-yoga-wellness/LICENSE +21 -21
- package/skills/health/health-yoga-wellness/SKILL.md +58 -58
- package/skills/healthcare-systems/health-sys-global/LICENSE +21 -21
- package/skills/healthcare-systems/health-sys-global/SKILL.md +69 -69
- package/skills/healthcare-systems/health-sys-management/LICENSE +21 -21
- package/skills/healthcare-systems/health-sys-management/SKILL.md +71 -71
- package/skills/healthcare-systems/health-sys-navigation/LICENSE +21 -21
- package/skills/healthcare-systems/health-sys-navigation/SKILL.md +60 -60
- package/skills/healthcare-systems/health-sys-public/LICENSE +21 -21
- package/skills/healthcare-systems/health-sys-public/SKILL.md +71 -71
- package/skills/healthcheck/SKILL.md +109 -109
- package/skills/himalaya/SKILL.md +84 -84
- package/skills/himalaya/references/configuration.md +184 -184
- package/skills/himalaya/references/message-composition.md +199 -199
- package/skills/humanities/humanities-history-world/LICENSE +21 -21
- package/skills/humanities/humanities-history-world/SKILL.md +59 -59
- package/skills/humanities/humanities-indian-classical/LICENSE +21 -21
- package/skills/humanities/humanities-indian-classical/SKILL.md +104 -104
- package/skills/humanities/humanities-philosophy/LICENSE +21 -21
- package/skills/humanities/humanities-philosophy/SKILL.md +105 -105
- package/skills/humanities/humanities-world-religions/LICENSE +21 -21
- package/skills/humanities/humanities-world-religions/SKILL.md +67 -67
- package/skills/impeccable/SKILL.md +186 -0
- package/skills/impeccable/agents/impeccable_asset_producer.toml +92 -0
- package/skills/impeccable/agents/impeccable_manual_edit_applier.toml +95 -0
- package/skills/impeccable/agents/openai.yaml +4 -0
- package/skills/impeccable/reference/adapt.md +311 -0
- package/skills/impeccable/reference/animate.md +201 -0
- package/skills/impeccable/reference/audit.md +133 -0
- package/skills/impeccable/reference/bolder.md +113 -0
- package/skills/impeccable/reference/brand.md +108 -0
- package/skills/impeccable/reference/clarify.md +288 -0
- package/skills/impeccable/reference/codex.md +105 -0
- package/skills/impeccable/reference/colorize.md +257 -0
- package/skills/impeccable/reference/craft.md +123 -0
- package/skills/impeccable/reference/critique.md +790 -0
- package/skills/impeccable/reference/delight.md +302 -0
- package/skills/impeccable/reference/distill.md +111 -0
- package/skills/impeccable/reference/document.md +429 -0
- package/skills/impeccable/reference/extract.md +69 -0
- package/skills/impeccable/reference/harden.md +347 -0
- package/skills/impeccable/reference/init.md +172 -0
- package/skills/impeccable/reference/interaction-design.md +189 -0
- package/skills/impeccable/reference/layout.md +161 -0
- package/skills/impeccable/reference/live.md +720 -0
- package/skills/impeccable/reference/onboard.md +234 -0
- package/skills/impeccable/reference/optimize.md +258 -0
- package/skills/impeccable/reference/overdrive.md +130 -0
- package/skills/impeccable/reference/polish.md +241 -0
- package/skills/impeccable/reference/product.md +60 -0
- package/skills/impeccable/reference/quieter.md +99 -0
- package/skills/impeccable/reference/shape.md +165 -0
- package/skills/impeccable/reference/typeset.md +279 -0
- package/skills/impeccable/scripts/cleanup-deprecated.mjs +284 -0
- package/skills/impeccable/scripts/command-metadata.json +94 -0
- package/skills/impeccable/scripts/context-signals.mjs +225 -0
- package/skills/impeccable/scripts/context.mjs +266 -0
- package/skills/impeccable/scripts/critique-storage.mjs +242 -0
- package/skills/impeccable/scripts/design-parser.mjs +835 -0
- package/skills/impeccable/scripts/detect-csp.mjs +198 -0
- package/skills/impeccable/scripts/detect.mjs +21 -0
- package/skills/impeccable/scripts/detector/browser/injected/index.mjs +1733 -0
- package/skills/impeccable/scripts/detector/cli/main.mjs +244 -0
- package/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +4618 -0
- package/skills/impeccable/scripts/detector/detect-antipatterns.mjs +43 -0
- package/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +252 -0
- package/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +535 -0
- package/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +986 -0
- package/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +208 -0
- package/skills/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +189 -0
- package/skills/impeccable/scripts/detector/findings.mjs +12 -0
- package/skills/impeccable/scripts/detector/node/file-system.mjs +198 -0
- package/skills/impeccable/scripts/detector/profile/profiler.mjs +166 -0
- package/skills/impeccable/scripts/detector/registry/antipatterns.mjs +419 -0
- package/skills/impeccable/scripts/detector/rules/checks.mjs +2384 -0
- package/skills/impeccable/scripts/detector/shared/color.mjs +124 -0
- package/skills/impeccable/scripts/detector/shared/constants.mjs +101 -0
- package/skills/impeccable/scripts/detector/shared/page.mjs +7 -0
- package/skills/impeccable/scripts/impeccable-paths.mjs +126 -0
- package/skills/impeccable/scripts/is-generated.mjs +69 -0
- package/skills/impeccable/scripts/live-accept.mjs +812 -0
- package/skills/impeccable/scripts/live-browser-session.js +123 -0
- package/skills/impeccable/scripts/live-browser.js +10295 -0
- package/skills/impeccable/scripts/live-commit-manual-edits.mjs +1241 -0
- package/skills/impeccable/scripts/live-complete.mjs +75 -0
- package/skills/impeccable/scripts/live-completion.mjs +19 -0
- package/skills/impeccable/scripts/live-copy-edit-agent.mjs +683 -0
- package/skills/impeccable/scripts/live-discard-manual-edits.mjs +51 -0
- package/skills/impeccable/scripts/live-event-validation.mjs +137 -0
- package/skills/impeccable/scripts/live-inject.mjs +557 -0
- package/skills/impeccable/scripts/live-insert-ui.mjs +458 -0
- package/skills/impeccable/scripts/live-insert.mjs +272 -0
- package/skills/impeccable/scripts/live-manual-edit-evidence.mjs +363 -0
- package/skills/impeccable/scripts/live-manual-edits-buffer.mjs +152 -0
- package/skills/impeccable/scripts/live-poll.mjs +379 -0
- package/skills/impeccable/scripts/live-resume.mjs +94 -0
- package/skills/impeccable/scripts/live-server.mjs +2326 -0
- package/skills/impeccable/scripts/live-session-store.mjs +289 -0
- package/skills/impeccable/scripts/live-status.mjs +61 -0
- package/skills/impeccable/scripts/live-svelte-component.mjs +826 -0
- package/skills/impeccable/scripts/live-sveltekit-adapter.mjs +274 -0
- package/skills/impeccable/scripts/live-ui-core.mjs +179 -0
- package/skills/impeccable/scripts/live-vocabulary.mjs +36 -0
- package/skills/impeccable/scripts/live-wrap.mjs +894 -0
- package/skills/impeccable/scripts/live.mjs +246 -0
- package/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
- package/skills/impeccable/scripts/palette.mjs +633 -0
- package/skills/impeccable/scripts/pin.mjs +214 -0
- package/skills/imsg/SKILL.md +126 -126
- package/skills/industry/industry-construction/LICENSE +21 -21
- package/skills/industry/industry-construction/SKILL.md +81 -81
- package/skills/industry/industry-education-sector/LICENSE +21 -21
- package/skills/industry/industry-education-sector/SKILL.md +49 -49
- package/skills/industry/industry-fashion/LICENSE +21 -21
- package/skills/industry/industry-fashion/SKILL.md +82 -82
- package/skills/industry/industry-food/LICENSE +21 -21
- package/skills/industry/industry-food/SKILL.md +79 -79
- package/skills/industry/industry-government/LICENSE +21 -21
- package/skills/industry/industry-government/SKILL.md +80 -80
- package/skills/industry/industry-hospitality/LICENSE +21 -21
- package/skills/industry/industry-hospitality/SKILL.md +73 -73
- package/skills/industry/industry-insurance-sector/LICENSE +21 -21
- package/skills/industry/industry-insurance-sector/SKILL.md +57 -57
- package/skills/industry/industry-logistics/LICENSE +21 -21
- package/skills/industry/industry-logistics/SKILL.md +80 -80
- package/skills/industry/industry-media/LICENSE +21 -21
- package/skills/industry/industry-media/SKILL.md +66 -66
- package/skills/industry/industry-nonprofit/LICENSE +21 -21
- package/skills/industry/industry-nonprofit/SKILL.md +77 -77
- package/skills/industry/industry-pharma/LICENSE +21 -21
- package/skills/industry/industry-pharma/SKILL.md +69 -69
- package/skills/industry/industry-real-estate/LICENSE +21 -21
- package/skills/industry/industry-real-estate/SKILL.md +61 -61
- package/skills/industry/industry-sports/LICENSE +21 -21
- package/skills/industry/industry-sports/SKILL.md +71 -71
- package/skills/industry/industry-tech-startup/LICENSE +21 -21
- package/skills/industry/industry-tech-startup/SKILL.md +82 -82
- package/skills/internal-comms/LICENSE +21 -21
- package/skills/internal-comms/SKILL.md +38 -38
- package/skills/internal-comms/examples/3p-updates.md +49 -49
- package/skills/internal-comms/examples/company-newsletter.md +76 -76
- package/skills/internal-comms/examples/faq-answers.md +35 -35
- package/skills/internal-comms/examples/general-comms.md +19 -19
- package/skills/legal/legal-business/LICENSE +21 -21
- package/skills/legal/legal-business/SKILL.md +227 -227
- package/skills/legal/legal-consumer/LICENSE +21 -21
- package/skills/legal/legal-consumer/SKILL.md +155 -155
- package/skills/legal/legal-contracts/LICENSE +21 -21
- package/skills/legal/legal-contracts/SKILL.md +268 -268
- package/skills/legal/legal-corporate-governance/LICENSE +21 -21
- package/skills/legal/legal-corporate-governance/SKILL.md +53 -53
- package/skills/legal/legal-employment/LICENSE +21 -21
- package/skills/legal/legal-employment/SKILL.md +291 -291
- package/skills/legal/legal-immigration/LICENSE +21 -21
- package/skills/legal/legal-immigration/SKILL.md +146 -146
- package/skills/legal/legal-international/LICENSE +21 -21
- package/skills/legal/legal-international/SKILL.md +51 -51
- package/skills/legal/legal-ip/LICENSE +21 -21
- package/skills/legal/legal-ip/SKILL.md +264 -264
- package/skills/legal/legal-privacy/LICENSE +21 -21
- package/skills/legal/legal-privacy/SKILL.md +161 -161
- package/skills/legal/legal-real-estate/LICENSE +21 -21
- package/skills/legal/legal-real-estate/SKILL.md +142 -142
- package/skills/legal/legal-startup/LICENSE +21 -21
- package/skills/legal/legal-startup/SKILL.md +182 -182
- package/skills/legal/legal-tax/LICENSE +21 -21
- package/skills/legal/legal-tax/SKILL.md +156 -156
- package/skills/mcp-builder/LICENSE +21 -21
- package/skills/mcp-builder/SKILL.md +257 -257
- package/skills/mcp-builder/reference/evaluation.md +630 -630
- package/skills/mcp-builder/reference/mcp_best_practices.md +269 -269
- package/skills/mcp-builder/reference/node_mcp_server.md +980 -980
- package/skills/mcp-builder/reference/python_mcp_server.md +737 -737
- package/skills/mcp-builder/scripts/connections.py +151 -151
- package/skills/mcp-builder/scripts/evaluation.py +373 -373
- package/skills/mcp-builder/scripts/example_evaluation.xml +22 -22
- package/skills/mcp-builder/scripts/requirements.txt +2 -2
- package/skills/mcporter/SKILL.md +65 -65
- package/skills/meme-maker/SKILL.md +46 -46
- package/skills/meme-maker/references/templates.json +358 -358
- package/skills/meme-maker/scripts/meme.mjs +398 -398
- package/skills/mental-health/mental-health-cbt/LICENSE +21 -21
- package/skills/mental-health/mental-health-cbt/SKILL.md +254 -254
- package/skills/mental-health/psych-addiction/LICENSE +21 -21
- package/skills/mental-health/psych-addiction/SKILL.md +79 -79
- package/skills/mental-health/psych-behavioral-econ/LICENSE +21 -21
- package/skills/mental-health/psych-behavioral-econ/SKILL.md +84 -84
- package/skills/mental-health/psych-child/LICENSE +21 -21
- package/skills/mental-health/psych-child/SKILL.md +84 -84
- package/skills/mental-health/psych-grief/LICENSE +21 -21
- package/skills/mental-health/psych-grief/SKILL.md +85 -85
- package/skills/mental-health/psych-mindfulness/LICENSE +21 -21
- package/skills/mental-health/psych-mindfulness/SKILL.md +71 -71
- package/skills/mental-health/psych-org/LICENSE +21 -21
- package/skills/mental-health/psych-org/SKILL.md +115 -115
- package/skills/mental-health/psych-positive/LICENSE +21 -21
- package/skills/mental-health/psych-positive/SKILL.md +86 -86
- package/skills/mental-health/psych-relationships/LICENSE +21 -21
- package/skills/mental-health/psych-relationships/SKILL.md +100 -100
- package/skills/mental-health/psych-trauma/LICENSE +21 -21
- package/skills/mental-health/psych-trauma/SKILL.md +109 -109
- package/skills/model-usage/SKILL.md +75 -75
- package/skills/model-usage/references/codexbar-cli.md +33 -33
- package/skills/model-usage/scripts/model_usage.py +319 -319
- package/skills/model-usage/scripts/test_model_usage.py +40 -40
- package/skills/nano-pdf/SKILL.md +42 -42
- package/skills/node-connect/SKILL.md +147 -147
- package/skills/node-inspect-debugger/SKILL.md +88 -88
- package/skills/notion/SKILL.md +154 -154
- package/skills/obsidian/SKILL.md +123 -123
- package/skills/openai-whisper/SKILL.md +42 -42
- package/skills/openai-whisper-api/SKILL.md +75 -75
- package/skills/openai-whisper-api/scripts/transcribe.sh +154 -154
- package/skills/openhue/SKILL.md +116 -116
- package/skills/oracle/SKILL.md +130 -130
- package/skills/ordercli/SKILL.md +82 -82
- package/skills/peekaboo/SKILL.md +217 -217
- package/skills/pyproject.toml +10 -10
- package/skills/python-debugpy/SKILL.md +76 -76
- package/skills/sag/SKILL.md +91 -91
- package/skills/science/sci-astronomy/LICENSE +21 -21
- package/skills/science/sci-astronomy/SKILL.md +80 -80
- package/skills/science/sci-biology/LICENSE +21 -21
- package/skills/science/sci-biology/SKILL.md +74 -74
- package/skills/science/sci-chemistry/LICENSE +21 -21
- package/skills/science/sci-chemistry/SKILL.md +89 -89
- package/skills/science/sci-climate/LICENSE +21 -21
- package/skills/science/sci-climate/SKILL.md +72 -72
- package/skills/science/sci-data-analysis/LICENSE +21 -21
- package/skills/science/sci-data-analysis/SKILL.md +87 -87
- package/skills/science/sci-environmental-science/LICENSE +21 -21
- package/skills/science/sci-environmental-science/SKILL.md +69 -69
- package/skills/science/sci-geology/LICENSE +21 -21
- package/skills/science/sci-geology/SKILL.md +56 -56
- package/skills/science/sci-method/LICENSE +21 -21
- package/skills/science/sci-method/SKILL.md +77 -77
- package/skills/science/sci-neuroscience/LICENSE +21 -21
- package/skills/science/sci-neuroscience/SKILL.md +79 -79
- package/skills/science/sci-physics/LICENSE +21 -21
- package/skills/science/sci-physics/SKILL.md +78 -78
- package/skills/science/sci-research-methods/LICENSE +21 -21
- package/skills/science/sci-research-methods/SKILL.md +83 -83
- package/skills/science/sci-statistics/LICENSE +21 -21
- package/skills/science/sci-statistics/SKILL.md +249 -249
- package/skills/session-logs/SKILL.md +155 -155
- package/skills/sherpa-onnx-tts/SKILL.md +113 -113
- package/skills/skill-creator/SKILL.md +81 -81
- package/skills/skill-creator/license.txt +202 -202
- package/skills/skill-creator/scripts/init_skill.py +378 -378
- package/skills/skill-creator/scripts/package_skill.py +144 -144
- package/skills/skill-creator/scripts/quick_validate.py +169 -169
- package/skills/skill-creator/scripts/test_init_skill.py +51 -51
- package/skills/skill-creator/scripts/test_package_skill.py +199 -199
- package/skills/skill-creator/scripts/test_quick_validate.py +116 -116
- package/skills/slack/SKILL.md +82 -82
- package/skills/slack-gif-creator/LICENSE +21 -21
- package/skills/slack-gif-creator/SKILL.md +293 -293
- package/skills/slack-gif-creator/requirements.txt +3 -3
- package/skills/social-sciences/social-anthropology/LICENSE +21 -21
- package/skills/social-sciences/social-anthropology/SKILL.md +62 -62
- package/skills/social-sciences/social-economics/LICENSE +21 -21
- package/skills/social-sciences/social-economics/SKILL.md +88 -88
- package/skills/social-sciences/social-geography/LICENSE +21 -21
- package/skills/social-sciences/social-geography/SKILL.md +61 -61
- package/skills/social-sciences/social-international-dev/LICENSE +21 -21
- package/skills/social-sciences/social-international-dev/SKILL.md +76 -76
- package/skills/social-sciences/social-political-science/LICENSE +21 -21
- package/skills/social-sciences/social-political-science/SKILL.md +70 -70
- package/skills/social-sciences/social-public-policy/LICENSE +21 -21
- package/skills/social-sciences/social-public-policy/SKILL.md +73 -73
- package/skills/social-sciences/social-sociology/LICENSE +21 -21
- package/skills/social-sciences/social-sociology/SKILL.md +78 -78
- package/skills/songsee/SKILL.md +53 -53
- package/skills/sonoscli/SKILL.md +69 -69
- package/skills/spike/SKILL.md +55 -55
- package/skills/spotify-player/SKILL.md +68 -68
- package/skills/summarize/SKILL.md +90 -90
- package/skills/taskflow/SKILL.md +153 -153
- package/skills/taskflow/examples/inbox-triage.lobster +33 -33
- package/skills/taskflow/examples/pr-intake.lobster +32 -32
- package/skills/taskflow-inbox-triage/SKILL.md +123 -123
- package/skills/technical/ai-ethics/LICENSE +21 -21
- package/skills/technical/ai-ethics/SKILL.md +92 -92
- package/skills/technical/ai-product-builder/LICENSE +21 -21
- package/skills/technical/ai-product-builder/SKILL.md +180 -180
- package/skills/technical/analytics-setup/LICENSE +21 -21
- package/skills/technical/analytics-setup/SKILL.md +125 -125
- package/skills/technical/api-builder/LICENSE +21 -21
- package/skills/technical/api-builder/SKILL.md +202 -202
- package/skills/technical/architecture-decisions/LICENSE +21 -21
- package/skills/technical/architecture-decisions/SKILL.md +120 -120
- package/skills/technical/auth-security/LICENSE +21 -21
- package/skills/technical/auth-security/SKILL.md +209 -209
- package/skills/technical/blockchain-web3/LICENSE +21 -21
- package/skills/technical/blockchain-web3/SKILL.md +84 -84
- package/skills/technical/cloud-architecture/LICENSE +21 -21
- package/skills/technical/cloud-architecture/SKILL.md +85 -85
- package/skills/technical/content-platform/LICENSE +21 -21
- package/skills/technical/content-platform/SKILL.md +134 -134
- package/skills/technical/cybersecurity-advanced/LICENSE +21 -21
- package/skills/technical/cybersecurity-advanced/SKILL.md +99 -99
- package/skills/technical/data-engineering/LICENSE +21 -21
- package/skills/technical/data-engineering/SKILL.md +117 -117
- package/skills/technical/database-design/LICENSE +21 -21
- package/skills/technical/database-design/SKILL.md +185 -185
- package/skills/technical/devops-cicd/LICENSE +21 -21
- package/skills/technical/devops-cicd/SKILL.md +181 -181
- package/skills/technical/ecommerce-builder/LICENSE +21 -21
- package/skills/technical/ecommerce-builder/SKILL.md +123 -123
- package/skills/technical/email-marketing/LICENSE +21 -21
- package/skills/technical/email-marketing/SKILL.md +128 -128
- package/skills/technical/fintech-builder/LICENSE +21 -21
- package/skills/technical/fintech-builder/SKILL.md +141 -141
- package/skills/technical/full-stack-web/LICENSE +21 -21
- package/skills/technical/full-stack-web/SKILL.md +173 -173
- package/skills/technical/gdpr-basics/LICENSE +21 -21
- package/skills/technical/gdpr-basics/SKILL.md +145 -145
- package/skills/technical/launch-playbook/LICENSE +21 -21
- package/skills/technical/launch-playbook/SKILL.md +95 -95
- package/skills/technical/marketing-copy/LICENSE +21 -21
- package/skills/technical/marketing-copy/SKILL.md +126 -126
- package/skills/technical/marketplace-builder/LICENSE +21 -21
- package/skills/technical/marketplace-builder/SKILL.md +105 -105
- package/skills/technical/mobile-pwa/LICENSE +21 -21
- package/skills/technical/mobile-pwa/SKILL.md +191 -191
- package/skills/technical/no-code-tools/LICENSE +21 -21
- package/skills/technical/no-code-tools/SKILL.md +80 -80
- package/skills/technical/open-source/LICENSE +21 -21
- package/skills/technical/open-source/SKILL.md +71 -71
- package/skills/technical/performance-optimization/LICENSE +21 -21
- package/skills/technical/performance-optimization/SKILL.md +155 -155
- package/skills/technical/pricing-design/LICENSE +21 -21
- package/skills/technical/pricing-design/SKILL.md +87 -87
- package/skills/technical/product-management/LICENSE +21 -21
- package/skills/technical/product-management/SKILL.md +94 -94
- package/skills/technical/saas-builder/LICENSE +21 -21
- package/skills/technical/saas-builder/SKILL.md +138 -138
- package/skills/technical/scope-estimation/LICENSE +21 -21
- package/skills/technical/scope-estimation/SKILL.md +99 -99
- package/skills/technical/secrets-management/LICENSE +21 -21
- package/skills/technical/secrets-management/SKILL.md +135 -135
- package/skills/technical/seo-technical/LICENSE +21 -21
- package/skills/technical/seo-technical/SKILL.md +136 -136
- package/skills/technical/technical-writing/LICENSE +21 -21
- package/skills/technical/technical-writing/SKILL.md +149 -149
- package/skills/technical/ux-research-tools/LICENSE +21 -21
- package/skills/technical/ux-research-tools/SKILL.md +54 -54
- package/skills/theme-factory/LICENSE +21 -21
- package/skills/theme-factory/SKILL.md +65 -65
- package/skills/theme-factory/themes/arctic-frost.md +19 -19
- package/skills/theme-factory/themes/botanical-garden.md +19 -19
- package/skills/theme-factory/themes/desert-rose.md +19 -19
- package/skills/theme-factory/themes/forest-canopy.md +19 -19
- package/skills/theme-factory/themes/golden-hour.md +19 -19
- package/skills/theme-factory/themes/midnight-galaxy.md +19 -19
- package/skills/theme-factory/themes/modern-minimalist.md +19 -19
- package/skills/theme-factory/themes/ocean-depths.md +19 -19
- package/skills/theme-factory/themes/sunset-boulevard.md +19 -19
- package/skills/theme-factory/themes/tech-innovation.md +19 -19
- package/skills/things-mac/SKILL.md +90 -90
- package/skills/tmux/SKILL.md +95 -95
- package/skills/tmux/scripts/find-sessions.sh +112 -112
- package/skills/tmux/scripts/wait-for-text.sh +83 -83
- package/skills/trades/trades-agriculture/LICENSE +21 -21
- package/skills/trades/trades-agriculture/SKILL.md +80 -80
- package/skills/trades/trades-automotive/LICENSE +21 -21
- package/skills/trades/trades-automotive/SKILL.md +84 -84
- package/skills/trades/trades-carpentry/LICENSE +21 -21
- package/skills/trades/trades-carpentry/SKILL.md +71 -71
- package/skills/trades/trades-cooking-pro/LICENSE +21 -21
- package/skills/trades/trades-cooking-pro/SKILL.md +90 -90
- package/skills/trades/trades-electrical/LICENSE +21 -21
- package/skills/trades/trades-electrical/SKILL.md +146 -146
- package/skills/trades/trades-hvac/LICENSE +21 -21
- package/skills/trades/trades-hvac/SKILL.md +80 -80
- package/skills/trades/trades-landscaping/LICENSE +21 -21
- package/skills/trades/trades-landscaping/SKILL.md +60 -60
- package/skills/trades/trades-metalworking/LICENSE +21 -21
- package/skills/trades/trades-metalworking/SKILL.md +64 -64
- package/skills/trades/trades-painting/LICENSE +21 -21
- package/skills/trades/trades-painting/SKILL.md +70 -70
- package/skills/trades/trades-plumbing/LICENSE +21 -21
- package/skills/trades/trades-plumbing/SKILL.md +160 -160
- package/skills/trades/trades-welding/LICENSE +21 -21
- package/skills/trades/trades-welding/SKILL.md +82 -82
- package/skills/trello/SKILL.md +112 -112
- package/skills/uipm-ui-styling/LICENSE.txt +202 -0
- package/skills/uipm-ui-styling/SKILL.md +328 -0
- package/skills/uipm-ui-styling/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/uipm-ui-styling/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/uipm-ui-styling/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/uipm-ui-styling/references/canvas-design-system.md +320 -0
- package/skills/uipm-ui-styling/references/shadcn-accessibility.md +471 -0
- package/skills/uipm-ui-styling/references/shadcn-components.md +424 -0
- package/skills/uipm-ui-styling/references/shadcn-theming.md +373 -0
- package/skills/uipm-ui-styling/references/tailwind-customization.md +483 -0
- package/skills/uipm-ui-styling/references/tailwind-responsive.md +382 -0
- package/skills/uipm-ui-styling/references/tailwind-utilities.md +455 -0
- package/skills/uipm-ui-styling/scripts/.coverage +0 -0
- package/skills/uipm-ui-styling/scripts/requirements.txt +17 -0
- package/skills/uipm-ui-styling/scripts/shadcn_add.py +292 -0
- package/skills/uipm-ui-styling/scripts/tailwind_config_gen.py +456 -0
- package/skills/uipm-ui-styling/scripts/tests/coverage-ui.json +1 -0
- package/skills/uipm-ui-styling/scripts/tests/requirements.txt +3 -0
- package/skills/uipm-ui-styling/scripts/tests/test_shadcn_add.py +266 -0
- package/skills/uipm-ui-styling/scripts/tests/test_tailwind_config_gen.py +336 -0
- package/skills/video-frames/SKILL.md +50 -50
- package/skills/video-frames/scripts/frame.sh +81 -81
- package/skills/voice-call/SKILL.md +49 -49
- package/skills/wacli/SKILL.md +76 -76
- package/skills/weather/SKILL.md +91 -91
- package/skills/web-artifacts-builder/LICENSE +21 -21
- package/skills/web-artifacts-builder/SKILL.md +82 -82
- package/skills/web-artifacts-builder/scripts/bundle-artifact.sh +53 -53
- package/skills/web-artifacts-builder/scripts/init-artifact.sh +322 -322
- package/skills/xurl/SKILL.md +124 -124
|
@@ -1,734 +1,734 @@
|
|
|
1
|
-
# iOS Expert Reference — Build to Launch
|
|
2
|
-
|
|
3
|
-
## Table of Contents
|
|
4
|
-
|
|
5
|
-
1. [Xcode & Swift Fundamentals](#1-xcode--swift-fundamentals)
|
|
6
|
-
2. [Certificates & Provisioning](#2-certificates--provisioning)
|
|
7
|
-
3. [APNs (Push Notifications)](#3-apns-push-notifications)
|
|
8
|
-
4. [Background Modes & BGTaskScheduler](#4-background-modes--bgtaskscheduler)
|
|
9
|
-
5. [App Store Connect](#5-app-store-connect)
|
|
10
|
-
6. [TestFlight](#6-testflight)
|
|
11
|
-
7. [App Review & Submission](#7-app-review--submission)
|
|
12
|
-
8. [ITMS Error Code Reference](#8-itms-error-code-reference)
|
|
13
|
-
9. [Privacy Manifests (Required 2024+)](#9-privacy-manifests-required-2024)
|
|
14
|
-
10. [In-App Purchase (StoreKit 2)](#10-in-app-purchase-storekit-2)
|
|
15
|
-
11. [Firebase iOS Integration](#11-firebase-ios-integration)
|
|
16
|
-
12. [Google Sign-In iOS](#12-google-sign-in-ios)
|
|
17
|
-
13. [Deep Links & Universal Links](#13-deep-links--universal-links)
|
|
18
|
-
14. [Performance & Crash Reporting](#14-performance--crash-reporting)
|
|
19
|
-
15. [Common Submission Failures & Fixes](#15-common-submission-failures--fixes)
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## 1. Xcode & Swift Fundamentals
|
|
24
|
-
|
|
25
|
-
**Xcode versions (2025-2026):**
|
|
26
|
-
|
|
27
|
-
- Xcode 16.x: Required for iOS 18 SDK, Swift 6
|
|
28
|
-
- Xcode 15.x: Last version supporting iOS 12 as deployment target
|
|
29
|
-
- App Store requires builds from the latest Xcode major version (enforced ~spring each year)
|
|
30
|
-
- As of spring 2026: submissions must use Xcode 16+
|
|
31
|
-
|
|
32
|
-
**Swift 6 concurrency model:**
|
|
33
|
-
|
|
34
|
-
- `Sendable` conformance required for types crossing actor boundaries
|
|
35
|
-
- `@MainActor` isolates UI code
|
|
36
|
-
- Structured concurrency: `async/await`, `Task`, `TaskGroup`, `AsyncStream`
|
|
37
|
-
- `actor` keyword for data isolation
|
|
38
|
-
- Migration: enable Swift 6 warnings in Build Settings > Swift Language Version
|
|
39
|
-
|
|
40
|
-
**Minimum deployment targets (2026):**
|
|
41
|
-
|
|
42
|
-
- App Store: iOS 16 minimum recommended (iOS 15 still accepted but shrinking)
|
|
43
|
-
- <project> target: iOS 16+ to get push notification runtime permission APIs
|
|
44
|
-
|
|
45
|
-
**Key Build Settings:**
|
|
46
|
-
|
|
47
|
-
- `PRODUCT_BUNDLE_IDENTIFIER`: com.<project>.shield
|
|
48
|
-
- `MARKETING_VERSION`: 2.3.0
|
|
49
|
-
- `CURRENT_PROJECT_VERSION`: 15 (build number)
|
|
50
|
-
- `DEVELOPMENT_TEAM`: LZT4U6348K
|
|
51
|
-
- `CODE_SIGN_STYLE`: Automatic or Manual
|
|
52
|
-
- `IPHONEOS_DEPLOYMENT_TARGET`: 16.0
|
|
53
|
-
|
|
54
|
-
---
|
|
55
|
-
|
|
56
|
-
## 2. Certificates & Provisioning
|
|
57
|
-
|
|
58
|
-
**Certificate types:**
|
|
59
|
-
| Type | Purpose | Expiry |
|
|
60
|
-
|------|---------|--------|
|
|
61
|
-
| Apple Development | Local device testing | 1 year |
|
|
62
|
-
| Apple Distribution | App Store + Ad Hoc | 1 year |
|
|
63
|
-
| Apple Push Services | APNs (legacy) | 1 year |
|
|
64
|
-
| APNs Auth Key (.p8) | APNs (token-based) | **Never expires** |
|
|
65
|
-
|
|
66
|
-
**Always use .p8 APNs auth key** — one key works for all apps in your account, never expires, no rotation needed.
|
|
67
|
-
|
|
68
|
-
**Provisioning profiles:**
|
|
69
|
-
| Type | Use case |
|
|
70
|
-
|------|---------|
|
|
71
|
-
| iOS App Development | Debug builds on registered devices |
|
|
72
|
-
| Ad Hoc | Distribution to specific UDIDs |
|
|
73
|
-
| App Store | App Store / TestFlight distribution |
|
|
74
|
-
| Enterprise | In-house distribution |
|
|
75
|
-
|
|
76
|
-
**Provisioning profile contains:** App ID + certificates + device UDIDs (not for App Store type) + entitlements
|
|
77
|
-
|
|
78
|
-
**App ID capabilities that affect provisioning:**
|
|
79
|
-
|
|
80
|
-
- Push Notifications → must be enabled in App ID
|
|
81
|
-
- Associated Domains → for Universal Links
|
|
82
|
-
- Sign in with Apple → requires entitlement
|
|
83
|
-
- In-App Purchase → requires App ID config
|
|
84
|
-
- Background Modes → enabled in capabilities
|
|
85
|
-
|
|
86
|
-
**Manual signing (EAS typically handles this):**
|
|
87
|
-
|
|
88
|
-
```
|
|
89
|
-
Keychain Access → Certificate Assistant → Request Certificate from CA
|
|
90
|
-
Upload CSR to developer.apple.com → Download .cer → Install in Keychain
|
|
91
|
-
Create App ID → Create Provisioning Profile → Download + install
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
**Automatic signing:** Xcode manages everything. Fine for development. EAS Build manages production signing for CI/CD.
|
|
95
|
-
|
|
96
|
-
**Certificates expiry:** Check at developer.apple.com/account/resources/certificates/list
|
|
97
|
-
Renewing a certificate does NOT invalidate existing signed builds.
|
|
98
|
-
|
|
99
|
-
---
|
|
100
|
-
|
|
101
|
-
## 3. APNs (Push Notifications)
|
|
102
|
-
|
|
103
|
-
**Token-based authentication (.p8) — ALWAYS use this:**
|
|
104
|
-
|
|
105
|
-
- Key ID: `48BS2XTSL2` (<project>)
|
|
106
|
-
- Team ID: `LZT4U6348K`
|
|
107
|
-
- Key file: `AuthKey_48BS2XTSL2.p8` — **back this up, can only download once**
|
|
108
|
-
- Bundle ID for topic: `com.<project>.shield`
|
|
109
|
-
- Works for both Sandbox (development) and Production — same key
|
|
110
|
-
|
|
111
|
-
**APNs environments:**
|
|
112
|
-
|
|
113
|
-
- **Sandbox:** Development builds, TestFlight with development profile
|
|
114
|
-
- **Production:** App Store builds, TestFlight with distribution profile
|
|
115
|
-
- Firebase abstracts this — upload the .p8 key once and Firebase handles routing
|
|
116
|
-
|
|
117
|
-
**Upload .p8 to Firebase:**
|
|
118
|
-
|
|
119
|
-
1. Firebase Console → Project Settings → Cloud Messaging → iOS app
|
|
120
|
-
2. Upload APNs Authentication Key
|
|
121
|
-
3. Enter Key ID: 48BS2XTSL2 and Team ID: LZT4U6348K
|
|
122
|
-
|
|
123
|
-
**FCM token registration (React Native/Expo):**
|
|
124
|
-
|
|
125
|
-
```typescript
|
|
126
|
-
import messaging from "@react-native-firebase/messaging";
|
|
127
|
-
|
|
128
|
-
// Request permission (iOS 13+, required)
|
|
129
|
-
const authStatus = await messaging().requestPermission();
|
|
130
|
-
const enabled =
|
|
131
|
-
authStatus === messaging.AuthorizationStatus.AUTHORIZED ||
|
|
132
|
-
authStatus === messaging.AuthorizationStatus.PROVISIONAL;
|
|
133
|
-
|
|
134
|
-
// Get FCM token
|
|
135
|
-
const fcmToken = await messaging().getToken();
|
|
136
|
-
// Send fcmToken to your backend → store in user record
|
|
137
|
-
|
|
138
|
-
// Handle background messages
|
|
139
|
-
messaging().setBackgroundMessageHandler(async (remoteMessage) => {
|
|
140
|
-
// Process notification
|
|
141
|
-
});
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
**Push notification payload for challenge (<project> ACH):**
|
|
145
|
-
|
|
146
|
-
```json
|
|
147
|
-
{
|
|
148
|
-
"notification": {
|
|
149
|
-
"title": "ACH Transfer Challenge",
|
|
150
|
-
"body": "Tap the matching number to approve"
|
|
151
|
-
},
|
|
152
|
-
"data": {
|
|
153
|
-
"type": "ach_challenge",
|
|
154
|
-
"challengeId": "uuid",
|
|
155
|
-
"options": ["3", "7", "9"],
|
|
156
|
-
"expiresAt": "ISO timestamp"
|
|
157
|
-
},
|
|
158
|
-
"apns": {
|
|
159
|
-
"payload": {
|
|
160
|
-
"aps": {
|
|
161
|
-
"alert": { "title": "...", "body": "..." },
|
|
162
|
-
"sound": "default",
|
|
163
|
-
"badge": 1,
|
|
164
|
-
"category": "ACH_CHALLENGE",
|
|
165
|
-
"content-available": 1
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
**iOS 16+ push notification permission:**
|
|
173
|
-
|
|
174
|
-
```swift
|
|
175
|
-
UNUserNotificationCenter.current().requestAuthorization(
|
|
176
|
-
options: [.alert, .sound, .badge]) { granted, error in }
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
---
|
|
180
|
-
|
|
181
|
-
## 4. Background Modes & BGTaskScheduler
|
|
182
|
-
|
|
183
|
-
**Info.plist background modes (Expo: ios.infoPlist.UIBackgroundModes in app.json):**
|
|
184
|
-
|
|
185
|
-
```json
|
|
186
|
-
"UIBackgroundModes": ["fetch", "processing", "remote-notification"]
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
- `fetch`: legacy background fetch (iOS 13+ deprecated in favor of BGAppRefreshTask)
|
|
190
|
-
- `processing`: BGProcessingTask for longer background work
|
|
191
|
-
- `remote-notification`: silent push to trigger background fetch
|
|
192
|
-
|
|
193
|
-
**BGTaskSchedulerPermittedIdentifiers (CRITICAL — causes App Store rejection if missing):**
|
|
194
|
-
|
|
195
|
-
```json
|
|
196
|
-
"BGTaskSchedulerPermittedIdentifiers": ["com.<project>.shield.refresh"]
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
This must exactly match what your app registers at runtime.
|
|
200
|
-
|
|
201
|
-
**In Expo app.json:**
|
|
202
|
-
|
|
203
|
-
```json
|
|
204
|
-
{
|
|
205
|
-
"expo": {
|
|
206
|
-
"ios": {
|
|
207
|
-
"infoPlist": {
|
|
208
|
-
"UIBackgroundModes": ["fetch", "processing", "remote-notification"],
|
|
209
|
-
"BGTaskSchedulerPermittedIdentifiers": ["com.<project>.shield.refresh"]
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
**Registering tasks in Swift/React Native:**
|
|
217
|
-
|
|
218
|
-
```typescript
|
|
219
|
-
// expo-background-fetch or expo-task-manager
|
|
220
|
-
import * as TaskManager from "expo-task-manager";
|
|
221
|
-
import * as BackgroundFetch from "expo-background-fetch";
|
|
222
|
-
|
|
223
|
-
const TASK_NAME = "com.<project>.shield.refresh";
|
|
224
|
-
|
|
225
|
-
TaskManager.defineTask(TASK_NAME, async () => {
|
|
226
|
-
// Do background work
|
|
227
|
-
return BackgroundFetch.BackgroundFetchResult.NewData;
|
|
228
|
-
});
|
|
229
|
-
|
|
230
|
-
await BackgroundFetch.registerTaskAsync(TASK_NAME, {
|
|
231
|
-
minimumInterval: 15 * 60, // 15 minutes minimum
|
|
232
|
-
stopOnTerminate: false,
|
|
233
|
-
startOnBoot: true,
|
|
234
|
-
});
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
**Rules:**
|
|
238
|
-
|
|
239
|
-
- iOS gives ~30 seconds for background fetch tasks
|
|
240
|
-
- iOS gives up to several minutes for processing tasks (device plugged in + on Wi-Fi)
|
|
241
|
-
- Background execution is throttled by iOS based on user app usage patterns
|
|
242
|
-
- Never guaranteed to run at exact scheduled time
|
|
243
|
-
|
|
244
|
-
---
|
|
245
|
-
|
|
246
|
-
## 5. App Store Connect
|
|
247
|
-
|
|
248
|
-
**URL:** https://appstoreconnect.apple.com
|
|
249
|
-
**Account:** <email>
|
|
250
|
-
**App:** <project> Shield · App ID: 6762309517
|
|
251
|
-
**Bundle ID:** com.<project>.shield
|
|
252
|
-
|
|
253
|
-
**App metadata required for submission:**
|
|
254
|
-
|
|
255
|
-
- App name (max 30 chars): "<project> Shield"
|
|
256
|
-
- Subtitle (max 30 chars)
|
|
257
|
-
- Keywords (max 100 chars)
|
|
258
|
-
- Description (max 4000 chars)
|
|
259
|
-
- What's New (max 4000 chars)
|
|
260
|
-
- Screenshots: 6.5" (iPhone 14 Pro Max), 5.5" (iPhone 8 Plus), 12.9" iPad Pro
|
|
261
|
-
- App icon: 1024×1024 PNG (no alpha channel, no rounded corners)
|
|
262
|
-
|
|
263
|
-
**App Store Connect API (v3):**
|
|
264
|
-
|
|
265
|
-
- Used for automation: upload builds, manage TestFlight, read review status
|
|
266
|
-
- API keys at: App Store Connect → Users and Access → Keys
|
|
267
|
-
- Key types: App Manager, Developer, Marketing
|
|
268
|
-
- Used by EAS Submit to automate submissions
|
|
269
|
-
|
|
270
|
-
**Version states:**
|
|
271
|
-
|
|
272
|
-
```
|
|
273
|
-
Prepare for Submission → Waiting for Review → In Review →
|
|
274
|
-
→ Approved → Ready for Sale
|
|
275
|
-
→ Rejected → Developer Action Required → (fix) → Resubmit
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
**App Review timeline:**
|
|
279
|
-
|
|
280
|
-
- Standard: 24-48 hours (most common)
|
|
281
|
-
- Expedited: ~24 hours — request at developer.apple.com/contact/app-store/
|
|
282
|
-
- Expedited criteria: critical bug fix, time-sensitive launch event, legal requirement
|
|
283
|
-
|
|
284
|
-
**App information sections:**
|
|
285
|
-
|
|
286
|
-
- Age Rating: must complete questionnaire
|
|
287
|
-
- Privacy Policy URL: required
|
|
288
|
-
- Category: Utilities (<project>)
|
|
289
|
-
- Content rights declaration required
|
|
290
|
-
- Advertising identifier (IDFA) declaration required
|
|
291
|
-
|
|
292
|
-
---
|
|
293
|
-
|
|
294
|
-
## 6. TestFlight
|
|
295
|
-
|
|
296
|
-
**Internal testing:**
|
|
297
|
-
|
|
298
|
-
- Up to 100 testers
|
|
299
|
-
- No App Review required — available within minutes of upload
|
|
300
|
-
- Must be App Store Connect users (Developer, Admin, etc.)
|
|
301
|
-
- Builds available for 90 days
|
|
302
|
-
|
|
303
|
-
**External testing:**
|
|
304
|
-
|
|
305
|
-
- Up to 10,000 testers
|
|
306
|
-
- Requires App Review (usually same day for TestFlight-specific review)
|
|
307
|
-
- Testers invited by email or public link
|
|
308
|
-
- Builds available for 90 days
|
|
309
|
-
|
|
310
|
-
**TestFlight vs Production APNs:**
|
|
311
|
-
|
|
312
|
-
- TestFlight builds use **production** APNs environment if signed with distribution cert
|
|
313
|
-
- TestFlight builds use **sandbox** APNs environment if signed with development cert
|
|
314
|
-
- EAS production builds → distribution cert → production APNs → correct
|
|
315
|
-
|
|
316
|
-
**Common TestFlight issues:**
|
|
317
|
-
|
|
318
|
-
- "Processing" stuck: usually takes 5-30 min for large builds; wait before panicking
|
|
319
|
-
- Tester not receiving email: check spam; try TestFlight app → Redeem link
|
|
320
|
-
- Build not appearing: check if build is in "Testing" state (not just uploaded)
|
|
321
|
-
- FCM not working in TestFlight: verify APNs key is uploaded to Firebase, verify production environment
|
|
322
|
-
|
|
323
|
-
**Build expiry:** 90 days from upload. Plan submissions around this.
|
|
324
|
-
|
|
325
|
-
---
|
|
326
|
-
|
|
327
|
-
## 7. App Review & Submission
|
|
328
|
-
|
|
329
|
-
**Pre-submission checklist:**
|
|
330
|
-
|
|
331
|
-
- [ ] All screenshots match current UI (not outdated)
|
|
332
|
-
- [ ] Privacy policy URL live and accessible
|
|
333
|
-
- [ ] Privacy manifest (PrivacyInfo.xcprivacy) included
|
|
334
|
-
- [ ] No placeholder content, lorem ipsum, or "coming soon" features
|
|
335
|
-
- [ ] All features in screenshots work without login (or provide demo credentials in review notes)
|
|
336
|
-
- [ ] App doesn't crash on first launch
|
|
337
|
-
- [ ] If login required: provide valid test account credentials in the review notes
|
|
338
|
-
- [ ] In-app purchase prices visible (if applicable)
|
|
339
|
-
- [ ] No references to competitor platforms (Android, Google Play) in UI
|
|
340
|
-
- [ ] No external payment links that bypass App Store (Apple rule)
|
|
341
|
-
- [ ] Location, camera, microphone permissions have clear usage descriptions in Info.plist
|
|
342
|
-
|
|
343
|
-
**Required NSUsageDescription keys (Info.plist):**
|
|
344
|
-
|
|
345
|
-
```xml
|
|
346
|
-
<key>NSCameraUsageDescription</key>
|
|
347
|
-
<string>Used to scan QR codes for UPI payments</string>
|
|
348
|
-
<key>NSFaceIDUsageDescription</key>
|
|
349
|
-
<string>Used to authenticate your identity securely</string>
|
|
350
|
-
<key>NSContactsUsageDescription</key>
|
|
351
|
-
<string>Used to quickly find contacts for payments</string>
|
|
352
|
-
<key>NSLocationWhenInUseUsageDescription</key>
|
|
353
|
-
<string>Used to verify transaction location</string>
|
|
354
|
-
```
|
|
355
|
-
|
|
356
|
-
**Review notes format (App Store Connect → App Review Information):**
|
|
357
|
-
|
|
358
|
-
```
|
|
359
|
-
Demo Account:
|
|
360
|
-
Email: <email>
|
|
361
|
-
Password: TestPass123
|
|
362
|
-
|
|
363
|
-
Notes:
|
|
364
|
-
- App requires biometric authentication. On simulator, use Touch ID/Face ID simulation.
|
|
365
|
-
- ACH challenge flow requires backend; tap any number in challenge screen for demo.
|
|
366
|
-
- Region selector should be set to "India" to access UPI features.
|
|
367
|
-
```
|
|
368
|
-
|
|
369
|
-
**Guideline references for <project>:**
|
|
370
|
-
|
|
371
|
-
- 2.1 App Completeness — all features must work
|
|
372
|
-
- 4.8 Sign in with Apple required if other social login is offered (you have Google Sign-In)
|
|
373
|
-
- 5.1.1 Data Collection — must declare all data collected
|
|
374
|
-
- 5.1.2 Data Use — must use data as described
|
|
375
|
-
|
|
376
|
-
**Sign in with Apple requirement:**
|
|
377
|
-
If your app offers third-party login (Google), Apple requires you also offer Sign in with Apple.
|
|
378
|
-
<project> app.json has `usesAppleSignIn: true` — implementation must be present in the app.
|
|
379
|
-
|
|
380
|
-
---
|
|
381
|
-
|
|
382
|
-
## 8. ITMS Error Code Reference
|
|
383
|
-
|
|
384
|
-
| Code | Meaning | Fix |
|
|
385
|
-
| ---------- | ------------------------------------ | ------------------------------------------------------ |
|
|
386
|
-
| ITMS-90035 | Invalid signature | Rebuild with correct provisioning profile |
|
|
387
|
-
| ITMS-90036 | Invalid code signing | Re-sign with distribution certificate |
|
|
388
|
-
| ITMS-90060 | Imported Swift version mismatch | Clean build, ensure correct Swift toolchain |
|
|
389
|
-
| ITMS-90062 | Invalid bundle structure | Check framework embedding settings |
|
|
390
|
-
| ITMS-90076 | Invalid library path | Remove or embed linked libraries correctly |
|
|
391
|
-
| ITMS-90085 | Unsupported architectures | Ensure lipo creates universal binary or arm64 only |
|
|
392
|
-
| ITMS-90087 | Framework missing simulator slice | Strip simulator slices from release build |
|
|
393
|
-
| ITMS-90096 | Binary contains invalid API usage | Remove private/restricted API references |
|
|
394
|
-
| ITMS-90101 | Disallowed entitlements | Remove entitlements not in provisioning profile |
|
|
395
|
-
| ITMS-90125 | Missing privacy usage strings | Add NSUsageDescription to Info.plist |
|
|
396
|
-
| ITMS-90148 | Missing required icon | Ensure 1024×1024 icon, no alpha |
|
|
397
|
-
| ITMS-90161 | Duplicate symbols | Check third-party SDKs for conflicts |
|
|
398
|
-
| ITMS-90168 | Invalid architecture | Ensure arm64 only for App Store (no x86_64) |
|
|
399
|
-
| ITMS-90206 | Unsupported WatchKit app | Remove or fix Watch extension |
|
|
400
|
-
| ITMS-90209 | Deployment target too low | Raise minimum iOS version in build settings |
|
|
401
|
-
| ITMS-90338 | Non-public selectors | Remove Objective-C private API usage |
|
|
402
|
-
| ITMS-90503 | Invalid bundle executable | Bundle name mismatch |
|
|
403
|
-
| ITMS-90506 | Icon contains alpha | Remove alpha channel from app icon PNG |
|
|
404
|
-
| ITMS-90562 | Missing purpose string | Add privacy permission strings |
|
|
405
|
-
| ITMS-90683 | Missing push entitlement | Enable Push Notifications in App ID |
|
|
406
|
-
| ITMS-90704 | Missing required device capabilities | Check UIRequiredDeviceCapabilities |
|
|
407
|
-
| ITMS-91053 | Missing privacy manifest | Add PrivacyInfo.xcprivacy to app bundle |
|
|
408
|
-
| ITMS-91056 | Required reason API missing | Declare API usage in privacy manifest |
|
|
409
|
-
| ITMS-91057 | Privacy manifest SDK mismatch | Update third-party SDKs that require privacy manifests |
|
|
410
|
-
|
|
411
|
-
**BGTaskScheduler-specific rejection (Guideline 2.5.4):**
|
|
412
|
-
|
|
413
|
-
> "Your app uses background task scheduling but declares identifiers not present in the app binary."
|
|
414
|
-
> **Fix:** Ensure `BGTaskSchedulerPermittedIdentifiers` in Info.plist exactly matches identifiers registered with `BGTaskScheduler.register(forTaskWithIdentifier:)` in code.
|
|
415
|
-
|
|
416
|
-
---
|
|
417
|
-
|
|
418
|
-
## 9. Privacy Manifests (Required 2024+)
|
|
419
|
-
|
|
420
|
-
**Required since May 1, 2024** for all new app submissions and updates.
|
|
421
|
-
Missing `PrivacyInfo.xcprivacy` → ITMS-91053 rejection.
|
|
422
|
-
|
|
423
|
-
**File location:** Add to app target (not just as a resource, but as a source file):
|
|
424
|
-
`YourApp/PrivacyInfo.xcprivacy`
|
|
425
|
-
|
|
426
|
-
**Content structure:**
|
|
427
|
-
|
|
428
|
-
```xml
|
|
429
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
430
|
-
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
|
|
431
|
-
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
432
|
-
<plist version="1.0">
|
|
433
|
-
<dict>
|
|
434
|
-
<key>NSPrivacyTracking</key>
|
|
435
|
-
<false/>
|
|
436
|
-
<key>NSPrivacyTrackingDomains</key>
|
|
437
|
-
<array/>
|
|
438
|
-
<key>NSPrivacyCollectedDataTypes</key>
|
|
439
|
-
<array>
|
|
440
|
-
<dict>
|
|
441
|
-
<key>NSPrivacyCollectedDataType</key>
|
|
442
|
-
<string>NSPrivacyCollectedDataTypeEmailAddress</string>
|
|
443
|
-
<key>NSPrivacyCollectedDataTypeLinked</key>
|
|
444
|
-
<true/>
|
|
445
|
-
<key>NSPrivacyCollectedDataTypeTracking</key>
|
|
446
|
-
<false/>
|
|
447
|
-
<key>NSPrivacyCollectedDataTypePurposes</key>
|
|
448
|
-
<array>
|
|
449
|
-
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
|
|
450
|
-
</array>
|
|
451
|
-
</dict>
|
|
452
|
-
</array>
|
|
453
|
-
<key>NSPrivacyAccessedAPITypes</key>
|
|
454
|
-
<array>
|
|
455
|
-
<dict>
|
|
456
|
-
<key>NSPrivacyAccessedAPIType</key>
|
|
457
|
-
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
|
|
458
|
-
<key>NSPrivacyAccessedAPITypeReasons</key>
|
|
459
|
-
<array><string>C617.1</string></array>
|
|
460
|
-
</dict>
|
|
461
|
-
<dict>
|
|
462
|
-
<key>NSPrivacyAccessedAPIType</key>
|
|
463
|
-
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
|
|
464
|
-
<key>NSPrivacyAccessedAPITypeReasons</key>
|
|
465
|
-
<array><string>35F9.1</string></array>
|
|
466
|
-
</dict>
|
|
467
|
-
<dict>
|
|
468
|
-
<key>NSPrivacyAccessedAPIType</key>
|
|
469
|
-
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
|
|
470
|
-
<key>NSPrivacyAccessedAPITypeReasons</key>
|
|
471
|
-
<array><string>CA92.1</string></array>
|
|
472
|
-
</dict>
|
|
473
|
-
</array>
|
|
474
|
-
</dict>
|
|
475
|
-
</plist>
|
|
476
|
-
```
|
|
477
|
-
|
|
478
|
-
**Required reason API categories (declare if your app or any SDK uses these):**
|
|
479
|
-
|
|
480
|
-
- `NSPrivacyAccessedAPICategoryFileTimestamp` — file timestamps
|
|
481
|
-
- `NSPrivacyAccessedAPICategorySystemBootTime` — `systemUptime`, `mach_absolute_time()`
|
|
482
|
-
- `NSPrivacyAccessedAPICategoryDiskSpace` — `volumeAvailableCapacityForImportantUsage`
|
|
483
|
-
- `NSPrivacyAccessedAPICategoryActiveKeyboards` — keyboard list
|
|
484
|
-
- `NSPrivacyAccessedAPICategoryUserDefaults` — `NSUserDefaults`
|
|
485
|
-
|
|
486
|
-
**SDK privacy manifests:** Firebase, Adjust, Amplitude, etc. all need their own privacy manifests.
|
|
487
|
-
If using CocoaPods: `pod install` aggregates them automatically in Xcode 15+.
|
|
488
|
-
In Expo: handled by the native SDK packages — keep dependencies updated.
|
|
489
|
-
|
|
490
|
-
---
|
|
491
|
-
|
|
492
|
-
## 10. In-App Purchase (StoreKit 2)
|
|
493
|
-
|
|
494
|
-
**StoreKit 2 (Swift, iOS 15+) — modern API:**
|
|
495
|
-
|
|
496
|
-
```swift
|
|
497
|
-
import StoreKit
|
|
498
|
-
|
|
499
|
-
// Fetch products
|
|
500
|
-
let products = try await Product.products(for: ["com.<project>.shield.annual"])
|
|
501
|
-
|
|
502
|
-
// Purchase
|
|
503
|
-
let result = try await product.purchase()
|
|
504
|
-
switch result {
|
|
505
|
-
case .success(let verification):
|
|
506
|
-
let transaction = try checkVerified(verification)
|
|
507
|
-
await transaction.finish()
|
|
508
|
-
case .pending: break // waiting for approval
|
|
509
|
-
case .userCancelled: break
|
|
510
|
-
}
|
|
511
|
-
|
|
512
|
-
// Restore purchases
|
|
513
|
-
for await result in Transaction.currentEntitlements {
|
|
514
|
-
// handle restored purchases
|
|
515
|
-
}
|
|
516
|
-
```
|
|
517
|
-
|
|
518
|
-
**Subscription types:**
|
|
519
|
-
|
|
520
|
-
- Auto-renewable subscriptions → requires a subscription group
|
|
521
|
-
- Non-renewing subscriptions → one-time period
|
|
522
|
-
- Consumables → one-time purchase, can buy multiple times
|
|
523
|
-
- Non-consumables → buy once
|
|
524
|
-
|
|
525
|
-
**App Store Connect setup:**
|
|
526
|
-
|
|
527
|
-
1. Features → In-App Purchases → Create
|
|
528
|
-
2. Set price tier, availability, and localized display name
|
|
529
|
-
3. Submit for App Review (IAP reviewed separately from app)
|
|
530
|
-
|
|
531
|
-
**Testing:**
|
|
532
|
-
|
|
533
|
-
- Sandbox environment: use Apple ID sandbox testers (App Store Connect → Sandbox Testers)
|
|
534
|
-
- Sandbox subscriptions auto-renew much faster (1 month → 5 minutes)
|
|
535
|
-
- StoreKit Testing in Xcode: use `.storekit` configuration file (no Apple ID needed)
|
|
536
|
-
|
|
537
|
-
---
|
|
538
|
-
|
|
539
|
-
## 11. Firebase iOS Integration
|
|
540
|
-
|
|
541
|
-
**<project> Firebase:**
|
|
542
|
-
|
|
543
|
-
- Project: <gcp-project>-a98aa
|
|
544
|
-
- iOS App ID: `1:929418470411:ios:99e76d550aaf4eff1d130e`
|
|
545
|
-
- GoogleService-Info.plist location: `/c~/<project>-shield/GoogleService-Info.plist`
|
|
546
|
-
|
|
547
|
-
**GoogleService-Info.plist required fields:**
|
|
548
|
-
|
|
549
|
-
```xml
|
|
550
|
-
CLIENT_ID ← Used for Google Sign-In
|
|
551
|
-
REVERSED_CLIENT_ID ← Must be in app.json as URL scheme
|
|
552
|
-
BUNDLE_ID ← Must match com.<project>.shield
|
|
553
|
-
GOOGLE_APP_ID ← Firebase iOS App ID
|
|
554
|
-
GCM_SENDER_ID ← For FCM (= project number 929418470411)
|
|
555
|
-
PROJECT_ID ← <gcp-project>-a98aa
|
|
556
|
-
API_KEY ← Firebase API key
|
|
557
|
-
```
|
|
558
|
-
|
|
559
|
-
**URL scheme requirement (REVERSED_CLIENT_ID):**
|
|
560
|
-
In app.json:
|
|
561
|
-
|
|
562
|
-
```json
|
|
563
|
-
{
|
|
564
|
-
"expo": {
|
|
565
|
-
"ios": {
|
|
566
|
-
"infoPlist": {
|
|
567
|
-
"CFBundleURLTypes": [
|
|
568
|
-
{
|
|
569
|
-
"CFBundleURLSchemes": ["com.googleusercontent.apps.929418470411-XXXXX"]
|
|
570
|
-
}
|
|
571
|
-
]
|
|
572
|
-
}
|
|
573
|
-
}
|
|
574
|
-
}
|
|
575
|
-
}
|
|
576
|
-
```
|
|
577
|
-
|
|
578
|
-
The REVERSED_CLIENT_ID is found in GoogleService-Info.plist.
|
|
579
|
-
**Without this, Google Sign-In silently fails on iOS.**
|
|
580
|
-
|
|
581
|
-
**FCM for iOS flow:**
|
|
582
|
-
|
|
583
|
-
1. App launches → registers for remote notifications
|
|
584
|
-
2. iOS returns APNs device token
|
|
585
|
-
3. Firebase swizzles and exchanges APNs token for FCM token
|
|
586
|
-
4. App receives FCM token → send to backend
|
|
587
|
-
5. Backend POSTs to FCM v1 API → Firebase routes to APNs → delivered
|
|
588
|
-
|
|
589
|
-
---
|
|
590
|
-
|
|
591
|
-
## 12. Google Sign-In iOS
|
|
592
|
-
|
|
593
|
-
**OAuth flow on iOS:**
|
|
594
|
-
|
|
595
|
-
1. User taps "Sign in with Google"
|
|
596
|
-
2. App presents Google auth in ASWebAuthenticationSession (in-app browser)
|
|
597
|
-
3. Google redirects to `REVERSED_CLIENT_ID://` URL scheme
|
|
598
|
-
4. App captures redirect → exchanges code for tokens
|
|
599
|
-
5. Firebase authenticates with Google credential
|
|
600
|
-
|
|
601
|
-
**Configuration in app.json for Expo:**
|
|
602
|
-
|
|
603
|
-
```json
|
|
604
|
-
{
|
|
605
|
-
"expo": {
|
|
606
|
-
"plugins": [
|
|
607
|
-
[
|
|
608
|
-
"@react-native-google-signin/google-signin",
|
|
609
|
-
{
|
|
610
|
-
"iosUrlScheme": "com.googleusercontent.apps.929418470411-XXXXX"
|
|
611
|
-
}
|
|
612
|
-
]
|
|
613
|
-
]
|
|
614
|
-
}
|
|
615
|
-
}
|
|
616
|
-
```
|
|
617
|
-
|
|
618
|
-
**iOS OAuth Client ID:** Found in Firebase Console → Project Settings → Your apps → iOS app
|
|
619
|
-
Different from the Android OAuth Client ID.
|
|
620
|
-
|
|
621
|
-
**Common iOS Google Sign-In failures:**
|
|
622
|
-
|
|
623
|
-
- `Error 400: redirect_uri_mismatch` → REVERSED_CLIENT_ID URL scheme not registered
|
|
624
|
-
- `Sign in was cancelled` → User dismissed; also can be incorrect URL scheme
|
|
625
|
-
- Silent failure after redirect → Missing CFBundleURLTypes in Info.plist
|
|
626
|
-
- Works in debug but not production → Wrong OAuth client ID for production certificate
|
|
627
|
-
|
|
628
|
-
---
|
|
629
|
-
|
|
630
|
-
## 13. Deep Links & Universal Links
|
|
631
|
-
|
|
632
|
-
**Universal Links (recommended for iOS 13+):**
|
|
633
|
-
|
|
634
|
-
- Requires apple-app-site-association (AASA) file at `https://yourdomain.com/.well-known/apple-app-site-association`
|
|
635
|
-
- App must have Associated Domains entitlement: `applinks:<project>.com`
|
|
636
|
-
- No browser redirect — deep link opens app directly
|
|
637
|
-
|
|
638
|
-
**AASA file format:**
|
|
639
|
-
|
|
640
|
-
```json
|
|
641
|
-
{
|
|
642
|
-
"applinks": {
|
|
643
|
-
"details": [
|
|
644
|
-
{
|
|
645
|
-
"appIDs": ["LZT4U6348K.com.<project>.shield"],
|
|
646
|
-
"components": [{ "/": "/ach/*", "comment": "ACH challenge links" }, { "/": "/guardian/*" }]
|
|
647
|
-
}
|
|
648
|
-
]
|
|
649
|
-
}
|
|
650
|
-
}
|
|
651
|
-
```
|
|
652
|
-
|
|
653
|
-
**Custom URL scheme (simpler, but less secure):**
|
|
654
|
-
`<project>://path?param=value`
|
|
655
|
-
Register in app.json:
|
|
656
|
-
|
|
657
|
-
```json
|
|
658
|
-
{ "expo": { "scheme": "<project>" } }
|
|
659
|
-
```
|
|
660
|
-
|
|
661
|
-
---
|
|
662
|
-
|
|
663
|
-
## 14. Performance & Crash Reporting
|
|
664
|
-
|
|
665
|
-
**Firebase Crashlytics (Expo):**
|
|
666
|
-
|
|
667
|
-
- `@react-native-firebase/crashlytics`
|
|
668
|
-
- Automatically captures crashes and non-fatal errors
|
|
669
|
-
- Custom logs: `crashlytics().log('ACH challenge presented')`
|
|
670
|
-
- User identification: `crashlytics().setUserId(userId)`
|
|
671
|
-
- View in Firebase Console → Crashlytics
|
|
672
|
-
|
|
673
|
-
**MetricKit (iOS 13+, native):**
|
|
674
|
-
|
|
675
|
-
- Provides hangs, crash logs, disk/battery reports
|
|
676
|
-
- Delivered to app once per 24h
|
|
677
|
-
- Useful for detecting background task failures
|
|
678
|
-
|
|
679
|
-
**React Native Performance:**
|
|
680
|
-
|
|
681
|
-
- Use Hermes engine (default in Expo SDK 48+): faster startup, lower memory
|
|
682
|
-
- Avoid `setState` in loops — batch updates
|
|
683
|
-
- Use `useMemo`/`useCallback` to prevent re-renders
|
|
684
|
-
- FlatList vs ScrollView: always FlatList for long lists (virtualized)
|
|
685
|
-
- Image caching: `expo-image` (LazyLoad, caching, progressive loading)
|
|
686
|
-
- Bundle size: `npx expo export --dump-assetmap` to audit
|
|
687
|
-
|
|
688
|
-
---
|
|
689
|
-
|
|
690
|
-
## 15. Common Submission Failures & Fixes
|
|
691
|
-
|
|
692
|
-
**"Missing Compliance" (Export compliance):**
|
|
693
|
-
Add to app.json:
|
|
694
|
-
|
|
695
|
-
```json
|
|
696
|
-
{ "expo": { "ios": { "infoPlist": { "ITSAppUsesNonExemptEncryption": false } } } }
|
|
697
|
-
```
|
|
698
|
-
|
|
699
|
-
**"Invalid binary" — simulator slice included:**
|
|
700
|
-
EAS Build automatically strips simulator slices for production builds.
|
|
701
|
-
If building locally: ensure `EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64` in build settings.
|
|
702
|
-
|
|
703
|
-
**"App uses undeclared API" (ITMS-90096):**
|
|
704
|
-
Search codebase for `UIDevice`, `system_profiler` calls, or private UIKit methods.
|
|
705
|
-
Firebase SDKs can trigger this — update to latest Firebase iOS SDK.
|
|
706
|
-
|
|
707
|
-
**BGTaskScheduler rejection (Guideline 2.5.4):**
|
|
708
|
-
Identifiers in `BGTaskSchedulerPermittedIdentifiers` must exactly match
|
|
709
|
-
what is passed to `BGTaskScheduler.register(forTaskWithIdentifier:)`.
|
|
710
|
-
No extra identifiers allowed.
|
|
711
|
-
|
|
712
|
-
**"Sign in with Apple required" rejection:**
|
|
713
|
-
Add Sign in with Apple as an option if Google Sign-In exists.
|
|
714
|
-
Expo: `expo-apple-authentication` package.
|
|
715
|
-
|
|
716
|
-
**Privacy manifest missing (ITMS-91053):**
|
|
717
|
-
Add PrivacyInfo.xcprivacy to Xcode target. In Expo: use a config plugin to inject it.
|
|
718
|
-
|
|
719
|
-
**"App references non-public symbols" (ITMS-90338):**
|
|
720
|
-
Usually from a third-party SDK. Update all native dependencies.
|
|
721
|
-
|
|
722
|
-
**TestFlight build in "Processing" state for >1 hour:**
|
|
723
|
-
|
|
724
|
-
- Usually a backend Apple issue; wait
|
|
725
|
-
- Check developer.apple.com/system-status/ for incidents
|
|
726
|
-
- If >3 hours, delete and re-upload
|
|
727
|
-
|
|
728
|
-
**App Review rejection: "Unable to reach backend":**
|
|
729
|
-
Ensure backend is live and accessible globally.
|
|
730
|
-
Check Cloud Run allows unauthenticated access on public API routes.
|
|
731
|
-
Provide working test credentials in review notes.
|
|
732
|
-
|
|
733
|
-
**Notarization-related issues (macOS builds only — not relevant for iOS):**
|
|
734
|
-
N/A for <project> Shield.
|
|
1
|
+
# iOS Expert Reference — Build to Launch
|
|
2
|
+
|
|
3
|
+
## Table of Contents
|
|
4
|
+
|
|
5
|
+
1. [Xcode & Swift Fundamentals](#1-xcode--swift-fundamentals)
|
|
6
|
+
2. [Certificates & Provisioning](#2-certificates--provisioning)
|
|
7
|
+
3. [APNs (Push Notifications)](#3-apns-push-notifications)
|
|
8
|
+
4. [Background Modes & BGTaskScheduler](#4-background-modes--bgtaskscheduler)
|
|
9
|
+
5. [App Store Connect](#5-app-store-connect)
|
|
10
|
+
6. [TestFlight](#6-testflight)
|
|
11
|
+
7. [App Review & Submission](#7-app-review--submission)
|
|
12
|
+
8. [ITMS Error Code Reference](#8-itms-error-code-reference)
|
|
13
|
+
9. [Privacy Manifests (Required 2024+)](#9-privacy-manifests-required-2024)
|
|
14
|
+
10. [In-App Purchase (StoreKit 2)](#10-in-app-purchase-storekit-2)
|
|
15
|
+
11. [Firebase iOS Integration](#11-firebase-ios-integration)
|
|
16
|
+
12. [Google Sign-In iOS](#12-google-sign-in-ios)
|
|
17
|
+
13. [Deep Links & Universal Links](#13-deep-links--universal-links)
|
|
18
|
+
14. [Performance & Crash Reporting](#14-performance--crash-reporting)
|
|
19
|
+
15. [Common Submission Failures & Fixes](#15-common-submission-failures--fixes)
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 1. Xcode & Swift Fundamentals
|
|
24
|
+
|
|
25
|
+
**Xcode versions (2025-2026):**
|
|
26
|
+
|
|
27
|
+
- Xcode 16.x: Required for iOS 18 SDK, Swift 6
|
|
28
|
+
- Xcode 15.x: Last version supporting iOS 12 as deployment target
|
|
29
|
+
- App Store requires builds from the latest Xcode major version (enforced ~spring each year)
|
|
30
|
+
- As of spring 2026: submissions must use Xcode 16+
|
|
31
|
+
|
|
32
|
+
**Swift 6 concurrency model:**
|
|
33
|
+
|
|
34
|
+
- `Sendable` conformance required for types crossing actor boundaries
|
|
35
|
+
- `@MainActor` isolates UI code
|
|
36
|
+
- Structured concurrency: `async/await`, `Task`, `TaskGroup`, `AsyncStream`
|
|
37
|
+
- `actor` keyword for data isolation
|
|
38
|
+
- Migration: enable Swift 6 warnings in Build Settings > Swift Language Version
|
|
39
|
+
|
|
40
|
+
**Minimum deployment targets (2026):**
|
|
41
|
+
|
|
42
|
+
- App Store: iOS 16 minimum recommended (iOS 15 still accepted but shrinking)
|
|
43
|
+
- <project> target: iOS 16+ to get push notification runtime permission APIs
|
|
44
|
+
|
|
45
|
+
**Key Build Settings:**
|
|
46
|
+
|
|
47
|
+
- `PRODUCT_BUNDLE_IDENTIFIER`: com.<project>.shield
|
|
48
|
+
- `MARKETING_VERSION`: 2.3.0
|
|
49
|
+
- `CURRENT_PROJECT_VERSION`: 15 (build number)
|
|
50
|
+
- `DEVELOPMENT_TEAM`: LZT4U6348K
|
|
51
|
+
- `CODE_SIGN_STYLE`: Automatic or Manual
|
|
52
|
+
- `IPHONEOS_DEPLOYMENT_TARGET`: 16.0
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 2. Certificates & Provisioning
|
|
57
|
+
|
|
58
|
+
**Certificate types:**
|
|
59
|
+
| Type | Purpose | Expiry |
|
|
60
|
+
|------|---------|--------|
|
|
61
|
+
| Apple Development | Local device testing | 1 year |
|
|
62
|
+
| Apple Distribution | App Store + Ad Hoc | 1 year |
|
|
63
|
+
| Apple Push Services | APNs (legacy) | 1 year |
|
|
64
|
+
| APNs Auth Key (.p8) | APNs (token-based) | **Never expires** |
|
|
65
|
+
|
|
66
|
+
**Always use .p8 APNs auth key** — one key works for all apps in your account, never expires, no rotation needed.
|
|
67
|
+
|
|
68
|
+
**Provisioning profiles:**
|
|
69
|
+
| Type | Use case |
|
|
70
|
+
|------|---------|
|
|
71
|
+
| iOS App Development | Debug builds on registered devices |
|
|
72
|
+
| Ad Hoc | Distribution to specific UDIDs |
|
|
73
|
+
| App Store | App Store / TestFlight distribution |
|
|
74
|
+
| Enterprise | In-house distribution |
|
|
75
|
+
|
|
76
|
+
**Provisioning profile contains:** App ID + certificates + device UDIDs (not for App Store type) + entitlements
|
|
77
|
+
|
|
78
|
+
**App ID capabilities that affect provisioning:**
|
|
79
|
+
|
|
80
|
+
- Push Notifications → must be enabled in App ID
|
|
81
|
+
- Associated Domains → for Universal Links
|
|
82
|
+
- Sign in with Apple → requires entitlement
|
|
83
|
+
- In-App Purchase → requires App ID config
|
|
84
|
+
- Background Modes → enabled in capabilities
|
|
85
|
+
|
|
86
|
+
**Manual signing (EAS typically handles this):**
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
Keychain Access → Certificate Assistant → Request Certificate from CA
|
|
90
|
+
Upload CSR to developer.apple.com → Download .cer → Install in Keychain
|
|
91
|
+
Create App ID → Create Provisioning Profile → Download + install
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Automatic signing:** Xcode manages everything. Fine for development. EAS Build manages production signing for CI/CD.
|
|
95
|
+
|
|
96
|
+
**Certificates expiry:** Check at developer.apple.com/account/resources/certificates/list
|
|
97
|
+
Renewing a certificate does NOT invalidate existing signed builds.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## 3. APNs (Push Notifications)
|
|
102
|
+
|
|
103
|
+
**Token-based authentication (.p8) — ALWAYS use this:**
|
|
104
|
+
|
|
105
|
+
- Key ID: `48BS2XTSL2` (<project>)
|
|
106
|
+
- Team ID: `LZT4U6348K`
|
|
107
|
+
- Key file: `AuthKey_48BS2XTSL2.p8` — **back this up, can only download once**
|
|
108
|
+
- Bundle ID for topic: `com.<project>.shield`
|
|
109
|
+
- Works for both Sandbox (development) and Production — same key
|
|
110
|
+
|
|
111
|
+
**APNs environments:**
|
|
112
|
+
|
|
113
|
+
- **Sandbox:** Development builds, TestFlight with development profile
|
|
114
|
+
- **Production:** App Store builds, TestFlight with distribution profile
|
|
115
|
+
- Firebase abstracts this — upload the .p8 key once and Firebase handles routing
|
|
116
|
+
|
|
117
|
+
**Upload .p8 to Firebase:**
|
|
118
|
+
|
|
119
|
+
1. Firebase Console → Project Settings → Cloud Messaging → iOS app
|
|
120
|
+
2. Upload APNs Authentication Key
|
|
121
|
+
3. Enter Key ID: 48BS2XTSL2 and Team ID: LZT4U6348K
|
|
122
|
+
|
|
123
|
+
**FCM token registration (React Native/Expo):**
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
import messaging from "@react-native-firebase/messaging";
|
|
127
|
+
|
|
128
|
+
// Request permission (iOS 13+, required)
|
|
129
|
+
const authStatus = await messaging().requestPermission();
|
|
130
|
+
const enabled =
|
|
131
|
+
authStatus === messaging.AuthorizationStatus.AUTHORIZED ||
|
|
132
|
+
authStatus === messaging.AuthorizationStatus.PROVISIONAL;
|
|
133
|
+
|
|
134
|
+
// Get FCM token
|
|
135
|
+
const fcmToken = await messaging().getToken();
|
|
136
|
+
// Send fcmToken to your backend → store in user record
|
|
137
|
+
|
|
138
|
+
// Handle background messages
|
|
139
|
+
messaging().setBackgroundMessageHandler(async (remoteMessage) => {
|
|
140
|
+
// Process notification
|
|
141
|
+
});
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**Push notification payload for challenge (<project> ACH):**
|
|
145
|
+
|
|
146
|
+
```json
|
|
147
|
+
{
|
|
148
|
+
"notification": {
|
|
149
|
+
"title": "ACH Transfer Challenge",
|
|
150
|
+
"body": "Tap the matching number to approve"
|
|
151
|
+
},
|
|
152
|
+
"data": {
|
|
153
|
+
"type": "ach_challenge",
|
|
154
|
+
"challengeId": "uuid",
|
|
155
|
+
"options": ["3", "7", "9"],
|
|
156
|
+
"expiresAt": "ISO timestamp"
|
|
157
|
+
},
|
|
158
|
+
"apns": {
|
|
159
|
+
"payload": {
|
|
160
|
+
"aps": {
|
|
161
|
+
"alert": { "title": "...", "body": "..." },
|
|
162
|
+
"sound": "default",
|
|
163
|
+
"badge": 1,
|
|
164
|
+
"category": "ACH_CHALLENGE",
|
|
165
|
+
"content-available": 1
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
**iOS 16+ push notification permission:**
|
|
173
|
+
|
|
174
|
+
```swift
|
|
175
|
+
UNUserNotificationCenter.current().requestAuthorization(
|
|
176
|
+
options: [.alert, .sound, .badge]) { granted, error in }
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## 4. Background Modes & BGTaskScheduler
|
|
182
|
+
|
|
183
|
+
**Info.plist background modes (Expo: ios.infoPlist.UIBackgroundModes in app.json):**
|
|
184
|
+
|
|
185
|
+
```json
|
|
186
|
+
"UIBackgroundModes": ["fetch", "processing", "remote-notification"]
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
- `fetch`: legacy background fetch (iOS 13+ deprecated in favor of BGAppRefreshTask)
|
|
190
|
+
- `processing`: BGProcessingTask for longer background work
|
|
191
|
+
- `remote-notification`: silent push to trigger background fetch
|
|
192
|
+
|
|
193
|
+
**BGTaskSchedulerPermittedIdentifiers (CRITICAL — causes App Store rejection if missing):**
|
|
194
|
+
|
|
195
|
+
```json
|
|
196
|
+
"BGTaskSchedulerPermittedIdentifiers": ["com.<project>.shield.refresh"]
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
This must exactly match what your app registers at runtime.
|
|
200
|
+
|
|
201
|
+
**In Expo app.json:**
|
|
202
|
+
|
|
203
|
+
```json
|
|
204
|
+
{
|
|
205
|
+
"expo": {
|
|
206
|
+
"ios": {
|
|
207
|
+
"infoPlist": {
|
|
208
|
+
"UIBackgroundModes": ["fetch", "processing", "remote-notification"],
|
|
209
|
+
"BGTaskSchedulerPermittedIdentifiers": ["com.<project>.shield.refresh"]
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
**Registering tasks in Swift/React Native:**
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
// expo-background-fetch or expo-task-manager
|
|
220
|
+
import * as TaskManager from "expo-task-manager";
|
|
221
|
+
import * as BackgroundFetch from "expo-background-fetch";
|
|
222
|
+
|
|
223
|
+
const TASK_NAME = "com.<project>.shield.refresh";
|
|
224
|
+
|
|
225
|
+
TaskManager.defineTask(TASK_NAME, async () => {
|
|
226
|
+
// Do background work
|
|
227
|
+
return BackgroundFetch.BackgroundFetchResult.NewData;
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
await BackgroundFetch.registerTaskAsync(TASK_NAME, {
|
|
231
|
+
minimumInterval: 15 * 60, // 15 minutes minimum
|
|
232
|
+
stopOnTerminate: false,
|
|
233
|
+
startOnBoot: true,
|
|
234
|
+
});
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
**Rules:**
|
|
238
|
+
|
|
239
|
+
- iOS gives ~30 seconds for background fetch tasks
|
|
240
|
+
- iOS gives up to several minutes for processing tasks (device plugged in + on Wi-Fi)
|
|
241
|
+
- Background execution is throttled by iOS based on user app usage patterns
|
|
242
|
+
- Never guaranteed to run at exact scheduled time
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## 5. App Store Connect
|
|
247
|
+
|
|
248
|
+
**URL:** https://appstoreconnect.apple.com
|
|
249
|
+
**Account:** <email>
|
|
250
|
+
**App:** <project> Shield · App ID: 6762309517
|
|
251
|
+
**Bundle ID:** com.<project>.shield
|
|
252
|
+
|
|
253
|
+
**App metadata required for submission:**
|
|
254
|
+
|
|
255
|
+
- App name (max 30 chars): "<project> Shield"
|
|
256
|
+
- Subtitle (max 30 chars)
|
|
257
|
+
- Keywords (max 100 chars)
|
|
258
|
+
- Description (max 4000 chars)
|
|
259
|
+
- What's New (max 4000 chars)
|
|
260
|
+
- Screenshots: 6.5" (iPhone 14 Pro Max), 5.5" (iPhone 8 Plus), 12.9" iPad Pro
|
|
261
|
+
- App icon: 1024×1024 PNG (no alpha channel, no rounded corners)
|
|
262
|
+
|
|
263
|
+
**App Store Connect API (v3):**
|
|
264
|
+
|
|
265
|
+
- Used for automation: upload builds, manage TestFlight, read review status
|
|
266
|
+
- API keys at: App Store Connect → Users and Access → Keys
|
|
267
|
+
- Key types: App Manager, Developer, Marketing
|
|
268
|
+
- Used by EAS Submit to automate submissions
|
|
269
|
+
|
|
270
|
+
**Version states:**
|
|
271
|
+
|
|
272
|
+
```
|
|
273
|
+
Prepare for Submission → Waiting for Review → In Review →
|
|
274
|
+
→ Approved → Ready for Sale
|
|
275
|
+
→ Rejected → Developer Action Required → (fix) → Resubmit
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
**App Review timeline:**
|
|
279
|
+
|
|
280
|
+
- Standard: 24-48 hours (most common)
|
|
281
|
+
- Expedited: ~24 hours — request at developer.apple.com/contact/app-store/
|
|
282
|
+
- Expedited criteria: critical bug fix, time-sensitive launch event, legal requirement
|
|
283
|
+
|
|
284
|
+
**App information sections:**
|
|
285
|
+
|
|
286
|
+
- Age Rating: must complete questionnaire
|
|
287
|
+
- Privacy Policy URL: required
|
|
288
|
+
- Category: Utilities (<project>)
|
|
289
|
+
- Content rights declaration required
|
|
290
|
+
- Advertising identifier (IDFA) declaration required
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## 6. TestFlight
|
|
295
|
+
|
|
296
|
+
**Internal testing:**
|
|
297
|
+
|
|
298
|
+
- Up to 100 testers
|
|
299
|
+
- No App Review required — available within minutes of upload
|
|
300
|
+
- Must be App Store Connect users (Developer, Admin, etc.)
|
|
301
|
+
- Builds available for 90 days
|
|
302
|
+
|
|
303
|
+
**External testing:**
|
|
304
|
+
|
|
305
|
+
- Up to 10,000 testers
|
|
306
|
+
- Requires App Review (usually same day for TestFlight-specific review)
|
|
307
|
+
- Testers invited by email or public link
|
|
308
|
+
- Builds available for 90 days
|
|
309
|
+
|
|
310
|
+
**TestFlight vs Production APNs:**
|
|
311
|
+
|
|
312
|
+
- TestFlight builds use **production** APNs environment if signed with distribution cert
|
|
313
|
+
- TestFlight builds use **sandbox** APNs environment if signed with development cert
|
|
314
|
+
- EAS production builds → distribution cert → production APNs → correct
|
|
315
|
+
|
|
316
|
+
**Common TestFlight issues:**
|
|
317
|
+
|
|
318
|
+
- "Processing" stuck: usually takes 5-30 min for large builds; wait before panicking
|
|
319
|
+
- Tester not receiving email: check spam; try TestFlight app → Redeem link
|
|
320
|
+
- Build not appearing: check if build is in "Testing" state (not just uploaded)
|
|
321
|
+
- FCM not working in TestFlight: verify APNs key is uploaded to Firebase, verify production environment
|
|
322
|
+
|
|
323
|
+
**Build expiry:** 90 days from upload. Plan submissions around this.
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## 7. App Review & Submission
|
|
328
|
+
|
|
329
|
+
**Pre-submission checklist:**
|
|
330
|
+
|
|
331
|
+
- [ ] All screenshots match current UI (not outdated)
|
|
332
|
+
- [ ] Privacy policy URL live and accessible
|
|
333
|
+
- [ ] Privacy manifest (PrivacyInfo.xcprivacy) included
|
|
334
|
+
- [ ] No placeholder content, lorem ipsum, or "coming soon" features
|
|
335
|
+
- [ ] All features in screenshots work without login (or provide demo credentials in review notes)
|
|
336
|
+
- [ ] App doesn't crash on first launch
|
|
337
|
+
- [ ] If login required: provide valid test account credentials in the review notes
|
|
338
|
+
- [ ] In-app purchase prices visible (if applicable)
|
|
339
|
+
- [ ] No references to competitor platforms (Android, Google Play) in UI
|
|
340
|
+
- [ ] No external payment links that bypass App Store (Apple rule)
|
|
341
|
+
- [ ] Location, camera, microphone permissions have clear usage descriptions in Info.plist
|
|
342
|
+
|
|
343
|
+
**Required NSUsageDescription keys (Info.plist):**
|
|
344
|
+
|
|
345
|
+
```xml
|
|
346
|
+
<key>NSCameraUsageDescription</key>
|
|
347
|
+
<string>Used to scan QR codes for UPI payments</string>
|
|
348
|
+
<key>NSFaceIDUsageDescription</key>
|
|
349
|
+
<string>Used to authenticate your identity securely</string>
|
|
350
|
+
<key>NSContactsUsageDescription</key>
|
|
351
|
+
<string>Used to quickly find contacts for payments</string>
|
|
352
|
+
<key>NSLocationWhenInUseUsageDescription</key>
|
|
353
|
+
<string>Used to verify transaction location</string>
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
**Review notes format (App Store Connect → App Review Information):**
|
|
357
|
+
|
|
358
|
+
```
|
|
359
|
+
Demo Account:
|
|
360
|
+
Email: <email>
|
|
361
|
+
Password: TestPass123
|
|
362
|
+
|
|
363
|
+
Notes:
|
|
364
|
+
- App requires biometric authentication. On simulator, use Touch ID/Face ID simulation.
|
|
365
|
+
- ACH challenge flow requires backend; tap any number in challenge screen for demo.
|
|
366
|
+
- Region selector should be set to "India" to access UPI features.
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
**Guideline references for <project>:**
|
|
370
|
+
|
|
371
|
+
- 2.1 App Completeness — all features must work
|
|
372
|
+
- 4.8 Sign in with Apple required if other social login is offered (you have Google Sign-In)
|
|
373
|
+
- 5.1.1 Data Collection — must declare all data collected
|
|
374
|
+
- 5.1.2 Data Use — must use data as described
|
|
375
|
+
|
|
376
|
+
**Sign in with Apple requirement:**
|
|
377
|
+
If your app offers third-party login (Google), Apple requires you also offer Sign in with Apple.
|
|
378
|
+
<project> app.json has `usesAppleSignIn: true` — implementation must be present in the app.
|
|
379
|
+
|
|
380
|
+
---
|
|
381
|
+
|
|
382
|
+
## 8. ITMS Error Code Reference
|
|
383
|
+
|
|
384
|
+
| Code | Meaning | Fix |
|
|
385
|
+
| ---------- | ------------------------------------ | ------------------------------------------------------ |
|
|
386
|
+
| ITMS-90035 | Invalid signature | Rebuild with correct provisioning profile |
|
|
387
|
+
| ITMS-90036 | Invalid code signing | Re-sign with distribution certificate |
|
|
388
|
+
| ITMS-90060 | Imported Swift version mismatch | Clean build, ensure correct Swift toolchain |
|
|
389
|
+
| ITMS-90062 | Invalid bundle structure | Check framework embedding settings |
|
|
390
|
+
| ITMS-90076 | Invalid library path | Remove or embed linked libraries correctly |
|
|
391
|
+
| ITMS-90085 | Unsupported architectures | Ensure lipo creates universal binary or arm64 only |
|
|
392
|
+
| ITMS-90087 | Framework missing simulator slice | Strip simulator slices from release build |
|
|
393
|
+
| ITMS-90096 | Binary contains invalid API usage | Remove private/restricted API references |
|
|
394
|
+
| ITMS-90101 | Disallowed entitlements | Remove entitlements not in provisioning profile |
|
|
395
|
+
| ITMS-90125 | Missing privacy usage strings | Add NSUsageDescription to Info.plist |
|
|
396
|
+
| ITMS-90148 | Missing required icon | Ensure 1024×1024 icon, no alpha |
|
|
397
|
+
| ITMS-90161 | Duplicate symbols | Check third-party SDKs for conflicts |
|
|
398
|
+
| ITMS-90168 | Invalid architecture | Ensure arm64 only for App Store (no x86_64) |
|
|
399
|
+
| ITMS-90206 | Unsupported WatchKit app | Remove or fix Watch extension |
|
|
400
|
+
| ITMS-90209 | Deployment target too low | Raise minimum iOS version in build settings |
|
|
401
|
+
| ITMS-90338 | Non-public selectors | Remove Objective-C private API usage |
|
|
402
|
+
| ITMS-90503 | Invalid bundle executable | Bundle name mismatch |
|
|
403
|
+
| ITMS-90506 | Icon contains alpha | Remove alpha channel from app icon PNG |
|
|
404
|
+
| ITMS-90562 | Missing purpose string | Add privacy permission strings |
|
|
405
|
+
| ITMS-90683 | Missing push entitlement | Enable Push Notifications in App ID |
|
|
406
|
+
| ITMS-90704 | Missing required device capabilities | Check UIRequiredDeviceCapabilities |
|
|
407
|
+
| ITMS-91053 | Missing privacy manifest | Add PrivacyInfo.xcprivacy to app bundle |
|
|
408
|
+
| ITMS-91056 | Required reason API missing | Declare API usage in privacy manifest |
|
|
409
|
+
| ITMS-91057 | Privacy manifest SDK mismatch | Update third-party SDKs that require privacy manifests |
|
|
410
|
+
|
|
411
|
+
**BGTaskScheduler-specific rejection (Guideline 2.5.4):**
|
|
412
|
+
|
|
413
|
+
> "Your app uses background task scheduling but declares identifiers not present in the app binary."
|
|
414
|
+
> **Fix:** Ensure `BGTaskSchedulerPermittedIdentifiers` in Info.plist exactly matches identifiers registered with `BGTaskScheduler.register(forTaskWithIdentifier:)` in code.
|
|
415
|
+
|
|
416
|
+
---
|
|
417
|
+
|
|
418
|
+
## 9. Privacy Manifests (Required 2024+)
|
|
419
|
+
|
|
420
|
+
**Required since May 1, 2024** for all new app submissions and updates.
|
|
421
|
+
Missing `PrivacyInfo.xcprivacy` → ITMS-91053 rejection.
|
|
422
|
+
|
|
423
|
+
**File location:** Add to app target (not just as a resource, but as a source file):
|
|
424
|
+
`YourApp/PrivacyInfo.xcprivacy`
|
|
425
|
+
|
|
426
|
+
**Content structure:**
|
|
427
|
+
|
|
428
|
+
```xml
|
|
429
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
430
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
|
|
431
|
+
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
432
|
+
<plist version="1.0">
|
|
433
|
+
<dict>
|
|
434
|
+
<key>NSPrivacyTracking</key>
|
|
435
|
+
<false/>
|
|
436
|
+
<key>NSPrivacyTrackingDomains</key>
|
|
437
|
+
<array/>
|
|
438
|
+
<key>NSPrivacyCollectedDataTypes</key>
|
|
439
|
+
<array>
|
|
440
|
+
<dict>
|
|
441
|
+
<key>NSPrivacyCollectedDataType</key>
|
|
442
|
+
<string>NSPrivacyCollectedDataTypeEmailAddress</string>
|
|
443
|
+
<key>NSPrivacyCollectedDataTypeLinked</key>
|
|
444
|
+
<true/>
|
|
445
|
+
<key>NSPrivacyCollectedDataTypeTracking</key>
|
|
446
|
+
<false/>
|
|
447
|
+
<key>NSPrivacyCollectedDataTypePurposes</key>
|
|
448
|
+
<array>
|
|
449
|
+
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
|
|
450
|
+
</array>
|
|
451
|
+
</dict>
|
|
452
|
+
</array>
|
|
453
|
+
<key>NSPrivacyAccessedAPITypes</key>
|
|
454
|
+
<array>
|
|
455
|
+
<dict>
|
|
456
|
+
<key>NSPrivacyAccessedAPIType</key>
|
|
457
|
+
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
|
|
458
|
+
<key>NSPrivacyAccessedAPITypeReasons</key>
|
|
459
|
+
<array><string>C617.1</string></array>
|
|
460
|
+
</dict>
|
|
461
|
+
<dict>
|
|
462
|
+
<key>NSPrivacyAccessedAPIType</key>
|
|
463
|
+
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
|
|
464
|
+
<key>NSPrivacyAccessedAPITypeReasons</key>
|
|
465
|
+
<array><string>35F9.1</string></array>
|
|
466
|
+
</dict>
|
|
467
|
+
<dict>
|
|
468
|
+
<key>NSPrivacyAccessedAPIType</key>
|
|
469
|
+
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
|
|
470
|
+
<key>NSPrivacyAccessedAPITypeReasons</key>
|
|
471
|
+
<array><string>CA92.1</string></array>
|
|
472
|
+
</dict>
|
|
473
|
+
</array>
|
|
474
|
+
</dict>
|
|
475
|
+
</plist>
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
**Required reason API categories (declare if your app or any SDK uses these):**
|
|
479
|
+
|
|
480
|
+
- `NSPrivacyAccessedAPICategoryFileTimestamp` — file timestamps
|
|
481
|
+
- `NSPrivacyAccessedAPICategorySystemBootTime` — `systemUptime`, `mach_absolute_time()`
|
|
482
|
+
- `NSPrivacyAccessedAPICategoryDiskSpace` — `volumeAvailableCapacityForImportantUsage`
|
|
483
|
+
- `NSPrivacyAccessedAPICategoryActiveKeyboards` — keyboard list
|
|
484
|
+
- `NSPrivacyAccessedAPICategoryUserDefaults` — `NSUserDefaults`
|
|
485
|
+
|
|
486
|
+
**SDK privacy manifests:** Firebase, Adjust, Amplitude, etc. all need their own privacy manifests.
|
|
487
|
+
If using CocoaPods: `pod install` aggregates them automatically in Xcode 15+.
|
|
488
|
+
In Expo: handled by the native SDK packages — keep dependencies updated.
|
|
489
|
+
|
|
490
|
+
---
|
|
491
|
+
|
|
492
|
+
## 10. In-App Purchase (StoreKit 2)
|
|
493
|
+
|
|
494
|
+
**StoreKit 2 (Swift, iOS 15+) — modern API:**
|
|
495
|
+
|
|
496
|
+
```swift
|
|
497
|
+
import StoreKit
|
|
498
|
+
|
|
499
|
+
// Fetch products
|
|
500
|
+
let products = try await Product.products(for: ["com.<project>.shield.annual"])
|
|
501
|
+
|
|
502
|
+
// Purchase
|
|
503
|
+
let result = try await product.purchase()
|
|
504
|
+
switch result {
|
|
505
|
+
case .success(let verification):
|
|
506
|
+
let transaction = try checkVerified(verification)
|
|
507
|
+
await transaction.finish()
|
|
508
|
+
case .pending: break // waiting for approval
|
|
509
|
+
case .userCancelled: break
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
// Restore purchases
|
|
513
|
+
for await result in Transaction.currentEntitlements {
|
|
514
|
+
// handle restored purchases
|
|
515
|
+
}
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
**Subscription types:**
|
|
519
|
+
|
|
520
|
+
- Auto-renewable subscriptions → requires a subscription group
|
|
521
|
+
- Non-renewing subscriptions → one-time period
|
|
522
|
+
- Consumables → one-time purchase, can buy multiple times
|
|
523
|
+
- Non-consumables → buy once
|
|
524
|
+
|
|
525
|
+
**App Store Connect setup:**
|
|
526
|
+
|
|
527
|
+
1. Features → In-App Purchases → Create
|
|
528
|
+
2. Set price tier, availability, and localized display name
|
|
529
|
+
3. Submit for App Review (IAP reviewed separately from app)
|
|
530
|
+
|
|
531
|
+
**Testing:**
|
|
532
|
+
|
|
533
|
+
- Sandbox environment: use Apple ID sandbox testers (App Store Connect → Sandbox Testers)
|
|
534
|
+
- Sandbox subscriptions auto-renew much faster (1 month → 5 minutes)
|
|
535
|
+
- StoreKit Testing in Xcode: use `.storekit` configuration file (no Apple ID needed)
|
|
536
|
+
|
|
537
|
+
---
|
|
538
|
+
|
|
539
|
+
## 11. Firebase iOS Integration
|
|
540
|
+
|
|
541
|
+
**<project> Firebase:**
|
|
542
|
+
|
|
543
|
+
- Project: <gcp-project>-a98aa
|
|
544
|
+
- iOS App ID: `1:929418470411:ios:99e76d550aaf4eff1d130e`
|
|
545
|
+
- GoogleService-Info.plist location: `/c~/<project>-shield/GoogleService-Info.plist`
|
|
546
|
+
|
|
547
|
+
**GoogleService-Info.plist required fields:**
|
|
548
|
+
|
|
549
|
+
```xml
|
|
550
|
+
CLIENT_ID ← Used for Google Sign-In
|
|
551
|
+
REVERSED_CLIENT_ID ← Must be in app.json as URL scheme
|
|
552
|
+
BUNDLE_ID ← Must match com.<project>.shield
|
|
553
|
+
GOOGLE_APP_ID ← Firebase iOS App ID
|
|
554
|
+
GCM_SENDER_ID ← For FCM (= project number 929418470411)
|
|
555
|
+
PROJECT_ID ← <gcp-project>-a98aa
|
|
556
|
+
API_KEY ← Firebase API key
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
**URL scheme requirement (REVERSED_CLIENT_ID):**
|
|
560
|
+
In app.json:
|
|
561
|
+
|
|
562
|
+
```json
|
|
563
|
+
{
|
|
564
|
+
"expo": {
|
|
565
|
+
"ios": {
|
|
566
|
+
"infoPlist": {
|
|
567
|
+
"CFBundleURLTypes": [
|
|
568
|
+
{
|
|
569
|
+
"CFBundleURLSchemes": ["com.googleusercontent.apps.929418470411-XXXXX"]
|
|
570
|
+
}
|
|
571
|
+
]
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
The REVERSED_CLIENT_ID is found in GoogleService-Info.plist.
|
|
579
|
+
**Without this, Google Sign-In silently fails on iOS.**
|
|
580
|
+
|
|
581
|
+
**FCM for iOS flow:**
|
|
582
|
+
|
|
583
|
+
1. App launches → registers for remote notifications
|
|
584
|
+
2. iOS returns APNs device token
|
|
585
|
+
3. Firebase swizzles and exchanges APNs token for FCM token
|
|
586
|
+
4. App receives FCM token → send to backend
|
|
587
|
+
5. Backend POSTs to FCM v1 API → Firebase routes to APNs → delivered
|
|
588
|
+
|
|
589
|
+
---
|
|
590
|
+
|
|
591
|
+
## 12. Google Sign-In iOS
|
|
592
|
+
|
|
593
|
+
**OAuth flow on iOS:**
|
|
594
|
+
|
|
595
|
+
1. User taps "Sign in with Google"
|
|
596
|
+
2. App presents Google auth in ASWebAuthenticationSession (in-app browser)
|
|
597
|
+
3. Google redirects to `REVERSED_CLIENT_ID://` URL scheme
|
|
598
|
+
4. App captures redirect → exchanges code for tokens
|
|
599
|
+
5. Firebase authenticates with Google credential
|
|
600
|
+
|
|
601
|
+
**Configuration in app.json for Expo:**
|
|
602
|
+
|
|
603
|
+
```json
|
|
604
|
+
{
|
|
605
|
+
"expo": {
|
|
606
|
+
"plugins": [
|
|
607
|
+
[
|
|
608
|
+
"@react-native-google-signin/google-signin",
|
|
609
|
+
{
|
|
610
|
+
"iosUrlScheme": "com.googleusercontent.apps.929418470411-XXXXX"
|
|
611
|
+
}
|
|
612
|
+
]
|
|
613
|
+
]
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
**iOS OAuth Client ID:** Found in Firebase Console → Project Settings → Your apps → iOS app
|
|
619
|
+
Different from the Android OAuth Client ID.
|
|
620
|
+
|
|
621
|
+
**Common iOS Google Sign-In failures:**
|
|
622
|
+
|
|
623
|
+
- `Error 400: redirect_uri_mismatch` → REVERSED_CLIENT_ID URL scheme not registered
|
|
624
|
+
- `Sign in was cancelled` → User dismissed; also can be incorrect URL scheme
|
|
625
|
+
- Silent failure after redirect → Missing CFBundleURLTypes in Info.plist
|
|
626
|
+
- Works in debug but not production → Wrong OAuth client ID for production certificate
|
|
627
|
+
|
|
628
|
+
---
|
|
629
|
+
|
|
630
|
+
## 13. Deep Links & Universal Links
|
|
631
|
+
|
|
632
|
+
**Universal Links (recommended for iOS 13+):**
|
|
633
|
+
|
|
634
|
+
- Requires apple-app-site-association (AASA) file at `https://yourdomain.com/.well-known/apple-app-site-association`
|
|
635
|
+
- App must have Associated Domains entitlement: `applinks:<project>.com`
|
|
636
|
+
- No browser redirect — deep link opens app directly
|
|
637
|
+
|
|
638
|
+
**AASA file format:**
|
|
639
|
+
|
|
640
|
+
```json
|
|
641
|
+
{
|
|
642
|
+
"applinks": {
|
|
643
|
+
"details": [
|
|
644
|
+
{
|
|
645
|
+
"appIDs": ["LZT4U6348K.com.<project>.shield"],
|
|
646
|
+
"components": [{ "/": "/ach/*", "comment": "ACH challenge links" }, { "/": "/guardian/*" }]
|
|
647
|
+
}
|
|
648
|
+
]
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
```
|
|
652
|
+
|
|
653
|
+
**Custom URL scheme (simpler, but less secure):**
|
|
654
|
+
`<project>://path?param=value`
|
|
655
|
+
Register in app.json:
|
|
656
|
+
|
|
657
|
+
```json
|
|
658
|
+
{ "expo": { "scheme": "<project>" } }
|
|
659
|
+
```
|
|
660
|
+
|
|
661
|
+
---
|
|
662
|
+
|
|
663
|
+
## 14. Performance & Crash Reporting
|
|
664
|
+
|
|
665
|
+
**Firebase Crashlytics (Expo):**
|
|
666
|
+
|
|
667
|
+
- `@react-native-firebase/crashlytics`
|
|
668
|
+
- Automatically captures crashes and non-fatal errors
|
|
669
|
+
- Custom logs: `crashlytics().log('ACH challenge presented')`
|
|
670
|
+
- User identification: `crashlytics().setUserId(userId)`
|
|
671
|
+
- View in Firebase Console → Crashlytics
|
|
672
|
+
|
|
673
|
+
**MetricKit (iOS 13+, native):**
|
|
674
|
+
|
|
675
|
+
- Provides hangs, crash logs, disk/battery reports
|
|
676
|
+
- Delivered to app once per 24h
|
|
677
|
+
- Useful for detecting background task failures
|
|
678
|
+
|
|
679
|
+
**React Native Performance:**
|
|
680
|
+
|
|
681
|
+
- Use Hermes engine (default in Expo SDK 48+): faster startup, lower memory
|
|
682
|
+
- Avoid `setState` in loops — batch updates
|
|
683
|
+
- Use `useMemo`/`useCallback` to prevent re-renders
|
|
684
|
+
- FlatList vs ScrollView: always FlatList for long lists (virtualized)
|
|
685
|
+
- Image caching: `expo-image` (LazyLoad, caching, progressive loading)
|
|
686
|
+
- Bundle size: `npx expo export --dump-assetmap` to audit
|
|
687
|
+
|
|
688
|
+
---
|
|
689
|
+
|
|
690
|
+
## 15. Common Submission Failures & Fixes
|
|
691
|
+
|
|
692
|
+
**"Missing Compliance" (Export compliance):**
|
|
693
|
+
Add to app.json:
|
|
694
|
+
|
|
695
|
+
```json
|
|
696
|
+
{ "expo": { "ios": { "infoPlist": { "ITSAppUsesNonExemptEncryption": false } } } }
|
|
697
|
+
```
|
|
698
|
+
|
|
699
|
+
**"Invalid binary" — simulator slice included:**
|
|
700
|
+
EAS Build automatically strips simulator slices for production builds.
|
|
701
|
+
If building locally: ensure `EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64` in build settings.
|
|
702
|
+
|
|
703
|
+
**"App uses undeclared API" (ITMS-90096):**
|
|
704
|
+
Search codebase for `UIDevice`, `system_profiler` calls, or private UIKit methods.
|
|
705
|
+
Firebase SDKs can trigger this — update to latest Firebase iOS SDK.
|
|
706
|
+
|
|
707
|
+
**BGTaskScheduler rejection (Guideline 2.5.4):**
|
|
708
|
+
Identifiers in `BGTaskSchedulerPermittedIdentifiers` must exactly match
|
|
709
|
+
what is passed to `BGTaskScheduler.register(forTaskWithIdentifier:)`.
|
|
710
|
+
No extra identifiers allowed.
|
|
711
|
+
|
|
712
|
+
**"Sign in with Apple required" rejection:**
|
|
713
|
+
Add Sign in with Apple as an option if Google Sign-In exists.
|
|
714
|
+
Expo: `expo-apple-authentication` package.
|
|
715
|
+
|
|
716
|
+
**Privacy manifest missing (ITMS-91053):**
|
|
717
|
+
Add PrivacyInfo.xcprivacy to Xcode target. In Expo: use a config plugin to inject it.
|
|
718
|
+
|
|
719
|
+
**"App references non-public symbols" (ITMS-90338):**
|
|
720
|
+
Usually from a third-party SDK. Update all native dependencies.
|
|
721
|
+
|
|
722
|
+
**TestFlight build in "Processing" state for >1 hour:**
|
|
723
|
+
|
|
724
|
+
- Usually a backend Apple issue; wait
|
|
725
|
+
- Check developer.apple.com/system-status/ for incidents
|
|
726
|
+
- If >3 hours, delete and re-upload
|
|
727
|
+
|
|
728
|
+
**App Review rejection: "Unable to reach backend":**
|
|
729
|
+
Ensure backend is live and accessible globally.
|
|
730
|
+
Check Cloud Run allows unauthenticated access on public API routes.
|
|
731
|
+
Provide working test credentials in review notes.
|
|
732
|
+
|
|
733
|
+
**Notarization-related issues (macOS builds only — not relevant for iOS):**
|
|
734
|
+
N/A for <project> Shield.
|