ВопросApp висит в тренажере
Я модернизировал свой проект Swift 3.0, но после обновления приложение не будет работать на тренажере. Это не сбой, а просто замораживание.
Я исследовал проблему и увидел, что приложения зависают при инициализации пользовательских шрифтов.
Я скопировал функцию ниже.
func registerMaterialFont() {
let url = Bundle.main.url(forResource: "Material-Design-Iconic-Font", withExtension: "otf")!
let data = try! Data(contentsOf: url)
let provider = CGDataProvider(data: data as CFData)
print("Test 1")
let font = CGFont(provider!)
print("Test 2")
var error: Unmanaged<CFError>?
if !CTFontManagerRegisterGraphicsFont(font, &error) {
//Error handling here
} else {
log.info("Material Font registered");
}
}
Консоль будет печатать только Test 1.
Есть ли у кого-то идея, что происходит?
NB :. Это приложение работает на тестовом телефоне с SIM-картой, а не работает по телефону без SIM-карты!
Edit: Stack след Если я нажимаю Pauze в консоли отладки отображается следующий трассировки стека:
libsystem_kernel.dylib`semaphore_wait_trap:
0x10c765fa4 <+0>: movq %rcx, %r10
0x10c765fa7 <+3>: movl $0x1000024, %eax ; imm = 0x1000024
0x10c765fac <+8>: syscall
-> 0x10c765fae <+10>: retq
0x10c765faf <+11>: nop
Запустите приложение через отладчик. Когда он застрянет, нажмите кнопку «Пауза» в отладчике и посмотрите на полученную трассировку стека, чтобы увидеть, где она застряла. – rmaddy
@rmaddy Я обновил трассировку стека к комментарию. – Bas
Похож на неприятную ошибку в 'CGFontCreate'. Он использует 'dispatch_once', который, в свою очередь, вызывает' CGFontCreate'. Второй вызов теперь заблокирован, ожидая завершения предыдущего вызова. – rmaddy