当前位置: 首页 > news >正文

Hackers发布流程完全指南:从TestFlight到App Store的完整流程

Hackers发布流程完全指南:从TestFlight到App Store的完整流程

【免费下载链接】HackersHackers is an elegant iOS app for reading Hacker News written in Swift.项目地址: https://gitcode.com/gh_mirrors/ha/Hackers

Hackers是一个优雅的iOS Hacker News阅读应用,采用SwiftUI和Swift Package Manager模块构建。本指南将详细介绍Hackers应用的完整发布流程,涵盖从版本准备、TestFlight测试到App Store发布的每一个关键步骤。无论您是新手开发者还是经验丰富的iOS工程师,这份终极指南都将帮助您掌握Hackers应用的发布全流程。

🚀 发布流程概览

Hackers采用标签驱动的发布模型,每个TestFlight构建都使用完整的语义版本+构建号标签:v<MARKETING_VERSION>+<CURRENT_PROJECT_VERSION>。例如v5.3.2+160表示营销版本5.3.2,构建号160。

整个发布流程分为三个阶段:

  1. 版本准备- 更新版本号和应用内容
  2. TestFlight发布- 构建、上传和分发测试版本
  3. App Store发布- 提交到App Store审核

📋 发布前准备检查清单

在开始发布之前,请确认以下准备工作已完成:

  • master分支通过所有必需检查:lintbuildtestui smoke
  • testflightGitHub环境已配置并需要审批
  • ✅ App Store Connect API密钥具有读取构建、上传构建、更新TestFlight元数据等权限
  • ✅ match仓库包含两个Bundle ID的签名资产:
    • com.weiranzhang.Hackers
    • com.weiranzhang.Hackers.ActionExtension

🔧 版本准备步骤

1. 确定版本类型

首先决定这是新的营销版本还是当前营销版本的另一个构建:

# 查看当前版本信息 cat docs/release-process.md | grep -A 5 "Release Model"

2. 更新版本号

需要更新两个目标的版本号:

  1. Hackers- 主应用目标
  2. HackersActionExtension- 操作扩展目标

