App Store 4.3 被拒后怎么自查

同步发布。完整自查表和工具说明见: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 更不容易漏项。需要这份检测,见收费页的按次服务。

程序界面如下(标题是「应用相似度分析」):

小蟹 IPA 静态分析(应用相似度分析)

图出自专栏 App Store 4.3 被拒后怎么自查,对应程序:IPA 静态分析(马甲检测)。

界面就三块,和专栏里的用法对应:

  1. IPA.1 / IPA.2
    两个路径框。界面占位写的是「混淆前 / 混淆后」,4.3 自查时按「被拒包 / 要对比的包」来填即可:账号里的旧上架、上一次被拒构建,或你怀疑审核在拿来比的那一款。两边都要是能装能开的 IPA,不要拿工程目录冒充。
  2. 敏感词设置
    把旧显示名、旧 Bundle Id、品牌词、不该出现的竞品名加进去,报表里的敏感词一项才对得上你的产品,而不是一份通用词表。
  3. SDK 设置
    声明或校对依赖 SDK,避免把引擎模板、广告 SDK 的「大家都有」和「你们两款特有的重合」混在一起看。
  4. 生成报表
    跑完对照上表四项。符号和资源仍大面积相同,再进入混淆;四项已经拉开、商店资料也改过却仍被 4.3,更可能是业务描述或账号历史,需要在回复审核时说明差异,而不是继续加码改二进制。

混淆做完也可以再用同一工具:IPA.1 放改之前,IPA.2 放改之后,确认隔离是否真的落在符号和资源上,而不是只换了显示名。

改完二进制之后

  • 从干净的工程树归档,不要上传还带着「测试用」旧图标的构建
  • 核对签名和 Bundle Id
  • 信里如果还提到元数据是否准确,继续做 2.3.1 清单

不写下 listing 和 IPA 的差异就再次提审,是团队耗掉数周的常见原因。混淆只在剩余重合是结构性的时候有用——类名、资源名、插件目录、调用栈形状。它不会把你的业务改写成另一款应用。

按钮级流程见 4.3 解决方案页;自查步骤和「什么时候不该再改二进制」写在专栏原文。

总结

4.3 先对比对象,再商店,再 IPA。有书面 diff 再提审。需要结构性隔离时再上编译级混淆。

原文:App Store 4.3 被拒后怎么自查

相关:2.3.1 常见触发点

本文不承诺审核结果。