欢迎来到香港登山者俱乐部!
这是与志同道合的人相聚的地方,享受香港数百条步道的乐趣。

⬅ 返回博客概述
新博客文章

由 Daniel Kohler 在 17.02.2026 发布
查看图片库

应用程序快速诊断清单

  1. 在真机上复现问题(iOS 版本需与用户版本相同)。如果真机运行正常,则怀疑是模拟器的问题。 [developer.apple.com]
  2. 更新 Xcode 和运行时环境(如果您使用的是 26.x 版本,请考虑重新下载“通用”运行时环境)。 [stackoverflow.com] [code-examples.net]
  3. 检查您的字体
  4. 你是不是强制整个字符串都使用自定义字体?
  5. 尝试使用systemFont并进行比较。
  6. 查看具体是哪些表情符号显示异常:它们是添加的(在上一个 iOS 版本中新增的)吗?如果是,请确保您的运行时环境包含相应的 Apple Color Emoji 版本。 [handwiki.org] [poomsmart.github.io]
  7. 编码:确认端到端均为 UTF-8;注意 U+FFFD 与 tofu 的区别,以区分编码和字体覆盖范围。 [symbolfyi.com]


新博客文章

Loading map...

Waypoints

LabelName
ACheung Chau Ferry Pier
BCheung Chau Beach
CWarwick Hotel
DKwun Yam Beach
EKwun Yam Temple
FMini Great Wall Trail
GChi Ma Hang View Point
HLittle Great Wall
IBethany Ministries Lodge
JDon Bosco Road
KFa Peng Road
LCheung Chau Peak Road
MTinford Garden House
NPeak Road West
OChung Lok Pavilion
PCheung Chau Crematorium
QCamping Site
RPirate Bay Cheung Chau
SCheung Chau Fireboat Station
TCheung Chau Public Pier

为什么你会看到“带问号的方块”(也就是豆腐)?

那个“方框里的问号”或空方块是“.notdef”占位符,表示字体中某个代码点没有对应的字形。这是一个渲染/回退问题,通常不是编码问题。 [thomasphinney.com] [symbolfyi.com]

模拟器中的常见原因:

  1. 表情符号/版本不匹配。
  2. 您发送/接收的是较新的表情符号(例如,通过网页客户端或运行较新操作系统的设备),但您的模拟器运行时版本早于该表情符号集。如果桌面/浏览器使用的表情符号字体比模拟器的 iOS 运行时版本更新,则网页界面可能看起来“正常”。 [handwiki.org] [poomsmart.github.io]
  3. 近期模拟器性能下降。
  4. 最新报告显示, Xcode 26.3在 iOS 26.2/26.3 模拟器上运行时,无法在 Canvas 和模拟器中渲染 Unicode/emoji 符号,而同一应用在真机上却能正常渲染——这正是您所描述的那种差异。 [developer.apple.com]
  5. 自定义字体屏蔽回退方案。
  6. 如果在UILabel/Text上设置了缺少 emoji 的自定义字体,并且你的文本编写方式阻止了 iOS 字体回退,那么 emoji 可能会变成豆腐。(UIKit 通常会回退到 Apple Color Emoji,但某些 Core Text/attributed-string 设置或严格的字体限制可能会破坏回退机制。)


如何修复(从侵入性最小的方法开始)

A. 确认问题不在于您的文本管道。

  1. 编码:确保所有内容(网络负载、数据库、JSON 解码)均采用 UTF-8 编码。如果看到替换字符 � ( U+FFFD),则表示编码存在问题;方框/方框中的“?”表示缺少字形(字体覆盖率不足)。 [symbolfyi.com]
  2. 表情符号序列:部分表情符号是零宽度字符序列(例如,家庭/国旗/肤色)。即使单码点表情符号可以正常显示,较旧的 iOS 运行时也可能无法正确组合这些序列(显示方框)。 [symbolfyi.com]

B. 消除模拟器/运行时不匹配

  1. 将 Xcode 和模拟器运行时更新到最新版本(Xcode > 设置 > 平台/组件)。这将获取该 iOS 版本包含的最新 Apple Color Emoji。 [developer.apple.com]
  2. 如果您使用的是 Xcode 26.x 系列版本并且仍然遇到问题,请重新安装或切换运行时架构(某些团队需要“通用”变体来解决其他模拟器异常问题):
xcodebuild -downloadPlatform iOS -architectureVariant universal
  1. 然后重新在 Xcode 的 Components 中安装 iOS 运行时,并重新创建模拟器。(这一步有助于解决 26.x 版本模拟器的一些不一致问题。) [stackoverflow.com] [code-examples.net]
  2. 请在运行相同 iOS 版本的真机上进行测试。如果真机可以显示表情符号,但模拟器无法显示,则很可能是模拟器存在 bug 。针对 Xcode 26.3 的一个公开讨论帖专门讨论了在真机上开发时,模拟器无法渲染表情符号/Unicode 的问题。 [developer.apple.com]

C. 确保您的用户界面允许系统表情符号回退

  1. 优先使用系统字体(例如, UIFont.preferredFont(forTextStyle:)或 SwiftUI.font .font(.body) )。
  2. 如果必须使用自定义字体,请构建属性字符串,确保只有文本部分使用自定义字体;表情符号部分保持无样式,或者使用UIFont.systemFont(ofSize:) ,以便系统可以从 Apple Color Emoji 获取字体。(过度限制整个字符串使用单一自定义字体可能会阻止回退。)
  3. 除非你自己处理回退机制,否则请避免在 Core Text 中过早地将文本转换为字形运行。

D. 确认您没有在旧版本运行时环境中测试全新的表情符号。

  1. 如果您依赖Unicode 15.1/16.0中引入的表情符号(已整合到最近的 iOS 17/18 版本中),请确保您的模拟器运行时版本等于或高于添加这些表情符号的 iOS 版本。否则,在您更新运行时/设备之前,这些表情符号将显示为豆腐。 [handwiki.org] [poomsmart.github.io]


查看图片库

评论

添加新评论:
名称:

  • 来自的评论 Rachel 18.03.2026 (18:49)
    Test
  • 来自的评论 Daniel 10.03.2026 (23:08)
    I like it
  • 来自的评论 Rachel 08.03.2026 (22:01)
    Test
  • 来自的评论 Rachel 08.03.2026 (21:44)
    Test
    • 回复者 Rachel 08.03.2026 (21:44)
      Test
  • 来自的评论 Rachel 08.03.2026 (21:29)
    Sdfadsfadf
  • 来自的评论 Rachel 08.03.2026 (15:22)
    Great to be here.
  • 来自的评论 Daniel Kohler 27.02.2026 (19:55)
    Wishing you all also a Happy Chinese New Year!
© 2026 香港登山者俱乐部