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?

Mathias
fonte

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.

clatt
fonte
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)
gheclipse
fonte
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

Tony Law
fonte
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 .

Mathias
fonte
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

Jagveer Singh
fonte