Posted in

Expo Go项目打包发布:iOS App Store与Google Play全攻略

第一章:Expo Go项目打包发布概述

Expo Go 是一个用于开发和调试 React Native 应用的强大平台,它允许开发者在不使用原生构建工具的情况下快速预览和测试应用。然而,在将 Expo Go 项目部署到生产环境时,需要进行打包和发布操作。Expo 提供了 expo buildexpo export 两种主要方式来生成可发布的应用包。

对于希望发布到应用商店(如 Apple App Store 或 Google Play)的项目,推荐使用 expo build 命令。该命令会根据配置文件 app.jsonapp.config.js 中的设置,向 Expo 的云端构建服务提交请求,生成对应的 .apk(Android)或 .ipa(iOS)文件。执行命令如下:

expo build:android   # 构建 Android 包
expo build:ios       # 构建 iOS 包

构建完成后,开发者可以通过 Expo 提供的下载链接获取应用包并提交至应用商店。

而对于仅需导出静态资源用于 Web 部署的场景,可使用 expo export 命令生成静态资源目录:

expo export

该命令会在项目根目录下生成 dist 文件夹,包含 HTML、JS 和资源文件,适用于部署到 CDN 或静态网站托管服务。

构建方式 适用场景 输出格式
expo build 应用商店发布 .apk / .ipa
expo export Web 部署 HTML/JS 资源

第二章:环境准备与项目配置

2.1 开发环境搭建与版本管理

在软件开发过程中,构建统一、可复现的开发环境是保障团队协作效率和代码质量的前提。一个规范的开发环境应包括语言运行时、依赖管理工具、IDE配置以及自动化构建脚本。

版本控制策略

使用 Git 作为版本控制系统,结合 Git Flow 工作流,可有效管理功能开发、发布和热修复分支。以下是初始化项目仓库的基本流程:

# 初始化 Git 仓库并配置远程地址
git init
git remote add origin https://github.com/yourname/yourrepo.git

开发环境容器化配置

借助 Docker 可快速部署一致的运行环境。以下是一个基础的 Dockerfile 示例:

# 使用官方 Node.js 镜像作为基础镜像
FROM node:18-alpine

# 设置工作目录
WORKDIR /app

# 安装项目依赖
COPY package*.json ./
RUN npm install

# 暴露服务运行端口
EXPOSE 3000

该配置文件定义了从基础镜像构建容器的完整流程,确保开发、测试、生产环境的一致性。

2.2 项目依赖检查与优化策略

在现代软件开发中,项目依赖管理是保障构建效率与系统稳定的关键环节。依赖过多或版本混乱,可能导致构建失败、安全漏洞,甚至运行时异常。

依赖检查工具实践

使用如 npm ls(Node.js)或 pipdeptree(Python)等工具,可清晰展示依赖树:

npm ls

该命令输出项目中所有直接与间接依赖及其版本,便于发现冲突或冗余依赖。

依赖优化策略

常见的优化方式包括:

  • 依赖扁平化:通过工具自动合并相同依赖的不同版本
  • 按需加载:使用动态导入(import())或代码分割技术
  • 依赖升级与清理:定期审查并移除未使用依赖

优化前后对比

指标 优化前 优化后
构建时间 120s 75s
包体积 25MB 16MB
安全漏洞数 8 1

通过持续的依赖管理与策略调整,项目在构建效率、运行性能与安全性方面均能得到显著提升。

配置App图标与启动画面

在移动应用开发中,App图标和启动画面是用户对应用的第一印象,直接影响用户体验与品牌识别。

图标配置规范

App图标需适配多种分辨率,常见尺寸包括 1x2x3x。在 iOS 中,需在 Assets.xcassets 中配置 AppIcon.appiconset 文件,结构如下:

{
  "images": [
    { "size": "60x60", "scale": "2x", "filename": "icon-60x60@2x.png" },
    { "size": "60x60", "scale": "3x", "filename": "icon-60x60@3x.png" }
  ],
  "info": { "version": 1, "author": "xcode" }
}

上述配置描述了图标资源的尺寸、倍率与文件名,确保不同设备上显示清晰。

启动画面配置方式

启动画面可通过 LaunchScreen.storyboard 或静态图片方式配置。使用 LaunchScreen.storyboard 可实现动态适配,推荐使用 Auto Layout 布局,适配 iPhone、iPad 及全面屏设备。

2.4 设置iOS与Android平台基础参数

