2010-11-24 53 views
1

适用于iPhone的admob sdk使用专有的libAdMobNoThumb.a库和基于Objective-C源的TouchJSON库。TouchJSON的Monotouch绑定?

有人知道TouchJSON的C#绑定,以便我们可以包含它吗?

还是有人知道如何建立一个可以包含的库?

我们用Xcode创建了一个iPhone Library项目并添加了完整的TouchJSON源代码树。我们已经比挂钩导致测试iPhone应用程序libTouchJSON.a具有以下gcc_flags:

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

这产生以下错误输出(感谢-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) 

任何建议解决这个问题?

TIA,Mollyke。

回答

4

您的AdMob库找不到CJSONDeserializer或CJSONSerializer类,我认为它们来自libTouchJSON.a。通常这意味着您的libTouchJSON.a未包含在您的项目中。你应该仔细检查你的所有额外的参数,并确保您的libTouchJSON是不是拇指和包括所有你想要的链接(X86的模拟器,为的ARMv6设备)

+0

杰夫,你是最好的例子!我们制作了一个不错的模拟器libTouchJSON.a版本,并与它联系在一起,并与宾果游戏相关联。 – guivho 2010-11-25 08:08:43

0

埃里克架构,

对不起,延迟,但最近我一直忙于纯粹的Xcode项目。让我告诉你我是如何创建一个TouchJSON库的。

我用xcode创建了一个库项目,并复制了最新的admob库附带的TouchJSON源代码。我构建了两个nothumb发行版本,一个用于模拟器,另一个用于设备。这会产生两个库。为了方便在MT项目中使用它们,我使用了lipo工具将它们组合成一个胖子库。脂肪库很方便,因为它们可以在模拟器以及设备构建中使用。完整的项目,包括胖库libTouchJSON.a和用于构建胖女人的脚本,都存在于http://www.filedropper.com/touchjson的zip文件中。

(注:这是张贴在回答我最初的问题,因为它是稍微有点长被接受作为由Eric S上的问题,评论)

0

由于很多人会发现这个问题,你可以使用最新的MonoTouch绑定的AdMob这里https://github.com/dalexsoto/AlexTouch.GoogleAdMobAds

发布在github这里是如何使用它,以及如何suscribe其事件

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()); 
}