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