应用程序在模拟器中挂起
App hangs in simulator
问题
我将我的项目升级到 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");
}
}
控制台只会打印测试1。
有人知道发生了什么事吗?
注意:。此应用程序 运行ning 在带有 sim 卡的测试手机上,不 运行ning 在没有 sim 卡的 phone 上!
编辑:堆栈跟踪
如果我在调试控制台中按下 pauze,将显示以下堆栈跟踪:
libsystem_kernel.dylib`semaphore_wait_trap:
0x10c765fa4 <+0>: movq %rcx, %r10
0x10c765fa7 <+3>: movl [=11=]x1000024, %eax ; imm = 0x1000024
0x10c765fac <+8>: syscall
-> 0x10c765fae <+10>: retq
0x10c765faf <+11>: nop
这是 IOS/Swift 中的错误。 (更多信息见:http://www.openradar.me/18778790)
通话中
_ = UIFont()
之前
CGFontCreate()
将防止函数死锁。
问题
我将我的项目升级到 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");
}
}
控制台只会打印测试1。
有人知道发生了什么事吗?
注意:。此应用程序 运行ning 在带有 sim 卡的测试手机上,不 运行ning 在没有 sim 卡的 phone 上!
编辑:堆栈跟踪 如果我在调试控制台中按下 pauze,将显示以下堆栈跟踪:
libsystem_kernel.dylib`semaphore_wait_trap:
0x10c765fa4 <+0>: movq %rcx, %r10
0x10c765fa7 <+3>: movl [=11=]x1000024, %eax ; imm = 0x1000024
0x10c765fac <+8>: syscall
-> 0x10c765fae <+10>: retq
0x10c765faf <+11>: nop
这是 IOS/Swift 中的错误。 (更多信息见:http://www.openradar.me/18778790)
通话中
_ = UIFont()
之前
CGFontCreate()
将防止函数死锁。