在跨平台移动开发中,合理配置iOS与Android的基础参数是保障应用正常运行的前提。本节将介绍如何在两个平台上进行基础环境设置。

iOS基础参数配置

在iOS平台中,主要通过Info.plist文件进行应用配置,例如设置应用名称、标识符、权限请求等:

<key>CFBundleName</key>
<string>MyApp</string>
<key>NSCameraUsageDescription</key>
<string>本应用需要访问摄像头以实现拍照功能</string>

逻辑说明:

  • CFBundleName定义应用显示名称;
  • NSCameraUsageDescription是iOS 10+要求的权限说明字段,必须明确告知用户使用目的。

Android基础参数配置

在Android中,基础参数主要配置在AndroidManifest.xml中:

<application
    android:allowBackup="true"
    android:icon="@drawable/app_icon"
    android:label="@string/app_name" >
</application>

参数说明:

  • android:allowBackup控制是否启用备份功能;
  • android:icon指定应用图标资源路径;
  • android:label为应用名称,通常引用字符串资源。

平台配置差异对比

配置项 iOS (Info.plist) Android (AndroidManifest.xml)
应用名称 CFBundleName android:label
权限声明 需针对每项权限添加描述 <uses-permission>中声明
图标设置 Assets.xcassets android:icon

开发建议

  • 在多环境配置时(如开发/测试/生产),建议使用构建脚本自动化切换参数;
  • 对于敏感参数(如API地址),推荐使用构建时注入方式,避免硬编码。

通过合理配置iOS与Android的基础参数,可以为后续功能开发打下坚实基础。

2.5 使用Expo Config Plugin定制构建流程

Expo Config Plugin 是 Expo 提供的一项强大功能,允许开发者在构建应用时动态修改 app.json 配置,实现构建流程的自动化与个性化定制。

插件的基本结构

一个典型的 Expo Config Plugin 是一个 JavaScript 函数,接收当前的配置对象,并返回修改后的配置:

// withMyPlugin.js
const withMyPlugin = (config) => {
  return {
    ...config,
    extra: {
      ...(config.extra || {}),
      customField: 'custom-value',
    },
  };
};

module.exports = withMyPlugin;

逻辑说明:

  • config 是当前的 Expo 配置对象;
  • extra 字段通常用于注入环境变量或自定义配置;
  • 通过展开运算符保留原有配置,避免覆盖。

应用插件流程

app.json 中引用插件:

{
  "plugins": ["./withMyPlugin.js"]
}

构建时,Expo 会自动加载并执行插件逻辑,实现配置注入或修改。

第三章:iOS平台打包与App Store部署

3.1 创建与配置Apple开发者账号

要进行iOS应用的开发与发布,首先需要创建并配置Apple开发者账号。该账号是接入Apple生态系统的基础,可用于访问开发工具、提交App至App Store等关键操作。

注册Apple开发者账号

访问 Apple Developer官网,点击“Account”进入登录界面。使用Apple ID登录或创建一个新ID。登录后,选择“Enroll”注册开发者计划,个人或企业可分别选择“Individual”或“Organization”类型。

账号类型与权限管理

Apple开发者账号分为个人、企业及教育三类,不同类型的账号在权限与年费上有所不同:

账号类型 年费(美元) 可发布App数量 团队成员管理
个人 99 1 不支持
企业 299 无限 支持
教育 免费 仅限教育用途 支持

配置开发者账户信息

注册完成后,需完善账户信息,包括联系方式、银行账户(用于收益结算)、税务信息等。这些信息是App上架前的必备条件。

添加设备与证书管理

进入“Certificates, Identifiers & Profiles”面板,可创建开发/发布证书、注册设备及配置App ID。例如,创建开发证书的流程如下:

# 生成CSR文件(Certificate Signing Request)
# 在“钥匙串访问”中选择“证书助理” -> “创建证书请求”
# 输入邮箱与常用名称,选择“存储到磁盘”

上述命令并非终端执行命令,而是通过图形界面完成证书请求的生成。后续需上传该CSR文件至开发者中心以生成证书。

3.2 构建iOS应用包(IPA)

在iOS开发中,构建IPA(iOS App Store Package)是将应用部署到设备或提交到App Store的关键步骤。Xcode提供了图形化界面完成打包操作,也可以通过命令行工具xcodebuildxcrun实现自动化构建。

自动化构建示例

xcodebuild -workspace MyApp.xcworkspace \
           -scheme MyApp \
           -sdk iphoneos \
           -configuration Release \
           clean build

