Bagaimana saya bisa menemukan sumber peringatan coretext terkait font ini di IOS13?

17

Bekerja pada pembaruan aplikasi saya, saya perhatikan bahwa saya mendapatkan banyak peringatan di log ketika menjalankan aplikasi di Xcode 11.2 pada IOS13.

Catatan CoreText: Klien meminta nama ".SFUI-Regular", itu akan mendapatkan TimesNewRomanPSMT daripada font yang dimaksud. Semua akses font UI sistem harus melalui API yang tepat seperti CTFontCreateUIFontForLanguage () atau + [UIFont systemFontOfSize:].

Saya menggali sedikit dan menemukan kutipan ini dari WWDC:

Seperti disebutkan dalam banyak sesi WWDC, nama font dot-awalan tidak dapat digunakan secara langsung.

Saya sendiri hampir secara eksklusif menggunakan IB dan nibs untuk mengatur font untuk textfields dll, dan tidak ada referensi untuk "SFUI-Regular" dalam kode saya di mana saja, jadi saya tidak yakin bagaimana menemukan alasan sebenarnya untuk peringatan ini (saya punya sekitar 20-30 baris dalam log ini).

Adakah yang punya tips tentang bagaimana saya bisa menemukan dari mana peringatan itu berasal, dan bagaimana cara memperbaikinya?

Mathias
sumber

Jawaban:

6

Ada output lain di konsol, Anda dapat mencoba menambahkan breakpoint simbolis

Catatan CoreText: Tetapkan breakpoint pada CTFontLogSystemFontNameRequest ke debug.

clatt
sumber
Ya, atur breakpoint simbolis ini. Saat rusak, periksa tumpukan panggilan Anda. Anda kemudian akan melihat apa penyebabnya. Bagi saya, perangkat lunak pihak ke-3.
PDG
@ PDG Apa sebenarnya yang dilakukan perangkat lunak pihak ke-3?
Kaunteya
5

Saya mulai mengalami peringatan ini di konsol dimulai dengan Xcode 11, dengan target MacOS dan iOS.

Anda akan menerima ".SFUI-Regular" dari UIFont.systemFont(ofSize: X).fontName. Peringatan itu akan muncul jika Anda mencoba menggunakan instantiateUIFont(name: fontName, size: size) .

Dalam kasus saya, saya membiarkan pengguna menyesuaikan font tampilan, tetapi defaultnya adalah ".SFUI-Regular", jadi saya telah mengubahnya menjadi "TimesNewRomanPSMT"

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

// replace with
let defaultFont = "TimesNewRomanPSMT"

UIFont(name: defaultFont, size: size)
gheclipse
sumber
2

Memiliki masalah yang sama dan tidak ada referensi ke font dot-awalan dalam kode saya juga. Tetapkan breakpoint simbolis tetapi tidak ada gunanya

Hukum Tony
sumber
2
Masalah yang sama di sini, di aplikasi macOS. Saya mulai mencurigai bug SDK?
Jorge Leandro Perez
Saya melacak milik saya ke versi pod yang lebih lama yang saya gunakan.
Tony Law
6
Sebagai catatan, saya telah mereproduksi masalah ini dalam proyek macOS kosong, tidak ada ketergantungan eksternal, dan hanya 2 baris kode. Tiket Dukungan Teknis yang dikirimkan, akan membuat Anda tetap
Jorge Leandro Perez
1
@Klaas meminta maaf karena terlambat! YA ... ini adalah tanggapan resmi yang saya dapatkan, melalui Dukungan Teknis:
Jorge Leandro Perez
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. (Dan mereka tidak menambahkan apa-apa lagi .... "bug sistem")
Jorge Leandro Perez
0

Bagi saya, ternyata itu adalah perpustakaan pihak ketiga yang belum diperbarui dalam beberapa saat yang merupakan biang keladinya.

Saya meletakkan breakpoint seperti yang disarankan pengguna clatt dan menemukan sumbernya. Dalam kasus saya itu adalah TOMSMorphingLabel .

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

solusi untuk masalah uifont untuk ios 13

Jagveer Singh
sumber