Frage Wenn Sie Google Maps als Unteransicht hinzufügen, stürzt die iOS-App mit exc_bad ab


Ich habe einen Code, der bis vor etwa 3 Tagen einwandfrei funktionierte. Ich habe versucht, zu einem viel älteren Commit zurückzugehen, das zu 100% funktioniert hat und immer noch stürzt es mit exc_bad ab. Der Absturz tritt nur auf, wenn die App auf dem Gerät ausgeführt wird. Wenn ich die App auf dem Simulator starte oder Instrumente verwende, um die App auf dem Gerät auszuführen, funktioniert es einwandfrei. Als ich meinen Google API-Schlüssel änderte, sagte es: "Sie haben vielleicht keine Erlaubnis, diesen API-Schlüssel zu verwenden", aber nicht mehr abgestürzt.

Die App stürzt nur ab, wenn die App auf dem Gerät über xcode ausgeführt wird. Wenn später dieselbe Version auf dem Gerät ausgeführt wird, ohne mit xcode verbunden zu sein, funktioniert es einwandfrei.

Ich bin nicht sicher, welche Informationen ich hier hinzufügen kann, um das Problem zu beheben. Ich habe vor kurzem xcode zu 6.4 aktualisiert und das OSX mit dem letzten Update aktualisiert.

Ich benutze Google 1.10.1 SDK-Version, installiert mit CocoaPods

Der Code, mit dem ich die Karte hinzufüge:

self.mapView = [GMSMapView mapWithFrame:self.view.bounds camera:camera];

self.mapView.myLocationEnabled = YES;
self.mapView.settings.myLocationButton = YES;
self.mapView.delegate = self;

[self.mapView addObserver:self
               forKeyPath:@"myLocation"
                  options:NSKeyValueObservingOptionNew
                  context:NULL];

[self.view insertSubview:self.mapView atIndex:1];

Der Fehler selbst variiert zwischen Code = 1, Code = 2 und Code = 257. Ich habe versucht, die GMSMapView mit Storyboard anstelle von Code hinzuzufügen. Ich habe versucht, eine ältere Version von xcode zu installieren und wieder zu laufen, aber es ändert nichts.

Wenn ich die Insert-Subview-Zeile auskommentiere, stürzt diese App nicht ab. Ich habe versucht, das Tool Zombie-Instrument zu laufen, aber wenn ich mit Instrumenten laufen, funktioniert die App gut.

#0  0x0000000100c5dc34 in EAGLContext_renderbufferStorageFromDrawable(EAGLContext*, objc_selector*, unsigned long, id<EAGLDrawable>) ()
#1  0x00000001002404c0 in gmscore::renderer::ios::GLRenderTarget::CreateFramebuffer() ()
#2  0x00000001002403cc in gmscore::renderer::ios::GLRenderTarget::FrameStart() ()
#3  0x00000001002e7af4 in gmscore::renderer::EntityRenderer::Draw(bool) ()
#4  0x00000001002516f4 in -[GMSPhoenixRenderer drawIfNeeded] ()
#5  0x00000001002329a0 in -[GMSEntityRendererView draw] ()
#6  0x000000010028dc74 in -[GMSDisplayLink displayLinkFired:] ()
#7  0x0000000100c5ca9c in -[DYDisplayLinkInterposer forwardDisplayLinkCallback:] ()
#8  0x00000001887f629c in CA::Display::DisplayLinkItem::dispatch() ()
#9  0x00000001887f6134 in CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) ()
#10 0x00000001855d1470 in IODispatchCalloutFromCFMessage ()
#11 0x00000001843c2dc4 in __CFMachPortPerform ()
#12 0x00000001843d7a54 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#13 0x00000001843d79b4 in __CFRunLoopDoSource1 ()
#14 0x00000001843d5934 in __CFRunLoopRun ()
#15 0x00000001843012d4 in CFRunLoopRunSpecific ()
#16 0x000000018db1f6fc in GSEventRunModal ()
#17 0x0000000188ec6fac in UIApplicationMain ()
#18 0x000000010002d794 in main at /Users/yoavschwartz/Documents/donkey_republic_ios/DonkeyRepublic/DonkeyRepublic/main.m:14
#19 0x0000000196272a08 in start ()

