适用人群:想开发并发布手机APP的开发者
难度:中等
预计阅读时间:30分钟
一、开发前准备
1.1 明确需求与技术选型
在开始编码之前,需要先回答三个问题:
| 问题 | 选项 | 建议 |
|---|---|---|
| 目标平台? | 仅Android / 仅iOS / 双平台 | 双平台优先选跨平台方案 |
| 团队情况? | 个人 / 小团队 / 大团队 | 个人和小团队选跨平台 |
| 应用类型? | 纯展示 / 社交 / 工具 / 游戏 | 游戏选Unity,其他选框架 |
1.2 技术方案对比
| 方案 | 语言 | 双平台 | 性能 | 开发效率 | 适用场景 |
|---|---|---|---|---|---|
| <strong>Flutter</strong> | Dart | 是 | 高 | 高 | 通用APP,推荐首选 |
| <strong>React Native</strong> | JavaScript | 是 | 中高 | 高 | 前端团队转移动端 |
| <strong>uni-app</strong> | Vue.js | 是 | 中 | 极高 | 国内项目,小程序联动 |
| <strong>Swift + SwiftUI</strong> | Swift | 仅iOS | 极高 | 高 | 纯iOS应用 |
| <strong>Kotlin + Compose</strong> | Kotlin | 仅Android | 极高 | 高 | 纯Android应用 |
| <strong>原生双端</strong> | Swift + Kotlin | 是 | 极高 | 低 | 大厂,性能要求极高 |
| <strong>Unity</strong> | C# | 是 | 高 | 中 | 游戏,3D应用 |
1.3 开发环境搭建
Flutter 环境
# 1. 安装Flutter SDK
# 下载:https://docs.flutter.dev/get-started/install
# Windows: 下载zip解压,配置PATH
# macOS: brew install flutter
# 2. 验证安装
flutter doctor
# 3. 配置国内镜像(重要!)
# Windows 设置环境变量:
# PUB_HOSTED_URL=https://pub.flutter-io.cn
# FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
# macOS ~/.zshrc 添加:
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
# 4. 创建项目
flutter create my_app
cd my_app
flutter run
Android 开发环境
步骤:
1. 下载安装 Android Studio
https://developer.android.com/studio
2. 打开 Android Studio → SDK Manager
安装:
- Android SDK (最新稳定版,如 API 34)
- Android SDK Build-Tools
- Android SDK Platform-Tools
- Android Emulator
3. 配置 ANDROID_HOME 环境变量
Windows: C:\Users\你的用户名\AppData\Local\Android\Sdk
macOS: ~/Library/Android/sdk
4. 创建模拟器
Android Studio → Device Manager → Create Virtual Device
选择 Pixel 7 → 下载系统镜像 → 完成
5. 连接真机(推荐)
手机开启「开发者选项」→「USB调试」
USB连接电脑,确认授权
iOS 开发环境(需要Mac)
步骤:
1. 安装 Xcode(App Store搜索安装)
版本要求:最新稳定版
2. 打开 Xcode → Preferences → Locations
确认 Command Line Tools 已选择
3. 安装 CocoaPods(iOS依赖管理)
sudo gem install cocoapods
4. 注册 Apple Developer 账号
个人账号:$99/年(约688元)
企业账号:$299/年
注册地址:https://developer.apple.com/programs/
5. 创建模拟器
Xcode → Window → Devices and Simulators
或直接在 Xcode 顶部选择模拟器
二、APP 开发流程
2.1 项目结构(Flutter示例)
my_app/
├── lib/
│ ├── main.dart # 入口文件
│ ├── app.dart # 应用配置(路由、主题)
│ ├── pages/ # 页面
│ │ ├── home/
│ │ │ └── home_page.dart
│ │ ├── login/
│ │ │ └── login_page.dart
│ │ └── profile/
│ │ └── profile_page.dart
│ ├── widgets/ # 公共组件
│ │ ├── app_bar.dart
│ │ └── loading.dart
│ ├── services/ # 网络请求
│ │ ├── api_client.dart
│ │ └── user_service.dart
│ ├── models/ # 数据模型
│ │ └── user.dart
│ ├── providers/ # 状态管理
│ │ └── auth_provider.dart
│ └── utils/ # 工具函数
│ ├── constants.dart
│ └── storage.dart
├── assets/ # 静态资源
│ ├── images/
│ └── fonts/
├── android/ # Android原生代码
├── ios/ # iOS原生代码
├── pubspec.yaml # 依赖配置
└── test/ # 测试
2.2 核心开发步骤
阶段1:基础框架搭建(1-2周)
├── 路由配置(页面导航)
├── 网络请求封装(Dio/HTTP)
├── 状态管理(Provider/Riverpod/Bloc)
├── 本地存储(SharedPreferences/SQLite)
├── 主题与样式统一
└── 错误处理与日志
阶段2:核心页面开发(2-4周)
├── 启动页/引导页
├── 登录注册(手机号/微信/Apple ID)
├── 首页(列表/搜索/Tab切换)
├── 详情页
├── 个人中心
└── 设置页
阶段3:功能完善(1-2周)
├── 推送通知(极光/个推/FCM)
├── 分享功能(微信/微博)
├── 支付功能(微信支付/支付宝)
├── 图片选择与上传
├── 地图与定位
└── 版本更新检查
阶段4:测试与优化(1周)
├── 功能测试
├── 性能测试(启动速度/内存/FPS)
├── 兼容性测试(不同机型/系统版本)
├── UI适配(刘海屏/折叠屏)
└── 网络异常处理
2.3 常用依赖(Flutter)
# pubspec.yaml
dependencies:
flutter:
sdk: flutter
# 网络请求
dio: ^5.4.0
# 状态管理
provider: ^6.1.0
# 或 riverpod: ^2.4.0
# 或 flutter_bloc: ^8.1.0
# 本地存储
shared_preferences: ^2.2.0
sqflite: ^2.3.0
# 路由
go_router: ^13.0.0
# UI组件
cached_network_image: ^3.3.0
flutter_screenutil: ^5.9.0 # 屏幕适配
pull_to_refresh: ^2.0.0 # 下拉刷新
# 工具
url_launcher: ^6.2.0
share_plus: ^7.2.0
image_picker: ^1.0.0
package_info_plus: ^5.0.0
# 推送
jpush_flutter: ^2.5.0 # 极光推送
# 微信SDK
fluwx: ^4.5.0
# 支付
// 注意:支付需要原生集成
三、APP 签名与打包
3.1 Android 签名
# 1. 生成签名密钥(keystore)
keytool -genkey -v -keystore ~/my-app-key.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias my-app
# 填写信息:
# - 密码(牢记!丢失无法找回)
# - 姓名、组织、城市、省份、国家代码(CN)
# 确认后生成 my-app-key.jks 文件
# 2. 配置签名(android/app/build.gradle)
// android/app/build.gradle
android {
signingConfigs {
release {
storeFile file('path/to/my-app-key.jks')
storePassword 'your-store-password'
keyAlias 'my-app'
keyPassword 'your-key-password'
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true // 代码混淆
shrinkResources true // 资源压缩
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')
}
}
}
# 3. 打包APK(调试用)
flutter build apk --release
# 4. 打包AAB(上架Google Play必须用AAB)
flutter build appbundle --release
# 产物位置:
# APK: build/app/outputs/flutter-apk/app-release.apk
# AAB: build/app/outputs/bundle/release/app-release.aab
3.2 iOS 签名
签名流程(在Xcode中操作):
1. 打开 ios/Runner.xcworkspace
2. 选择 Runner 项目 → Signing & Capabilities
3. 勾选 "Automatically manage signing"
4. 选择 Team(你的Apple Developer账号)
5. Bundle Identifier 填写唯一标识
格式:com.yourcompany.appname
例:com.zhangsan.myapp
6. Xcode会自动创建:
- Development Certificate(开发证书)
- Development Provisioning Profile(开发描述文件)
7. 如果需要真机调试,还需要:
- 将设备UDID添加到开发者账号
- 重新生成描述文件
# 打包IPA
# 方式1:Xcode菜单
# Product → Archive → Distribute App → App Store Connect
# 方式2:命令行
flutter build ipa --release
# 产物位置:build/ios/ipa/
四、Android 上架流程
4.1 Google Play 上架
完整流程:
第1步:注册开发者账号
├── 访问 https://play.google.com/console
├── 使用Google账号登录
├── 支付一次性注册费 $25(约175元)
├── 填写开发者信息(个人或公司)
└── 等待审核(通常1-3天)
第2步:准备上架材料
├── APP名称(不超过30字)
├── 简短描述(80字以内)
├── 完整描述(4000字以内)
├── APP图标(512x512 PNG)
├── 功能图片(1024x500)
├── 手机截图(至少2张,16:9或9:16)
├── 7寸平板截图(可选)
├── 10寸平板截图(可选)
├── 隐私政策URL(必须有!)
├── 内容分级问卷
└── 数据安全声明
第3步:创建应用
├── Google Play Console → 创建应用
├── 选择默认语言、应用名称
├── 选择应用类型(应用/游戏)
├── 选择免费/付费
└── 确认内容政策合规
第4步:上传AAB包
├── 左侧菜单 → 正式版 → 创建新版本
├── 上传 app-release.aab
├── 填写版本号和版本名称
├── 填写发布说明
└── 保存
第5步:配置商店信息
├── 商店设置 → 应用详情
│ ├── 应用名称
│ ├── 简短描述
│ ├── 完整描述
│ ├── 图形资源(图标、截图、功能图片)
│ └── 分类(应用/游戏 → 具体分类)
├── 商店设置 → 主要商品详情
│ ├── 内容分级(填写问卷后自动评分)
│ ├── 目标受众群体
│ └── 新闻应用声明
└── 商店设置 → 数据安全
├── 数据收集声明
├── 数据共享声明
└── 安全做法声明
第6步:设置定价与分发
├── 定价:免费或设置价格
├── 分发国家/地区:选择目标市场
├── 设备类型:手机/平板/可穿戴/TV
└── Android版本要求
第7步:提交审核
├── 检查所有必填项是否完成
├── 点击「提交审核」
├── 首次审核通常需要 3-7 天
├── 更新审核通常 1-3 天
└── 审核通过后自动发布(或手动发布)
4.2 国内 Android 应用市场上架
国内没有统一市场,需要在多个商店分别提交。以下是主流市场:
| 市场 | 开发者注册 | 审核时间 | 特点 |
|---|---|---|---|
| 华为应用市场 | 免费 | 1-3天 | 华为设备预装,流量大 |
| 小米应用商店 | 免费 | 1-3天 | 小米设备预装 |
| OPPO软件商店 | 免费 | 1-3天 | OPPO/一加设备 |
| vivo应用商店 | 免费 | 1-3天 | vivo/iQOO设备 |
| 应用宝(腾讯) | 免费 | 1-5天 | 微信生态,流量大 |
| 360手机助手 | 免费 | 1-3天 | 安全审核严格 |
| 百度手机助手 | 免费 | 1-3天 | 搜索流量 |
| 阿里应用分发(豌豆荚) | 免费 | 1-3天 | 阿里系 |
| 魅族应用商店 | 免费 | 1-3天 | 魅族设备 |
| 三星应用商店 | 免费 | 3-7天 | 三星设备 |
国内上架必备材料:
1. 软件著作权(软著)
├── 必须!所有国内商店都要求
├── 申请周期:普通30-40工作日,加急10-15工作日
├── 费用:免费(自己申请)或 300-800元(代理加急)
└── 申请地址:https://www.ccopyright.com.cn/
2. ICP备案
├── 如果APP有联网功能,需要ICP备案号
├── 主体:企业或个人
└── 周期:约20个工作日
3. APP隐私政策
├── 必须有独立的隐私政策页面
├── 必须说明数据收集、使用、共享规则
└── 建议请法务审核
4. 企业资质(公司上架)
├── 营业执照
├── 法人身份证
└── 对公银行账户
5. 个人资质
├── 身份证正反面
└── 手持身份证照片
6. APP安全评估报告(部分商店要求)
└── 有资质的第三方检测机构出具
国内上架通用流程:
1. 注册开发者账号(各平台分别注册)
2. 实名认证(企业/个人)
3. 上传APK(签名后)
4. 填写应用信息
- 应用名称、简介、分类
- 截图(4-6张)
- 图标(512x512)
- 隐私政策URL
5. 提交审核
6. 审核通过后上架
7. 如被拒,按反馈修改后重新提交
4.3 常见被拒原因及解决
| 被拒原因 | 解决方案 |
|---|---|
| 隐私政策缺失或不完善 | 添加完整的隐私政策页面 |
| 缺少软著 | 提前申请软件著作权 |
| 应用闪退/崩溃 | 多机型测试,修复崩溃 |
| 功能与描述不符 | 确保描述准确 |
| 涉及敏感内容 | 移除敏感内容或取得资质 |
| SDK合规问题 | 使用合规的第三方SDK |
| 权限申请过多 | 只申请必要权限,说明用途 |
| 广告违规 | 确保广告合规,可关闭 |
| 支付未接入官方支付 | 国内某些商店要求接入其支付SDK |
| 版本太低/架构问题 | 确保支持64位架构(arm64-v8a) |
五、iOS 上架流程(App Store)
5.1 完整上架流程
第1步:Apple Developer 注册
├── 访问 https://developer.apple.com/programs/
├── 使用Apple ID登录
├── 选择账号类型
│ ├── 个人(Individual):$99/年,适合独立开发者
│ ├── 公司(Organization):$99/年,需要D-U-N-S编号
│ └── 企业(Enterprise):$299/年,仅内部分发
├── 填写个人信息
├── 支付年费 $99(约688元)
└── 等待审核(个人1-2天,公司可能需要1-2周)
第2步:创建 App ID 和证书
├── 开发者后台 → Certificates, Identifiers & Profiles
├── 创建 App ID
│ ├── Description: 应用描述
│ └── Bundle ID: com.yourcompany.appname(与Xcode一致)
├── 创建证书
│ ├── Development Certificate(开发调试用)
│ └── Distribution Certificate(发布用)
└── 创建描述文件(Provisioning Profile)
├── Development Profile(开发用)
└── Distribution Profile(发布用)
第3步:在 App Store Connect 创建应用
├── 访问 https://appstoreconnect.apple.com
├── 我的App → 点击「+」新建App
├── 填写信息
│ ├── 平台:iOS
│ ├── 名称:应用名称(用户可见)
│ ├── 主要语言:简体中文
│ ├── Bundle ID:选择已创建的
│ ├── SKU:唯一标识符(内部用)
│ └── 用户访问权限:完全访问权限
└── 创建完成
第4步:配置应用信息
├── App Store 信息
│ ├── 副标题(30字以内)
│ ├── 分类(主要分类/次要分类)
│ ├── 内容版权
│ └── 年龄分级(填写问卷)
├── 价格与销售范围
│ ├── 价格:免费或选择价格等级
│ └── 销售范围:选择国家/地区
├── 隐私
│ ├── 隐私政策URL(必须!)
│ └── App隐私 → 数据类型声明
└── App审核信息
├── 联系信息(姓名、电话、邮箱)
├── 登录信息(如果需要登录才能体验)
└── 备注(特殊说明)
第5步:构建版本
├── 方式1:通过Xcode上传
│ ├── Xcode → Product → Archive
│ ├── Archive完成 → Distribute App
│ ├── 选择 App Store Connect
│ ├── Upload → 等待处理完成
│ └── 约15-30分钟后在App Store Connect可见
│
├── 方式2:通过Transporter上传
│ ├── 下载 Apple Transporter(App Store)
│ ├── 登录Apple账号
│ ├── 拖入IPA文件
│ └── 点击交付
│
└── 方式3:命令行上传
xcodebuild -exportArchive \
-archivePath build/Runner.xcarchive \
-exportPath build/output \
-exportOptionsPlist ExportOptions.plist
# 然后用 altool 或 xcrun 上传
xcrun altool --upload-app \
-f build/output/Runner.ipa \
-t ios \
-u your@apple.id \
-p your-app-specific-password
第6步:提交审核
├── App Store Connect → 选择构建版本
├── 填写版本信息
│ ├── 版本号(如 1.0.0)
│ ├── 新功能描述
│ └── 审核备注
├── 添加预览视频(可选,推荐)
├── 添加App预览和截图
│ ├── 6.7英寸(iPhone 15 Pro Max)必填
│ ├── 6.5英寸(iPhone 11 Pro Max)必填
│ ├── 5.5英寸(iPhone 8 Plus)必填
│ ├── 12.9英寸 iPad(如支持iPad)必填
│ └── 截图要求:PNG或JPEG,不含Alpha通道
├── 检查所有必填项
├── 点击「提交以供审核」
└── 等待审核结果
第7步:审核结果处理
├── 通过 → 自动上架或手动发布
├── 被拒 → 查看拒绝原因 → 修复 → 重新提交
│ ├── Metadata Rejected:修改信息即可,不需重新上传
│ └── Binary Rejected:需要修改代码,重新上传
└── 加急审核:特殊情况可申请加急(每年有限次数)
5.2 App Store 审核指南要点
Apple审核重点(必须遵守):
1. 性能
├── APP不能崩溃或有严重Bug
├── 启动时间合理
└── 不能有未完成的功能(占位符)
2. 设计
├── 遵循 Human Interface Guidelines (HIG)
├── 适配所有支持的屏幕尺寸
└── 不能抄袭其他应用
3. 法律
├── 隐私政策必须完整且可访问
├── 数据收集必须有用户同意
├── 不能收集不必要的数据
└── 必须提供删除账号功能
4. 业务
├── 虚拟物品必须使用Apple内购(IAP)
├── 不能引导用户到外部支付
├── 订阅必须明确告知价格和周期
└── 免费试用必须有取消方式
5. 安全
├── 用户生成内容需要举报机制
├── 不能包含有害内容
├── 不能有隐藏功能
└── 加密需要向美国提交分类报告
6. 常见被拒理由
├── Guideline 2.1:崩溃/Bug
├── Guideline 2.3:性能问题
├── Guideline 3.1.1:支付问题(未使用IAP)
├── Guideline 4.0:设计问题
├── Guideline 5.1.1:数据收集和存储
└── Guideline 5.1.2:缺少隐私政策
5.3 审核时间与费用
| 项目 | 时间 | 费用 |
|---|---|---|
| 注册开发者 | 1-14天 | $99/年 |
| 首次审核 | 1-3天(平均24-48小时) | 免费 |
| 更新审核 | 数小时-2天 | 免费 |
| 加急审核 | 24小时内 | 免费(有限次数) |
| TestFlight测试 | 即时 | 免费 |
| 内购分成 | - | Apple抽成15-30% |
六、TestFlight 测试
TestFlight 是Apple官方的测试分发平台,上架前必须测试。
使用流程:
1. 在 App Store Connect 中上传构建版本
2. 内部测试(Internal Testing)
├── 最多100人
├── 添加团队成员的Apple ID
├── 审核后几分钟可用
└── 无需Apple审核
3. 外部测试(External Testing)
├── 最多10000人
├── 通过链接邀请
├── 首次需要Beta App审核(约24小时)
└── 后续更新无需审核
4. 测试人员安装
├── 安装 TestFlight App
├── 点击邀请链接
├── 安装测试版APP
└── 可直接在APP内反馈问题
七、版本更新流程
Android 更新:
1. 修改版本号(pubspec.yaml 中 version: 1.0.1+2)
2. 重新打包AAB/APK
3. 上传到各应用商店
4. 填写更新日志
5. 提交审核
6. 审核通过后发布
iOS 更新:
1. 修改版本号(Xcode → General → Version / Build)
2. 重新Archive并上传
3. App Store Connect 中选择新构建版本
4. 填写「此版本的新增内容」
5. 提交审核
6. 审核通过后发布
版本号规范(语义化版本):
Major.Minor.Patch(如 1.2.3)
Major:大版本更新(可能不兼容旧版)
Minor:新功能
Patch:Bug修复
Xcode Build号必须递增(纯数字即可)
Android versionCode 必须递增
八、运营与数据分析
| 工具 | 用途 | 平台 |
|---|---|---|
| Google Play Console | 下载量/评分/崩溃分析 | Android |
| App Store Connect | 下载量/评分/崩溃分析 | iOS |
| Firebase Analytics | 用户行为分析 | 双平台 |
| 友盟统计 | 国内主流数据统计 | 双平台 |
| GrowingIO | 用户行为分析 | 双平台 |
| Bugly | 崩溃监控 | 双平台 |
| Sentry | 错误监控 | 双平台 |
九、费用清单
| 项目 | 费用 | 说明 |
|---|---|---|
| Apple开发者账号 | $99/年(约688元) | 必须 |
| Google Play开发者 | $25一次性(约175元) | 必须 |
| 软件著作权 | 0-800元 | 国内上架必须 |
| 域名+服务器 | 100-500元/月 | 根据业务量 |
| 推送服务 | 0-500元/月 | 极光/个推有免费额度 |
| 短信验证码 | 0.04-0.06元/条 | 注册登录用 |
| 微信开放平台 | 300元/年 | 微信登录/分享/支付 |
| SSL证书 | 0-几千元/年 | Let's Encrypt免费 |
| <strong>总计(最低)</strong> | <strong>约1500元首年</strong> | 个人独立开发 |