我们使用自定义表情符号为我们的应用程序创建了自定义字体。有时应用程序崩溃与以下堆栈跟踪(总是相同):
0 libsystem_platform.dylib 0x38b8d486 _platform_memmove$VARIANT$Swift + 102
1 CoreFoundation 0x2d8f7575 CFDataGetBytes + 237
2 ImageIO 0x2e6e1e8f CGImageReadGetBytesAtOffset + 299
3 ImageIO 0x2e6e1d59 CGImageReadSessionGetBytes + 29
4 ImageIO 0x2e825973 read_fn + 23
5 ImageIO 0x2e6e1cb1 png_read_sig + 45
6 ImageIO 0x2e6e1935 _cg_png_read_info + 33
7 ImageIO 0x2e6ea15b copyImageBlockSetPNG + 1123
8 ImageIO 0x2e6e9779 ImageProviderCopyImageBlockSetCallback + 529
9 CoreGraphics 0x2da2647d CGImageProviderCopyImageBlockSetWithOptions + 137
10 CoreGraphics 0x2da492f7 CGImageProviderCopyImageBlockSet + 39
11 CoreGraphics 0x2da2614f img_blocks_create + 411
12 CoreGraphics 0x2da492bb img_blocks_extent + 63
13 CoreGraphics 0x2da49271 img_interpolate_extent + 109
14 CoreGraphics 0x2da1a12d img_data_lock + 4421
15 CoreGraphics 0x2da187e9 CGSImageDataLock + 89
16 libRIP.A.dylib 0x2dd65da7 ripc_AcquireImage + 99
17 libRIP.A.dylib 0x2dd65131 ripc_DrawImage + 601
18 CoreGraphics 0x2da186fb CGContextDelegateDrawImage + 51
19 CoreGraphics 0x2da18581 CGContextDrawImage + 285
20 CoreText 0x2e0a43db TCGImageData::DrawInRect(CGRect) const + 311
21 CoreText 0x2e062299 CTFontDrawGlyphsWithAdvances + 705
22 CoreText 0x2e070d55 TRun::DrawGlyphs(CGContext*, CFRange) const + 241
23 CoreText 0x2e070c25 TLine::DrawGlyphs(CGContext*) const + 157
24 UIFoundation 0x358860df __NSStringDrawingEngine + 10151
25 UIFoundation 0x35883863 -[NSString(NSExtendedStringDrawing) drawWithRect:options:attributes:context:] + 151
26 UIKit 0x301e72c9 -[UILabel _drawTextInRect:baselineCalculationOnly:] + 4225
27 UIKit 0x3024d709 -[UILabel drawTextInRect:] + 501
28 UIKit 0x3024d50b -[UILabel drawRect:] + 79
29 UIKit 0x3024d4a9 -[UIView(CALayerDelegate) drawLayer:inContext:] + 373
30 QuartzCore 0x2fe79189 -[CALayer drawInContext:] + 101
我不知道是否有可能获得这种情况的帮助,但也许Apple的某个人可以提供有关字体错误的建议。如果需要,我可以提供字体。
答案 0 :(得分:3)
不幸的是,这不是一个确凿的答案,但是评论的时间太长了,所以我觉得可以自由地投票,那些做那种事的人。但我希望你不会,因为我认为这可能是有用的信息。
我深入研究了这种字体,它使用新定义的'sbix' table,就像Apple的Color Emoji字体一样,用于存储图标的彩色图像(本例中为PNG)。我浏览了数据表并将每个图标转储到PNG文件中,一切似乎都没问题(这意味着:'sbix'表本身似乎遵循规范,并且生成的PNG图像似乎不是腐败,实际上相当有趣!)。
然而:与Apple Color Emoji字体相比,这个字体有一些特点,我觉得有点奇怪。 Apple的字体有7个“罢工”(大小):20,32,40,48,64,96,160,而你的只有一个:285。我的理解是系统在被要求时应该向上/向下扩展字体中不存在的字体大小(例如,您调用50,它将285缩小到50),但鉴于Apple的最大打击大小为160,这让我想知道字体是否有一些未指定的大小上限。我注意到的另一件事是PNG数据是256像素宽,我不确定它应该如何与285大小相关(可能是填充?)。
查看堆栈跟踪,看起来它正在从图形数据中获取图像数据,但在实际渲染图像期间某处失败。
我不确定你用什么来制作这种字体,但是如果可以的话可以尝试缩放图像,使得你的打击尺寸为160,与Apple的最大值相匹配,并看看那里发生了什么。对不起,我无法提供更多帮助,但我希望这至少可以为您提供进一步调查的内容。