Hackers.xcodeproj中更新:

  • MARKETING_VERSION- 控制发布家族(如5.3.2
  • CURRENT_PROJECT_VERSION- 控制App Store Connect构建号

3. 更新应用内容

如果构建包含用户可见的更改,需要更新应用内的"What's New"内容。相关代码位于Features/WhatsNew/模块中。

4. 本地验证

在提交前进行本地验证:

# 运行测试套件 ./run_tests.sh # 运行UI烟雾测试 ./run_ui_tests.sh smoke

5. 提交发布准备更改

在通过所有必需检查后,将发布准备更改提交到master分支:

git add . git commit -m "Prepare release vX.Y.Z+N" git push origin master

🏷️ 创建标签并触发TestFlight

标签格式要求

标签格式必须为v<MARKETING_VERSION>+<CURRENT_PROJECT_VERSION>

# 示例标签 tag=v5.3.2+160 # 创建标签 git tag "$tag" master git push origin "refs/tags/$tag"

触发TestFlight工作流

标签推送会自动触发.github/workflows/release-testflight.yml工作流。您也可以在GitHub Actions中手动触发:

# 手动触发 gh workflow run release-testflight.yml -f release_tag=v5.3.2+160

审批保护环境

TestFlight工作流运行在受保护的testflightGitHub环境中,需要手动审批。在GitHub Actions界面中批准部署请求。

📝 TestFlight发布说明管理

TestFlight工作流会在上传前解析artifacts/release/what-to-test.txt,并为标签创建或更新GitHub Release。草稿发布使用前一个标签的生成说明,已发布的发布使用前一个已发布版本的生成说明。

手动创建发布说明

如果需要手动创建或替换发布说明:

tag=v5.3.2+160 gh release create "$tag" \ --target "$tag" \ --title "${tag#v}" \ --notes-file release-notes.txt \ --draft

编辑现有发布

gh release edit "$tag" --title "${tag#v}" --notes-file release-notes.txt

发布为App Store候选版本

当TestFlight说明完成后,将GitHub Release发布为公开状态:

gh release edit "$tag" --draft=false

🔍 监控TestFlight上传

监控工作流进度

# 查看最近的工作流运行 gh run list --workflow release-testflight.yml --limit 5 # 监控特定运行 gh run watch <run-id> --exit-status

预期成功日志里程碑

  • Archive Succeeded
  • Successfully exported and signed the ipa file
  • Successfully uploaded package to App Store Connect
  • Successfully finished processing the build
  • Successfully set the changelog for build
  • Successfully distributed build to External testers
  • Uploaded Hackers X.Y.Z (N) to TestFlight

验证构建状态

工作流成功完成后,在App Store Connect中确认构建出现且状态为VALID。GitHub工作流摘要会记录标签和上传的构建号。

📱 在App Store Connect中验证

成功上传后,需要验证以下内容:

  1. 构建状态- 确认构建在App Store Connect/TestFlight中显示为有效
  2. 处理状态- 确保构建处理完成且无错误
  3. 版本匹配- 验证版本号和构建号与标签匹配
  4. 测试分发- 确认已正确分发到外部测试组

✍️ 编写App Store发布说明

重要提示:App Store发布说明与GitHub Release正文和TestFlight"What to Test"文本不同。它们是面向App Store客户的最终公开产品文案。

发布说明规则

  • ✅ 专门为公开的App Store列表编写
  • ✅ 用通俗语言总结用户可见的更改
  • ✅ 保持简洁,对决定是否更新的用户有用
  • ❌ 不要包含GitHub比较链接、Full Changelog链接、PR链接、issue链接、提交哈希
  • ❌ 不要粘贴GitHub Release正文或TestFlight说明而不为这个受众重写
  • ❌ 不要包含生成的变更日志部分、Markdown标题或测试说明

发布说明示例

好的示例

"改进Feed浏览体验并修复读者报告的问题。优化了评论加载性能,增强了搜索功能。"

不好的示例

"修复了#123问题,合并了PR #456。完整变更日志:https://github.com/... 测试说明:请检查..."

🚀 提交到App Store审核

前提条件

仅在人工审查选定构建和最终自定义App Store发布说明后,才推广已验证的TestFlight构建。

提交命令

gh workflow run release-appstore.yml \ -f release_tag=v5.3.2+160 \ -f app_store_release_notes='改进Feed浏览体验并修复读者报告的问题。'

可选输入参数

  • build_number- 仅当明确选择已处理的App Store Connect构建时使用
  • skip_app_version_update- 跳过创建或更新App Store版本
  • cancel_pending_version- 提交前取消待处理的App Store版本
  • cancel_only- 仅取消待处理版本而不提交构建

工作流保护

App Store提交工作流同样运行在受保护的testflightGitHub环境中,需要人工审批。不要提交最终说明是从GitHub/TestFlight内容复制或包含返回GitHub链接的构建。

🛠️ 故障处理与恢复

发布失败处理步骤

  1. 不要删除密钥或签名资产- 在确认错误前不要更改敏感信息
  2. 检查失败日志- 查看失败的作业日志和上传的testflight-artifacts
  3. 修复自动化或项目签名问题- 在master分支上修复问题
  4. 推送修复- 将修复推送到仓库
  5. 移动发布标签- 仅当失败的标签未产生可用的TestFlight构建时,将发布标签移动到修复后的提交
  6. 批准新的TestFlight部署- 批准新的受保护TestFlight部署并监控其完成

强制移动失败标签

仅在TestFlight构建成功完成前,强制移动失败的发布标签:

tag=v5.3.2+160 git tag -f "$tag" HEAD git push --force origin "refs/tags/$tag"

重要:一旦TestFlight构建成功完成,将标签视为不可变的。

🔄 现有草稿发布修复

如果需要修复使用旧版说明生成逻辑创建的现有草稿发布:

GITHUB_REPOSITORY=weiran/Hackers for tag in $(gh release list --json tagName,isDraft --limit 200 --jq '.[] | select(.isDraft == true).tagName'); do # 处理逻辑... done

📊 关键文件和路径

发布流程文档

  • docs/release-process.md - 完整的发布流程文档
  • docs/development.md - 开发设置和测试指南
  • docs/project-overview.md - 项目架构概览

工作流文件

  • .github/workflows/release-testflight.yml - TestFlight发布工作流
  • .github/workflows/release-appstore.yml - App Store提交工作流

Fastlane配置

  • fastlane/Fastfile - Fastlane自动化脚本
  • fastlane/Appfile - 应用配置
  • fastlane/Matchfile - 代码签名配置

💡 最佳实践与建议

版本管理

  • 始终保持MARKETING_VERSIONCURRENT_PROJECT_VERSION在两个目标中同步更新
  • 对于同一营销版本,CURRENT_PROJECT_VERSION必须单调递增
  • 使用语义版本控制,遵循vX.Y.Z+N格式

测试策略

  • 发布前始终运行完整的测试套件
  • 使用UI烟雾测试验证关键用户流程
  • 考虑为发布构建生成App Store截图

沟通协作

  • 在发布说明中清晰传达用户可见的更改
  • 确保TestFlight测试者了解测试重点
  • 保持App Store发布说明面向最终用户

监控与验证

  • 监控工作流运行状态和构建处理进度
  • 在App Store Connect中验证构建状态
  • 确认TestFlight分发到正确的测试组

🎯 总结

Hackers应用的发布流程经过精心设计,结合了自动化工作流和人工审查,确保每个版本的质量和稳定性。通过遵循本指南中的步骤,您可以自信地管理从版本准备到App Store发布的完整流程。

记住发布流程的三个核心原则:

  1. 自动化但受控- 自动化重复任务,但保留关键决策点的人工审批
  2. 版本驱动- 一切从标签开始,确保可追溯性
  3. 质量优先- 每个构建都经过测试验证,每个发布都经过仔细审查

通过掌握这个流程,您将能够高效、可靠地发布Hackers应用的新版本,为Hacker News读者提供最佳的阅读体验。🚀

【免费下载链接】HackersHackers is an elegant iOS app for reading Hacker News written in Swift.项目地址: https://gitcode.com/gh_mirrors/ha/Hackers

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/1181125/

相关文章:

  • 如何免费解锁Wand专业版:Wand-Enhancer完整使用指南
  • Spotify免费听,开源音乐神器
  • 终极指南:如何用League Akari实现英雄联盟游戏自动化
  • 海康威视球机摄像头多目标检测、跟踪与跨镜头轨迹关联技术解析
  • TLA2518与PIC18LF46K22构建高精度多通道ADC系统
  • AntiDupl.NET:智能图片去重工具,让你的数字资产焕然一新
  • 【软件工程】需求工程:需求规格说明与需求验证
  • 小白程序员快速入门:医疗大模型的多模态融合奥秘与实践
  • 推理引擎图优化 Pass 详细解析:常量折叠、死代码消除与公共子表达式消除的注册流程
  • 终极免费解锁WeMod Pro功能:Wand-Enhancer完整使用指南
  • SRADSGAN:基于分层密集采样与链式训练的遥感图像大倍数超分辨率实战解析
  • 法律AI时代生存手册:ChatGPT辅助咨询的5类不可替代场景 vs 4类绝对禁止场景(附司法部2024年《AI法律服务合规指引》逐条对照表)
  • NBM5100A与PIC18F87K22优化CR2032电池系统设计
  • 颠覆性架构:如何用物联大师重构工业物联网部署模式
  • 2026年蕉城区变速箱维修宁德华耀变速箱新能源汽车维修15060258154 - 优企甄选
  • 终极指南:NVIDIA TransformerEngine优化的ESM-2模型架构与性能优势
  • 完全实战指南:轻松掌握Wand-Enhancer的高级游戏修改功能
  • 新手 Windows 搭建 OpenClaw,可视化完整安装步骤教程
  • PostgreSQL启动故障终极排查手册:从WAL损坏到pg_resetwal的救赎之路
  • 第1章 Ansible自动化运维基础
  • AI 辅助动效性能剖析:自动检测卡顿帧与合成层问题
  • 终极免费解锁:Wand-Enhancer让你完整体验Wand专业版所有功能
  • 创建SWC
  • 智能解锁WeMod专业版:Wand-Enhancer革命性游戏增强解决方案
  • OmenSuperHub终极指南:解锁惠普暗影精灵游戏本的全部性能潜力
  • 【DeepSeek推理能力测评权威解读】:基于1372份真实作答数据,揭示92.6%考生卡点的3个隐性认知漏洞
  • Wand-Enhancer:解锁WeMod专业体验的智能增强方案
  • 泊松图像编辑 OpenCV 4.8 实战:3种融合模式与5种选区编辑代码详解
  • FPGA驱动MT25QL FLASH:SPI模式0下的Verilog状态机设计与时序优化
  • GNOME 和 KDE 7 年前“世纪握手“,Linux 桌面整合了吗?