Однотонный переплет для TouchJSON? - PullRequest
1 голос
/ 24 ноября 2010

admob sdk для iPhone использует проприетарную библиотеку libAdMobNoThumb.a и библиотеку TouchJSON на основе исходного кода Objective-C.

Кто-нибудь знает о привязке C # для TouchJSON, чтобы мы могли включить ее?

Или кто-нибудь знает, как создать библиотеку, которая может быть включена?

Мы создали проект библиотеки iPhone с Xcode и добавили полное дерево исходного кода TouchJSON.Затем мы связали получившееся libTouchJSON.a в тестовом приложении для iPhone со следующими 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.

Ответы [ 3 ]

4 голосов
/ 24 ноября 2010

Ваша библиотека AdMob не может найти классы CJSONDeserializer или CJSONSerializer, которые, как я полагаю, взяты из libTouchJSON.a. Обычно это означает, что ваш libTouchJSON.a не был включен в ваш проект. Вы должны дважды проверить все ваши дополнительные аргументы и убедиться, что ваш libTouchJSON не большой палец и включает все архитектуры, которые вы пытаетесь связать (x86 для симулятора, armv6 для устройства)

0 голосов
/ 12 февраля 2012

Так как многие найдут этот вопрос, вы можете использовать современные привязки monotouch для admob, опубликованные на github здесь https://github.com/dalexsoto/AlexTouch.GoogleAdMobAds

Вот пример того, как его использовать и как прикрепить егособытия

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());
}
0 голосов
/ 05 января 2011

Эрик

Извините за задержку, но в последнее время я был очень занят чистыми проектами xcode. Позвольте рассказать, как я создал библиотеку TouchJSON.

Я создал проект библиотеки с xcode и скопировал исходные коды TouchJSON, которые поставлялись с последней библиотекой admob. Я создал две версии nothumb release, одну для симулятора и одну для устройства. Это производит две библиотеки. Чтобы облегчить их использование в проектах MT, я использовал инструмент lipo, чтобы объединить их в толстую библиотеку. Жирные библиотеки удобны тем, что могут использоваться как в симуляторе, так и при сборке устройства. Полный проект, включая толстую библиотеку libTouchJSON.a и скрипт, который использовался для создания толстушки, представлен в zip-файле по адресу http://www.filedropper.com/touchjson.

.

(Примечание: это опубликовано как ответ на мой первоначальный вопрос, так как это было немного слишком долго, чтобы быть принятым Эриком С в качестве комментария на вопрос)

...