上述命令使用xcodebuild对项目进行清理并构建Release版本。参数说明如下:

  • -workspace:指定工作区文件
  • -scheme:指定构建的scheme
  • -sdk:指定SDK版本,如iphoneos用于真机构建
  • -configuration:构建配置,通常为Release

打包流程示意

graph TD
    A[编写代码] --> B[资源管理与配置]
    B --> C[构建可执行文件]
    C --> D[签名与打包]
    D --> E[生成IPA文件]

提交至App Store Connect全流程解析

将应用提交至 App Store Connect 是 iOS 应用发布流程中的关键环节,涉及多个步骤和配置项。

准备阶段

在提交前,需确保以下内容已就绪:

  • 应用的基本信息(名称、类别、关键词等)
  • 图标与截图素材
  • 构建版本已通过 Archive 阶段
  • 已正确配置 App Store Connect 中的发布元数据

提交流程图解

graph TD
    A[开始提交] --> B{是否完成元数据配置}
    B -- 是 --> C[上传构建版本]
    C --> D[等待构建处理完成]
    D --> E[在App Store Connect中关联构建]
    E --> F[提交审核]

使用 Xcode 上传构建版本

上传构建版本通常使用 Xcode 的 Product > Archive 功能,随后点击 Distribute App 并选择 App Store Connect 作为发布目标。

# 使用命令行工具 altool 上传构建版本示例
xcrun altool --upload-app -f YourApp.ipa -t ios -u your_apple_id@example.com -p your_app_specific_password

参数说明

  • -f:指定要上传的 .ipa 文件路径
  • -t:平台类型,如 ios
  • -u:Apple ID 用户名
  • -p:用于 App Store Connect 的专用应用密码

上传成功后,可在 App Store Connect 中看到新构建版本,并将其与准备中的发布版本关联。

审核提交

确认构建版本与元数据无误后,点击“提交审核”,Apple 将进入审核流程。通常需要 1~3 天完成审核。

第四章:Android平台打包与Google Play部署

生成签名密钥与配置安全策略

在系统安全体系构建中,生成签名密钥与配置安全策略是保障通信完整性和身份认证的关键步骤。

密钥生成与管理

通常使用非对称加密算法(如RSA或ECDSA)生成签名密钥对。以下是使用OpenSSL生成RSA密钥对的示例:

# 生成2048位RSA私钥
openssl genrsa -out private_key.pem 2048

# 从私钥中提取公钥
openssl rsa -in private_key.pem -pubout -out public_key.pem

上述命令生成的 private_key.pem 为私钥文件,应严格保护;public_key.pem 为公钥文件,可用于验证签名。

安全策略配置示例

安全策略通常包括密钥有效期、签名算法限制、访问控制等。以下是一个简化策略配置示例:

策略项 配置值
密钥类型 RSA
密钥长度 2048 位及以上
签名算法 SHA256WithRSA
有效期 1年
自动轮换 开启

策略执行流程

通过以下流程图展示密钥生成与策略执行的基本流程:

graph TD
    A[开始] --> B[生成密钥对]
    B --> C[加载安全策略]
    C --> D{策略是否通过}
    D -- 是 --> E[启用签名服务]
    D -- 否 --> F[拒绝启动,输出错误]

构建Android应用包(APK/AAB)

Android应用的构建过程是将源码、资源文件和依赖库打包为可部署的APK(Android Package)或AAB(Android App Bundle)格式。APK是传统的应用包格式,而AAB是Google Play推荐的现代发布格式,支持按需分发模块化功能。

构建流程概览

./gradlew assembleRelease

该命令会触发Gradle构建流程,依次执行:资源编译、代码优化、签名打包等步骤。其中:

  • assembleRelease 表示构建正式发布版本
  • 构建结果输出在 app/release/ 目录下

APK与AAB对比

格式 是否支持动态功能 包体积优化 应用商店要求
APK 静态拆分支持 基础格式
AAB 支持 推荐格式

构建配置示例

android {
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}
  • minifyEnabled true 表示启用代码压缩
  • proguardFiles 指定混淆规则文件路径

构建优化策略

随着项目规模扩大,构建时间可能显著增长。采用模块化架构、增量构建和CI缓存策略,可显著提升构建效率。同时,AAB格式结合Play Console的动态功能分发能力,可进一步优化用户下载体验。

4.3 Google Play控制台上传与版本管理

