Delphi-PRAXiS
Seite 11 von 11   « Erste     91011   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Ios9 (https://www.delphipraxis.net/186619-ios9.html)

cipher 23. Okt 2015 21:04

AW: Ios9
 
Das Problem ist, dass die App schon abstürzt bevor sie dazu kommt meinen Code auszuführen (also noch beim "booten"):

http://enlightme.info/crash.png

Ich habe den Fehler jetzt eingrenzen können:

Es handelt sich um einen Bug im Zusammenhang mit TPushEvents. Dieses Feature scheint unter Android & iOS32-Bit im Release Mode zum Crash zu führen.

https://quality.embarcadero.com/browse/RSP-12658

Tolle Wurst, da bleibt mir wohl nichts anderes, als abzuwarten bis Embarcadero einen Fix dafür erstellt. :(

cipher 27. Okt 2015 11:26

AW: Ios9
 
Zitat:

Zitat von Sir Rufo (Beitrag 1319626)
Einen Fehler bzgl. iOSDevice32/Release habe ich schon gemeldet
https://quality.embarcadero.com/browse/RSP-12408

Du solltest aber irgendeine Fehlermeldung bekommen, bzw. deine App mit ein wenig Logging bestücken damit du sehen kannst wo der Fehler herkommt.

Das war ein guter Tipp von dir! TPushEvents scheint auch die Supports-Methode aus System.SysUtils zu nutzen, die bei Android/Release und iOS32/Release zum Absturz führt.

Als Workaround habe ich die System.SysUtils.pas in meinen Projektpfad aufgenommen und folgende Methode:

Code:
function Supports(const Instance: IInterface; const IID: TGUID; out Intf): Boolean; overload;
so verändert:

Code:
function Supports(const Instance: IInterface; IID: TGUID; out Intf): Boolean; overload;
Warum das dann funktioniert, weiß ich aber nicht. :-D

Memnarch 27. Okt 2015 12:03

AW: Ios9
 
Ich vermute es liegt dann an dem const der TGUID. IIRC wird ohne const der record zuerst kopiert und dann an die Funktion übergeben. Mit const wird nur eine reference zu dem record auf den stack gepushed. Das heißt du pushed eine reference auf den stack, während dort eigentlich der record direkt erwartet wird. Innerhalb der Funktion wird dann wohl auf invaliden Speicher zugegriffen.

cipher 28. Okt 2015 09:44

AW: Ios9
 
Zitat:

Zitat von Memnarch (Beitrag 1319847)
Ich vermute es liegt dann an dem const der TGUID. IIRC wird ohne const der record zuerst kopiert und dann an die Funktion übergeben. Mit const wird nur eine reference zu dem record auf den stack gepushed. Das heißt du pushed eine reference auf den stack, während dort eigentlich der record direkt erwartet wird. Innerhalb der Funktion wird dann wohl auf invaliden Speicher zugegriffen.

Ja, das könnte sein, aber die IID wird in dieser Methode auch nur als const weitergegeben:

Code:
function Supports(const Instance: IInterface; IID: TGUID; out Intf): Boolean;
begin
  Result := (Instance <> nil) and (Instance.QueryInterface(IID, Intf) = 0);
end;
Definition der QueryInterface:

Code:
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;

Memnarch 28. Okt 2015 11:08

AW: Ios9
 
SO war das nicht gemeint, was ich meinte war, dass vllt in der deklaration steht, dass da ein const hingehört, aber aus irgendeinem grund im vorkompilierten Delphisource der implementierungsteil kein const verwendet. Gemeint hatte ich also einen unterschied zwischen Interface und Implementation(wobei bei implementation der tatsächlich kompilierte source interessant wäre).

Das sind aber nur Vermutungen.

cipher 22. Nov 2015 22:45

AW: Ios9
 
Nur zur Info:

Mit dem 10 Seattle Update 1 sind alle Probleme, die ich hatte beseitigt. 👍
Push Messages gehen. Und sogar die Transport Security wird für iOS gesetzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:51 Uhr.
Seite 11 von 11   « Erste     91011   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz