Jak znaleźć źródło tego ostrzeżenia związanego z czcionkami w IOS13?

17

Pracując nad aktualizacją mojej aplikacji, zauważam, że dostaję mnóstwo ostrzeżeń w dzienniku podczas uruchamiania aplikacji w Xcode 11.2 na IOS13.

Uwaga CoreText: Klient zażądał nazwy „.SFUI-Regular”, otrzyma TimesNewRomanPSMT zamiast zamierzonej czcionki. Cały systemowy dostęp do czcionek interfejsu użytkownika powinien odbywać się za pośrednictwem odpowiednich interfejsów API, takich jak CTFontCreateUIFontForLanguage () lub + [UIFont systemFontOfSize:].

Odkopałem trochę i znalazłem ten cytat z WWDC:

Jak wspomniano w wielu sesjach WWDC, nie należy bezpośrednio używać nazw czcionek z prefiksem kropki.

Jestem prawie wyłącznie używam IB i końcówek do ustawiania czcionek dla pól tekstowych itp. I nigdzie nie ma odniesienia do „SFUI-Regular” w moim kodzie, więc nie jestem pewien, jak znaleźć faktyczną przyczynę tych ostrzeżeń (mam około 20-30 rzędów tych w logach).

Czy ktoś ma jakieś wskazówki, jak znaleźć źródło ostrzeżenia i jak je naprawić?

Mathias
źródło

Odpowiedzi:

6

W konsoli jest inne wyjście, możesz spróbować dodać symboliczny punkt przerwania

Uwaga CoreText: Ustaw punkt przerwania na CTFontLogSystemFontNameRequest do debugowania.

clatt
źródło
Tak, ustaw ten symboliczny punkt przerwania. Kiedy się zepsuje, sprawdź stos połączeń. Zobaczysz, jaki jest winowajca. Dla mnie oprogramowanie innych firm.
PDG
@PDG Czym dokładnie zajmowało się oprogramowanie innych firm?
Kaunteya
5

Ostrzeżenie zaczęło się w konsoli, zaczynając od Xcode 11, zarówno w systemach MacOS, jak i iOS.

Otrzymasz „.SFUI-Regular” od UIFont.systemFont(ofSize: X).fontName. Ostrzeżenie pojawi się wtedy, gdy spróbujesz utworzyć instancję za pomocą UIFont(name: fontName, size: size).

W moim przypadku pozwalam użytkownikowi dostosować czcionkę wyświetlaną, ale domyślnie był to „.SFUI-Regular”, więc zmieniłem to na „TimesNewRomanPSMT”

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

// replace with
let defaultFont = "TimesNewRomanPSMT"

UIFont(name: defaultFont, size: size)
gheclipse
źródło
2

Ten sam problem i brak odniesienia do czcionki z kropką w moim kodzie. Ustaw symboliczny punkt przerwania, ale bezużyteczny

Tony Law
źródło
2
Ten sam problem tutaj, w aplikacji macOS. Zaczynam podejrzewać błąd SDK?
Jorge Leandro Perez
Prześledziłem moją do starszej wersji kapsuły, której używam.
Tony Law,
6
Dla przypomnienia odtworzyłem ten problem w pustym projekcie macOS, bez zewnętrznych zależności i tylko w 2 liniach kodu. Zgłoszony bilet pomocy technicznej, będzie Cię informować, panie i panowie
Jorge Leandro Perez
1
@Klaas przeprasza za spóźnienie! TAK ... to oficjalna odpowiedź, którą otrzymałem, poprzez wsparcie techniczne:
Jorge Leandro Perez
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. (I nie dodali nic więcej… „błąd systemu”)
Jorge Leandro Perez
0

Dla mnie okazuje się, że była to biblioteka innej firmy, która nie była aktualizowana od dłuższego czasu.

Ustawiłem punkt przerwania zgodnie z sugestią użytkownika i odnalazłem źródło. W moim przypadku była to TOMSMorphingLabel .

Mathias
źródło
0
let fontCT = CTFontCreateUIFontForLanguage(.label, fontSize as CGFloat, nil)
attrStr.addAttribute(.font, value: fontCT as Any, range: NSMakeRange(0, text.count))

rozwiązanie problemu uifont dla iOS 13

Jagveer Singh
źródło