在完成应用构建后,Google Play控制台是发布与版本管理的核心平台。通过控制台,开发者可以上传不同版本的 APK 或 AAB 文件,并对发布渠道(如生产、测试、内部测试)进行精细化管理。

应用版本升级流程

Google Play 支持多版本迭代管理,每次上传需确保版本号(versionCode)递增。以下是版本更新的基本流程:

graph TD
    A[准备新版本] --> B{版本号是否递增?}
    B -- 是 --> C[构建AAB/APK]
    C --> D[上传至Play控制台]
    D --> E[选择发布轨道]
    E --> F[提交审核]

多渠道发布管理

Google Play 控制台支持以下发布轨道:

  • 生产轨道(Production)
  • 测试轨道(Testing)
  • 内部测试轨道(Internal testing)

通过这些轨道,开发者可以实现灰度发布和A/B测试。

版本回滚操作

如遇线上问题,可通过控制台快速回滚至历史版本。Google Play 会保留最近三次上传的版本记录,确保版本可控。

4.4 应用描述与多语言支持设置

在多语言支持设置中,应用描述的本地化是提升用户体验的重要环节。通常,我们会在应用配置文件中定义不同语言的资源文件。

例如,在 Android 应用中,通过 res/values-xx/strings.xml 实现语言适配:

<!-- res/values-zh/strings.xml -->
<resources>
    <string name="app_name">我的应用</string>
    <string name="description">这是一个多语言支持的应用示例。</string>
</resources>
<!-- res/values-en/strings.xml -->
<resources>
    <string name="app_name">My App</string>
    <string name="description">This is an example of a multilingual supported app.</string>
</resources>

上述代码分别定义了中文和英文的语言资源,系统会根据设备语言自动加载对应资源。其中:

  • values-zh 表示简体中文资源目录
  • values-en 表示英文资源目录
  • strings.xml 中定义了具体的本地化字符串内容

通过这种方式,可以实现应用描述、界面文案等内容的多语言动态适配,提升国际化能力。

第五章:后续维护与更新策略

在系统上线并稳定运行后,后续的维护与更新工作成为保障系统长期可用性和安全性的关键环节。本章将围绕版本控制、监控报警、热更新机制、以及自动化运维等核心方面,结合实际案例,探讨一套行之有效的维护更新策略。

1. 版本控制与灰度发布

采用 Git 作为版本控制系统,并结合语义化版本号(如 v1.2.3)进行管理,可以有效追踪每一次变更。推荐使用 Git Flow 分支管理模型,主分支(main)用于生产环境,开发分支(develop)用于集成测试,功能分支(feature)用于具体开发任务。

灰度发布是一种降低更新风险的策略,具体做法是将新版本先部署给一小部分用户,观察其行为是否符合预期。例如,可通过 Nginx 配置按用户 IP 哈希分配流量:

upstream backend {
    hash $request_header_or_ip consistent;
    server 10.0.0.1;
    server 10.0.0.2;
}

2. 系统监控与自动报警

部署 Prometheus + Grafana 监控体系,可以实时掌握系统资源使用情况和业务指标。通过 Prometheus 的 Exporter 采集数据,再配置 Alertmanager 实现报警机制,例如 CPU 使用率超过 90% 持续 5 分钟时发送告警邮件。

下表列出了一些关键监控指标及其阈值建议:

指标名称 阈值 触发动作
CPU 使用率 90% 邮件 + 钉钉通知
内存使用率 85% 邮件通知
请求延迟(P99) 1s 钉钉通知
错误请求率 5% 自动回滚

3. 热更新机制与不停机部署

在部分关键服务中,如游戏服务器或金融交易系统,停机更新是不可接受的。可采用 Erlang/OTP 或 Go 的 plugin 机制实现热更新。以 Go 为例,使用 plugin.Open() 加载 .so 插件文件,实现函数级的动态替换。

结合 Kubernetes 的滚动更新策略,可在不中断服务的前提下逐步替换 Pod:

spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0

4. 自动化运维与灾备恢复

使用 Ansible 编写 Playbook 实现一键部署、配置同步和回滚操作。例如,部署服务的 Playbook 示例:

- name: Deploy service
  hosts: servers
  tasks:
    - name: Copy binary
      copy:
        src: myservice
        dest: /opt/myservice
    - name: Restart service
      service:
        name: myservice
        state: restarted

灾备方面,应定期进行数据备份与恢复演练。建议采用 AWS S3 + RDS Snapshot 的组合,实现数据异地备份,并设置自动恢复测试任务,确保灾难发生时能快速恢复服务。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注