2016-04-13 7 views
2

Ich habe plötzlich beobachtet, unten Absturz auf ein neues Update für eine meiner Apps zu beobachten. Es scheint ziemlich häufig zu passieren und ist verwirrend, da ich in den letzten 6 Monaten keine Änderungen an diesem Codeabschnitt vorgenommen habe. Ich habe mich gefragt, ob this (EXC_BAD_ACCESS beim Zurückgeben eines Wurf-Wörterbuchs) Swift Radarbug könnte relevant sein, wenn der Absturz aufgrund der Bildung des Params Dictionary für diese Anfrage ist.swift_unknownRelease Crash - SwiftHTTP

Aktualisieren Dieser Build wurde mit Swift 2.2 und Xcode 7.3 erstellt. SwiftHTTP ist v1.0.4. Ich sehe Abstürze mit dem Produktionsbinär auf iOS 8.3.0, 9.3.0 und 9.3.1. Dieses Problem ist am häufigsten (87%) auf iPhone 6, 6 Plus und 6s. Ich habe versucht, dieses Problem mit Xcode Zombies zu reproduzieren (wie here), aber es zeigte keine message sent to deallocated instance Nachrichten in der Konsole.

Der Absturz tritt bei der Durchführung eines PUT-Updates in einer Hilfsklasse auf, die ich für die SwiftHTTP-Bibliothek habe.

Fehler

EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000000000020 

Stack Trace

Thread : Crashed: com.apple.main-thread 
0 libswiftCore.dylib    0x100d6d8f8 swift_unknownRelease + 24 
1 SwiftHTTP      0x100b07298 _TTSf4g_n___TTSg5Ps9AnyObject____TFE9SwiftHTTPSa11createPairsfGSqSS_GSaVS_8HTTPPair_ + 700 
2 SwiftHTTP      0x100b002f4 _TFE9SwiftHTTPVs10Dictionary11createPairsfGSqSS_GSaVS_8HTTPPair_ + 2000 
3 SwiftHTTP      0x100b00f90 _TTWu0_Rxs8HashablerGVs10Dictionaryxq__9SwiftHTTP21HTTPParameterProtocolS1_FS2_11createPairsfGSqSS_GSaVS1_8HTTPPair_ + 112 
4 SwiftHTTP      0x100b0178c _TFE9SwiftHTTPCSo19NSMutableURLRequest16appendParametersfzPS_21HTTPParameterProtocol_T_ + 396 
5 SwiftHTTP      0x100af14a4 _TTWV9SwiftHTTP23HTTPParameterSerializerS_21HTTPSerializeProtocolS_FS1_9serializefzTCSo19NSMutableURLRequest10parametersPS_21HTTPParameterProtocol__T_ + 40 
6 SwiftHTTP      0x100af8ccc _TTSf4gs_n_n_g_n_d___TZFC9SwiftHTTP4HTTP3NewfzTSS6methodOS_8HTTPVerb10parametersGSqPS_21HTTPParameterProtocol__7headersGSqGVs10DictionarySSSS__17requestSerializerPS_21HTTPSerializeProtocol__S0_ + 624 
7 SwiftHTTP      0x100af5758 _TZFC9SwiftHTTP4HTTP3PUTfzTSS10parametersGSqPS_21HTTPParameterProtocol__7headersGSqGVs10DictionarySSSS__17requestSerializerPS_21HTTPSerializeProtocol__S0_ + 76 
8 MyApp     0x1001274c0 SwiftHTTPUtilities.PUT(String, auth : String, params : [String : AnyObject]?, model : String, mode : APIUtilities.ApiRequestType, object : AnyObject?) ->() (SwiftHTTPUtilities.swift:52) 
9 MyApp     0x100154e90 APIUtilities.(apiRequest(String, mode : APIUtilities.ApiRequestType, object : AnyObject?) ->()).(closure #3) (APIUtilities.swift:76) 
10 MyApp     0x100152f70 partial apply for APIUtilities.(apiRequest(String, mode : APIUtilities.ApiRequestType, object : AnyObject?) ->()).(closure #3) (APIUtilities.swift) 
11 libdispatch.dylib    0x18364d4bc _dispatch_call_block_and_release + 24 
12 libdispatch.dylib    0x18364d47c _dispatch_client_callout + 16 
13 libdispatch.dylib    0x183652b84 _dispatch_main_queue_callback_4CF + 1844 
14 CoreFoundation     0x183bb8dd8 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12 
15 CoreFoundation     0x183bb6c40 __CFRunLoopRun + 1628 
16 CoreFoundation     0x183ae0d10 CFRunLoopRunSpecific + 384 
17 GraphicsServices    0x1853c8088 GSEventRunModal + 180 
18 UIKit       0x188db5f70 UIApplicationMain + 204 
19 MyApp     0x10026d508 main (AppDelegate.swift:25) 
20 libdispatch.dylib    0x18367e8b8 (Missing) 

SwiftHTTPUtilities (die eine Hilfsklasse ist mit der Open-Source-Bibliothek SwiftHTTP zu interagieren)

func PUT(apiPath: String, auth: String, params: Dictionary<String,AnyObject>?,model: String, mode: APIUtilities.ApiRequestType, object: AnyObject?) {   
      do { 
//SYMBOLICATED CRASH REPORT IDENTIFIES BELOW LINE FOR EXC_BAD_ACCESS 
       let opt = try HTTP.PUT("\(apiPath)", parameters: params, headers: ["*removed*"]) 
       opt.start { response in 
        if let err = response.error { 
//      print("error: \(err.localizedDescription)") 
         self.delegate?.didGetServerResponse(false, response: nil, error: response.error, model: model, mode: mode, object: object) 
         return //also notify app of failure as needed 
        } 
//     print("opt finished: \(response.description)") 
        //print("data is: \(response.data)") access the response of the data with response.data 

        self.delegate?.didGetServerResponse(true, response: response.data, error: nil, model: model, mode: mode, object: object) 
       } 
      } catch let error { 
//    print("got an error creating the request: \(error)") 
       self.delegate?.didGetServerResponse(false, response: nil, error: nil, model: model, mode: mode, object: object) 
      } 

    } 
+0

Haben Sie versucht zu reinigen und zu bauen? Manchmal ist der Crash nicht wirklich ein Crash in Swift. – Varun

+0

Dieser Absturz wird in einer Produktions-Binärdatei im App Store beobachtet. Ich konnte den Absturz auf meinem physischen Gerät noch nicht replizieren (d. H. Das Auslösen dieser Funktion stürzt für mich nicht ab), aber ich habe die Berichte auf Crashlytics gesehen. – upperlacon

+0

Ok. War es auf Swift 1.0 oder 2.0 gebaut? Und Xcode-Version? – Varun

Antwort

0

Dieses Problem trat auf, weil SwiftHTTP standardmäßig HTTPSerialisierung verwendete. Die folgende Zeile gibt an, wie JSON-Serialisierung angegeben wird, wodurch der Fehler für mich behoben wurde.

let opt = try HTTP.New("\(apiPath)", method: .PUT, parameters: params, headers: ["Authorization": "edit"], requestSerializer: JSONParameterSerializer())