2016-10-25 3 views
3

FrageApp hängt im Simulator

ich mein Projekt Swift Upgrade 3.0, aber nach dem Update der App wird auf dem Simulator nicht ausgeführt werden. Es stürzt nicht ab, sondern friert einfach ein.

Ich untersuchte das Problem und sah, dass die Apps bei der Initialisierung der benutzerdefinierten Schriftarten hängen blieben.

Ich kopierte die Funktion unten.

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"); 
    } 
} 

Die Konsole wird Test 1 nur drucken.

Hat jemand eine Idee, was los ist?

Hinweis :. Diese App läuft auf einem TestPhone mit SIM-Karte und läuft nicht auf einem Handy ohne SIM-Karte!

Edit: Stapelüberwachung Wenn ich pauze in der Debug-Konsole drücken, wird die folgende Stack-Trace angezeigt:

Stack Trace

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  
+1

Führen Sie die App über den Debugger aus. Wenn es nicht funktioniert, klicken Sie im Debugger auf die Schaltfläche "Pause" und sehen Sie sich den resultierenden Stack-Trace an, um festzustellen, wo er hängen geblieben ist. – rmaddy

+0

@rmaddy Ich habe den Stack-Trace auf den Kommentar aktualisiert. – Bas

+0

Sieht wie ein böser Fehler in 'CGFontCreate' aus. Es verwendet 'dispatch_once', das wiederum' CGFontCreate' aufruft. Der 2. Anruf ist jetzt blockiert und wartet auf den vorherigen Anruf, um zu beenden. – rmaddy

Antwort

7

Dies ist ein Fehler in IOS/Swift. (Für weitere Informationen siehe: http://www.openradar.me/18778790)

Aufruf
_ = UIFont() 

vor

CGFontCreate() 

Wird die Funktion verhindern, dass Deadlocks.

+0

Aufruf von '[UIFont systemFontOfSize: 12];' wie im Link vorgeschlagen, funktionierte für mich. – Adamski

+0

Irgendeine Idee, was ist der Grund dafür? Ich hatte das gleiche Problem beim Versuch, lassen Sie fontRef = CGFont (fontProviderRef) und die App Crashes. Wenn ich hinzugefügt habe, lassen Sie _ = UIFont() Es ist behoben und der Absturz passiert nicht, aber ich habe keine Ahnung warum? – KarimIhab

Verwandte Themen