同步发布。完整自查表和工具说明见:App Store 4.3 被拒后怎么自查
前言
4.3 的拒绝信不一定是而二进制问题,而是一次对比结果:这个上架APP看起来像一套代码重复打包,或像另一款应用。苹果可能在拿谁跟你应用做对比包括已经下架的应用标题,确保在元数据上无意复制的竞品信息。
很多团队的第一反应是「再加一层混淆」。如果两个 listing 卖的是同一套界面流程,4.3 是产品问题,不是二进制问题。混淆工具改不了业务描述。
先看商店资料
从 App Store Connect 导出截图和描述,和同一开发者账号下的每一款应用、以及上一次被拒构建做对比。重点看:
- 副标题、宣传文本、预览视频是否还在讲上一个产品
- 截图是否复用了另一款的界面流
- 名称、关键词是否和兄弟应用只差一两个字
建议做一张表,而不是凭记忆:
| 项 | 被拒包 | 对比包 | 是否相同 |
|---|---|---|---|
| 商店名称 / 副标题 | |||
| 截图哈希 | |||
| 主图标 | |||
| 主要类名前缀 | |||
| 最大的几个资源文件名 | |||
| 第三方 SDK 列表 |
表上商店侧已经完全不同、二进制也已经隔离,却仍被 4.3,更可能是业务描述或账号历史问题,需要在回复审核时说明差异,而不是继续加码改二进制。
再看 IPA
解开 IPA,列出 Frameworks、Plugins 和 Asset Catalog,用字符串搜旧显示名。class dump 或 otool 里的类型名如果和兄弟应用相同,编译级改名才有意义。语言混淆、调用栈混淆和资源改名针对的就是这一层。
本地快速扫一眼可以用:
unzip -l YourApp.ipa | head
strings Payload/YourApp.app/YourApp | grep -i "OldBrand"
这只是抽查。手工拆包容易漏项,也拼不出一份能拿去讨论「还要不要改二进制」的报告。
不必只靠手工拆包:IPA 静态分析(马甲检测)
小蟹有独立的 IPA 静态分析工具(收费页里的「马甲检测服务」)。把被拒包和要对比的包送进去,一次分析就能出报告,覆盖:
| 报告项 | 用来判断什么 |
|---|---|
| 符号表对比 | 类型名、选择子是否和兄弟包撞车,编译级改名有没有必要 |
| 程序资源对比 | 图标、图集、脚本、目录名是否仍像同一套素材 |
| 依赖 SDK 信息 | 第三方库集合是否雷同 |
| 敏感词信息 | 旧产品名、品牌、不该出现的字符串 |
重合点清楚了,再决定改商店资料、做编译级隔离,还是两者都做,比 strings / otool 更不容易漏项。需要这份检测,见收费页的按次服务。
程序界面如下(标题是「应用相似度分析」):
图出自专栏 App Store 4.3 被拒后怎么自查,对应程序:IPA 静态分析(马甲检测)。
界面就三块,和专栏里的用法对应:
- IPA.1 / IPA.2
两个路径框。界面占位写的是「混淆前 / 混淆后」,4.3 自查时按「被拒包 / 要对比的包」来填即可:账号里的旧上架、上一次被拒构建,或你怀疑审核在拿来比的那一款。两边都要是能装能开的 IPA,不要拿工程目录冒充。 - 敏感词设置
把旧显示名、旧 Bundle Id、品牌词、不该出现的竞品名加进去,报表里的敏感词一项才对得上你的产品,而不是一份通用词表。 - SDK 设置
声明或校对依赖 SDK,避免把引擎模板、广告 SDK 的「大家都有」和「你们两款特有的重合」混在一起看。 - 生成报表
跑完对照上表四项。符号和资源仍大面积相同,再进入混淆;四项已经拉开、商店资料也改过却仍被 4.3,更可能是业务描述或账号历史,需要在回复审核时说明差异,而不是继续加码改二进制。
混淆做完也可以再用同一工具:IPA.1 放改之前,IPA.2 放改之后,确认隔离是否真的落在符号和资源上,而不是只换了显示名。
改完二进制之后
- 从干净的工程树归档,不要上传还带着「测试用」旧图标的构建
- 核对签名和 Bundle Id
- 信里如果还提到元数据是否准确,继续做 2.3.1 清单
不写下 listing 和 IPA 的差异就再次提审,是团队耗掉数周的常见原因。混淆只在剩余重合是结构性的时候有用——类名、资源名、插件目录、调用栈形状。它不会把你的业务改写成另一款应用。
按钮级流程见 4.3 解决方案页;自查步骤和「什么时候不该再改二进制」写在专栏原文。
总结
4.3 先对比对象,再商店,再 IPA。有书面 diff 再提审。需要结构性隔离时再上编译级混淆。
相关:2.3.1 常见触发点
本文不承诺审核结果。