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ć?

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.


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)

2

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


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 .


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.