@olegkoval/agent-skills 1.12.0 โ†’ 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/.claude-plugin/plugin.json +6 -2
  2. package/.cursor-plugin/index.json +15 -0
  3. package/.kiro/steering/apple-store-submit.md +145 -0
  4. package/.kiro/steering/cloudflare-block-countries.md +0 -1
  5. package/.kiro/steering/docs-index-keeper.md +0 -1
  6. package/.kiro/steering/fill-music-player.md +0 -1
  7. package/.kiro/steering/gallery.md +0 -1
  8. package/.kiro/steering/gh-cli.md +0 -1
  9. package/.kiro/steering/git-commit.md +0 -1
  10. package/.kiro/steering/macos-menubar-app.md +225 -0
  11. package/.kiro/steering/mvp-oneshot.md +164 -0
  12. package/.kiro/steering/obsidian-pr-sync.md +0 -1
  13. package/.kiro/steering/obsidian-task-rollover.md +0 -1
  14. package/.kiro/steering/open-source-publisher.md +0 -1
  15. package/.kiro/steering/product-builder.md +0 -1
  16. package/.kiro/steering/promptctl.md +0 -1
  17. package/.kiro/steering/review-past-performance.md +0 -1
  18. package/.kiro/steering/search-console-indexing-audit.md +0 -1
  19. package/.kiro/steering/semantic-release-beta.md +0 -1
  20. package/.kiro/steering/starter-rules.md +0 -1
  21. package/.kiro/steering/viral-launch.md +0 -1
  22. package/.windsurf/rules/apple-store-submit.md +144 -0
  23. package/.windsurf/rules/cloudflare-block-countries.md +0 -1
  24. package/.windsurf/rules/docs-index-keeper.md +0 -1
  25. package/.windsurf/rules/fill-music-player.md +0 -1
  26. package/.windsurf/rules/gallery.md +0 -1
  27. package/.windsurf/rules/gh-cli.md +0 -1
  28. package/.windsurf/rules/git-commit.md +0 -1
  29. package/.windsurf/rules/macos-menubar-app.md +224 -0
  30. package/.windsurf/rules/mvp-oneshot.md +163 -0
  31. package/.windsurf/rules/obsidian-pr-sync.md +0 -1
  32. package/.windsurf/rules/obsidian-task-rollover.md +0 -1
  33. package/.windsurf/rules/open-source-publisher.md +0 -1
  34. package/.windsurf/rules/product-builder.md +0 -1
  35. package/.windsurf/rules/promptctl.md +0 -1
  36. package/.windsurf/rules/review-past-performance.md +0 -1
  37. package/.windsurf/rules/search-console-indexing-audit.md +0 -1
  38. package/.windsurf/rules/semantic-release-beta.md +0 -1
  39. package/.windsurf/rules/starter-rules.md +0 -1
  40. package/.windsurf/rules/viral-launch.md +0 -1
  41. package/catalog/skills.json +90 -0
  42. package/collections/product-tools.json +1 -1
  43. package/collections/prompt-tools.json +1 -1
  44. package/collections/software-development.json +2 -1
  45. package/package.json +1 -1
  46. package/packages/software-development/apple-store-submit/SKILL.md +157 -0
  47. package/packages/software-development/apple-store-submit/adapters/claude/plugin.json +5 -0
  48. package/packages/software-development/apple-store-submit/adapters/claude/skills/apple-store-submit/SKILL.md +158 -0
  49. package/packages/software-development/apple-store-submit/adapters/codex/README.md +3 -0
  50. package/packages/software-development/apple-store-submit/adapters/cursor/plugin.json +6 -0
  51. package/packages/software-development/apple-store-submit/adapters/cursor/skills/apple-store-submit/SKILL.md +158 -0
  52. package/packages/software-development/apple-store-submit/adapters/kiro/steering/apple-store-submit.md +145 -0
  53. package/packages/software-development/apple-store-submit/adapters/windsurf/rules/apple-store-submit.md +144 -0
  54. package/packages/software-development/macos-menubar-app/SKILL.md +237 -0
  55. package/packages/software-development/macos-menubar-app/adapters/claude/plugin.json +5 -0
  56. package/packages/software-development/macos-menubar-app/adapters/claude/skills/macos-menubar-app/SKILL.md +238 -0
  57. package/packages/software-development/macos-menubar-app/adapters/codex/README.md +3 -0
  58. package/packages/software-development/macos-menubar-app/adapters/cursor/plugin.json +6 -0
  59. package/packages/software-development/macos-menubar-app/adapters/cursor/skills/macos-menubar-app/SKILL.md +238 -0
  60. package/packages/software-development/macos-menubar-app/adapters/kiro/steering/macos-menubar-app.md +225 -0
  61. package/packages/software-development/macos-menubar-app/adapters/windsurf/rules/macos-menubar-app.md +224 -0
  62. package/packages/software-development/mvp-oneshot/LICENSE +21 -0
  63. package/packages/software-development/mvp-oneshot/SKILL.md +175 -0
  64. package/packages/software-development/mvp-oneshot/adapters/claude/plugin.json +5 -0
  65. package/packages/software-development/mvp-oneshot/adapters/claude/skills/mvp-oneshot/SKILL.md +176 -0
  66. package/packages/software-development/mvp-oneshot/adapters/codex/README.md +3 -0
  67. package/packages/software-development/mvp-oneshot/adapters/cursor/plugin.json +6 -0
  68. package/packages/software-development/mvp-oneshot/adapters/cursor/skills/mvp-oneshot/SKILL.md +176 -0
  69. package/packages/software-development/mvp-oneshot/adapters/kiro/steering/mvp-oneshot.md +164 -0
  70. package/packages/software-development/mvp-oneshot/adapters/windsurf/rules/mvp-oneshot.md +163 -0
  71. package/packages/software-development/skill-budget-audit/SKILL.md +145 -0
  72. package/packages/software-development/skill-budget-audit/adapters/claude/plugin.json +5 -0
  73. package/packages/software-development/skill-budget-audit/adapters/claude/skills/skill-budget-audit/SKILL.md +146 -0
  74. package/scripts/build-adapters.sh +11 -9
@@ -4,7 +4,6 @@
4
4
  description: "Self-improvement loop that pulls the last 24h of ICM memories, git history, and skill analytics to detect repeated mistakes, slow workflows, and missing coverage, then proposes 1-3 concrete improvements."
5
5
  ---
6
6
 
7
-
8
7
  # /review-past-performance
9
8
 
10
9
  Self-improvement loop. Analyze recent sessions, find durable patterns, propose fixes.
@@ -4,7 +4,6 @@
4
4
  description: "Analyze Google Search Console Coverage CSV exports and correlate them with sitemap, robots, canonical, redirect, and noindex signals."
5
5
  ---
6
6
 
7
-
8
7
  # search-console-indexing-audit
9
8
 
10
9
  Use this skill to turn Google Search Console Coverage exports into a concrete indexing fix plan.
@@ -4,7 +4,6 @@
4
4
  description: "Set up semantic-release-npm-github-publish with stable main releases and prerelease beta releases on a beta branch."
5
5
  ---
6
6
 
7
-
8
7
  # semantic-release-beta
9
8
 
10
9
  Use this skill when a project needs a reusable beta prerelease workflow with:
@@ -4,7 +4,6 @@
4
4
  description: "Load and enforce hard rules for every oleg-koval/* starter: 300-line files, E2E tests, pre-commit hooks, Vertical Slice architecture, no comments, KISS/DRY/SOLID."
5
5
  ---
6
6
 
7
-
8
7
  # Starter Rules
9
8
 
10
9
  ## Overview
@@ -4,7 +4,6 @@
4
4
  description: "Set up a project repository and launch plan for shareable marketing, public launch readiness, and growth loops."
5
5
  ---
6
6
 
7
-
8
7
  # viral-launch
9
8
 
10
9
  Use this skill when a user wants to launch a project, make a repo marketable, improve discoverability, or build shareable launch assets.
@@ -174,6 +174,30 @@
174
174
  "kiro"
175
175
  ]
176
176
  },
177
+ {
178
+ "name": "mvp-oneshot",
179
+ "lookupName": "olko:mvp-oneshot",
180
+ "category": "software-development",
181
+ "path": "packages/software-development/mvp-oneshot",
182
+ "description": "Turn a rough product idea into a shippable one-week MVP in one pass via a four-role prompt chain: scope a build prompt, ruthlessly trim it, plan the build, and self-review the vertical slice.",
183
+ "tags": [
184
+ "mvp",
185
+ "product",
186
+ "scoping",
187
+ "prompt-chain",
188
+ "planning",
189
+ "startup",
190
+ "oneshot"
191
+ ],
192
+ "adapters": [
193
+ "codex",
194
+ "claude",
195
+ "cursor",
196
+ "copilot",
197
+ "windsurf",
198
+ "kiro"
199
+ ]
200
+ },
177
201
  {
178
202
  "name": "starter-rules",
179
203
  "lookupName": "olko:starter-rules",
@@ -359,6 +383,72 @@
359
383
  "windsurf",
360
384
  "kiro"
361
385
  ]
386
+ },
387
+ {
388
+ "name": "apple-store-submit",
389
+ "lookupName": "olko:apple-store-submit",
390
+ "category": "software-development",
391
+ "path": "packages/software-development/apple-store-submit",
392
+ "description": "Handle Apple App Store rejection emails end-to-end: parse rejection reasons, plan fixes, implement code changes, navigate App Store Connect, and resubmit.",
393
+ "tags": [
394
+ "apple",
395
+ "app-store",
396
+ "ios",
397
+ "macos",
398
+ "xcode",
399
+ "submission",
400
+ "rejection"
401
+ ],
402
+ "adapters": [
403
+ "codex",
404
+ "claude",
405
+ "cursor",
406
+ "copilot",
407
+ "windsurf",
408
+ "kiro"
409
+ ]
410
+ },
411
+ {
412
+ "name": "macos-menubar-app",
413
+ "lookupName": "olko:macos-menubar-app",
414
+ "category": "software-development",
415
+ "path": "packages/software-development/macos-menubar-app",
416
+ "description": "Build a production-quality macOS menubar or notch app in SwiftUI โ€” MenuBarExtra, sandbox entitlements, keyboard shortcuts, sound effects, accessibility permissions, and App Store preparation.",
417
+ "tags": [
418
+ "macos",
419
+ "swiftui",
420
+ "menubar",
421
+ "notch",
422
+ "xcode",
423
+ "apple",
424
+ "sandbox"
425
+ ],
426
+ "adapters": [
427
+ "codex",
428
+ "claude",
429
+ "cursor",
430
+ "copilot",
431
+ "windsurf",
432
+ "kiro"
433
+ ]
434
+ },
435
+ {
436
+ "name": "skill-budget-audit",
437
+ "lookupName": "olko:skill-budget-audit",
438
+ "category": "software-development",
439
+ "path": "packages/software-development/skill-budget-audit",
440
+ "description": "Diagnose and fix Claude Code skill context budget overflow โ€” identify heavy plugin bundles, remove domain-specific ones, and restore skill discoverability.",
441
+ "tags": [
442
+ "claude-code",
443
+ "skills",
444
+ "plugins",
445
+ "context-budget",
446
+ "token-economy",
447
+ "performance"
448
+ ],
449
+ "adapters": [
450
+ "claude"
451
+ ]
362
452
  }
363
453
  ]
364
454
  }
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "product-tools",
3
3
  "description": "Skills for building, shaping, and shipping full-stack products and SaaS applications.",
4
- "packages": ["product-builder"]
4
+ "packages": ["product-builder", "mvp-oneshot"]
5
5
  }
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "prompt-tools",
3
3
  "description": "Skills for prompt engineering, prompt quality, and prompt workflow automation.",
4
- "packages": ["promptctl"]
4
+ "packages": ["promptctl", "mvp-oneshot"]
5
5
  }
@@ -8,6 +8,7 @@
8
8
  "git-commit",
9
9
  "promptctl",
10
10
  "open-source-publisher",
11
- "product-builder"
11
+ "product-builder",
12
+ "mvp-oneshot"
12
13
  ]
13
14
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@olegkoval/agent-skills",
3
- "version": "1.12.0",
3
+ "version": "1.14.0",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -0,0 +1,157 @@
1
+ ---
2
+ name: apple-store-submit
3
+ description: Handle Apple App Store rejection emails end-to-end โ€” parse rejection reasons, create a fix plan, implement code changes (privacy strings, entitlements, sandbox), navigate App Store Connect to update metadata, and resubmit. Use when an app receives a rejection or when preparing a first-time submission.
4
+ license: MIT
5
+ allowed-tools: Bash, Read, Write, Edit
6
+ compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires Xcode, an Apple Developer account, and App Store Connect access.
7
+ metadata:
8
+ targets: [_source-only]
9
+ author: Oleg Koval
10
+ tags:
11
+ - apple
12
+ - app-store
13
+ - ios
14
+ - macos
15
+ - xcode
16
+ - submission
17
+ - rejection
18
+ ---
19
+
20
+ > ๐Ÿค– *Auto-generated by **weekly-pattern-learner** ยท App Store rejection handling workflow observed in FocusNotch App Store session, Jun 2026 (92 user turns covering rejection โ†’ plan โ†’ code fixes โ†’ metadata โ†’ resubmit)*
21
+
22
+ # Apple App Store Submission & Rejection Handling
23
+
24
+ ## Overview
25
+
26
+ Parse Apple rejection feedback, implement targeted fixes, update App Store Connect metadata, and resubmit โ€” covering the complete cycle from rejection email to approved build.
27
+
28
+ ## When to Use
29
+
30
+ - Apple review team sends a rejection email
31
+ - App fails automated pre-review checks (binary rejected at upload)
32
+ - Preparing metadata for first-time submission (screenshots, keywords, privacy labels)
33
+ - Resolving App Store Connect errors before submitting for review
34
+
35
+ ## Workflow
36
+
37
+ ### 1. Parse the Rejection
38
+
39
+ Read the full rejection email. Extract and list:
40
+
41
+ - **Guideline numbers** violated (e.g., 2.1, 4.2.0, 5.1.1)
42
+ - **Code-level issues** โ€” missing entitlements, incorrect privacy strings, sandbox violations
43
+ - **Metadata issues** โ€” wrong screenshot sizes, subtitle policy, keyword stuffing
44
+ - **UX issues** โ€” crashes described by reviewer, broken flows, missing functionality
45
+
46
+ Create a numbered fix plan: one item per rejection point, with the type of fix needed.
47
+
48
+ ### 2. Classify Fixes by Type
49
+
50
+ | Type | Location |
51
+ |------|----------|
52
+ | Privacy usage strings missing | `Info.plist` |
53
+ | Entitlement missing/wrong | `<AppName>.entitlements` |
54
+ | Crash or broken feature | Source code |
55
+ | Screenshots wrong size/content | App Store Connect |
56
+ | Keywords/subtitle/description | App Store Connect |
57
+ | Build number conflict | Xcode + App Store Connect |
58
+
59
+ ### 3. Implement Code Fixes
60
+
61
+ **Privacy permission strings** (`Info.plist`):
62
+
63
+ ```xml
64
+ <key>NSMicrophoneUsageDescription</key>
65
+ <string>Used for voice input during focus sessions.</string>
66
+
67
+ <key>NSCalendarsUsageDescription</key>
68
+ <string>Used to sync tasks with your calendar.</string>
69
+ ```
70
+
71
+ **Entitlements** (`<AppName>.entitlements`):
72
+
73
+ ```xml
74
+ <key>com.apple.security.app-sandbox</key>
75
+ <true/>
76
+ <key>com.apple.security.network.client</key>
77
+ <true/>
78
+ <key>com.apple.security.files.user-selected.read-write</key>
79
+ <true/>
80
+ ```
81
+
82
+ **Sandbox violations** โ€” remove `NoEscapeBlock` patterns, replace deprecated APIs, use only sandboxed file access via Security-Scoped Bookmarks when needed.
83
+
84
+ ### 4. Build and Archive
85
+
86
+ ```bash
87
+ # Clean build
88
+ xcodebuild clean \
89
+ -scheme <AppName> \
90
+ -destination 'generic/platform=macOS'
91
+
92
+ # Archive
93
+ xcodebuild archive \
94
+ -scheme <AppName> \
95
+ -archivePath build/<AppName>.xcarchive \
96
+ -destination 'generic/platform=macOS'
97
+
98
+ # Export for App Store
99
+ xcodebuild -exportArchive \
100
+ -archivePath build/<AppName>.xcarchive \
101
+ -exportPath build/export \
102
+ -exportOptionsPlist ExportOptions.plist
103
+ ```
104
+
105
+ Validate codesigning before upload:
106
+
107
+ ```bash
108
+ codesign --verify --deep --strict --verbose=4 build/export/<AppName>.app
109
+ spctl --assess --verbose=4 build/export/<AppName>.app
110
+ ```
111
+
112
+ ### 5. Update App Store Connect Metadata
113
+
114
+ Navigate: **My Apps โ†’ [App] โ†’ App Store tab**
115
+
116
+ Common metadata fixes:
117
+
118
+ - **App name**: max 30 chars
119
+ - **Subtitle**: max 30 chars, no duplicate keywords from the title field
120
+ - **Keywords**: 100-char total limit, comma-separated, no spaces after commas
121
+ - **Screenshots**: exact pixel dimensions per device type (check Apple's current spec)
122
+ - **Privacy Nutrition Labels**: must accurately reflect data collected/linked to user
123
+ - **Build selection**: select the newly uploaded build before submitting
124
+
125
+ ### 6. Write Reviewer Notes
126
+
127
+ In the submission form, fill **Notes for Reviewer**:
128
+
129
+ - Explain each rejection point and what was changed
130
+ - Reference specific guideline numbers: "Addressing 2.1 โ€” added NSMicrophoneUsageDescription to Info.plist"
131
+ - If a feature requires special credentials to test, provide test account details
132
+
133
+ ### 7. Submit and Track
134
+
135
+ 1. Upload via **Xcode Organizer โ†’ Distribute App โ†’ App Store Connect**
136
+ 2. In App Store Connect: select the new build, fill notes, **Submit for Review**
137
+ 3. Typical re-review: 24โ€“48h
138
+ 4. If rejected again: respond in the **Resolution Center** thread (same case number)
139
+ 5. Escalate via Resolution Center for policy disagreements โ€” do not open a new submission
140
+
141
+ ## Build Number Protocol
142
+
143
+ Apple rejects builds with a duplicate build number. Increment `CFBundleVersion` in `Info.plist` or Xcode target settings before every upload:
144
+
145
+ ```bash
146
+ # Bump build number (e.g., 9 โ†’ 10)
147
+ xcrun agvtool new-version -all 10
148
+ ```
149
+
150
+ ## Verification
151
+
152
+ - [ ] Every rejection guideline number has a corresponding fix in the plan
153
+ - [ ] `xcodebuild archive` exits 0 with no warnings about entitlements
154
+ - [ ] `codesign --verify` passes
155
+ - [ ] App Store Connect shows build status as "Ready to Submit"
156
+ - [ ] Reviewer Notes reference each changed item
157
+ - [ ] Build number is higher than any previously uploaded build
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "olko-apple-store-submit",
3
+ "description": "Handle Apple App Store rejection emails end-to-end: parse rejection reasons, plan fixes, implement code changes, navigate App Store Connect, and resubmit.",
4
+ "skills": "./skills"
5
+ }
@@ -0,0 +1,158 @@
1
+ ---
2
+ name: apple-store-submit
3
+ description: Handle Apple App Store rejection emails end-to-end โ€” parse rejection reasons, create a fix plan, implement code changes (privacy strings, entitlements, sandbox), navigate App Store Connect to update metadata, and resubmit. Use when an app receives a rejection or when preparing a first-time submission.
4
+ license: MIT
5
+ allowed-tools: Bash, Read, Write, Edit
6
+ compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires Xcode, an Apple Developer account, and App Store Connect access.
7
+ metadata:
8
+ targets: [_source-only]
9
+ author: Oleg Koval
10
+ tags:
11
+ - apple
12
+ - app-store
13
+ - ios
14
+ - macos
15
+ - xcode
16
+ - submission
17
+ - rejection
18
+ ---
19
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
20
+
21
+ > ๐Ÿค– *Auto-generated by **weekly-pattern-learner** ยท App Store rejection handling workflow observed in FocusNotch App Store session, Jun 2026 (92 user turns covering rejection โ†’ plan โ†’ code fixes โ†’ metadata โ†’ resubmit)*
22
+
23
+ # Apple App Store Submission & Rejection Handling
24
+
25
+ ## Overview
26
+
27
+ Parse Apple rejection feedback, implement targeted fixes, update App Store Connect metadata, and resubmit โ€” covering the complete cycle from rejection email to approved build.
28
+
29
+ ## When to Use
30
+
31
+ - Apple review team sends a rejection email
32
+ - App fails automated pre-review checks (binary rejected at upload)
33
+ - Preparing metadata for first-time submission (screenshots, keywords, privacy labels)
34
+ - Resolving App Store Connect errors before submitting for review
35
+
36
+ ## Workflow
37
+
38
+ ### 1. Parse the Rejection
39
+
40
+ Read the full rejection email. Extract and list:
41
+
42
+ - **Guideline numbers** violated (e.g., 2.1, 4.2.0, 5.1.1)
43
+ - **Code-level issues** โ€” missing entitlements, incorrect privacy strings, sandbox violations
44
+ - **Metadata issues** โ€” wrong screenshot sizes, subtitle policy, keyword stuffing
45
+ - **UX issues** โ€” crashes described by reviewer, broken flows, missing functionality
46
+
47
+ Create a numbered fix plan: one item per rejection point, with the type of fix needed.
48
+
49
+ ### 2. Classify Fixes by Type
50
+
51
+ | Type | Location |
52
+ |------|----------|
53
+ | Privacy usage strings missing | `Info.plist` |
54
+ | Entitlement missing/wrong | `<AppName>.entitlements` |
55
+ | Crash or broken feature | Source code |
56
+ | Screenshots wrong size/content | App Store Connect |
57
+ | Keywords/subtitle/description | App Store Connect |
58
+ | Build number conflict | Xcode + App Store Connect |
59
+
60
+ ### 3. Implement Code Fixes
61
+
62
+ **Privacy permission strings** (`Info.plist`):
63
+
64
+ ```xml
65
+ <key>NSMicrophoneUsageDescription</key>
66
+ <string>Used for voice input during focus sessions.</string>
67
+
68
+ <key>NSCalendarsUsageDescription</key>
69
+ <string>Used to sync tasks with your calendar.</string>
70
+ ```
71
+
72
+ **Entitlements** (`<AppName>.entitlements`):
73
+
74
+ ```xml
75
+ <key>com.apple.security.app-sandbox</key>
76
+ <true/>
77
+ <key>com.apple.security.network.client</key>
78
+ <true/>
79
+ <key>com.apple.security.files.user-selected.read-write</key>
80
+ <true/>
81
+ ```
82
+
83
+ **Sandbox violations** โ€” remove `NoEscapeBlock` patterns, replace deprecated APIs, use only sandboxed file access via Security-Scoped Bookmarks when needed.
84
+
85
+ ### 4. Build and Archive
86
+
87
+ ```bash
88
+ # Clean build
89
+ xcodebuild clean \
90
+ -scheme <AppName> \
91
+ -destination 'generic/platform=macOS'
92
+
93
+ # Archive
94
+ xcodebuild archive \
95
+ -scheme <AppName> \
96
+ -archivePath build/<AppName>.xcarchive \
97
+ -destination 'generic/platform=macOS'
98
+
99
+ # Export for App Store
100
+ xcodebuild -exportArchive \
101
+ -archivePath build/<AppName>.xcarchive \
102
+ -exportPath build/export \
103
+ -exportOptionsPlist ExportOptions.plist
104
+ ```
105
+
106
+ Validate codesigning before upload:
107
+
108
+ ```bash
109
+ codesign --verify --deep --strict --verbose=4 build/export/<AppName>.app
110
+ spctl --assess --verbose=4 build/export/<AppName>.app
111
+ ```
112
+
113
+ ### 5. Update App Store Connect Metadata
114
+
115
+ Navigate: **My Apps โ†’ [App] โ†’ App Store tab**
116
+
117
+ Common metadata fixes:
118
+
119
+ - **App name**: max 30 chars
120
+ - **Subtitle**: max 30 chars, no duplicate keywords from the title field
121
+ - **Keywords**: 100-char total limit, comma-separated, no spaces after commas
122
+ - **Screenshots**: exact pixel dimensions per device type (check Apple's current spec)
123
+ - **Privacy Nutrition Labels**: must accurately reflect data collected/linked to user
124
+ - **Build selection**: select the newly uploaded build before submitting
125
+
126
+ ### 6. Write Reviewer Notes
127
+
128
+ In the submission form, fill **Notes for Reviewer**:
129
+
130
+ - Explain each rejection point and what was changed
131
+ - Reference specific guideline numbers: "Addressing 2.1 โ€” added NSMicrophoneUsageDescription to Info.plist"
132
+ - If a feature requires special credentials to test, provide test account details
133
+
134
+ ### 7. Submit and Track
135
+
136
+ 1. Upload via **Xcode Organizer โ†’ Distribute App โ†’ App Store Connect**
137
+ 2. In App Store Connect: select the new build, fill notes, **Submit for Review**
138
+ 3. Typical re-review: 24โ€“48h
139
+ 4. If rejected again: respond in the **Resolution Center** thread (same case number)
140
+ 5. Escalate via Resolution Center for policy disagreements โ€” do not open a new submission
141
+
142
+ ## Build Number Protocol
143
+
144
+ Apple rejects builds with a duplicate build number. Increment `CFBundleVersion` in `Info.plist` or Xcode target settings before every upload:
145
+
146
+ ```bash
147
+ # Bump build number (e.g., 9 โ†’ 10)
148
+ xcrun agvtool new-version -all 10
149
+ ```
150
+
151
+ ## Verification
152
+
153
+ - [ ] Every rejection guideline number has a corresponding fix in the plan
154
+ - [ ] `xcodebuild archive` exits 0 with no warnings about entitlements
155
+ - [ ] `codesign --verify` passes
156
+ - [ ] App Store Connect shows build status as "Ready to Submit"
157
+ - [ ] Reviewer Notes reference each changed item
158
+ - [ ] Build number is higher than any previously uploaded build
@@ -0,0 +1,3 @@
1
+ # Codex adapter
2
+
3
+ Use the canonical skill directly from `packages/software-development/apple-store-submit/SKILL.md`.
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "olko:apple-store-submit",
3
+ "version": "0.1.0",
4
+ "description": "Handle Apple App Store rejection emails end-to-end: parse rejection reasons, plan fixes, implement code changes, navigate App Store Connect, and resubmit.",
5
+ "skills": "skills/"
6
+ }
@@ -0,0 +1,158 @@
1
+ ---
2
+ name: apple-store-submit
3
+ description: Handle Apple App Store rejection emails end-to-end โ€” parse rejection reasons, create a fix plan, implement code changes (privacy strings, entitlements, sandbox), navigate App Store Connect to update metadata, and resubmit. Use when an app receives a rejection or when preparing a first-time submission.
4
+ license: MIT
5
+ allowed-tools: Bash, Read, Write, Edit
6
+ compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires Xcode, an Apple Developer account, and App Store Connect access.
7
+ metadata:
8
+ targets: ["cursor"]
9
+ author: Oleg Koval
10
+ tags:
11
+ - apple
12
+ - app-store
13
+ - ios
14
+ - macos
15
+ - xcode
16
+ - submission
17
+ - rejection
18
+ ---
19
+ <!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
20
+
21
+ > ๐Ÿค– *Auto-generated by **weekly-pattern-learner** ยท App Store rejection handling workflow observed in FocusNotch App Store session, Jun 2026 (92 user turns covering rejection โ†’ plan โ†’ code fixes โ†’ metadata โ†’ resubmit)*
22
+
23
+ # Apple App Store Submission & Rejection Handling
24
+
25
+ ## Overview
26
+
27
+ Parse Apple rejection feedback, implement targeted fixes, update App Store Connect metadata, and resubmit โ€” covering the complete cycle from rejection email to approved build.
28
+
29
+ ## When to Use
30
+
31
+ - Apple review team sends a rejection email
32
+ - App fails automated pre-review checks (binary rejected at upload)
33
+ - Preparing metadata for first-time submission (screenshots, keywords, privacy labels)
34
+ - Resolving App Store Connect errors before submitting for review
35
+
36
+ ## Workflow
37
+
38
+ ### 1. Parse the Rejection
39
+
40
+ Read the full rejection email. Extract and list:
41
+
42
+ - **Guideline numbers** violated (e.g., 2.1, 4.2.0, 5.1.1)
43
+ - **Code-level issues** โ€” missing entitlements, incorrect privacy strings, sandbox violations
44
+ - **Metadata issues** โ€” wrong screenshot sizes, subtitle policy, keyword stuffing
45
+ - **UX issues** โ€” crashes described by reviewer, broken flows, missing functionality
46
+
47
+ Create a numbered fix plan: one item per rejection point, with the type of fix needed.
48
+
49
+ ### 2. Classify Fixes by Type
50
+
51
+ | Type | Location |
52
+ |------|----------|
53
+ | Privacy usage strings missing | `Info.plist` |
54
+ | Entitlement missing/wrong | `<AppName>.entitlements` |
55
+ | Crash or broken feature | Source code |
56
+ | Screenshots wrong size/content | App Store Connect |
57
+ | Keywords/subtitle/description | App Store Connect |
58
+ | Build number conflict | Xcode + App Store Connect |
59
+
60
+ ### 3. Implement Code Fixes
61
+
62
+ **Privacy permission strings** (`Info.plist`):
63
+
64
+ ```xml
65
+ <key>NSMicrophoneUsageDescription</key>
66
+ <string>Used for voice input during focus sessions.</string>
67
+
68
+ <key>NSCalendarsUsageDescription</key>
69
+ <string>Used to sync tasks with your calendar.</string>
70
+ ```
71
+
72
+ **Entitlements** (`<AppName>.entitlements`):
73
+
74
+ ```xml
75
+ <key>com.apple.security.app-sandbox</key>
76
+ <true/>
77
+ <key>com.apple.security.network.client</key>
78
+ <true/>
79
+ <key>com.apple.security.files.user-selected.read-write</key>
80
+ <true/>
81
+ ```
82
+
83
+ **Sandbox violations** โ€” remove `NoEscapeBlock` patterns, replace deprecated APIs, use only sandboxed file access via Security-Scoped Bookmarks when needed.
84
+
85
+ ### 4. Build and Archive
86
+
87
+ ```bash
88
+ # Clean build
89
+ xcodebuild clean \
90
+ -scheme <AppName> \
91
+ -destination 'generic/platform=macOS'
92
+
93
+ # Archive
94
+ xcodebuild archive \
95
+ -scheme <AppName> \
96
+ -archivePath build/<AppName>.xcarchive \
97
+ -destination 'generic/platform=macOS'
98
+
99
+ # Export for App Store
100
+ xcodebuild -exportArchive \
101
+ -archivePath build/<AppName>.xcarchive \
102
+ -exportPath build/export \
103
+ -exportOptionsPlist ExportOptions.plist
104
+ ```
105
+
106
+ Validate codesigning before upload:
107
+
108
+ ```bash
109
+ codesign --verify --deep --strict --verbose=4 build/export/<AppName>.app
110
+ spctl --assess --verbose=4 build/export/<AppName>.app
111
+ ```
112
+
113
+ ### 5. Update App Store Connect Metadata
114
+
115
+ Navigate: **My Apps โ†’ [App] โ†’ App Store tab**
116
+
117
+ Common metadata fixes:
118
+
119
+ - **App name**: max 30 chars
120
+ - **Subtitle**: max 30 chars, no duplicate keywords from the title field
121
+ - **Keywords**: 100-char total limit, comma-separated, no spaces after commas
122
+ - **Screenshots**: exact pixel dimensions per device type (check Apple's current spec)
123
+ - **Privacy Nutrition Labels**: must accurately reflect data collected/linked to user
124
+ - **Build selection**: select the newly uploaded build before submitting
125
+
126
+ ### 6. Write Reviewer Notes
127
+
128
+ In the submission form, fill **Notes for Reviewer**:
129
+
130
+ - Explain each rejection point and what was changed
131
+ - Reference specific guideline numbers: "Addressing 2.1 โ€” added NSMicrophoneUsageDescription to Info.plist"
132
+ - If a feature requires special credentials to test, provide test account details
133
+
134
+ ### 7. Submit and Track
135
+
136
+ 1. Upload via **Xcode Organizer โ†’ Distribute App โ†’ App Store Connect**
137
+ 2. In App Store Connect: select the new build, fill notes, **Submit for Review**
138
+ 3. Typical re-review: 24โ€“48h
139
+ 4. If rejected again: respond in the **Resolution Center** thread (same case number)
140
+ 5. Escalate via Resolution Center for policy disagreements โ€” do not open a new submission
141
+
142
+ ## Build Number Protocol
143
+
144
+ Apple rejects builds with a duplicate build number. Increment `CFBundleVersion` in `Info.plist` or Xcode target settings before every upload:
145
+
146
+ ```bash
147
+ # Bump build number (e.g., 9 โ†’ 10)
148
+ xcrun agvtool new-version -all 10
149
+ ```
150
+
151
+ ## Verification
152
+
153
+ - [ ] Every rejection guideline number has a corresponding fix in the plan
154
+ - [ ] `xcodebuild archive` exits 0 with no warnings about entitlements
155
+ - [ ] `codesign --verify` passes
156
+ - [ ] App Store Connect shows build status as "Ready to Submit"
157
+ - [ ] Reviewer Notes reference each changed item
158
+ - [ ] Build number is higher than any previously uploaded build