web-dev-qa-db-ja.com

IOS13でこのフォント関連のコアテキスト警告の原因を見つけるにはどうすればよいですか?

アプリのアップデートに取り組んでいますが、IOS13のXcode 11.2でアプリを実行すると、ログに大量の警告が表示されます。

CoreText注:クライアントは名前「.SFUI-Regular」を要求しました。意図したフォントではなくTimesNewRomanPSMTを取得します。すべてのシステムUIフォントアクセスは、CTFontCreateUIFontForLanguage()または+ [UIFont systemFontOfSize:]などの適切なAPIを介して行われる必要があります。

私は少し掘り下げて、WWDCからのこの引用を見つけました:

多くのWWDCセッションで言及されているように、ドットが付いたフォント名は直接使用されません。

私自身、ほぼ独占的にIBとnibsを使用してテキストフィールドなどのフォントを設定しています。コードのどこにも「SFUI-Regular」への参照がないため、これらの警告の実際の理由を見つける方法がわかりません(私はログのこれらの20-30行のようなもの)。

警告がどこから来ているのかを見つける方法と、それを修正する方法についてのヒントはありますか?

17
Mathias

私にとって、それは犯人であるしばらくの間更新されていないサードパーティのライブラリであることがわかりました。

ユーザーclattが提案したソースにブレークポイントを設定しました。私の場合は TOMSMorphingLabel でした。

0
Mathias

コンソールに別の出力があり、シンボリックブレークポイントを追加してみることができます

CoreText note:CTFontLogSystemFontNameRequestにブレークポイントを設定してデバッグします。

5
clatt

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)
4
gheclipse

同じ問題があり、コードにドットプレフィックス付きフォントへの参照もありません。シンボリックブレークポイントを設定しますが、何の役にも立ちません。

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

iOS 13のuifontの問題の解決策

0
Jagveer Singh