IOS Cocos2dx 添加Admob 广告错误
来源:互联网 发布:mac双系统怎么切换系统 编辑:程序博客网 时间:2024/06/05 18:33
依照官方教程添加文件及其 frameWork后 发现运行报错 错误如下
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_ASIdentifierManager", referenced from:
objc-class-ref in libGoogleAdMobAds.a(GADIdentifierUtilities.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_SKStoreProductViewController", referenced from:
objc-class-ref in RevMobAds(RevMobStoreController.o)
"_SKStoreProductParameterITunesItemIdentifier", referenced from:
-[RevMobStoreController openStoreWithITunesItemId:] in RevMobAds(RevMobStoreController.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
最终通过添加 frameWork搞定 添加了 StoreKit.framework AdSupport.framework CoreData.framework .
运行继续报错
ld: duplicate symbol _OBJC_CLASS_$_AppDelegate in /Users/AbhilashReddy/Library/Developer/Xcode/DerivedData/santabantaa-bykvybsbvqshqshfqxdlsxiqhehc/Build/Intermediates/santabantaa.build/Debug-iphonesimulator/santabantaa.build/Objects-normal/i386/AppDelegate-C7A14BE43C5E8C81.o and /Users/AbhilashReddy/Library/Developer/Xcode/DerivedData/santabantaa-bykvybsbvqshqshfqxdlsxiqhehc/Build/Intermediates/santabantaa.build/Debug-iphonesimulator/santabantaa.build/Objects-normal/i386/AppDelegate-A37C3709371E4892.o for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
原来很是2的把demo也给弄进来了,删除demo的那个文件夹Add-ons 就好了
再次报错 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[GADObjectPrivate changeState:]: unrecognized selector sent to instance 0x95c17d0'
解决方案 add -ObjC to the Other Linker Flags of your application target's build setting。
加了个广告 他妹的把所有能碰到的问题都碰到了 真是技术不纯熟害死人啊。~~~
PS:要弄个全屏的Admob 看了下SDK 似乎没有 就自己动手写
[[GADBannerView alloc] initWithFrame:self.view.bounds]; 结果报错 errors = "Ad size will not fit on screen"
但是改为 [[GADBannerView alloc] initWithFrame:CGRectMake(0,0,320,480)]; 就可以。 但是同时写了下半屏的CGRect,发现半屏的 frame 显示的不完全,左右被压缩得很厉害,造成了只显示了一个icon和一个按钮。不知道怎么解决。
添加一个全局的 UIView* view,和CGSize size放置到myoc.h
由于OC和c++进行混编时,文件后缀需要改成.mm
然后将AdBridge.cpp后缀改为mm
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_ASIdentifierManager", referenced from:
objc-class-ref in libGoogleAdMobAds.a(GADIdentifierUtilities.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_SKStoreProductViewController", referenced from:
objc-class-ref in RevMobAds(RevMobStoreController.o)
"_SKStoreProductParameterITunesItemIdentifier", referenced from:
-[RevMobStoreController openStoreWithITunesItemId:] in RevMobAds(RevMobStoreController.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
最终通过添加 frameWork搞定 添加了 StoreKit.framework AdSupport.framework CoreData.framework .
运行继续报错
ld: duplicate symbol _OBJC_CLASS_$_AppDelegate in /Users/AbhilashReddy/Library/Developer/Xcode/DerivedData/santabantaa-bykvybsbvqshqshfqxdlsxiqhehc/Build/Intermediates/santabantaa.build/Debug-iphonesimulator/santabantaa.build/Objects-normal/i386/AppDelegate-C7A14BE43C5E8C81.o and /Users/AbhilashReddy/Library/Developer/Xcode/DerivedData/santabantaa-bykvybsbvqshqshfqxdlsxiqhehc/Build/Intermediates/santabantaa.build/Debug-iphonesimulator/santabantaa.build/Objects-normal/i386/AppDelegate-A37C3709371E4892.o for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
原来很是2的把demo也给弄进来了,删除demo的那个文件夹Add-ons 就好了
再次报错 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[GADObjectPrivate changeState:]: unrecognized selector sent to instance 0x95c17d0'
解决方案 add -ObjC to the Other Linker Flags of your application target's build setting。
加了个广告 他妹的把所有能碰到的问题都碰到了 真是技术不纯熟害死人啊。~~~
PS:要弄个全屏的Admob 看了下SDK 似乎没有 就自己动手写
[[GADBannerView alloc] initWithFrame:self.view.bounds]; 结果报错 errors = "Ad size will not fit on screen"
但是改为 [[GADBannerView alloc] initWithFrame:CGRectMake(0,0,320,480)]; 就可以。 但是同时写了下半屏的CGRect,发现半屏的 frame 显示的不完全,左右被压缩得很厉害,造成了只显示了一个icon和一个按钮。不知道怎么解决。
//------------------------------------添加广告的方法
先加入以上这么些,然后在 AppController.mm里面
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. // Add the view controller's view to the window and display. window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]]; EAGLView *__glView = [EAGLView viewWithFrame: [window bounds] pixelFormat: kEAGLColorFormatRGBA8 depthFormat: GL_DEPTH_COMPONENT16 preserveBackbuffer: NO sharegroup: nil multiSampling: NO numberOfSamples:0 ]; // Use RootViewController manage EAGLView viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil]; viewController.wantsFullScreenLayout = YES; viewController.view = __glView; //------------------- Add Admob GADBannerView * bannerView_ = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner]; bannerView_.rootViewController = viewController; bannerView_.adUnitID = @"a1517648ecd9c44"; GADRequest *request = [GADRequest request]; request.testing = NO; // request.testDevices = [NSArray arrayWithObjects:// // GAD_SIMULATOR_ID,// // @"YOU IPAD IDF",// // nil]; //---------------------------- // Set RootViewController to window if ( [[UIDevice currentDevice].systemVersion floatValue] < 6.0) { // warning: addSubView doesn't work on iOS6 [window addSubview: viewController.view]; } else { // use this method on ios6 [window setRootViewController:viewController]; } [viewController.view addSubview: bannerView_]; [viewController.view bringSubviewToFront:bannerView_]; [window makeKeyAndVisible]; [[UIApplication sharedApplication] setStatusBarHidden: YES]; [bannerView_ loadRequest: request]; cocos2d::CCApplication::sharedApplication()->run(); return YES;}
广告就能显示了
广告显示之后,需要在不同的Scene切换广告的位置
实现方式为:
定义一个OC类:
#import <Foundation/Foundation.h>#import <UIKit/UIKit.h>@interface MyAdManager : NSObject{ }+(void)showAddAtTop;+(void)showAddAtBottom;@end
#import "MyAdManager.h"#import "myoc.h"@implementation MyAdManager+ (void)showAddAtTop { if (view && size.width > 0) { [view setFrame:CGRectMake(0, -13, 320, 50)]; }}+ (void)showAddAtBottom { if (view && size.width > 0) { [view setFrame:CGRectMake(0, size.height - 50, 320, 50)]; }}@end
添加一个全局的 UIView* view,和CGSize size放置到myoc.h
#import <Foundation/Foundation.h>#import <UIKit/UIKit.h>UIView* view;CGSize size;#endif
由于OC和c++进行混编时,文件后缀需要改成.mm
为了不修改需要添加广告Scene的文件后缀(方便Android编译)
添加一个中间类 AdBridge
#include <iostream>class AdBridge{ public: static void showAdAtTop(); static void showAdAtBottom();};
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)#include "MyAdManager.h"#endifvoid AdBridge::showAdAtTop(){ #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) [MyAdManager showAddAtTop];#endif}void AdBridge::showAdAtBottom(){#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) [MyAdManager showAddAtBottom];#endif}
然后将AdBridge.cpp后缀改为mm
再将其加到到需要广告的Scene
- IOS Cocos2dx 添加Admob 广告错误
- Cocos2dx---------------------添加Admob广告
- cocos2dx-ios接入admob广告
- iOS开发用swift添加admob广告
- cocos2dx添加Admob广告中遇到的问题
- iOS开发用swift添加admob广告,iosswiftadmob广告
- Admob广告的添加
- AdMob广告添加方法
- ios 项目添加AdMob 错误记录
- ios添加admob 错误NSDecimalNumber gad_negativeOne
- ios添加admob 错误NSDecimalNumber gad_negativeOne - 2
- iOS 使用admob广告
- IOS 如何在cocos2d Game中添加 AdMob 广告条
- iOS 如何在cocos2d Game中添加 AdMob 广告条
- cocos2d-x 添加admob全屏广告(iOS版)
- IOS 如何在cocos2d Game中添加 AdMob 广告条
- 如何添加AdMob广告到现有的Unity3D ios游戏
- 如何添加AdMob广告到现有的Unity3D ios游戏
- C#操作JSON
- jquery弹出遮罩层(可随滚动条而移动的)
- jQuery实现全选和反选和临时页面删除
- java类加载器总结
- Linux内核模块LKM编译-自制Makefile模板
- IOS Cocos2dx 添加Admob 广告错误
- 实验任务一
- 有趣的地址
- android遮挡系统拨号界面 类似360来电显示的那个绿色 页面
- AnyChart、FusionCharts或其它flash的div图层总是浮在最上层
- substr用法(正数顺时针,负数逆时针)
- Linux下SSH命令使用方法详解
- jsp超链接 用 struts2 标签传多个参数 以及解决最后一个字乱码问题
- Spring事务配置的五种方式