Come posso trovare l'origine di questo avviso coretext relativo al font in IOS13?


17

Lavorando su un aggiornamento della mia app noto che ricevo tonnellate di avvisi nel registro quando eseguo l'app in Xcode 11.2 su IOS13.

Nota CoreText: il client ha richiesto il nome ".SFUI-Regular", otterrà TimesNewRomanPSMT anziché il carattere desiderato. L'accesso al carattere dell'interfaccia utente del sistema deve avvenire tramite API appropriate come CTFontCreateUIFontForLanguage () o + [UIFont systemFontOfSize:].

Ho scavato un po 'e ho trovato questa citazione dal WWDC:

Come accennato in numerose sessioni del WWDC, i nomi dei caratteri con prefisso non devono essere usati direttamente.

Io stesso sto quasi esclusivamente usando IB e pennini per impostare i caratteri per i campi di testo, ecc., E non vi è alcun riferimento a "SFUI-Regular" nel mio codice ovunque, quindi non sono sicuro di come trovare il motivo effettivo di questi avvisi (ho qualcosa come 20-30 file di questi nei registri).

Qualcuno ha qualche consiglio su come posso trovare l'origine dell'avviso e come risolverlo?

Risposte:


6

C'è un altro output nella console, puoi provare ad aggiungere un breakpoint simbolico

Nota CoreText: impostare un punto di interruzione su CTFontLogSystemFontNameRequest su debug.


Sì, imposta questo breakpoint simbolico. Quando si rompe, controlla il tuo stack di chiamate. Vedrai quindi qual è il colpevole. Per me, software di terze parti.
PDG

@PDG Cosa stava facendo esattamente il software di terze parti?
Kaunteya,

5

Ho iniziato a ricevere questo avviso nella console a partire da Xcode 11, con target sia MacOS che iOS.

Riceverai ".SFUI-Regular" da UIFont.systemFont(ofSize: X).fontName. L'avviso verrà quindi visualizzato se si tenta di creare un'istanza utilizzando UIFont(name: fontName, size: size).

Nel mio caso, lascio che l'utente personalizzi il carattere di visualizzazione, ma il valore predefinito era ".SFUI-Regular", quindi l'ho modificato in "TimesNewRomanPSMT"

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

// replace with
let defaultFont = "TimesNewRomanPSMT"

UIFont(name: defaultFont, size: size)

2

Avere lo stesso problema e nessun riferimento al carattere punto-prefisso nel mio codice. Imposta un punto di interruzione simbolico ma nulla di utile


2
Stesso problema qui, in un'app macOS. Sto iniziando a sospettare un bug dell'SDK?
Jorge Leandro Perez,

Ho rintracciato il mio in una versione precedente di un pod che sto usando.
Tony Law,

6
Per la cronaca, ho riprodotto questo problema in un progetto macOS vuoto, senza dipendenze esterne e solo 2 righe di codice. Biglietto dell'assistenza tecnica inviato, ti terrò informato, signore e signori
Jorge Leandro Perez,

1
@Klaas si scusa per il ritardo! SÌ ... questa è la risposta ufficiale che ho ricevuto, attraverso il supporto tecnico:
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. (E non hanno aggiunto altro .... "bug di sistema")
Jorge Leandro Perez,

0

Per me, si scopre che era una libreria di terze parti che non è stata aggiornata da un po 'di tempo che era il colpevole.

Ho messo un breakpoint come suggerito dall'utente clatt e trovato la fonte. Nel mio caso era TOMSMorphingLabel .


0
let fontCT = CTFontCreateUIFontForLanguage(.label, fontSize as CGFloat, nil)
attrStr.addAttribute(.font, value: fontCT as Any, range: NSMakeRange(0, text.count))

soluzione per il problema di uifont per iOS 13

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.