写代码只是上架的一半。另一半,是和两个商店的表单、审核、各种"莫名其妙的拒绝"死磕。
把 Tilemory 同时推上 App Store 和 Google Play 的过程里,我记了一串坑。这篇就当一份"避坑清单",给同样要上架的你。
App Store 这边
1. 截图尺寸,差几个像素就被拒。我一开始按 1290×2796 出的 iPhone 截图,直接被 6.5 寸那档拒了——那个尺寸是给 6.7"/6.9" 的。换成 1284×2778,6.5" 和 6.7" 两档才都收。先查清楚每个尺寸槽要什么,再批量出图,别返工。
2. 加密合规别瞎填。App 里只要用了 HTTPS 这种标准加密,会被问"是否使用非豁免加密"。我在 Info.plist 里加上 ITSAppUsesNonExemptEncryption = false,每次上传就不再反复问了。
3. 内购也要单独过审。我一度以为内购(Pro)配好就行。其实首个内购要随版本一起提交审核,描述、截图、审核备注都得给到位,不然 App 过了、内购还卡着。
4. 年龄分级是新版问卷。现在是一套分步问卷,如实答下来,我这种无暴力无博彩的,结果是 4+。
Google Play 这边(坑更杂)
5. versionCode 一旦用过,永久占用。我早期内测传过 versionCode 1,后来再传 1、2 都被拒——Play 永久记住你用过的号。老老实实往上加,我一路加到了 3。
6. JVM target 打架,Release 直接构建失败。打 Release 包时报 "Inconsistent JVM-target compatibility"——某个依赖(tflite_flutter)用的是 Java 11 / Kotlin 21,和主工程对不上。解法是在根 build.gradle.kts 里强制所有子项目统一到 Java + Kotlin 17,才过。
7. 相机权限,会拦住没摄像头的平板。默认 App 声明需要相机,导致一批无摄像头的平板"不兼容、装不了"。我把 android.hardware.camera 改成 required="false"(拍照/扫码已优雅降级),覆盖面立刻变大。
8. Play App Signing 会重签名。你上传用的是上传密钥,Google 会用应用签名密钥重新签发给用户。这俩证书指纹不一样——配深链(assetlinks)、做内购测试时,两个指纹都要考虑,否则各种"对不上"。
9. 新个人账号有封测门槛。较新注册的个人开发者账号,要先做满封闭测试 20 人 / 14 天才能上正式轨。建议早点规划,别等到要发了才发现卡门槛。
还有些"产品决定"也得在表单里做
• 区域:我主动排除了欧盟(DSA 合规)、中国大陆(没 ICP)、越南(游戏牌照),先把能稳的市场上了。 • 数据安全 / 隐私问卷:因为真的不收集数据,两边都如实勾了"不收集"。
一点心得
一个人上架,最耗的不是写代码,是这些零碎的合规与配置——每一个单独看都不难,叠在一起能把人耗到怀疑人生。
我的建议就一句:把每个商店的字段、尺寸、规则,边做边记成一份自己的 checklist。 下次再上架,你就是半小时的事,而不是又踩一遍。
坑填完、App 上线了,然后就是那个残酷的现实:没人知道它的存在。下一篇,《0 下载之后,我是怎么硬着头皮做推广的》——短视频、Product Hunt、Reddit……我把试过的渠道和真实效果都摊给你看。
关注我,继续往下聊。🧩
我一个人做 Tilemory,也一个人写这个连载。如果这篇对你有点用,或者你也在做自己的东西,欢迎留言聊两句,或点个**「赞赏」**——这是我一直写下去的最大动力。
夜雨聆风