ARTICLE · 1298998
App 提交 AppStore 审核收到 ITMS-91198 问题的解决方案
先分清一件事:ITMS-91198 不是“你在代码里用了 Arial”的报错,而是“最终提交的 App 包里带了 Apple 提供或授权的字体文件”的上传校验问题。判断对象是包里的字体文件,不是源码。
1、苹果官方定义
App Store 在上传/摄取阶段会校验 App 载荷里的字体。只要 App 打包或再分发了 Apple 设计、提供或授权的字体,就会报 ITMS-91198。
我收到的告警路径已经说明了位置:
xxx.app/Frameworks/xxx.framework/Arial-Bold.ttf
字体在第三方 SDK 的 framework 里,不在业务代码里。
2、苹果为什么不允许
1)授权原因:Apple 提供的字体只授权在 Apple 平台上使用,不授权随第三方 App 再分发。把字体打进 App 包,本质上是再分发。
2)工程原因:告警原文也写了,内嵌会增加包体积,并且让 App 无法自动获得系统级字体更新、无障碍能力和内置渲染优化。
3、苹果怎么判定
1)校验范围是整个 App 载荷,包括主包、framework/SDK bundle、asset catalog 编译产物、asset pack 和按需资源。告警路径指向 framework 内部,就是最直接的例子。
2)校验分两档:只显示文字时用 minimum;申请了“安装字体”能力时用 strict。字体文件本身是否合规是独立判断,不会因为不申请能力就放过 Apple 授权字体。
3)识别依据是字体文件内容里的特征,不是文件名或字体名称。改文件名、改内部字体名,不能规避检测。
4)字体只要“能正常渲染”不代表合规。校验看的是文件是否被分发,不看 UI 有没有异常。
4、官方给的解决方式
1)删掉内嵌的 Apple 字体文件。
2)需要系统字体时,用系统 API 引用,不要打包:
UIKit 的 UIFont.systemFont、
preferredFont、UIFontDescriptor;SwiftUI 的 .font(.system(...)) 等。
3)需要非系统字形时,换成你有权再分发的字体,例如 Open Sans、Roboto 这类开源字体,并保留许可证;或者向字库方取得 App 内嵌授权。
4)不要只改字体名或文件名,也不要拿“本地渲染正常”当通过证据。
5、官方提供的本地自检
TN3214 给出的方式是用 macOS 自带的 FontValidator 扫描最终产物,例如:
/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Support/FontValidator
-progress -platform iOS -level minimum -reportType full
-appleFonts MyApp.app
几个关键参数:
1)-appleFonts:专门检查 Apple 设计/授权字体。
2)路径参数可以是 .app、源码目录或单个字体文件,扫目录时会递归进入 framework bundle。
3)-level:申请了“安装字体”能力用 strict,否则用 minimum。
4)本机 FontValidator 版本较旧时参数可能不完全一致,以 TN3214 当前版本和 FontValidator -help 为准。
6、时间节点
按我们收到的官方通知:从 2027 年 10 月 1 日起,包含这些内嵌字体文件的上传会被拒绝。
也就是说,现在它还不是立即阻断上传的错误,但必须在截止日期前清掉。它不是“看一眼就过去”的提示,而是有明确生效日期的准入规则。
#iOS #开发技巧
——End——
小宋陪你成长知识星球价值:1、这是小宋最高频的输出地2、每周至少 20 条原创内容3、内容方向:AI 提效,副业(AI 编程,写作,公众号、闲鱼、小红书),个人 IP,私域,一人企业复利商业化,都在折腾,可以给你一些启发4、遇到问题,找不到答案,可在星球免费向小宋提问

《一人企业复利商业化》最新电子版,“小宋成长录”公众号后台回复 2503 直接拿(免费,一人企业电子书)















































