Dieses Problem schien sich beim Neustart von Computer / Gerät gelöst zu haben und platzierte sich nun wieder. Ich verstehe wirklich nicht, was vor sich geht.


39
2017-07-07 09:19


Ursprung


Antworten:


BEARBEITEN: Ich habe die Ursache des Problems gefunden und habe einen Workaround:

Das Problem scheint von OpenGL ES Frame Capture in XCode ausgelöst zu werden; Ich vermute, dass dieses Problem begann, als Apple ab XCode 6.4 / iOS 8.3 Metal zu der Mischung hinzufügte, was sich irgendwie nachteilig auf das gesamte Frame-Capture-Debugging-System auswirkte.

Die Problemumgehung:

  1. Navigieren Sie in XCode zu Produkt> Schema> Schema bearbeiten ...
  2. Wählen Sie die Registerkarte "Ausführen" auf der linken Seite.
  3. Wählen Sie oben die Registerkarte "Optionen".
  4. Ändern Sie "GPU Frame Capture" von "Automatisch aktiviert" oder "OpenGL ES" auf "Metall" oder "Deaktiviert".

Dadurch wird die Erfassung von OpenGL ES-Frames deaktiviert. Dies ist nicht besonders hilfreich, Sie können jedoch weiterhin mit dem Debuggen Ihrer Builds beginnen.

Ich bin mir nicht sicher, ob dieses Problem von Apple oder Google ist, aber ich werde Fehlerberichte an beide senden. Glückliche Kodierung!

-

früherer Post:

Einige weitere Informationen (würde dies zu einem Kommentar machen, aber ich habe noch nicht ganz den Namen), da ich dies auch erlebe; so gut ich kann sagen:

  • Das Problem tritt sowohl in XCode 6.4 als auch in XCode 7 Beta 3 auf
  • Es präsentiert sich nur im Debug-Modus und nicht außerhalb von XCode.
  • Es zeigt sich nicht auf iOS 8.1.2, aber auf iOS 8.3.
  • Es passiert sowohl mit Google Maps 1.9.X (importiert als Framework-Datei) als auch mit 1.10.X (importiert als CocoaPod, einschließlich der neuesten)
  • Ich kann das noch nicht vollständig überprüfen, aber es ist nicht in XCode 6.3.2 für mich aufgetaucht; Das könnte daran liegen, dass ich in dieser Version nicht für 8.3 kompilieren kann.

Ich werde wahrscheinlich die Frist für die Swag Bounty verpassen, aber ich verbringe den ganzen Tag damit, tiefer zu graben und melde mich zurück.


105
2017-07-16 05:19



Dies ist mir auch passiert, als ich das Google Maps SDK benutzt habe. Ich habe einen Fehlerbericht erstellt, nachdem ich Xcode neu gestartet und das Projekt gelöscht und neu installiert habe. Es funktionierte einwandfrei.

Dies ist nicht dein Problem, sondern einfach ein Fehler. Wenn Sie den Build-Through-Testflug oder den App Store installieren, wird es wie ein Zauber wirken.

Zum Debuggen, starten Sie einfach Xcode neu und versuchen Sie es, wenn möglich, über Xcode 7. Es besteht die Möglichkeit, dass Sie diesen Fehler behoben haben.

Hoffe das hilft, Julian


1
2017-07-15 13:41



Yoav Schwartz, hast du versucht, das mapView.delegate erst nach insertSubview der mapView in deine View-Hierarchie zu übernehmen?

Ich habe etwas ähnliches und ich vermute, dass es ein Fehler mit Xcode 6.4 ist, wie Julian oben erwähnt.

James Pereira / @ Marinehero


1
2017-07-15 14:22