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


17

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

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

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

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

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

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

回答:


6

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

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


はい、このシンボリックブレークポイントを設定します。壊れた場合は、コールスタックを確認してください。次に、犯人が何であるかがわかります。私にとって、サードパーティのソフトウェア。
PDG

@PDGサードパーティのソフトウェアは正確に何をしていましたか?
Kaunteya

5

MacOSとiOSの両方のターゲットで、Xcode 11以降のコンソールでこの警告が発生し始めました。

から「.SFUI-Regular」を受け取りUIFont.systemFont(ofSize: X).fontNameます。を使用してインスタンス化しようとすると、警告が発生します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)

2

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


2
macOSアプリでの同じ問題。SDKのバグを疑い始めていますか?
ホルヘレアンドロペレス

私は私が使用している古いバージョンのポッドまでた​​どりました。
Tony Law、

6
参考までに、この問題を空のmacOSプロジェクトで再現しました。外部依存関係はなく、コードは2行だけです。提出した技術サポートチケット、紳士淑女、あなたが投稿し続ける
ホルヘ・ペレスレアンドロ

1
@Klaasは遅れたことについてお詫びします!YES ...これはテクニカルサポートスルー私が得た公式の応答は、次のとおりです。
ホルヘ・ペレスレアンドロ

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. (そして、彼らはそれ以上何も追加しませんでした... "システムバグ")
ホルヘ・レアンドロ・ペレス

0

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

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


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

iOS 13のuifontの問題の解決策

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.