¿Cómo puedo encontrar la fuente de esta advertencia de coretext relacionada con la fuente en IOS13?


17

Al trabajar en una actualización de mi aplicación, noto que recibo toneladas de advertencias en el registro cuando ejecuto la aplicación en Xcode 11.2 en IOS13.

Nota de CoreText: El cliente solicitó el nombre ".SFUI-Regular", obtendrá TimesNewRomanPSMT en lugar de la fuente deseada. Todo el acceso a la fuente de la interfaz de usuario del sistema debe realizarse a través de las API adecuadas, como CTFontCreateUIFontForLanguage () o + [UIFont systemFontOfSize:].

Busqué un poco y encontré esta cita de WWDC:

Como se mencionó en numerosas sesiones de WWDC, los nombres de fuente con prefijo de punto no se deben usar directamente.

Yo mismo uso casi exclusivamente IB y plumillas para configurar fuentes para campos de texto, etc., y no hay ninguna referencia a "SFUI-Regular" en mi código en ninguna parte, por lo que no estoy seguro de cómo encontrar el motivo real de estas advertencias (tengo algo así como 20-30 filas de estos en los registros).

¿Alguien tiene algún consejo sobre cómo puedo encontrar de dónde viene la advertencia y cómo solucionarla?

Respuestas:


6

Hay otra salida en la consola, puede intentar agregar un punto de interrupción simbólico

Nota de CoreText: establezca un punto de interrupción en CTFontLogSystemFontNameRequest para depurar.


Sí, establezca este punto de corte simbólico. Cuando se rompe, revisa tu pila de llamadas. Entonces verás cuál es el culpable. Para mí, software de terceros.
PDG

@PDG ¿Qué estaba haciendo exactamente el software de terceros?
Kaunteya

5

Comencé a experimentar esta advertencia en la consola comenzando con Xcode 11, con objetivos MacOS e iOS.

Recibirá ".SFUI-Regular" de UIFont.systemFont(ofSize: X).fontName. La advertencia se producirá si intenta crear una instancia usando UIFont(name: fontName, size: size).

En mi caso, dejo que el usuario personalice la fuente de visualización, pero el valor predeterminado era ".SFUI-Regular", por lo que lo he cambiado a "TimesNewRomanPSMT"

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

// replace with
let defaultFont = "TimesNewRomanPSMT"

UIFont(name: defaultFont, size: size)

2

Al tener el mismo problema y ninguna referencia a la fuente con prefijo de punto en mi código tampoco. Establecer un punto de interrupción simbólico pero nada de utilidad.


2
El mismo problema aquí, en una aplicación macOS. Estoy empezando a sospechar un error del SDK?
Jorge Leandro Perez

Rastreé el mío hasta una versión anterior de un pod que estoy usando.
Tony Law

66
Para el registro, he reproducido este problema en un proyecto de macOS vacío, sin dependencias externas y solo 2 líneas de código. Boleto de soporte técnico enviado, los mantendremos informados, damas y caballeros
Jorge Leandro Pérez, el

1
@Klaas se disculpa por llegar tarde! SÍ ... esta es la respuesta oficial que recibí, a través del Soporte Técnico:
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. (Y no agregaron nada más ... "error del sistema")
Jorge Leandro Perez

0

Para mí, resultó que era una biblioteca de terceros que no se había actualizado en un tiempo que era el culpable.

Puse un punto de interrupción como el usuario clatt sugirió y encontré la fuente. En mi caso fue TOMSMorphingLabel .


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

solución para el problema uifont para ios 13

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.