905e0700da
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
200 lines
15 KiB
HTML
200 lines
15 KiB
HTML
<!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 传 TestFlight,7 个 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),3–8 张</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>
|
||
技术支持 URL:https://jiu.51yanmei.com/docs/
|
||
营销 URL(可选):https://jiu.51yanmei.com
|
||
隐私政策 URL:https://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>提交 → 一般 24–48h 出结果。</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/id〔AppID〕</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>1–2 小时</td></tr>
|
||
<tr><td>6</td><td>提审(演示账号 + 3.1.3(b) 备注,手动发布)</td><td>用户</td><td>审核 24–48h</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>
|