应用程序在模拟器中挂起

Bas*_*Bas 3 freeze hang ios swift swift3

我将我的项目升级到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");
    }
}
Run Code Online (Sandbox Code Playgroud)

控制台仅打印测试1.

有人有什么想法吗?

NB:.这个应用程序在带有SIM卡的testPhone上运行,而不是没有 SIM卡的手机上运行!

编辑:堆栈跟踪 如果我在调试控制台中按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    
Run Code Online (Sandbox Code Playgroud)

Bas*_*Bas 9

这是IOS/Swift中的一个错误.(有关更多信息,请参阅:http://www.openradar.me/18778790)

调用

_ = UIFont() 
Run Code Online (Sandbox Code Playgroud)

之前

CGFontCreate()
Run Code Online (Sandbox Code Playgroud)

将阻止该功能死锁.