Как я могу найти источник этого связанного со шрифтом предупреждения coretext в IOS13?


17

Работая над обновлением моего приложения, я замечаю, что получаю тонны предупреждений в журнале при запуске приложения в Xcode 11.2 на IOS13.

Примечание CoreText: Клиент запросил имя ".SFUI-Regular", вместо него будет выбран TimesNewRomanPSMT, а не предполагаемый шрифт. Весь доступ к шрифту системного пользовательского интерфейса должен осуществляться через соответствующие API, такие как CTFontCreateUIFontForLanguage () или + [UIFont systemFontOfSize:].

Я немного покопался и нашел эту цитату из WWDC:

Как упоминалось в многочисленных сеансах WWDC, имена шрифтов с префиксом точки не должны использоваться напрямую.

Я сам почти исключительно использую IB и nibs для установки шрифтов для текстовых полей и т. Д., И в моем коде нет ссылки на «SFUI-Regular», поэтому я не уверен, как найти фактическую причину этих предупреждений (у меня есть что-то вроде 20-30 рядов таких в логах).

У кого-нибудь есть какие-либо советы о том, как я могу найти, откуда приходит предупреждение, и как это исправить?

Ответы:


6

В консоли есть другой вывод, вы можете попробовать добавить символическую точку останова.

Примечание CoreText: Установите точку останова на CTFontLogSystemFontNameRequest для отладки.


Да, установите эту символическую точку останова. Когда он сломается, проверьте ваш стек вызовов. Затем вы увидите, кто виноват. Для меня стороннее программное обеспечение.
— PDG

@PDG Что именно делал сторонний софт?
— Каунтея

5

Я начал испытывать это предупреждение в консоли, начиная с Xcode 11, с целями MacOS и iOS.

Вы получите ".SFUI-Regular" от UIFont.systemFont(ofSize: X).fontName. Предупреждение появится, если вы попытаетесь создать экземпляр с использованием UIFont(name: fontName, size: size).

В моем случае я позволяю пользователю настраивать шрифт дисплея, но по умолчанию был «.SFUI-Regular», поэтому я изменил его на «TimesNewRomanPSMT»

let defaultFont = UIFont.systemFont(ofSize: X).fontName

// replace with
let defaultFont = "TimesNewRomanPSMT"

UIFont(name: defaultFont, size: size)

2

Имея ту же проблему и без ссылки на шрифт с префиксом в моем коде. Установите символическую точку останова, но ничего не используйте


2
Та же проблема здесь, в приложении MacOS. Я начинаю подозревать ошибку SDK?
— Хорхе Леандро Перес

Я проследил мой к более старой версии стручка, который я использую.
— Тони Лоу

6
Для справки, я воспроизвел эту проблему в пустом проекте MacOS, без внешних зависимостей и всего в 2 строках кода. Билет в
— Хорхе Леандро Перес

1
@Klaas извинения за опоздание! ДА ... это официальный ответ, который я получил через техподдержку:
— Хорхе Леандро Перес

1
Regarding the error mesage shown in your video, I view it as a system bug because I don’t see any of your code requesting “.AppleColorEmojiUI” – If your real app indeed does that, you should follow the message to correct it. Other than that, I don’t have anything worth to mentioning. (И они ничего больше не добавляли .... «системная ошибка»)
— Хорхе Леандро Перес

0

Для меня оказывается, что это была сторонняя библиотека, которая не обновлялась какое-то время, что было виновником.

Я поставил точку останова, как предложил пользователь clatt, и нашел источник. В моем случае это был TOMSMorphingLabel .


0
let fontCT = CTFontCreateUIFontForLanguage(.label, fontSize as CGFloat, nil)
attrStr.addAttribute(.font, value: fontCT as Any, range: NSMakeRange(0, text.count))

решение проблемы с uifont для ios 13

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.