Como posso encontrar a fonte desse aviso de coretexto relacionado à fonte no IOS13?


17

Trabalhando em uma atualização do meu aplicativo, percebo que recebo muitos avisos no log ao executar o aplicativo no Xcode 11.2 no IOS13.

Nota do CoreText: o cliente solicitou o nome ".SFUI-Regular", obterá TimesNewRomanPSMT em vez da fonte pretendida. Todo o acesso à fonte da interface do usuário do sistema deve ser por meio de APIs apropriadas, como CTFontCreateUIFontForLanguage () ou + [UIFont systemFontOfSize:].

Eu procurei um pouco e encontrei esta citação da WWDC:

Conforme mencionado em várias sessões da WWDC, os nomes de fontes com prefixo de ponto não devem ser usados ​​diretamente.

Eu mesmo estou quase exclusivamente usando IB e nibs para definir fontes para campos de texto etc., e não há referência a "SFUI-Regular" no meu código em qualquer lugar, por isso não tenho certeza de como encontrar o motivo real desses avisos (eu tenho algo como 20 a 30 linhas delas nos logs).

Alguém tem alguma dica de como posso encontrar de onde vem o aviso e como corrigi-lo?

Respostas:


6

Há outra saída no console, você pode tentar adicionar um ponto de interrupção simbólico

Nota do CoreText: defina um ponto de interrupção no CTFontLogSystemFontNameRequest para depurar.


Sim, defina este ponto de interrupção simbólico. Quando ele quebrar, verifique sua pilha de chamadas. Você verá qual é o culpado. Para mim, software de terceiros.
PDG

@PDG O que exatamente estava fazendo o software de terceiros?
Kaunteya 30/03

5

Comecei a receber esse aviso no console, começando com o Xcode 11, com destinos para MacOS e iOS.

Você receberá ".SFUI-Regular" de UIFont.systemFont(ofSize: X).fontName. O aviso ocorrerá se você tentar instanciar o uso UIFont(name: fontName, size: size).

No meu caso, estou permitindo que o usuário personalize a fonte de exibição, mas o padrão era ".SFUI-Regular", então mudei para "TimesNewRomanPSMT"

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

// replace with
let defaultFont = "TimesNewRomanPSMT"

UIFont(name: defaultFont, size: size)

2

Tendo o mesmo problema e nenhuma referência à fonte com prefixo de ponto no meu código também. Defina um ponto de interrupção simbólico, mas nada de útil


2
O mesmo problema aqui, em um aplicativo macOS. Estou começando a suspeitar de um bug do SDK?
Jorge Leandro Perez

Rastreei o meu até uma versão mais antiga de um pod que estou usando.
Lei Tony

6
Para constar, reproduzi esse problema em um projeto vazio do macOS, sem dependências externas e apenas duas linhas de código. O ticket do Suporte Técnico enviado, manterá você informado, senhoras e senhores #
Jorge Leandro Perez

11
@Klaas pede desculpas pelo atraso! SIM ... esta é a resposta oficial que recebi, através do Suporte Técnico:
Jorge Leandro Perez

11
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 eles não acrescentar mais nada .... "bug do sistema")
Jorge Leandro Perez

0

Para mim, verifica-se que era uma biblioteca de terceiros que não era atualizada há algum tempo e que era a culpada.

Coloquei um ponto de interrupção conforme sugerido pelo usuário clatt e encontrei a fonte. No meu caso foi TOMSMorphingLabel .


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

solução para uifont issue para ios 13

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.