Как я могу найти источник этого связанного со шрифтом предупреждения 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.