Як я можу знайти джерело цього попередження, що стосується шрифту, в корітексті в 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.