2010-11-24 48 views
1

L'admob sdk pour iPhone utilise une bibliothèque propriétaire libAdMobNoThumb.a et une bibliothèque TouchJSON basée sur la source Objective-C.Liaison monotouch pour TouchJSON?

Quelqu'un sait-il d'une liaison C# pour TouchJSON afin que nous puissions l'inclure?

Ou est-ce que quelqu'un sait comment construire une bibliothèque qui peut être incluse?

Nous avons créé un projet de bibliothèque iPhone avec Xcode et ajouté l'arborescence complète des sources TouchJSON. Nous avons que le résultat libTouchJSON.a liés dans une application iPhone de test avec gcc_flags suivants:

-v -v -v -gcc_flags "-L${ProjectDir}/Lib -lAdMobNoThumb -lTouchJSON -force_load ${ProjectDir}/Lib/libAdMobNoThumb.a -force_load ${ProjectDir}/Lib/libTouchJSON.a" 

Ce produit à la suite de sortie d'erreur (grâce au -v -v -v):

Error 1: mtouch failed with the following message: 
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmpe374af5.tmp/main.m: In function 'monotouch_debug_connect': 
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmpe374af5.tmp/main.m:1779: warning: implicit declaration of function 'select' 
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmpe374af5.tmp/main.m: In function 'main': 
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmpe374af5.tmp/main.m:1821: warning: implicit declaration of function 'chdir' 
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmpe374af5.tmp/main.m:1838: warning: implicit declaration of function 'monotouch_enable_debug_tracking' 
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmpe374af5.tmp/main.m:1914: warning: implicit declaration of function 'dup2' 
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmpe374af5.tmp/main.m:1921: warning: implicit declaration of function 'mini_get_debug_options' 
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmpe374af5.tmp/main.m:1925: warning: implicit declaration of function 'mono_debugger_agent_parse_options' 
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmpe374af5.tmp/main.m:2052: warning: implicit declaration of function 'getpagesize' 
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmpe374af5.tmp/main.m:2055: warning: cast from pointer to integer of different size 
/var/folders/hF/hF42FIdhEUmY1y-pGRsu1k+++TI/-Tmp-/tmpe374af5.tmp/main.m:2055: warning: initialization makes pointer from integer without a cast 
Undefined symbols: 
    "_OBJC_CLASS_$_CJSONSerializer", referenced from: 
     objc-class-ref-to-CJSONSerializer in libAdMobNoThumb.a(AdMobAd.o) 
     objc-class-ref-to-CJSONSerializer in libAdMobNoThumb.a(AdMobWebView.o) 
     objc-class-ref-to-CJSONSerializer in libAdMobNoThumb.a(AdMobFlexWebView.o) 
    "_OBJC_CLASS_$_CJSONDeserializer", referenced from: 
     objc-class-ref-to-CJSONDeserializer in libAdMobNoThumb.a(AdMobOpener.o) 
     objc-class-ref-to-CJSONDeserializer in libAdMobNoThumb.a(AdMobSearchViewController.o) 
     objc-class-ref-to-CJSONDeserializer in libAdMobNoThumb.a(AdMobAd.o) 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 
(1) (AdMobber) 

Toutes les suggestions pour contourner ce problème?

TIA, Mollyke.

Répondre

4

Votre bibliothèque AdMob ne trouve pas les classes CJSONDeserializer ou CJSONSerializer, que je suppose provenir de libTouchJSON.a. Cela signifie généralement que votre fichier libTouchJSON.a n'a pas été inclus dans votre projet. Vous devriez revérifier tous vos arguments supplémentaires, et vous assurer que votre libTouchJSON n'est pas le pouce et inclut toutes les architectures que vous essayez de lien (x86 pour le simulateur, ARMv6 pour appareil)

+0

Geoff, Tu es le meilleur! Nous avons fait une compilation de simulateur de nothumb de libTouchJSON.a, liée avec elle, et bingo. – guivho

0

Eric,

Désolé pour le retard, mais dernièrement j'ai été très occupé avec de purs projets de xcode. Laissez-moi vous dire comment j'ai créé une bibliothèque TouchJSON.

J'ai créé un projet de bibliothèque avec xcode et copié les sources TouchJSON fournies avec la dernière bibliothèque admob. J'ai construit deux versions de release nothumb, une pour le simulateur, et une pour l'appareil. Cela produit deux bibliothèques. Pour faciliter l'utilisation de ces derniers dans les projets MT, j'ai utilisé l'outil lipo pour les combiner dans une bibliothèque de graisse. Les bibliothèques de graisse sont pratiques car elles peuvent être utilisées dans le simulateur ainsi que dans les constructions de dispositifs. Le projet complet, y compris le libary libTouchJSON.a de graisse et le script qui a été utilisé pour construire la grosse dame, sont présents dans le fichier zip disponible au http://www.filedropper.com/touchjson.

(Note: cela est affiché comme une réponse à ma première question, car il était un peu trop longtemps pour être accepté comme un commentaire sur la question par Eric S)

0

Comme beaucoup de gens trouveront cette question, vous peut utiliser la mise à jour des liaisons de MonoTouch pour AdMob posté sur github ici https://github.com/dalexsoto/AlexTouch.GoogleAdMobAds

Voici un exemple de la façon de l'utiliser et comment ses événements Abonnez-vous à

public override void ViewDidLoad() 
     { 
      base.ViewDidLoad(); 

      var ad = new GADBannerView(new RectangleF(new PointF(0,0), GADBannerView.GAD_SIZE_300x250)) 
      { 
       AdUnitID = "Use Your AdMob Id here", 
       RootViewController = this 

      }; 

      ad.DidReceiveAd += delegate 
      { 
       this.View.AddSubview(ad); 
       Console.WriteLine("AD Received"); 
      }; 

      ad.DidFailToReceiveAdWithError += delegate(object sender, GADBannerViewDidFailWithErrorEventArgs e) { 
       Console.WriteLine(e.Error); 
      }; 

      ad.WillPresentScreen += delegate { 
       Console.WriteLine("showing new screen"); 
      }; 

      ad.WillLeaveApplication += delegate { 
       Console.WriteLine("I will leave application"); 
      }; 

      ad.WillDismissScreen += delegate { 
       Console.WriteLine("Dismissing opened screen"); 
      }; 

      Console.Write("Requesting Ad"); 
      ad.LoadRequest(new GADRequest()); 
}