AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Hat Jemand schonmal mit TestFairy herumgespielt ?
Thema durchsuchen
Ansicht
Themen-Optionen

Hat Jemand schonmal mit TestFairy herumgespielt ?

Ein Thema von Rollo62 · begonnen am 11. Mai 2016 · letzter Beitrag vom 13. Mai 2016
Antwort Antwort
Rollo62

Registriert seit: 15. Mär 2007
4.240 Beiträge
 
Delphi 12 Athens
 
#1

AW: Hat Jemand schonmal mit TestFairy herumgespielt ?

  Alt 12. Mai 2016, 21:37
Ich bin schon ein bischen weiter damit unter iOS:

- Neues TestProjekt angelegt, auch komplett in Apple iOS und iTunes (ist vielleicht unnötig)
- Provisioning files sind angelegt, AdHoc and Distribution certificates sind da
AdHoc schein das zu sein was TestFairy-Distribution braucht
- AppStore entry ist vorbereitet, aber nicht veröffentlicht zur Prüfung
- SDK static lib ist eingebunden
- Dazu muss FMX.Platform.iOS eingebunden und gefixt werden (siehe Beispeil)
- die Library files *.a und *.h vom SDK habe ich im Beispiel s.u. nicht mit reingelegt, wegen möglicher
Lizenzprobleme (kann man von hier bekommen)
- die Library files habe ich mit ins Src Verzeichnis des Projektes gelegt (soll da statisch gelinkt werden)
- Ein call begin("appToken"); wird direkt nach dirFinishLaunchingWithOptions aufgerufen,
mit dem AppToken von TestFairy.
- Build mit Arm7 64/32 byte dual boot code, mit richtigem Provisioning, etc.
- Debug läuft OHNE TestFairy SDK
- Release und Upload läuft MIT/OHNE TestFairy SDK
- Distribution zum Handy läuft MIT/OHNE SDK
- Installation geht nur mit AdHoc Zertifikat
- Installation geht nur auf den mit AdHoc verbundenen Devices, also maximal 100
- Programm startet MIT SDK, und crasht dann siehe Bilder unten
- Der Upload TestFairy geht, aber meldet "SDK not integrated"
- Crash passiert direkt beim Zugriff auf die statische Library
Delphi-Quellcode:
class procedure TApplicationDelegate.applicationDidFailToRegisterForRemoteNotificationsWithError(self: id; _cmd: SEL;
  application: PUIApplication; error: PNSError);
var
  Message: TPushFailToRegisterMessage;
  ErrorDescription: string;
begin
  ErrorDescription := NSStrToStr(TNSError.Wrap(error).localizedDescription);
  Message := TPushFailToRegisterMessage.Create(TPushFailToRegisterData.Create(ErrorDescription));
  TMessageManager.DefaultManager.SendMessage(nil, Message);
end;

class function TApplicationDelegate.applicationDidFinishLaunchingWithOptions(self: id; _cmd: SEL; application: PUIApplication; options: PNSDictionary): Boolean;
var
  StartupOptions: NSDictionary;
  NotificationSettings: UIUserNotificationSettings;
  LocalNotification: UILocalNotification;
  RemoteNotification: Pointer;
  WindowManager: TCocoaTouchWindowManager;
// ITfLib : IS4TfLibrary; //Add TestFairy Library interface locally probably failed, retry

begin
  Include(FState, TApplicationDelegate.TApplicationTransitionState.Launching);
  try
    //####
    //####
    //## Here the TestFairy settings should be applied
    //##
    //## Create the interface
    //##

    ITfLib := TS4TfLibrary.Create; //!! Hier crasht es, beim Alloc:
    //##
    //## Call the interface wit hthe CORRECT appToken for SDK use
    ITfLib.&begin(StrToNSStr( '0299f3dc7.................b36fce78cb') ); //Begin TestFairy session
    //##
    //## Interface auto-destroyed
    //####
    //####

    StartupOptions := TNSDictionary.Wrap(options);
- Soweit bin ich jetzt gekommen, aber es ist schon wieder 22:30.
Deshalb habe ich das Beispiel mal angehangen, in der Hoffnung das jemand diese Library
richtig eingebunden bekommt.

Rollo
Angehängte Grafiken
Dateityp: jpg Clipboard02.jpg (78,9 KB, 8x aufgerufen)
Dateityp: jpg Clipboard01.jpg (14,6 KB, 7x aufgerufen)
Angehängte Dateien
Dateityp: zip T002_TestFairy.zip (4,66 MB, 0x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#2

AW: Hat Jemand schonmal mit TestFairy herumgespielt ?

  Alt 13. Mai 2016, 11:06
nur mal kurz zu dem "Begin" nameclash. Dem interface ist doch der Name egal, der MethodIndex zählt. Nenns doch wie du willst
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.240 Beiträge
 
Delphi 12 Athens
 
#3

AW: Hat Jemand schonmal mit TestFairy herumgespielt ?

  Alt 13. Mai 2016, 11:19
Hallo Memnarch,

Die Zuordnung wird aber über den gleichen Namen gemacht.
Mir wäre auch lieber ich würde das irgendwo festlegen, statt mit CompileMagic im Hintergrund.

Ich bin mal nach Daniels super Beschreibung vorgegangen.

Aber das Interface wird nicht erzeugt.

Mir schwant aber etwas, könnte es sein das didFinishLaunchingWithOptions noch vor dem
Initialisieren des ganzen Rtti Systems getriggert wird ?
Dann könnte die Klasse eben nicht auf diese Art gefunden werden.

Gibt es einen anderen Ansatz die *.a Library von iOS har mit einer Funktion oder Klasse zu Binden,
um diese dann so früh aufzurufen ?

Rollo
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.880 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Hat Jemand schonmal mit TestFairy herumgespielt ?

  Alt 13. Mai 2016, 11:26
Ab Berlin gibt es Unterstützung durch eine CLI-Tool.

http://www.fmxexpress.com/generate-o...delphi-berlin/
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#5

AW: Hat Jemand schonmal mit TestFairy herumgespielt ?

  Alt 13. Mai 2016, 11:50
Urghs, ist das für die Mobile-Interfaces bzw bindungen zu PlatformSDKs anders o.O
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.240 Beiträge
 
Delphi 12 Athens
 
#6

AW: Hat Jemand schonmal mit TestFairy herumgespielt ?

  Alt 13. Mai 2016, 12:19
@MKinzler

Ja das hatte ich schon gesehen, scheint aber dasgleiche zu machen als das von Hand.
Schien mir komlizierter als es direkt zu versuchen.

Bin auch wieder ein stückchen weiter:

Ich hatte den Namen des Interfaces umbenannt, das macht sinn das es 1:1 gleich ist wie in der Library.
Jetzt bekomme ich jedenfalls einen ordentlichen Linioer error 00000001, aber warum weiis ich nicht.

So siehts in der Library aus, mit dem Header:

Code:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface TestFairy: NSObject

/**
 * Initialize a TestFairy session.
 *
 * @param appToken Your key as given to you in your TestFairy account
 */
+ (void)begin:(NSString *)appToken;
Das ist das Interface dazu, jetzt mit gleichen Namen.
Habe auch versucht die GUUID wegzulassen, so wie in Daniels Beispiel, ist aber immer noch mit Error.

Delphi-Quellcode:
type
  { S4TfLibrary / TS4TfLibrary }

  // non-static (instance) methods of "TfLibrary"
  TestFairy = interface(NSObject)
// ['{5875CABD-AEBA-4A91-A03F-C3DA9BFE24AD}']

    // Interface relates to name and signature in Library
    procedure &begin( appToken : NSString ); cdecl;

  end;

  // static (class) methods of "MyLibrary"
  TestFairyClass = interface(NSObjectClass)
  end;

  TTestFairy = class(TOCGenericImport<TestFairyClass, TestFairy>)
  end;

Gelinkt wird ann mit dieser Zeile, sollte ebenfalls Daniels Beispiel entsprechen:

Delphi-Quellcode:
{$IF DEFINED(CPUARM)}
function FAKE_LOADER : TTestFairy; cdecl; external LIB_TF_LIBRARY name 'OBJC_CLASS_$_TestFairy';
{$ENDIF}


initialization
{$IF DEFINED(CPUARM)}
  /// although this code is NEVER executed, it ensures a strong reference
  /// to the library - the linker is gonna LOVE (and consume) it!
  if FALSE then
    FAKE_LOADER;
{$ENDIF}

Die Library liegt im gleichen Verzeichnis wie die Sourcen, so definiert:
Delphi-Quellcode:
const
  LIB_TF_LIBRARY = 'libTestFairy.a';

Was kann denn jetzt noch schieflaufen ?
Ich versuche mal ein bischen die Verzeichnisse aus.

Rollo
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.240 Beiträge
 
Delphi 12 Athens
 
#7

AW: Hat Jemand schonmal mit TestFairy herumgespielt ?

  Alt 13. Mai 2016, 12:42
Das Problem scheint Folgendes:

ENTWEDER ich benenne das Interface NICHT wie in der libTestFairy.a Library:

Delphi-Quellcode:

type
  { S4TfLibrary / TS4TfLibrary }
  ITestFairy = interface(NSObject)
    // Interface relates to name and signature in Library
    procedure &begin( appToken : NSString ); cdecl;
  end;


{$IF DEFINED(CPUARM)}
function FAKE_LOADER : TTestFairy; cdecl; external LIB_TF_LIBRARY name 'OBJC_CLASS_$_ITestFairy';
{$ENDIF}

Dann kann ich Kompilieren und Linken, aber beim Aufruf finder er "TestFairy" aus der Library natürlich nicht.



ODER ich benenne das Interface GENAU wie in der libTestFairy.a Library:


Delphi-Quellcode:

type
  { S4TfLibrary / TS4TfLibrary }
   TestFairy = interface(NSObject)
    // Interface relates to name and signature in Library
    procedure &begin( appToken : NSString ); cdecl;
  end;


{$IF DEFINED(CPUARM)}
function FAKE_LOADER : TTestFairy; cdecl; external LIB_TF_LIBRARY name 'OBJC_CLASS_$_TestFairy';
{$ENDIF}

Dann bekomme ich einen Linker error ...

Gibt es nochen einen Dritten Weg ?

UPDATE:
Lasse ich die Methode weg, dann kompiliert es: Juhuuuu
Aber wie komme ich das dann wieder in mein Interface rein ?
Die Signatur stimmt, nur heisst die Funktion im Orginal dummerweise "begin", könnte das Problem daher kommen ?

Code:
@interface TestFairy: NSObject

/**
 * Initialize a TestFairy session.
 *
 * @param appToken Your key as given to you in your TestFairy account
 */
+ (void)begin:(NSString *)appToken;
Delphi-Quellcode:
    // Interface relates to name and signature in Library
    procedure &begin( appToken : NSString ); cdecl;


Rollo

Geändert von Rollo62 (13. Mai 2016 um 12:48 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz