opencode-skills-collection 4.0.69 → 4.0.70
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/bundled-skills/.antigravity-install-manifest.json +39 -1
- package/bundled-skills/api-integration-architect/SKILL.md +241 -0
- package/bundled-skills/apify-generate-output-schema/SKILL.md +438 -0
- package/bundled-skills/apify-integration-development/SKILL.md +168 -0
- package/bundled-skills/apify-integration-development/references/ai-framework-package.md +158 -0
- package/bundled-skills/apify-integration-development/references/ai-harness-plugin.md +192 -0
- package/bundled-skills/apify-integration-development/references/sdk-integration.md +236 -0
- package/bundled-skills/apify-integration-development/references/workflow-automation.md +163 -0
- package/bundled-skills/architecture-review/README.md +42 -0
- package/bundled-skills/architecture-review/SKILL.md +77 -0
- package/bundled-skills/architecture-review/examples.md +11 -0
- package/bundled-skills/architecture-review/reference/best-practices.md +7 -0
- package/bundled-skills/architecture-review/reference/capabilities.md +20 -0
- package/bundled-skills/architecture-review/reference/fallbacks.md +11 -0
- package/bundled-skills/architecture-review/reference/graph.md +15 -0
- package/bundled-skills/architecture-review/reference/mcp.md +14 -0
- package/bundled-skills/architecture-review/reference/workflow.md +15 -0
- package/bundled-skills/architecture-review/templates/architecture-review.md +21 -0
- package/bundled-skills/code-review-sensei/SKILL.md +177 -0
- package/bundled-skills/codebase-onboarding/README.md +42 -0
- package/bundled-skills/codebase-onboarding/SKILL.md +77 -0
- package/bundled-skills/codebase-onboarding/examples.md +11 -0
- package/bundled-skills/codebase-onboarding/reference/best-practices.md +7 -0
- package/bundled-skills/codebase-onboarding/reference/capabilities.md +20 -0
- package/bundled-skills/codebase-onboarding/reference/fallbacks.md +11 -0
- package/bundled-skills/codebase-onboarding/reference/graph.md +15 -0
- package/bundled-skills/codebase-onboarding/reference/mcp.md +14 -0
- package/bundled-skills/codebase-onboarding/reference/workflow.md +15 -0
- package/bundled-skills/codebase-onboarding/templates/repository-onboarding.md +21 -0
- package/bundled-skills/connection-auth-rules/SKILL.md +199 -0
- package/bundled-skills/connection-auth-rules/fetch_schema.py +320 -0
- package/bundled-skills/dependency-analysis/README.md +42 -0
- package/bundled-skills/dependency-analysis/SKILL.md +76 -0
- package/bundled-skills/dependency-analysis/examples.md +11 -0
- package/bundled-skills/dependency-analysis/reference/best-practices.md +7 -0
- package/bundled-skills/dependency-analysis/reference/capabilities.md +20 -0
- package/bundled-skills/dependency-analysis/reference/fallbacks.md +11 -0
- package/bundled-skills/dependency-analysis/reference/graph.md +15 -0
- package/bundled-skills/dependency-analysis/reference/mcp.md +14 -0
- package/bundled-skills/dependency-analysis/reference/workflow.md +15 -0
- package/bundled-skills/dependency-analysis/templates/dependency-review.md +21 -0
- package/bundled-skills/devops-pipeline-builder/SKILL.md +200 -0
- package/bundled-skills/eas-app-stores/SKILL.md +197 -0
- package/bundled-skills/eas-app-stores/agents/openai.yaml +4 -0
- package/bundled-skills/eas-app-stores/references/app-store-metadata.md +497 -0
- package/bundled-skills/eas-app-stores/references/ios-app-store.md +376 -0
- package/bundled-skills/eas-app-stores/references/native-ios.md +167 -0
- package/bundled-skills/eas-app-stores/references/play-store.md +244 -0
- package/bundled-skills/eas-app-stores/references/testflight.md +62 -0
- package/bundled-skills/eas-app-stores/references/workflows.md +120 -0
- package/bundled-skills/eas-hosting/SKILL.md +448 -0
- package/bundled-skills/eas-hosting/agents/openai.yaml +4 -0
- package/bundled-skills/eas-observe/SKILL.md +75 -0
- package/bundled-skills/eas-observe/agents/openai.yaml +4 -0
- package/bundled-skills/eas-observe/references/metrics.md +98 -0
- package/bundled-skills/eas-observe/references/queries.md +403 -0
- package/bundled-skills/eas-observe/references/setup.md +476 -0
- package/bundled-skills/eas-observe/references/third-party.md +136 -0
- package/bundled-skills/eas-simulator/SKILL.md +251 -0
- package/bundled-skills/eas-simulator/agents/openai.yaml +4 -0
- package/bundled-skills/eas-simulator/references/controllers.md +135 -0
- package/bundled-skills/eas-simulator/references/run-your-app.md +240 -0
- package/bundled-skills/eas-simulator/references/troubleshooting.md +47 -0
- package/bundled-skills/eas-workflows/SKILL.md +119 -0
- package/bundled-skills/eas-workflows/agents/openai.yaml +4 -0
- package/bundled-skills/eas-workflows/scripts/fetch.js +109 -0
- package/bundled-skills/expo-animation/LICENSE +21 -0
- package/bundled-skills/expo-animation/RECIPES.md +385 -0
- package/bundled-skills/expo-animation/SKILL.md +295 -0
- package/bundled-skills/expo-animation/agents/openai.yaml +4 -0
- package/bundled-skills/fact-check-x-unified/SKILL.md +178 -0
- package/bundled-skills/fact-check-x-unified/agents/openai.yaml +4 -0
- package/bundled-skills/fact-check-x-unified/references/acceptance-criteria.md +44 -0
- package/bundled-skills/fact-check-x-unified/references/contracts.md +39 -0
- package/bundled-skills/fact-check-x-unified/scripts/common.py +31 -0
- package/bundled-skills/fact-check-x-unified/scripts/fact_check_x.py +1832 -0
- package/bundled-skills/fact-check-x-unified/scripts/trusted_search_config.py +324 -0
- package/bundled-skills/fact-check-x-unified/tests/anchor_downgrade_test.py +90 -0
- package/bundled-skills/fact-check-x-unified/tests/multi_platform_test.py +369 -0
- package/bundled-skills/fact-check-x-unified/tests/smoke_test.py +740 -0
- package/bundled-skills/fact-check-x-unified/tests/stage_checkpoint_test.py +103 -0
- package/bundled-skills/fact-check-x-unified/tests/trusted_search_config_test.py +156 -0
- package/bundled-skills/gpt-taste/SKILL.md +8 -1
- package/bundled-skills/hf-cli/SKILL.md +263 -0
- package/bundled-skills/huggingface-community-evals/SKILL.md +228 -0
- package/bundled-skills/huggingface-community-evals/examples/.env.example +3 -0
- package/bundled-skills/huggingface-community-evals/examples/USAGE_EXAMPLES.md +101 -0
- package/bundled-skills/huggingface-community-evals/scripts/inspect_eval_uv.py +104 -0
- package/bundled-skills/huggingface-community-evals/scripts/inspect_vllm_uv.py +306 -0
- package/bundled-skills/huggingface-community-evals/scripts/lighteval_vllm_uv.py +297 -0
- package/bundled-skills/huggingface-datasets/SKILL.md +130 -0
- package/bundled-skills/jev-social/SKILL.md +182 -0
- package/bundled-skills/longbridge-derivatives/SKILL.md +117 -0
- package/bundled-skills/longbridge-derivatives/references/option.md +36 -0
- package/bundled-skills/longbridge-derivatives/references/options-advanced.md +101 -0
- package/bundled-skills/longbridge-derivatives/references/options-pnl.md +74 -0
- package/bundled-skills/longbridge-derivatives/references/options-strategy.md +82 -0
- package/bundled-skills/longbridge-derivatives/references/options-volatility.md +70 -0
- package/bundled-skills/longbridge-derivatives/references/warrant.md +12 -0
- package/bundled-skills/longbridge-quant/SKILL.md +151 -0
- package/bundled-skills/longbridge-quant/references/correlation.md +51 -0
- package/bundled-skills/longbridge-quant/references/execution-model.md +68 -0
- package/bundled-skills/longbridge-quant/references/factor-research.md +95 -0
- package/bundled-skills/longbridge-quant/references/factor-screen.md +101 -0
- package/bundled-skills/longbridge-quant/references/hedging.md +136 -0
- package/bundled-skills/longbridge-quant/references/ml-strategy.md +77 -0
- package/bundled-skills/longbridge-quant/references/multifactor.md +68 -0
- package/bundled-skills/longbridge-quant/references/pairs-trading.md +61 -0
- package/bundled-skills/longbridge-quant/references/quant-cli.md +133 -0
- package/bundled-skills/longbridge-quant/references/quant-stats.md +150 -0
- package/bundled-skills/longbridge-quant/references/seasonality.md +50 -0
- package/bundled-skills/longbridge-quant/references/strategy-optimizer.md +68 -0
- package/bundled-skills/longbridge-quant/references/volatility-strategy.md +52 -0
- package/bundled-skills/longbridge-research/SKILL.md +187 -0
- package/bundled-skills/longbridge-research/references/company-profile.md +96 -0
- package/bundled-skills/longbridge-research/references/company-tearsheet.md +82 -0
- package/bundled-skills/longbridge-research/references/competitive-analysis.md +81 -0
- package/bundled-skills/longbridge-research/references/consensus.md +92 -0
- package/bundled-skills/longbridge-research/references/coverage-initiation.md +76 -0
- package/bundled-skills/longbridge-research/references/defi-yield.md +60 -0
- package/bundled-skills/longbridge-research/references/finance-calendar.md +165 -0
- package/bundled-skills/longbridge-research/references/financial-planning.md +77 -0
- package/bundled-skills/longbridge-research/references/forecast-eps.md +39 -0
- package/bundled-skills/longbridge-research/references/fund-holder.md +44 -0
- package/bundled-skills/longbridge-research/references/hkipo-analysis.md +101 -0
- package/bundled-skills/longbridge-research/references/industry-peers.md +46 -0
- package/bundled-skills/longbridge-research/references/industry-rank.md +62 -0
- package/bundled-skills/longbridge-research/references/insider-trades.md +48 -0
- package/bundled-skills/longbridge-research/references/institution-rating.md +62 -0
- package/bundled-skills/longbridge-research/references/investment-ideas.md +69 -0
- package/bundled-skills/longbridge-research/references/investment-proposal.md +95 -0
- package/bundled-skills/longbridge-research/references/investors.md +87 -0
- package/bundled-skills/longbridge-research/references/onchain.md +70 -0
- package/bundled-skills/longbridge-research/references/post-investment.md +76 -0
- package/bundled-skills/longbridge-research/references/shareholder.md +72 -0
- package/bundled-skills/longbridge-research/references/short-positions.md +50 -0
- package/bundled-skills/longbridge-research/references/short-trades.md +50 -0
- package/bundled-skills/longbridge-research/references/stock-research.md +61 -0
- package/bundled-skills/longbridge-research/references/thesis-tracker.md +64 -0
- package/bundled-skills/makepad-2-0-animation/SKILL.md +318 -0
- package/bundled-skills/makepad-2-0-animation/references/animator-reference.md +433 -0
- package/bundled-skills/makepad-2-0-dsl/SKILL.md +492 -0
- package/bundled-skills/makepad-2-0-dsl/references/dsl-syntax-reference.md +511 -0
- package/bundled-skills/makepad-2-0-dsl/references/extended-guide.md +56 -0
- package/bundled-skills/makepad-2-0-dsl/references/property-system.md +757 -0
- package/bundled-skills/makepad-2-0-events/SKILL.md +497 -0
- package/bundled-skills/makepad-2-0-events/references/event-patterns.md +802 -0
- package/bundled-skills/makepad-2-0-events/references/extended-guide.md +590 -0
- package/bundled-skills/makepad-2-0-layout/SKILL.md +499 -0
- package/bundled-skills/makepad-2-0-layout/references/extended-guide.md +243 -0
- package/bundled-skills/makepad-2-0-layout/references/layout-patterns.md +881 -0
- package/bundled-skills/makepad-2-0-widgets/SKILL.md +261 -0
- package/bundled-skills/makepad-2-0-widgets/references/widget-advanced.md +648 -0
- package/bundled-skills/makepad-2-0-widgets/references/widget-catalog.md +547 -0
- package/bundled-skills/meeting-distiller-pro/SKILL.md +120 -0
- package/bundled-skills/monte-carlo-analyze-root-cause/SKILL.md +12 -1
- package/bundled-skills/monte-carlo-asset-health/SKILL.md +12 -1
- package/bundled-skills/monte-carlo-context-detection/SKILL.md +170 -0
- package/bundled-skills/monte-carlo-context-detection/references/signal-definitions.md +46 -0
- package/bundled-skills/remotion-captions/SKILL.md +57 -0
- package/bundled-skills/remotion-captions/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-captions/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-captions/display-captions.md +190 -0
- package/bundled-skills/remotion-captions/import-srt-captions.md +73 -0
- package/bundled-skills/remotion-captions/transcribe-captions.md +70 -0
- package/bundled-skills/remotion-create/SKILL.md +106 -0
- package/bundled-skills/remotion-create/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-create/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-create/tailwind.md +11 -0
- package/bundled-skills/remotion-create/video-layout.md +9 -0
- package/bundled-skills/remotion-docs/SKILL.md +67 -0
- package/bundled-skills/remotion-docs/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-docs/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-interactivity/SKILL.md +270 -0
- package/bundled-skills/remotion-interactivity/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-interactivity/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-render/SKILL.md +48 -0
- package/bundled-skills/remotion-render/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-render/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-render/transparent-videos.md +106 -0
- package/bundled-skills/saas-pricing-strategist/SKILL.md +169 -0
- package/bundled-skills/score-eval/SKILL.md +35 -0
- package/bundled-skills/writing-guidelines/SKILL.md +60 -0
- package/package.json +1 -1
- package/skills_index.json +980 -3
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
# Submitting to iOS App Store
|
|
2
|
+
|
|
3
|
+
For native SwiftUI/UIKit apps without a React Native runtime, configure the Xcode/EAS path in [native-ios.md](native-ios.md) first. The signing, App Store Connect, and review stages below apply to both native Swift and Expo/React Native apps.
|
|
4
|
+
|
|
5
|
+
## Contents
|
|
6
|
+
|
|
7
|
+
- [Prerequisites](#prerequisites)
|
|
8
|
+
- [Credential Setup](#credential-setup)
|
|
9
|
+
- [Submission Commands](#submission-commands)
|
|
10
|
+
- [App Store Connect Configuration](#app-store-connect-configuration)
|
|
11
|
+
- [TestFlight vs App Store](#testflight-vs-app-store)
|
|
12
|
+
- [Complete the Public Release](#complete-the-public-release)
|
|
13
|
+
- [App Review Process](#app-review-process)
|
|
14
|
+
- [Version and Build Numbers](#version-and-build-numbers)
|
|
15
|
+
- [Release Options](#release-options)
|
|
16
|
+
- [Certificates and Provisioning](#certificates-and-provisioning)
|
|
17
|
+
- [App Store Metadata](#app-store-metadata)
|
|
18
|
+
- [Troubleshooting](#troubleshooting)
|
|
19
|
+
- [CI/CD Integration](#cicd-integration)
|
|
20
|
+
- [Tips](#tips)
|
|
21
|
+
|
|
22
|
+
## Prerequisites
|
|
23
|
+
|
|
24
|
+
1. **Apple Developer Account** - Enroll at [developer.apple.com](https://developer.apple.com)
|
|
25
|
+
2. **App Store Connect App** - Create your app record before first submission
|
|
26
|
+
3. **Apple Credentials** - Configure via EAS or environment variables
|
|
27
|
+
|
|
28
|
+
## Credential Setup
|
|
29
|
+
|
|
30
|
+
### Using EAS Credentials
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
eas credentials -p ios
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
This interactive flow helps you:
|
|
37
|
+
- Create or select a distribution certificate
|
|
38
|
+
- Create or select a provisioning profile
|
|
39
|
+
- Configure App Store Connect API key (recommended)
|
|
40
|
+
|
|
41
|
+
### App Store Connect API Key (Recommended)
|
|
42
|
+
|
|
43
|
+
API keys avoid 2FA prompts in CI/CD:
|
|
44
|
+
|
|
45
|
+
Use `eas credentials -p ios` to select the build profile and configure its App Store Connect API key. Reuse a working managed key when one already exists. For an existing local team API key, configure the submit profile explicitly:
|
|
46
|
+
|
|
47
|
+
Configure in `eas.json`:
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"submit": {
|
|
52
|
+
"production": {
|
|
53
|
+
"ios": {
|
|
54
|
+
"ascApiKeyPath": "./AuthKey_XXXXX.p8",
|
|
55
|
+
"ascApiKeyIssuerId": "xxxxx-xxxx-xxxx-xxxx-xxxxx",
|
|
56
|
+
"ascApiKeyId": "XXXXXXXXXX"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Keep private key material outside version control. Use the installed CLI's credential flow and current documentation when setting up a different key type.
|
|
64
|
+
|
|
65
|
+
### Apple ID Authentication (Alternative)
|
|
66
|
+
|
|
67
|
+
For manual submissions, you can use Apple ID:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
EXPO_APPLE_ID=your@email.com
|
|
71
|
+
EXPO_APPLE_TEAM_ID=XXXXXXXXXX
|
|
72
|
+
EXPO_APPLE_APP_SPECIFIC_PASSWORD=xxxx-xxxx-xxxx-xxxx
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
The app-specific password is for the upload flow. Interactive Apple Developer signing setup has a separate authentication flow.
|
|
76
|
+
|
|
77
|
+
## Submission Commands
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# Build and submit to App Store Connect
|
|
81
|
+
eas build -p ios --profile production --auto-submit
|
|
82
|
+
|
|
83
|
+
# Submit the verified build
|
|
84
|
+
eas submit -p ios --profile production --id BUILD_ID
|
|
85
|
+
|
|
86
|
+
# Expo / React Native TestFlight shortcut
|
|
87
|
+
npx testflight
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## App Store Connect Configuration
|
|
91
|
+
|
|
92
|
+
### First-Time Setup
|
|
93
|
+
|
|
94
|
+
Before submitting, complete in App Store Connect:
|
|
95
|
+
|
|
96
|
+
1. **App Information**
|
|
97
|
+
- Primary language
|
|
98
|
+
- Bundle ID (must match the archive; Xcode is authoritative for checked-in native projects)
|
|
99
|
+
- SKU (unique identifier)
|
|
100
|
+
|
|
101
|
+
2. **Pricing and Availability**
|
|
102
|
+
- Price tier
|
|
103
|
+
- Available countries
|
|
104
|
+
|
|
105
|
+
3. **App Privacy**
|
|
106
|
+
- Privacy policy URL
|
|
107
|
+
- Data collection declarations
|
|
108
|
+
|
|
109
|
+
4. **App Review Information**
|
|
110
|
+
- Contact information
|
|
111
|
+
- Demo account (if login required)
|
|
112
|
+
- Notes for reviewers
|
|
113
|
+
|
|
114
|
+
### EAS Configuration
|
|
115
|
+
|
|
116
|
+
```json
|
|
117
|
+
{
|
|
118
|
+
"cli": {
|
|
119
|
+
"version": ">= 16.0.1",
|
|
120
|
+
"appVersionSource": "remote"
|
|
121
|
+
},
|
|
122
|
+
"build": {
|
|
123
|
+
"production": {
|
|
124
|
+
"ios": {
|
|
125
|
+
"resourceClass": "m-medium",
|
|
126
|
+
"autoIncrement": true
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
"submit": {
|
|
131
|
+
"production": {
|
|
132
|
+
"ios": {
|
|
133
|
+
"appleId": "your@email.com",
|
|
134
|
+
"ascAppId": "1234567890",
|
|
135
|
+
"appleTeamId": "XXXXXXXXXX"
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Find `ascAppId` in App Store Connect → App Information → Apple ID.
|
|
143
|
+
|
|
144
|
+
## TestFlight vs App Store
|
|
145
|
+
|
|
146
|
+
### TestFlight (Beta Testing)
|
|
147
|
+
|
|
148
|
+
- Builds appear after Apple processing; compliance and group assignment may still need attention
|
|
149
|
+
- Internal testers (up to 100) - verify the build is available to the intended group
|
|
150
|
+
- External testers (up to 10,000) - requires beta review
|
|
151
|
+
- Builds expire after 90 days
|
|
152
|
+
|
|
153
|
+
### App Store (Production)
|
|
154
|
+
|
|
155
|
+
- Requires passing App Review
|
|
156
|
+
- Submit for review from App Store Connect
|
|
157
|
+
- Choose release timing (immediate, scheduled, manual)
|
|
158
|
+
|
|
159
|
+
## Complete the Public Release
|
|
160
|
+
|
|
161
|
+
EAS Submit uploads the binary to App Store Connect. Public distribution continues through the app version's App Review and release flow, as described in the [EAS Submit guide](https://docs.expo.dev/submit/ios/).
|
|
162
|
+
|
|
163
|
+
1. Open the correct app and iOS version in App Store Connect. In its Build section, select the exact processed version/build you verified. Reuse an eligible TestFlight build when its code, icon, and configuration are ready for production; build again when those must change. Confirm the build is selectable for the App Store version. See [Apple's build-selection guide](https://developer.apple.com/help/app-store-connect/manage-builds/choose-a-build-to-submit/).
|
|
164
|
+
2. Complete the required listing and review information: screenshots, description, support/privacy URLs, age rating, privacy declarations, export compliance, reviewer contact/login, and pricing/availability as applicable. Resolve the version's outstanding requirements before submission.
|
|
165
|
+
3. Choose the requested release timing: manual release, automatic release after approval, or automatic release no earlier than a chosen date. Approval is still required for the date-based option.
|
|
166
|
+
4. Click **Add for Review**, inspect the draft submission, then **Submit for Review**. Adding to a draft alone does not send it to Apple. Handle review messages and verify the resulting status. See [Apple's submission steps](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/submit-an-app/).
|
|
167
|
+
5. After approval, follow the selected release timing. For manual release, the version waits in **Pending Developer Release** until **Release This Version** is completed. Verify availability in the intended storefronts before reporting it live. See [Apple's release options](https://developer.apple.com/help/app-store-connect/manage-your-apps-availability/select-an-app-store-version-release-option/).
|
|
168
|
+
|
|
169
|
+
Perform these publication steps only within the requested release scope. Preparing documentation or uploading a TestFlight beta does not itself request a public launch. Report the exact version/build and distinguish uploaded, submitted for review, approved, and publicly available.
|
|
170
|
+
|
|
171
|
+
## App Review Process
|
|
172
|
+
|
|
173
|
+
### What Reviewers Check
|
|
174
|
+
|
|
175
|
+
1. **Functionality** - App works as described
|
|
176
|
+
2. **UI/UX** - Follows Human Interface Guidelines
|
|
177
|
+
3. **Content** - Appropriate and accurate
|
|
178
|
+
4. **Privacy** - Data handling matches declarations
|
|
179
|
+
5. **Legal** - Complies with local laws
|
|
180
|
+
|
|
181
|
+
### Common Rejection Reasons
|
|
182
|
+
|
|
183
|
+
| Issue | Solution |
|
|
184
|
+
|-------|----------|
|
|
185
|
+
| Crashes/bugs | Test thoroughly before submission |
|
|
186
|
+
| Incomplete metadata | Fill all required fields |
|
|
187
|
+
| Placeholder content | Remove "lorem ipsum" and test data |
|
|
188
|
+
| Missing login credentials | Provide demo account |
|
|
189
|
+
| Privacy policy missing | Add URL in App Store Connect |
|
|
190
|
+
| Guideline 4.2 (minimum functionality) | Ensure app provides value |
|
|
191
|
+
|
|
192
|
+
### Expedited Review
|
|
193
|
+
|
|
194
|
+
Request expedited review for:
|
|
195
|
+
- Critical bug fixes
|
|
196
|
+
- Time-sensitive events
|
|
197
|
+
- Security issues
|
|
198
|
+
|
|
199
|
+
Go to App Store Connect → your app → App Review → Request Expedited Review.
|
|
200
|
+
|
|
201
|
+
## Version and Build Numbers
|
|
202
|
+
|
|
203
|
+
iOS uses two version identifiers:
|
|
204
|
+
|
|
205
|
+
- **Version** (`CFBundleShortVersionString`): User-facing, e.g., "1.2.3"
|
|
206
|
+
- **Build Number** (`CFBundleVersion`): Internal, must increment for each upload
|
|
207
|
+
|
|
208
|
+
For Expo projects whose native files are generated from app config, configure in `app.json`:
|
|
209
|
+
|
|
210
|
+
```json
|
|
211
|
+
{
|
|
212
|
+
"expo": {
|
|
213
|
+
"version": "1.2.3",
|
|
214
|
+
"ios": {
|
|
215
|
+
"buildNumber": "1"
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
With `autoIncrement: true` and remote versioning, EAS increments its counter and writes native version metadata during the build. When setting up or changing native Swift versioning, or diagnosing a duplicate build number, verify the archive's `CFBundleVersion` as described in [native-ios.md](native-ios.md). A changing remote counter does not prove Xcode used it.
|
|
222
|
+
|
|
223
|
+
## Release Options
|
|
224
|
+
|
|
225
|
+
These JSON examples are fragments of `store.config.json` for EAS Metadata. They configure release timing; uploading with EAS Submit still requires selecting the processed build and completing App Review before a public release.
|
|
226
|
+
|
|
227
|
+
### Automatic Release
|
|
228
|
+
|
|
229
|
+
Release immediately when approved:
|
|
230
|
+
|
|
231
|
+
```json
|
|
232
|
+
{
|
|
233
|
+
"apple": {
|
|
234
|
+
"release": {
|
|
235
|
+
"automaticRelease": true
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### Scheduled Release
|
|
242
|
+
|
|
243
|
+
```json
|
|
244
|
+
{
|
|
245
|
+
"apple": {
|
|
246
|
+
"release": {
|
|
247
|
+
"automaticRelease": "2025-03-01T10:00:00Z"
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### Phased Release
|
|
254
|
+
|
|
255
|
+
Gradual rollout over 7 days:
|
|
256
|
+
|
|
257
|
+
```json
|
|
258
|
+
{
|
|
259
|
+
"apple": {
|
|
260
|
+
"release": {
|
|
261
|
+
"phasedRelease": true
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
Rollout: Day 1 (1%) → Day 2 (2%) → Day 3 (5%) → Day 4 (10%) → Day 5 (20%) → Day 6 (50%) → Day 7 (100%)
|
|
268
|
+
|
|
269
|
+
## Certificates and Provisioning
|
|
270
|
+
|
|
271
|
+
### Distribution Certificate
|
|
272
|
+
|
|
273
|
+
- Required for App Store submissions
|
|
274
|
+
- Limited to 3 per Apple Developer account
|
|
275
|
+
- Valid for 1 year
|
|
276
|
+
- EAS manages automatically
|
|
277
|
+
|
|
278
|
+
### Provisioning Profile
|
|
279
|
+
|
|
280
|
+
- Links app, certificate, and entitlements
|
|
281
|
+
- App Store profiles don't include device UDIDs
|
|
282
|
+
- EAS creates and manages automatically
|
|
283
|
+
|
|
284
|
+
### Check Current Credentials
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
eas credentials -p ios
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
## App Store Metadata
|
|
291
|
+
|
|
292
|
+
Use EAS Metadata to manage App Store listing from code:
|
|
293
|
+
|
|
294
|
+
```bash
|
|
295
|
+
# Pull existing metadata
|
|
296
|
+
eas metadata:pull
|
|
297
|
+
|
|
298
|
+
# Push changes
|
|
299
|
+
eas metadata:push
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
See ./app-store-metadata.md for detailed configuration.
|
|
303
|
+
|
|
304
|
+
## Troubleshooting
|
|
305
|
+
|
|
306
|
+
### "No suitable application records found"
|
|
307
|
+
|
|
308
|
+
Create the app in App Store Connect first with matching bundle ID.
|
|
309
|
+
|
|
310
|
+
### "The bundle version must be higher"
|
|
311
|
+
|
|
312
|
+
Compare the number inside the rejected archive with EAS's remote counter. For native Swift, check the plist/build-setting ownership described in [native-ios.md](native-ios.md), then rebuild and submit the corrected artifact.
|
|
313
|
+
|
|
314
|
+
### "Missing compliance information"
|
|
315
|
+
|
|
316
|
+
Review the app's actual encryption use and complete Apple's export-compliance requirements. For an Expo app generated from app config, an exempt app can declare:
|
|
317
|
+
|
|
318
|
+
```json
|
|
319
|
+
{
|
|
320
|
+
"expo": {
|
|
321
|
+
"ios": {
|
|
322
|
+
"config": {
|
|
323
|
+
"usesNonExemptEncryption": false
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
For a checked-in Swift app, the equivalent declaration belongs in its native Info.plist as `ITSAppUsesNonExemptEncryption`. Use the value appropriate to the app; changing app.json alone does not update its native plist.
|
|
331
|
+
|
|
332
|
+
### "Invalid provisioning profile"
|
|
333
|
+
|
|
334
|
+
```bash
|
|
335
|
+
eas credentials -p ios
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
### Build stuck in "Processing"
|
|
339
|
+
|
|
340
|
+
App Store Connect processing can take 5-30 minutes. Check status in App Store Connect → TestFlight.
|
|
341
|
+
|
|
342
|
+
## CI/CD Integration
|
|
343
|
+
|
|
344
|
+
For automated submissions in CI/CD:
|
|
345
|
+
|
|
346
|
+
```yaml
|
|
347
|
+
# .eas/workflows/release.yml
|
|
348
|
+
name: Upload production iOS build
|
|
349
|
+
|
|
350
|
+
on:
|
|
351
|
+
push:
|
|
352
|
+
tags: ['v*']
|
|
353
|
+
|
|
354
|
+
jobs:
|
|
355
|
+
build:
|
|
356
|
+
type: build
|
|
357
|
+
params:
|
|
358
|
+
platform: ios
|
|
359
|
+
profile: production
|
|
360
|
+
|
|
361
|
+
submit:
|
|
362
|
+
type: submit
|
|
363
|
+
needs: [build]
|
|
364
|
+
params:
|
|
365
|
+
build_id: ${{ needs.build.outputs.build_id }}
|
|
366
|
+
profile: production
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
## Tips
|
|
370
|
+
|
|
371
|
+
- Submit to TestFlight early and often for feedback
|
|
372
|
+
- Use beta app review for external testers to catch issues before App Store review
|
|
373
|
+
- Respond to reviewer questions promptly in App Store Connect
|
|
374
|
+
- Keep demo account credentials up to date
|
|
375
|
+
- Monitor App Store Connect notifications for review updates
|
|
376
|
+
- Use phased release for major updates to catch issues early
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# Native Swift iOS apps on EAS
|
|
2
|
+
|
|
3
|
+
Use this path when the app runs SwiftUI or UIKit and the task is to build or distribute it with EAS. Adding React Native screens is a different task. [EAS Build supports native projects without Expo or React Native](https://docs.expo.dev/build/introduction/), but the main setup tutorials assume a React Native project.
|
|
4
|
+
|
|
5
|
+
## Keep the delivery wrapper small
|
|
6
|
+
|
|
7
|
+
Inspect the Xcode project, shared scheme, Swift entry point, dependencies, signing settings, and current release configuration first. Keep hand-maintained native code checked in. Running `expo prebuild --clean` would regenerate native directories; it is not a setup step for this path.
|
|
8
|
+
|
|
9
|
+
The default EAS iOS pipeline expects a project beneath `ios/`. A typical layout is:
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
app.json
|
|
13
|
+
eas.json
|
|
14
|
+
package.json
|
|
15
|
+
package-lock.json
|
|
16
|
+
ios/
|
|
17
|
+
Podfile
|
|
18
|
+
MyApp.xcodeproj/
|
|
19
|
+
MyApp/
|
|
20
|
+
MyApp.swift
|
|
21
|
+
Info.plist
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
The package file is tooling metadata, not a JavaScript app. A project with no Node dependencies can use:
|
|
25
|
+
|
|
26
|
+
```json
|
|
27
|
+
{
|
|
28
|
+
"name": "my-app",
|
|
29
|
+
"version": "1.0.0",
|
|
30
|
+
"private": true
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Keep a matching lockfile for the chosen package manager. Do not add `expo`, `react`, `react-native`, an `index.js`, Metro, or `expo-dev-client` merely to use EAS. Preserve those dependencies if the app actually uses them. EAS CLI can read a minimal `app.json` without an installed Expo SDK:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"expo": {
|
|
39
|
+
"name": "My App",
|
|
40
|
+
"slug": "my-app",
|
|
41
|
+
"ios": { "bundleIdentifier": "com.example.myapp" }
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
`eas init` links the project and writes `extra.eas.projectId`. Reuse the existing ID when one exists. The `expo` JSON key is EAS configuration here, not evidence of an Expo runtime. Xcode's bundle identifier is authoritative for a checked-in native project; keep any duplicate app-config identifier consistent, particularly for GitHub-triggered builds.
|
|
47
|
+
|
|
48
|
+
The [default iOS worker](https://github.com/expo/eas-cli/blob/main/packages/build-tools/src/builders/ios.ts) skips prebuild for checked-in native projects but still runs `pod install`. For an app with no pods, a minimal `Podfile` can serve as an adapter:
|
|
49
|
+
|
|
50
|
+
```ruby
|
|
51
|
+
platform :ios, '17.0'
|
|
52
|
+
|
|
53
|
+
target 'MyApp' do
|
|
54
|
+
end
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Use the app's real deployment target and target name. This does not add React Native pods. If the project must avoid CocoaPods or has a different layout, use a [custom EAS build](https://docs.expo.dev/custom-builds/get-started/) or archive/export with Xcode and submit the resulting IPA. Do not relocate an established native project just to match this example.
|
|
58
|
+
|
|
59
|
+
## Build and submit profiles
|
|
60
|
+
|
|
61
|
+
Select the actual shared scheme. Set `ios.image` from the [current build-image list](https://docs.expo.dev/build-reference/infrastructure/) when a particular Xcode/SDK is required. Use explicit build configurations; `developmentClient: true` configures Expo's development client, not generic Swift debugging.
|
|
62
|
+
|
|
63
|
+
```json
|
|
64
|
+
{
|
|
65
|
+
"cli": { "appVersionSource": "remote" },
|
|
66
|
+
"build": {
|
|
67
|
+
"base": { "ios": { "scheme": "MyApp" } },
|
|
68
|
+
"simulator": {
|
|
69
|
+
"extends": "base",
|
|
70
|
+
"ios": { "simulator": true, "buildConfiguration": "Debug" }
|
|
71
|
+
},
|
|
72
|
+
"testflight": {
|
|
73
|
+
"extends": "base",
|
|
74
|
+
"distribution": "store",
|
|
75
|
+
"autoIncrement": true,
|
|
76
|
+
"ios": { "buildConfiguration": "Release" }
|
|
77
|
+
},
|
|
78
|
+
"production": {
|
|
79
|
+
"extends": "base",
|
|
80
|
+
"distribution": "store",
|
|
81
|
+
"autoIncrement": true,
|
|
82
|
+
"ios": { "buildConfiguration": "Release" }
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"submit": {
|
|
86
|
+
"testflight": { "ios": { "ascAppId": "1234567890" } },
|
|
87
|
+
"production": { "ios": { "ascAppId": "1234567890" } }
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
The IDs and target names above are examples. `ascAppId` is the numeric App Store Connect app ID, not the EAS project UUID, bundle ID, or Apple team ID. Verify the selected Apple team, the native bundle ID, and the app record together; one Apple login may belong to multiple organizations.
|
|
93
|
+
|
|
94
|
+
A pure Swift wrapper with neither Expo dependencies nor Expo SDK metadata needs no Expo Doctor or JavaScript-bundling skip flags. Existing native build phases and actual dependency integrations still need inspection. Avoid carrying unexplained environment overrides from a React Native template; keep native compiler settings in the Xcode project or xcconfig and retain Release debug symbols for crash reports.
|
|
95
|
+
|
|
96
|
+
For icon selection or other native build preparation, use an EAS lifecycle hook such as `eas-build-post-install` when necessary. An Expo config/prebuild plugin will not run on this native path. Preserve an existing hook rather than replacing its other work.
|
|
97
|
+
|
|
98
|
+
## Versioning and icon troubleshooting
|
|
99
|
+
|
|
100
|
+
These checks address two failures encountered while testing a SwiftUI release: a stale archive build number and a default icon with an alpha channel. Use the relevant check during initial setup, after changing versioning, bundle IDs, or icons, or to diagnose a rejected upload. Routine releases use the EAS build/submit flow below.
|
|
101
|
+
|
|
102
|
+
EAS remote versioning increments a counter. The [native version updater](https://github.com/expo/eas-cli/blob/main/packages/eas-cli/src/build/ios/version.ts) writes `CFBundleVersion` to the target's explicit `INFOPLIST_FILE`. A generated plist with a fixed `CURRENT_PROJECT_VERSION` can leave every archive reporting build 1 even while the EAS dashboard reports increasing numbers.
|
|
103
|
+
|
|
104
|
+
For the default pipeline, an explicit app plist is a tested approach:
|
|
105
|
+
|
|
106
|
+
```text
|
|
107
|
+
GENERATE_INFOPLIST_FILE = NO
|
|
108
|
+
INFOPLIST_FILE = MyApp/Info.plist
|
|
109
|
+
MARKETING_VERSION = 1.0.0
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Include these entries in the complete app plist:
|
|
113
|
+
|
|
114
|
+
```xml
|
|
115
|
+
<key>CFBundleShortVersionString</key>
|
|
116
|
+
<string>$(MARKETING_VERSION)</string>
|
|
117
|
+
<key>CFBundleVersion</key>
|
|
118
|
+
<string>1</string>
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
That local build number is a starting value; EAS writes the remote value during the store build. Apply the settings to the app's relevant configurations and preserve the rest of its metadata: identity, privacy usage descriptions, scene/launch configuration, orientations and supported devices. Do not replace a full plist with this excerpt or change test targets indiscriminately. Review extension targets' version synchronization separately.
|
|
122
|
+
|
|
123
|
+
An existing generated-plist setup can also work if its build process explicitly sets `CURRENT_PROJECT_VERSION` before archiving. Keep it when verified; do not migrate every native project automatically. Changing only `app.json` or observing an incremented remote counter is insufficient evidence.
|
|
124
|
+
|
|
125
|
+
When setting up or changing versioning or the bundle ID, or diagnosing a rejected upload, inspect the built app's plist with macOS's built-in tools:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
plutil -p "/path/to/MyApp.xcarchive/Products/Applications/MyApp.app/Info.plist"
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
For a downloaded `.ipa`, unzip it into a temporary directory and inspect `Payload/MyApp.app/Info.plist`; for a built `.app`, inspect its `Info.plist` directly. Compare `CFBundleIdentifier`, `CFBundleShortVersionString`, and `CFBundleVersion` with the intended release. Values must be resolved strings, and `CFBundleSupportedPlatforms` must contain `iPhoneOS`, not `iPhoneSimulator`. `eas build:view BUILD_ID --json` provides build details and the artifact URL; its reported version is not a substitute for checking the archive.
|
|
132
|
+
|
|
133
|
+
When adding or changing a default (Any/light) 1024px AppIcon PNG, or diagnosing an icon rejection, inspect the source selected by that build profile:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
sips -g pixelWidth -g pixelHeight -g hasAlpha "/path/to/AppIcon.appiconset/icon.png"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
The default icon should be 1024×1024 with no alpha channel, even if every pixel looks opaque. Preserve transparency in dark variants and Icon Composer layers; follow [Apple's guidance for each appearance](https://developer.apple.com/documentation/xcode/configuring-your-app-icon). These local checks help diagnose the artifact; use the EAS submission logs and Apple processing status to verify acceptance.
|
|
140
|
+
|
|
141
|
+
Check privacy usage descriptions against the features used by the app. Set the encryption declaration according to the app's actual encryption use; do not copy `false` solely to suppress an export-compliance prompt.
|
|
142
|
+
|
|
143
|
+
## Ship the exact build
|
|
144
|
+
|
|
145
|
+
Reuse established EAS/Apple credentials. For a new setup, configure signing with `eas credentials -p ios` and select the correct team. An App Store Connect API key supports unattended submission without changing the app's owner or bundle ID.
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
eas build --platform ios --profile testflight --no-wait --non-interactive
|
|
149
|
+
# Record the returned build ID; verify its result and source revision.
|
|
150
|
+
eas submit --platform ios --profile testflight --id BUILD_ID --non-interactive
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
For an IPA exported elsewhere:
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
eas submit --platform ios --profile testflight --path /path/to/MyApp.ipa
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Use the explicit ID when multiple builds exist. Keep the distribution scope the user requested. Follow the submission's worker logs through Apple processing, then check tester availability in App Store Connect. A successful upload does not create tester access or release the app publicly.
|
|
160
|
+
|
|
161
|
+
For production, reuse an eligible uploaded build when it already has the intended release code, icon, configuration, and version. If the beta build uses a preview icon or different configuration, create and verify a production-profile build, then upload that exact archive. A second upload is not required solely to move an eligible tested build into App Review.
|
|
162
|
+
|
|
163
|
+
Complete the [public release steps in App Store Connect](ios-app-store.md#complete-the-public-release): select the processed build, finish the listing/privacy/review information, submit for App Review, and apply the requested release timing. The [official EAS Submit guide](https://docs.expo.dev/submit/ios/) describes this handoff. TestFlight distribution alone does not authorize publishing an App Store release.
|
|
164
|
+
|
|
165
|
+
## Verification scope
|
|
166
|
+
|
|
167
|
+
This approach was exercised with a SwiftUI app on EAS CLI 18.6.0 and Xcode 26.2: an isolated default-pipeline simulator build succeeded without Expo/React/React Native dependencies or skip flags. The explicit-plist and opaque-icon fixes were also verified by a signed device build accepted by Apple. Recheck worker/CLI behavior when updating tooling; project layout, custom hooks, extensions and signing requirements can differ.
|