Files
jiu/docs/runbooks/ios-appstore-release.html
T

200 lines
15 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>iOS App Store 上架流程 — 酒库管理系统</title>
<style>
:root{
--primary:#2563AC; --primary-dark:#154072; --danger:#D14343; --danger-bg:#FDECEC;
--success:#2E8B57; --success-bg:#E6F3EC; --warn:#B45309; --warn-bg:#FFF4E5; --accent:#8B2331;
--ink:#232934; --muted:#6E7888; --border:#DCE2EB; --paper:#F5F7FA; --head:#F0F4FF;
}
*{box-sizing:border-box;font-family:-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;}
body{margin:0;background:var(--paper);color:var(--ink);padding:28px;line-height:1.65;}
h1{font-size:22px;margin:0 0 4px;}
h2{font-size:17px;margin:30px 0 12px;color:var(--primary-dark);border-bottom:2px solid var(--head);padding-bottom:6px;}
h3{font-size:14px;margin:18px 0 8px;color:var(--accent);}
.sub{color:var(--muted);font-size:13px;margin-bottom:18px;}
.card{background:#fff;border:1px solid var(--border);border-radius:10px;padding:16px 20px;margin:14px 0;}
.lead{font-size:13.5px;color:var(--ink);}
table{width:100%;border-collapse:collapse;font-size:13px;margin:8px 0;}
th{background:var(--head);color:var(--primary-dark);font-weight:600;font-size:12px;text-align:left;padding:9px 10px;border-bottom:1px solid var(--border);}
td{padding:8px 10px;border-bottom:1px solid #EEF1F5;vertical-align:top;}
.mono{font-family:ui-monospace,Menlo,monospace;font-size:12.5px;}
code{font-family:ui-monospace,Menlo,monospace;font-size:12px;background:#EEF2F8;padding:1px 5px;border-radius:4px;color:var(--primary-dark);}
pre{background:#1E2430;color:#D8E0EC;border-radius:8px;padding:12px 14px;overflow:auto;font-size:12px;line-height:1.55;}
pre .c{color:#7A8699;}
.tag{display:inline-block;font-size:11px;padding:1px 8px;border-radius:10px;font-weight:600;}
.tag.risk{background:var(--danger-bg);color:var(--danger);}
.tag.ok{background:var(--success-bg);color:var(--success);}
.tag.todo{background:var(--warn-bg);color:var(--warn);}
.callout{border-left:4px solid var(--primary);background:#F0F6FF;padding:10px 14px;border-radius:4px;margin:12px 0;font-size:13px;}
.callout.danger{border-color:var(--danger);background:var(--danger-bg);}
.callout.warn{border-color:var(--warn);background:var(--warn-bg);}
.callout.ok{border-color:var(--success);background:var(--success-bg);}
.callout b{color:var(--ink);}
ul,ol{margin:6px 0;padding-left:22px;}
li{margin:3px 0;font-size:13px;}
</style>
</head>
<body>
<h1>iOS App Store 上架流程(中国区)</h1>
<div class="sub">前提:工信部 App 备案已通过(2026-07-15)· Bundle <code>com.yanmei.jiu</code> · Team <code>BYL4KQHMTN</code> · 分发链路:Forgejo CI <code>build-ios</code> → TestFlight → App Store 提审</div>
<div class="callout ok"><b>合规底子已备齐</b>:支付红线(iOS 隐藏一切外部购买 UI,<code>client/lib/core/config/store_compliance.dart</code>)、首启隐私弹窗(<code>privacy_consent_gate.dart</code>,移动端)、账号注销入口(我的页)、隐私政策/用户协议 URL(官网 <code>/privacy/</code> <code>/terms/</code>)、出口合规声明(<code>Info.plist</code><code>ITSAppUsesNonExemptEncryption=false</code>)、相机/相册权限文案——均已在代码中落地。上架前唯一代码改动 = 关于页展示 <b>App 备案号</b>(见第 1 步)。</div>
<h2>零、现状盘点</h2>
<div class="card lead">
<table>
<tr><th>合规件 / 前置</th><th>状态</th><th>位置 / 说明</th></tr>
<tr><td>工信部 App 备案</td><td><span class="tag ok">已通过</span></td><td>2026-07-15 下号。App 备案号与网站备案号不同,形如 <code>京ICP备2026039814号-XA</code>,在阿里云 ICP 代备案控制台「App 备案」列表查看</td></tr>
<tr><td>苹果 3.1.1 支付红线</td><td><span class="tag ok">已落地</span></td><td><code>hideExternalPurchaseUi</code>:iOS 包隐藏在线购买/价格/升级入口;保留兑换码激活(3.1.3(b) 多平台服务:允许使用在别处获得的授权)</td></tr>
<tr><td>首启隐私同意弹窗</td><td><span class="tag ok">已落地</span></td><td><code>PrivacyConsentGate</code>iOS/Android 首启弹《隐私政策》《用户协议》,同意持久化</td></tr>
<tr><td>账号注销途径</td><td><span class="tag ok">已落地</span></td><td>「我的」页注销入口(审核指南 5.1.1(v):支持注册就必须支持注销)</td></tr>
<tr><td>出口合规(加密)</td><td><span class="tag ok">已落地</span></td><td><code>ITSAppUsesNonExemptEncryption=false</code>(仅标准 HTTPS,属豁免),提交构建时不再弹加密问卷</td></tr>
<tr><td>签名 / CI</td><td><span class="tag ok">就绪</span></td><td>发行证书 <code>.ios-certs/distribution.cer</code><b>2027-06-16 到期</b>,换证后须做备案变更更新公钥/SHA-1);CI <code>build-ios</code> job 自动出 ipa 传 TestFlight7 个 secrets 见 <code>docs/ios-signing.md</code></td></tr>
<tr><td>关于页 App 备案号展示</td><td><span class="tag ok">已落地</span></td><td>2026-07-15:页脚改为 App 备案号 <code>京ICP备2026039814号-2A</code>(原型 about/m-about + <code>about_screen.dart</code> 同一提交,golden 已更新),随 client 1.1.9 发出</td></tr>
<tr><td>version.yaml iOS 下载链接</td><td><span class="tag todo">待填</span></td><td><code>backend/config/version.yaml</code><code>download_urls.ios</code> 为空,过审后填 App Store 链接(第 7 步)</td></tr>
</table>
</div>
<h2>一、拿号 + App 内展示备案号(唯一代码改动)</h2>
<div class="card lead">
<ol>
<li><b>App 备案号 = <code>京ICP备2026039814号-2A</code></b>(岩美酒库 iOS App;主体号无后缀、网站为 -1。真相源:brain 账号地图)。</li>
<li><b>关于页页脚补展示</b>:网站号旁加一行 App 备案号(同样链到 <code>beian.miit.gov.cn</code>)。按 design-first 铁律:先改 <code>design/prototype/</code> 关于屏原型 → 再改 <code>client/lib/screens/about/about_screen.dart</code>(桌面+移动两处页脚),同一提交落地。</li>
<li>该改动并入下一个 client 版本即可(如 1.1.9),不必单独发版——但<b>提审的构建必须已含此展示</b></li>
</ol>
</div>
<h2>二、App Store Connect 建 App</h2>
<div class="card lead">
<ol>
<li>登录 <code>appstoreconnect.apple.com</code> → 我的 App → 「+」新建 App。</li>
<li>平台 <b>iOS</b>;名称 <b>「岩美酒库」</b>;主要语言 <b>简体中文</b>Bundle ID 选 <code>com.yanmei.jiu</code>SKU 填 <code>jiu-ios</code></li>
<li>价格与销售范围:价格 <b>免费</b>;销售范围至少勾选 <b>中国大陆</b>(其他地区随意,无备案要求)。</li>
</ol>
<div class="callout danger"><b>名称必须与备案一字不差</b>:备案登记的 App 名称是「岩美酒库」,ASC 上架名、App 内显示名保持一致,改名需先做备案变更。</div>
</div>
<h2>三、填 App 信息(一次性)</h2>
<div class="card lead">
<ol>
<li><b>中国大陆合规信息</b>:App 信息页 →「中国大陆的互联网信息服务备案」→ 类型选 <b>ICP 备案</b>,填第 1 步拿到的 App 备案号。<span class="tag risk">缺此项中国区直接驳回</span></li>
<li><b>隐私政策 URL</b><code>https://jiu.51yanmei.com/privacy/</code>;技术支持 URL 填官网。</li>
<li><b>App 隐私(数据收集问卷)</b>:如实勾选——联系信息(手机号/账号)、用户内容(商品照片)、标识符与诊断(设备信息/异常上报);均「与用户关联」、<b>不用于追踪</b>(无广告/无第三方共享 → 无需 ATT 弹窗)。</li>
<li><b>年龄分级</b>:问卷全「无」→ 4+。</li>
<li><b>类别</b>:主类别「商务」,副类别「效率」。</li>
</ol>
</div>
<h2>四、截图与文案素材</h2>
<div class="card lead">
<table>
<tr><th>素材</th><th>规格</th><th>说明</th></tr>
<tr><td>iPhone 截图(必需)</td><td class="mono">6.9" 1320×2868(或 6.7" 1290×2796),38 张</td><td>模拟器 iPhone 16 Pro Max 跑 app 截核心屏:库存 / 入库 / 出库 / 财务 / 我的</td></tr>
<tr><td>iPad 截图</td><td class="mono">13" 2064×2752</td><td>工程 <code>TARGETED_DEVICE_FAMILY = "1,2"</code> 支持 iPad → iPad 截图为必填。已拍板(2026-07-15):<b>保留 iPad 支持</b>——app 响应式宽屏布局(侧边栏形态)在 iPad 上是现成的,补一套 13" 截图即可</td></tr>
<tr><td>描述 / 关键词</td><td>描述 ≤4000 字,关键词 ≤100 字符</td><td>面向门店老板的酒类库存管理:入库出库、序列号追溯、财务应收应付、多端同步等卖点;关键词如「酒库,库存,烟酒店,进销存,序列号」</td></tr>
<tr><td>宣传文本(可选)</td><td>≤170 字</td><td>每版可改,不触发重审</td></tr>
</table>
<h3>可直接粘贴的文案(2026-07-15 备稿)</h3>
<pre><span class="c">◆ 副标题(≤30 字符)</span>
酒类门店进销存与序列号溯源
<span class="c">◆ 宣传文本(≤170 字符)</span>
为酒水批发与零售门店打造的进销存管理工具:入库出库、序列号溯源、
财务应收应付、多端同步,一套搞定。
<span class="c">◆ 描述(≤4000 字符)</span>
岩美酒库是面向酒水批发与零售门店的进销存管理系统,把入库、出库、
库存、财务对账与序列号溯源整合在一套简洁可靠的产品里。
【核心功能】
· 库存管理:实时库存台账,支持汉字/拼音/首字母快速搜索,安全库存
预警,一目了然
· 序列号溯源:每一瓶酒独立编号建档,品牌/型号/版本/批次/生产日期
全程可查,杜绝串货错账
· 入库出库:单据化流转,草稿—审核—入账全流程留痕,支持撤回与退单
· 财务对账:应收应付自动汇总,往来单位逐笔可查,利润统计清晰
· 基础数据:品牌/型号/版本字典统一维护,录单选择即建档
· 多端同步:iPhone / iPad / Mac / Windows / 网页版数据实时同步,
店里店外无缝切换
· 多人协作:管理员/操作员/只读三种角色,成本利润仅管理员可见
【适用场景】
名酒行、烟酒店、酒类批发商、酒窖会所等需要精细化管理酒水库存与
往来账目的经营者。
【联系我们】
官网:https://jiu.51yanmei.com
客服邮箱:support@51yanmei.com
<span class="c">◆ 关键词(≤100 字符,半角逗号分隔)</span>
酒库,酒水,进销存,库存管理,烟酒店,名酒,序列号,溯源,批发,零售,应收应付,对账,酒窖,库存
<span class="c">◆ URL 三件套</span>
技术支持 URLhttps://jiu.51yanmei.com/docs/
营销 URL(可选):https://jiu.51yanmei.com
隐私政策 URLhttps://jiu.51yanmei.com/privacy/</pre>
<pre><span class="c"># 模拟器截图(本机)</span>
open -a Simulator
xcrun simctl boot "iPhone 16 Pro Max"
cd client && flutter run -d "iPhone 16 Pro Max" --release
<span class="c"># 逐屏进入后:</span>
xcrun simctl io booted screenshot ~/Desktop/shot-inventory.png</pre>
</div>
<h2>五、构建上传 TestFlight</h2>
<div class="card lead">
<ol>
<li>正常发版即可:<code>/release client 1.1.x</code> → CI <code>build-ios</code> job 自动出 ipa 并上传 TestFlight。</li>
<li>已知坑:Xcode 26.2 偶发 <code>CompileStoryboard failed</code>(无具体错误)——不是工程问题,CI 重跑即成功。</li>
<li>构建在 ASC「TestFlight」页处理完成(几分钟到 1 小时)后,回到 App「分发」页 → 「构建版本」→ 选中该 build。</li>
</ol>
</div>
<h2>六、提交审核</h2>
<div class="card lead">
<ol>
<li><b>审核备注(App Review 信息)必填演示账号</b>:app 登录必需 → 提供一个演示门店的账号密码(用种子数据门店,切勿给真实客户数据)。备注里同时写清商业模式,堵 3.1.1 质询:
<pre>本 App 为多平台门店库存管理服务(macOS/Windows/Web/Android/iOS)。
iOS 版不含任何应用内购买或外部购买引导;订阅授权通过用户在
其他平台获得的兑换码激活(审核指南 3.1.3(b) 多平台服务)。
演示账号:门店编号 S003 · 用户名 admin · 密码见 backend/seeds/S003.sql
(预置演示数据,可完整体验)。</pre>
<div class="callout warn"><b>已拍板用 S003(御品轩名酒坊)做演示门店</b>seed 含 admin/operator/test 三账号——但当前种子<b>只有账号、没有业务数据</b>,且只进过本地库。提审前须:① 在<b>线上</b>建好 S003 门店与账号(改生产库前先备份,遵守既有红线);② 录入一批演示库存/出入库/财务数据——审核员登录后空白页面有 4.2 最小功能被拒风险。</div></li>
<li><b>版本发布方式选「手动发布」</b>:过审后自己控制上架时机(配合 version.yaml 链接更新)。</li>
<li>提交 → 一般 2448h 出结果。</li>
</ol>
<div class="callout warn"><b>常见被拒点自查</b>:① 3.1.1——iOS 包内残留价格/购买/「去官网」文案(已由 <code>hideExternalPurchaseUi</code> 收口,新增页面注意遵守);② 演示账号登不上/数据空白;③ 2.1——启动崩溃或明显 bug(提审构建先在 TestFlight 真机过一遍);④ 中国区备案号未填或与名称不符。</div>
</div>
<h2>七、过审后收尾</h2>
<div class="card lead">
<ol>
<li>手动点「发布此版本」→ 数小时内 App Store 可搜到。</li>
<li>拿到商店链接 <code>https://apps.apple.com/cn/app/idAppID</code> → 填入 <code>backend/config/version.yaml</code><code>download_urls.ios</code>,随下一次 client 发版生效(官网下载页与后端 <code>/version</code> 实时读,无需重建官网/重启后端)。</li>
<li>日常节奏:每次 client 发版 CI 自动上 TestFlight<b>提审 App Store 是手动动作</b>——可攒功能大版本再提审,小修版只走其他平台。</li>
<li>长期备忘:发行证书 <b>2027-06-16 到期</b>,换证后公钥/SHA-1 变化,须在阿里云做 <b>App 备案变更</b>,否则商店端校验不一致有下架风险。</li>
</ol>
</div>
<h2>流程总览</h2>
<div class="card lead">
<table>
<tr><th>#</th><th>步骤</th><th>谁做</th><th>耗时</th></tr>
<tr><td>1</td><td>查 App 备案号 + 关于页展示(原型先行,并入 client 1.1.9</td><td>用户查号,Claude 改码</td><td>0.5 天</td></tr>
<tr><td>2</td><td>ASC 建 App(名称/Bundle/免费/中国大陆)</td><td>用户(Apple 账号操作)</td><td>10 分钟</td></tr>
<tr><td>3</td><td>App 信息:备案号 / 隐私问卷 / 分级 / 类别</td><td>用户</td><td>30 分钟</td></tr>
<tr><td>4</td><td>截图(iPhone 必需 + iPad)与描述文案</td><td>Claude 出图出稿,用户上传</td><td>0.5 天</td></tr>
<tr><td>5</td><td>发版构建 → TestFlight → 选中构建</td><td>CI 自动 + 用户点选</td><td>12 小时</td></tr>
<tr><td>6</td><td>提审(演示账号 + 3.1.3(b) 备注,手动发布)</td><td>用户</td><td>审核 2448h</td></tr>
<tr><td>7</td><td>发布 + version.yaml 填商店链接</td><td>用户点发布,Claude 改配置</td><td>数小时</td></tr>
</table>
</div>
<div class="sub">2026-07-15 制定 · 关联:<code>docs/ios-signing.md</code>(签名一次性配置)· 备案参数见项目记忆 project-app-icp-filing</div>
</body>
</html>