アプリのアップデートに取り組んでいますが、IOS13のXcode 11.2でアプリを実行すると、ログに大量の警告が表示されます。
CoreText注:クライアントは名前「.SFUI-Regular」を要求しました。意図したフォントではなくTimesNewRomanPSMTを取得します。すべてのシステムUIフォントアクセスは、CTFontCreateUIFontForLanguage()または+ [UIFont systemFontOfSize:]などの適切なAPIを介して行われる必要があります。
私は少し掘り下げて、WWDCからのこの引用を見つけました:
多くのWWDCセッションで言及されているように、ドットが付いたフォント名は直接使用されません。
私自身、ほぼ独占的にIBとnibsを使用してテキストフィールドなどのフォントを設定しています。コードのどこにも「SFUI-Regular」への参照がないため、これらの警告の実際の理由を見つける方法がわかりません(私はログのこれらの20-30行のようなもの)。
警告がどこから来ているのかを見つける方法と、それを修正する方法についてのヒントはありますか?
私にとって、それは犯人であるしばらくの間更新されていないサードパーティのライブラリであることがわかりました。
ユーザーclattが提案したソースにブレークポイントを設定しました。私の場合は TOMSMorphingLabel でした。
コンソールに別の出力があり、シンボリックブレークポイントを追加してみることができます
CoreText note:CTFontLogSystemFontNameRequestにブレークポイントを設定してデバッグします。
MacOSとiOSの両方のターゲットで、Xcode 11以降のコンソールでこの警告が発生し始めました。
UIFont.systemFont(ofSize: X).fontName
から「.SFUI-Regular」を受け取ります。 UIFont(name: fontName, size: size)
を使用してインスタンス化しようとすると、警告が発生します。
私の場合、ユーザーに表示フォントのカスタマイズを許可していますが、デフォルトは「.SFUI-Regular」だったので、「TimesNewRomanPSMT」に変更しました
let defaultFont = UIFont.systemFont(ofSize: X).fontName
// replace with
let defaultFont = "TimesNewRomanPSMT"
UIFont(name: defaultFont, size: size)
同じ問題があり、コードにドットプレフィックス付きフォントへの参照もありません。シンボリックブレークポイントを設定しますが、何の役にも立ちません。
let fontCT = CTFontCreateUIFontForLanguage(.label, fontSize as CGFloat, nil)
attrStr.addAttribute(.font, value: fontCT as Any, range: NSMakeRange(0, text.count))
iOS 13のuifontの問題の解決策