ios-app-store-submission
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseiOS App Store Submission
iOS应用提交至App Store
You are an expert in iOS app submission, Apple review guidelines, and build automation. Your goal is to guide users through the entire submission process efficiently, avoiding common pitfalls and rejections.
你是iOS应用提交、Apple审核指南和构建自动化方面的专家。你的目标是高效引导用户完成整个提交流程,避免常见的陷阱和被拒情况。
Core Philosophy
核心理念
App Store submission is not just about uploading a binary. It's about:
- Meeting Apple's technical and content requirements
- Providing accurate metadata and privacy disclosures
- Preparing for potential review questions
- Automating the process for fast iteration
App Store提交不仅仅是上传二进制文件。它还包括:
- 满足Apple的技术和内容要求
- 提供准确的元数据和隐私披露
- 为潜在的审核问题做好准备
- 自动化流程以实现快速迭代
Quick Reference: Build Methods
快速参考:构建方法
| 方法 | 所要時間 | いつ使う |
|---|---|---|
| CLI Local (推奨) | 10-15分 | 最速。ローカルでArchive→直接アップロード |
| Xcode GUI | 10-15分 | CLIに慣れていない場合 |
| EAS Build | 15-30分+キュー | CI/CD、チーム開発、Free tierはキュー待ちあり |
| 方法 | 所需时间 | 适用场景 |
|---|---|---|
| CLI本地构建(推荐) | 10-15分钟 | 速度最快。本地归档→直接上传 |
| Xcode GUI | 10-15分钟 | 不熟悉CLI的用户 |
| EAS Build | 15-30分钟+排队等待 | CI/CD、团队开发场景,免费版需排队 |
⚠️ Known Issues Prevention (ビルド前に必ず確認)
⚠️ 已知问题预防(构建前务必检查)
過去のリジェクト事例から学んだ、ビルド前に必ず確認すべき項目。
从过往应用被拒案例中总结的构建前务必检查的事项。
1. Provider で null
を返さない
null1. 避免Provider返回null
null問題: ThemeProvider等がAsyncStorage読み込み中にを返すと、審査時に「黒い画面」でリジェクト。
null確認方法:
bash
grep -r "return null" src/providers/対処: ローディングUIを返す
typescript
// NG
if (!isLoaded) return null;
// OK
if (!isLoaded) {
return (
<View style={{ flex: 1, backgroundColor: '#1a1a2e', justifyContent: 'center', alignItems: 'center' }}>
<ActivityIndicator size="large" color="#059669" />
</View>
);
}问题: 若ThemeProvider等在读取AsyncStorage时返回,审核时会因“黑屏”被拒。
null检查方法:
bash
grep -r "return null" src/providers/解决方法: 返回加载UI
typescript
// 错误示例
if (!isLoaded) return null;
// 正确示例
if (!isLoaded) {
return (
<View style={{ flex: 1, backgroundColor: '#1a1a2e', justifyContent: 'center', alignItems: 'center' }}>
<ActivityIndicator size="large" color="#059669" />
</View>
);
}2. ATT プラグイン設定
2. ATT插件设置
問題: をベア文字列で設定すると、ATTダイアログが表示されない。
expo-tracking-transparency確認方法:
bash
undefined问题: 若以纯字符串形式配置,ATT对话框将无法显示。
expo-tracking-transparency检查方法:
bash
undefinedapp.json確認
检查app.json
grep -A5 "expo-tracking-transparency" app.json
grep -A5 "expo-tracking-transparency" app.json
prebuild後のInfo.plist確認
预构建后检查Info.plist
npx expo prebuild --clean
grep -A1 "NSUserTrackingUsageDescription" ios/*/Info.plist
**正しい設定**:
```json
[
"expo-tracking-transparency",
{
"userTrackingPermission": "This identifier will be used to deliver personalized ads to you."
}
]npx expo prebuild --clean
grep -A1 "NSUserTrackingUsageDescription" ios/*/Info.plist
**正确配置**:
```json
[
"expo-tracking-transparency",
{
"userTrackingPermission": "此标识符将用于为你提供个性化广告。"
}
]3. UIRequiredDeviceCapabilities に telephony を入れない
3. 不要在UIRequiredDeviceCapabilities中添加telephony
問題: を設定すると、Mac Apple silicon / Vision Pro で警告が出る。
telephony確認方法:
bash
grep -r "telephony" app.json
grep -r "UIRequiredDeviceCapabilities" ios/*/Info.plist対処: iPhoneのみ対応は で十分。は不要。
supportsTablet: falsetelephony问题: 若设置,Mac Apple silicon / Vision Pro设备会出现警告。
telephony检查方法:
bash
grep -r "telephony" app.json
grep -r "UIRequiredDeviceCapabilities" ios/*/Info.plist解决方法: 若仅支持iPhone,设置即可,无需添加。
supportsTablet: falsetelephony4. ビルド前検証コマンド
4. 构建前验证命令
bash
undefinedbash
undefined全チェックを一括実行
批量执行所有检查
echo "=== Provider null check ===" && grep -r "return null" src/providers/ 2>/dev/null || echo "OK"
echo "=== ATT config check ===" && grep -A5 "expo-tracking-transparency" app.json
echo "=== telephony check ===" && grep -r "telephony" app.json 2>/dev/null || echo "OK"
---echo "=== Provider null值检查 ===" && grep -r "return null" src/providers/ 2>/dev/null || echo "正常"
echo "=== ATT配置检查 ===" && grep -A5 "expo-tracking-transparency" app.json
echo "=== telephony检查 ===" && grep -r "telephony" app.json 2>/dev/null || echo "正常"
---Phase 1: Initial Setup (One-time)
阶段1:初始设置(一次性操作)
1.1 App-specific Password
1.1 应用专用密码
CLIでアップロードするために必要。一度作成すれば全アプリで使い回し可能。
- https://appleid.apple.com にアクセス
- サインイン → サインインとセキュリティ → アプリ用パスワード
- + → ラベル入力(例: )→ 作成
mued-apps - パスワードをコピー(形式)
xxxx-xxxx-xxxx-xxxx - に保存:
.env.local
bash
undefined使用CLI上传应用时必需。创建一次即可在所有应用中复用。
- 访问 https://appleid.apple.com
- 登录 → 登录与安全 → 应用专用密码
- 点击**+** → 输入标签(例如: )→ 创建
mued-apps - 复制密码(格式为)
xxxx-xxxx-xxxx-xxxx - 保存至:
.env.local
bash
undefinedApple ID app-specific password
Apple ID应用专用密码
APPLE_ID=your-apple-id@example.com
APP_PASSWORD=xxxx-xxxx-xxxx-xxxx
TEAM_ID=XXXXXXXXXX
undefinedAPPLE_ID=your-apple-id@example.com
APP_PASSWORD=xxxx-xxxx-xxxx-xxxx
TEAM_ID=XXXXXXXXXX
undefined1.2 ExportOptions.plist
1.2 ExportOptions.plist
プロジェクトルートに作成:
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>method</key>
<string>app-store-connect</string>
<key>teamID</key>
<string>YOUR_TEAM_ID</string>
<key>uploadSymbols</key>
<true/>
<key>destination</key>
<string>upload</string>
</dict>
</plist>在项目根目录创建:
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>method</key>
<string>app-store-connect</string>
<key>teamID</key>
<string>YOUR_TEAM_ID</string>
<key>uploadSymbols</key>
<true/>
<key>destination</key>
<string>upload</string>
</dict>
</plist>Phase 2: CLI Build & Upload (推奨)
阶段2:CLI构建与上传(推荐)
2.1 Full CLI Workflow
2.1 完整CLI工作流
bash
undefinedbash
undefined1. Prebuild(ネイティブプロジェクト生成)
1. 预构建(生成原生项目)
npx expo prebuild --clean
npx expo prebuild --clean
2. Archive
2. 归档
xcodebuild -workspace ios/YourApp.xcworkspace
-scheme YourApp
-configuration Release
-archivePath build/YourApp.xcarchive
-destination "generic/platform=iOS"
DEVELOPMENT_TEAM=YOUR_TEAM_ID
CODE_SIGN_STYLE=Automatic
-allowProvisioningUpdates
archive
-scheme YourApp
-configuration Release
-archivePath build/YourApp.xcarchive
-destination "generic/platform=iOS"
DEVELOPMENT_TEAM=YOUR_TEAM_ID
CODE_SIGN_STYLE=Automatic
-allowProvisioningUpdates
archive
xcodebuild -workspace ios/YourApp.xcworkspace
-scheme YourApp
-configuration Release
-archivePath build/YourApp.xcarchive
-destination "generic/platform=iOS"
DEVELOPMENT_TEAM=YOUR_TEAM_ID
CODE_SIGN_STYLE=Automatic
-allowProvisioningUpdates
archive
-scheme YourApp
-configuration Release
-archivePath build/YourApp.xcarchive
-destination "generic/platform=iOS"
DEVELOPMENT_TEAM=YOUR_TEAM_ID
CODE_SIGN_STYLE=Automatic
-allowProvisioningUpdates
archive
3. Export & Upload(一発でApp Store Connectへ)
3. 导出并上传(一键上传至App Store Connect)
xcodebuild -exportArchive
-archivePath build/YourApp.xcarchive
-exportPath build
-exportOptionsPlist ExportOptions.plist
-allowProvisioningUpdates
-archivePath build/YourApp.xcarchive
-exportPath build
-exportOptionsPlist ExportOptions.plist
-allowProvisioningUpdates
undefinedxcodebuild -exportArchive
-archivePath build/YourApp.xcarchive
-exportPath build
-exportOptionsPlist ExportOptions.plist
-allowProvisioningUpdates
-archivePath build/YourApp.xcarchive
-exportPath build
-exportOptionsPlist ExportOptions.plist
-allowProvisioningUpdates
undefined2.2 よくあるエラーと対処
2.2 常见错误与解决方法
| エラー | 原因 | 対処 |
|---|---|---|
| プロビジョニング未設定 | |
| チームID未指定 | |
| Apple ID未認証 | Xcode → Preferences → Accounts で認証 |
| 错误 | 原因 | 解决方法 |
|---|---|---|
| 未配置描述文件 | 添加 |
| 未指定团队ID | 添加 |
| Apple ID未认证 | 在Xcode → 偏好设置 → 账户中完成认证 |
2.3 Upload後の確認
2.3 上传后的检查
- App Store Connect を開く
- My Apps → Your App → TestFlight
- ビルドが「処理中」→「利用可能」になるまで5-15分待つ
- App Store タブ → ビルドを選択 → 審査に提出
- 打开App Store Connect
- 我的应用 → 你的应用 → TestFlight
- 等待构建从“处理中”变为“可用”(需5-15分钟)
- 进入App Store标签 → 选择构建 → 提交审核
Phase 3: Xcode GUI Build (Alternative)
阶段3:Xcode GUI构建(替代方案)
CLIが苦手な場合の代替手順。
bash
undefined适用于不熟悉CLI的用户。
bash
undefined1. Prebuild
1. 预构建
npx expo prebuild --clean
npx expo prebuild --clean
2. Xcodeで開く
2. 用Xcode打开
open ios/YourApp.xcworkspace
undefinedopen ios/YourApp.xcworkspace
undefinedXcode内の操作
Xcode内操作步骤
- Signing: Automatically manage signing → Team選択
- Device: "Any iOS Device (arm64)" を選択
- Product → Archive
- Archiveウィンドウ → Distribute App
- App Store Connect → Upload
- 签名设置: 勾选自动管理签名 → 选择团队
- 设备: 选择“Any iOS Device (arm64)”
- 产品 → 归档
- 归档窗口 → 分发应用
- 选择App Store Connect → 上传
Phase 4: EAS Build (Cloud)
阶段4:EAS Build(云端构建)
チーム開発やCI/CDで使用。Free tierはキュー待ちあり(数十分〜数時間)。
bash
undefined适用于团队开发或CI/CD场景。免费版需排队等待(数十分钟至数小时)。
bash
undefinedBuild
构建
eas build --platform ios --profile production
eas build --platform ios --profile production
Submit
提交
eas submit --platform ios --latest
undefinedeas submit --platform ios --latest
undefinedeas.json 設定
eas.json配置
json
{
"cli": {
"version": ">= 16.0.0",
"appVersionSource": "remote"
},
"build": {
"production": {
"ios": {
"autoIncrement": "buildNumber"
}
}
},
"submit": {
"production": {
"ios": {
"appleId": "your-apple-id@example.com",
"ascAppId": "1234567890",
"appleTeamId": "XXXXXXXXXX"
}
}
}
}json
{
"cli": {
"version": ">= 16.0.0",
"appVersionSource": "remote"
},
"build": {
"production": {
"ios": {
"autoIncrement": "buildNumber"
}
}
},
"submit": {
"production": {
"ios": {
"appleId": "your-apple-id@example.com",
"ascAppId": "1234567890",
"appleTeamId": "XXXXXXXXXX"
}
}
}
}Phase 5: App Store Connect Setup
阶段5:App Store Connect设置
5.1 App Information
5.1 应用信息
| Field | Requirements |
|---|---|
| Name | 30 chars max, unique on App Store |
| Subtitle | 30 chars max, optional |
| Category | Primary + optional secondary |
| Age Rating | Complete questionnaire |
| 字段 | 要求 |
|---|---|
| 应用名称 | 最多30字符,在App Store中唯一 |
| 副标题 | 最多30字符,可选 |
| 分类 | 主分类 + 可选副分类 |
| 年龄分级 | 完成问卷调查 |
5.2 App Privacy (Critical!)
5.2 应用隐私(至关重要!)
App Store Connect → App Privacy → Get Started
AdMob使用時の宣言:
| Data Type | Collected | Linked | Tracking |
|---|---|---|---|
| Device ID | Yes | Yes | Yes (if ATT granted) |
| Product Interaction | Yes | No | No |
| Advertising Data | Yes | Yes | Yes |
| Crash Data | Yes | No | No |
进入App Store Connect → 应用隐私 → 开始设置
使用AdMob时的声明:
| 数据类型 | 是否收集 | 是否关联 | 是否追踪 |
|---|---|---|---|
| 设备ID | 是 | 是 | 是(若用户同意ATT) |
| 产品交互数据 | 是 | 否 | 否 |
| 广告数据 | 是 | 是 | 是 |
| 崩溃数据 | 是 | 否 | 否 |
5.3 Screenshots
5.3 截图
| Device | Size (pixels) | Required |
|---|---|---|
| 6.7" iPhone | 1290 x 2796 | Yes |
| 6.5" iPhone | 1284 x 2778 | Yes |
| 12.9" iPad Pro | 2048 x 2732 | If supports iPad |
| 设备 | 尺寸(像素) | 是否必需 |
|---|---|---|
| 6.7英寸iPhone | 1290 x 2796 | 是 |
| 6.5英寸iPhone | 1284 x 2778 | 是 |
| 12.9英寸iPad Pro | 2048 x 2732 | 若支持iPad则必需 |
Phase 6: Privacy Requirements
阶段6:隐私要求
6.1 App Tracking Transparency (ATT)
6.1 应用追踪透明度(ATT)
AdMob等の広告SDKを使う場合は必須。
app.json設定(プラグイン経由が推奨):
json
{
"plugins": [
[
"expo-tracking-transparency",
{
"userTrackingPermission": "This identifier will be used to deliver personalized ads to you."
}
]
]
}⚠️ 注意: に直接書くのではなく、プラグイン設定を使う。prebuild時にInfo.plistに正しく反映される。
infoPlistコード実装:
typescript
import { requestTrackingPermissionsAsync } from 'expo-tracking-transparency';
async function requestTracking() {
const { status } = await requestTrackingPermissionsAsync();
// 'granted' | 'denied' | 'undetermined'
}使用AdMob等广告SDK时必需配置。
app.json配置(推荐通过插件设置):
json
{
"plugins": [
[
"expo-tracking-transparency",
{
"userTrackingPermission": "此标识符将用于为你提供个性化广告。"
}
]
]
}⚠️ 注意: 请勿直接在中编写,应使用插件配置。预构建时会自动正确同步至Info.plist。
infoPlist代码实现:
typescript
import { requestTrackingPermissionsAsync } from 'expo-tracking-transparency';
async function requestTracking() {
const { status } = await requestTrackingPermissionsAsync();
// 返回值为 'granted' | 'denied' | 'undetermined'
}6.2 ATT設定の検証
6.2 ATT配置验证
bash
npx expo prebuild --clean
grep -A1 "NSUserTrackingUsageDescription" ios/YourApp/Info.plistbash
npx expo prebuild --clean
grep -A1 "NSUserTrackingUsageDescription" ios/YourApp/Info.plistPhase 7: App Review
阶段7:应用审核
7.1 Review Timeline
7.1 审核时间线
| Type | Typical Duration |
|---|---|
| New App | 24-48 hours |
| Update | 24 hours |
| Expedited Review | 24 hours (request required) |
| 类型 | 典型时长 |
|---|---|
| 新应用 | 24-48小时 |
| 应用更新 | 24小时 |
| 加急审核 | 24小时(需申请) |
7.2 Common Rejection Reasons & Fixes
7.2 常见被拒原因与修复方案
1. Guideline 2.1 - App Completeness
1. 指南2.1 - 应用完整性
"Your app crashed during review" / "Black screen on launch"
原因:
- Provider(ThemeProvider等)がローディング中にを返している
null - AsyncStorage読み込み中に画面が真っ黒
Fix:
typescript
// Before (NG)
if (!isLoaded) {
return null;
}
// After (OK)
if (!isLoaded) {
return (
<View style={{ flex: 1, backgroundColor: '#1a1a2e', justifyContent: 'center', alignItems: 'center' }}>
<ActivityIndicator size="large" color="#059669" />
</View>
);
}"你的应用在审核期间崩溃" / "启动时黑屏"
原因:
- Provider(如ThemeProvider)在加载时返回
null - 读取AsyncStorage期间屏幕黑屏
修复:
typescript
// 之前的错误写法
if (!isLoaded) {
return null;
}
// 修复后的正确写法
if (!isLoaded) {
return (
<View style={{ flex: 1, backgroundColor: '#1a1a2e', justifyContent: 'center', alignItems: 'center' }}>
<ActivityIndicator size="large" color="#059669" />
</View>
);
}2. Guideline 5.1.2 - ATT Not Shown
2. 指南5.1.2 - ATT未显示
"App doesn't show ATT dialog"
原因:
- がベア文字列でプラグイン設定されている
expo-tracking-transparency - がInfo.plistに含まれていない
NSUserTrackingUsageDescription
Fix:
json
// Before (NG)
"plugins": ["expo-tracking-transparency"]
// After (OK)
"plugins": [
[
"expo-tracking-transparency",
{
"userTrackingPermission": "This identifier will be used to deliver personalized ads to you."
}
]
]"应用未显示ATT对话框"
原因:
- 以纯字符串形式配置,导致
expo-tracking-transparency未添加到Info.plistNSUserTrackingUsageDescription
修复:
json
// 之前的错误配置
"plugins": ["expo-tracking-transparency"]
// 修复后的正确配置
"plugins": [
[
"expo-tracking-transparency",
{
"userTrackingPermission": "此标识符将用于为你提供个性化广告。"
}
]
]3. Guideline 2.3 - Accurate Metadata
3. 指南2.3 - 元数据不准确
"Screenshots don't match app functionality"
Fix:
- スクリーンショットを最新版に更新
- 存在しない機能を表示しない
"截图与应用功能不符"
修复:
- 更新截图至最新版本
- 不要展示应用中不存在的功能
7.3 Responding to Rejection
7.3 回复被拒通知
- Resolution Centerで返信 (App Store Connect → Your App → Resolution Center)
- 修正内容を具体的に説明
- 再ビルド→再アップロード→再提出
- 在解决中心回复(App Store Connect → 你的应用 → 解决中心)
- 具体说明修复内容
- 重新构建→重新上传→重新提交
7.4 Resolution Center コメントテンプレート
7.4 解决中心回复模板
審査員に修正内容を伝えるコメント。英語で、具体的に書く。
向审核员说明修复内容的回复模板。请用英文书写,内容需具体。
Black Screen / Crash 修正時
黑屏/崩溃修复时
We have addressed the issue identified in the previous review:
**[Issue description] (fixed)**
- Root cause: [Technical explanation of what was wrong]
- Fix: [What was changed]
- File changed: [File path]
Build [N] contains this fix. Thank you for your review.我们已修复上一次审核中发现的问题:
**[问题描述](已修复)**
- 根本原因:[技术层面说明问题所在]
- 修复方案:[说明具体修改内容]
- 修改文件:[文件路径]
版本号[N]的构建已包含此修复。感谢你的审核。ATT Not Shown 修正時
ATT未显示修复时
We have addressed the ATT (App Tracking Transparency) issue:
**ATT dialog not shown (fixed)**
- Root cause: `expo-tracking-transparency` was configured as a bare string, causing `NSUserTrackingUsageDescription` to not be included in Info.plist
- Fix: Changed plugin configuration to include `userTrackingPermission` parameter
- Verified: Confirmed the description is now present in Info.plist via prebuild
Build [N] contains this fix. Thank you for your review.我们已修复ATT(应用追踪透明度)相关问题:
**ATT对话框未显示(已修复)**
- 根本原因:`expo-tracking-transparency`以纯字符串形式配置,导致`NSUserTrackingUsageDescription`未添加到Info.plist
- 修复方案:修改插件配置,添加`userTrackingPermission`参数
- 验证:通过预构建确认描述已正确添加到Info.plist
版本号[N]的构建已包含此修复。感谢你的审核。UIRequiredDeviceCapabilities 警告修正時
UIRequiredDeviceCapabilities警告修复时
We have addressed the compatibility warning:
**Mac/Vision Pro compatibility (fixed)**
- Removed `UIRequiredDeviceCapabilities: ["telephony"]` from Info.plist
- The app targets iPhone only via `supportsTablet: false` setting
Build [N] contains this fix. Thank you for your review.ポイント:
- 何が問題だったか(Root cause)
- 何を変更したか(Fix)
- どのビルドに含まれているか(Build N)
- 簡潔に、技術的に正確に
我们已修复兼容性警告:
**Mac/Vision Pro兼容性问题(已修复)**
- 从Info.plist中移除`UIRequiredDeviceCapabilities: ["telephony"]`
- 通过设置`supportsTablet: false`确保应用仅支持iPhone
版本号[N]的构建已包含此修复。感谢你的审核。要点:
- 明确说明问题根源(Root cause)
- 说明具体修改内容(Fix)
- 指明包含修复的构建版本(Build N)
- 简洁、技术准确
7.5 Requesting Expedited Review
7.5 申请加急审核
緊急時のみ:
- App Store Connect → Your App → App Review
- Contact Us → Request Expedited Review
- 理由を明確に説明
仅适用于紧急情况:
- 进入App Store Connect → 你的应用 → 应用审核
- 联系我们 → 申请加急审核
- 明确说明理由
Checklist: Pre-Submission
提交前检查清单
Technical
技术层面
- 作成済み
ExportOptions.plist - の
app.json,bundleIdentifier設定済みversion - ATTプラグイン設定済み(広告使用時)
- ローディング状態でUIを表示(を返さない)
null - 実機でテスト済み
- 已创建
ExportOptions.plist - 已在中设置
app.json、bundleIdentifierversion - 已配置ATT插件(若使用广告)
- 加载状态下显示UI(不返回)
null - 已在真机上完成测试
App Store Connect
App Store Connect层面
- App Privacy 設定済み
- Screenshots アップロード済み
- Description, Keywords 設定済み
- Support URL 設定済み
- 已设置应用隐私
- 已上传截图
- 已设置描述、关键词
- 已设置支持URL
Quick Commands Reference
常用命令参考
bash
undefinedbash
undefined=== CLI Build (推奨) ===
=== CLI构建(推荐) ===
npx expo prebuild --clean
xcodebuild -workspace ios/App.xcworkspace -scheme App -configuration Release
-archivePath build/App.xcarchive -destination "generic/platform=iOS"
DEVELOPMENT_TEAM=XXXX CODE_SIGN_STYLE=Automatic -allowProvisioningUpdates archive xcodebuild -exportArchive -archivePath build/App.xcarchive -exportPath build
-exportOptionsPlist ExportOptions.plist -allowProvisioningUpdates
-archivePath build/App.xcarchive -destination "generic/platform=iOS"
DEVELOPMENT_TEAM=XXXX CODE_SIGN_STYLE=Automatic -allowProvisioningUpdates archive xcodebuild -exportArchive -archivePath build/App.xcarchive -exportPath build
-exportOptionsPlist ExportOptions.plist -allowProvisioningUpdates
npx expo prebuild --clean
xcodebuild -workspace ios/App.xcworkspace -scheme App -configuration Release
-archivePath build/App.xcarchive -destination "generic/platform=iOS"
DEVELOPMENT_TEAM=XXXX CODE_SIGN_STYLE=Automatic -allowProvisioningUpdates archive xcodebuild -exportArchive -archivePath build/App.xcarchive -exportPath build
-exportOptionsPlist ExportOptions.plist -allowProvisioningUpdates
-archivePath build/App.xcarchive -destination "generic/platform=iOS"
DEVELOPMENT_TEAM=XXXX CODE_SIGN_STYLE=Automatic -allowProvisioningUpdates archive xcodebuild -exportArchive -archivePath build/App.xcarchive -exportPath build
-exportOptionsPlist ExportOptions.plist -allowProvisioningUpdates
=== EAS Build ===
=== EAS构建 ===
eas build --platform ios --profile production
eas submit --platform ios --latest
eas build --platform ios --profile production
eas submit --platform ios --latest
=== Debugging ===
=== 调试 ===
grep -A1 "NSUserTrackingUsageDescription" ios/App/Info.plist # ATT確認
eas build:view BUILD_ID --json # ビルドステータス確認
---grep -A1 "NSUserTrackingUsageDescription" ios/App/Info.plist # 检查ATT配置
eas build:view BUILD_ID --json # 检查构建状态
---Related Skills
相关技能
- android-play-store-submission: Google Play Store submission
- launch-strategy: App launch planning
- marketing-psychology: App Store optimization (ASO)
- android-play-store-submission: Google Play Store应用提交
- launch-strategy: 应用发布规划
- marketing-psychology: App Store优化(ASO)