专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Go

cocos2d 使用 cocoapods 装配 google admob ads sdk

发布时间:2011-06-29 18:23:24 文章来源:www.iduyao.cn 采编人员:星星草
cocos2d 使用 cocoapods 安装 google admob ads sdk

1.为什么要用cocoapods


我喜欢搞游戏的一个原因:

游戏不需要涉及太多变化的API。如果你搞多安卓和IOS原生开发就知道了。有些4.X能用的Android API,在2.X就不能用。IOS也是一样,IOS8有增加了不少API。游戏这块本质上就是在画布上画东西,比较纯粹。

软件开发最喜欢的就是使用第三方库。不用重复造轮子。但是接入的第三方库一多起来就会非常麻烦。各种依赖问题。后续升级问题。都是非常头痛。

游戏开发比较蛋疼的是接入各种广告SDK,渠道SDK。好像cocos2d 的AnySDK比较好用,没用过。cocos2d好像也在搞跟cocoapods 功能类似的东西。


搞了半天还没说cocoapods是干嘛用的。搞原生IOS开发的可能对cocoapods比较熟悉,cocoapods就是用来搞第三方库的。


看下cocoapods如何更加方便地安装google admob ads sdk你就知道为什么要使用它了。


2.土办法在cocos2d中使用google admob ads sdk


先准备梯子用搜索引擎搜索 google admob 文档,下载最新的google admob for IOS。整个东西解压出来:


复制到你的游戏项目中,然后XCode,把所有的文件添加进来。这个时候Library Search Path一般都是绝对路径,把它改成相对路径:

$(SRCROOT)/../Ad/GoogleMobileAdsSdkiOS-6.12.2

然后开始编译。出现错误。发现google admob 的系统依赖framework没搞。添加各种framework:

AVFoundation,AdSupport,AudioToolbox,CoreGraphics,CoreTelephony,MessageUI,StoreKit,SystemConfiguration。然后重新开始编译,还是错误。然后各种google 搜索,baidu 搜索。发现蛋疼的最新版google admob还需要EventKit,EventKitUI。 加上它们,继续重新编译。

如果幸运地话会成功。失败的话就要搞Other Linker Flag,加上-ObjC? 最后-force_load "$(SRCROOT)/../Ad/GoogleMobileAdsSdkiOS-6.12.2/libGoogleAdMobAds.a" 总算搞定。

如果IOS升级到9,Google admob就会升级。然后你要把老的全部删除。新的这样重新来一遍,血都会吐光。鬼知道,又少了什么系统依赖导致编译错误。鬼知道会不会正确载入那个xx.a文件。

作为游戏开发者,你只想快点搞定这些蛋疼的第三方SDK接入,好赶快去编写游戏具体的逻辑,而不是在这种地方浪费时间。

幸运的是有Cocoapods,幸运的是google admob 支持Cocoapods。我们来看下用cocoapods安装google admob会是如何的步骤。


3. 使用cocoapods 安装 google admob


假设你的Mac已经安装好cocoapods.

打开终端,输入 pod search google,会列出google的很多支持cocoapods 安装的IOS库。发现admob的名字是叫google-admob-ads-sdk。然后我们换成pod search Google-AdMob-Ads-SDK。搜索结果如下:

好清晰!最新的版本是6.12.2,还有些老的版本,不管它。

然后打开文本编辑工具。我这里使用Sublime2,输入:

platform :ios, '5.1.1'
pod 'Google-AdMob-Ads-SDK', '~> 6.12.2'

然后保存文件名为PodFile,没有后缀,放到你的cocos2d项目中的ios项目目录下。像这样:


然后在proj.ios_mac目录下打开终端,输入pod install。稍等片刻,google admob ads sdk就安装好了,所有的系统依赖都会自动弄好。是不是帅的掉渣?


cocoapods提示叫我们使用Match3.xcworkspace,而不是之前的Match3.xcodeproj. IOS项目目录下多了一些东西,有Podfile.lock,还有一个pods文件夹,里面有最新的Google-AdMob-Ads-SDK  6.12.2。 第一次看到这个的时候太叼了。



接着我们打开Match3.xcworkspace



发现在游戏项目种多了一个Pods的文件夹,里面有两个配置文件。另外下面多了一个Pods的项目,它会生成libPod.a和libPods-Google-AdMob-Ads-SDK.a。


非常高兴地开始编译整个游戏。可惜遇到了编译错误:cocos2d.h not find!,血吐光!!不是说要cocoapods安装会好些吗?怎么搞的?

打开Pod.debug.xcconfig 和 Pod.release.xcconfig中的

HEADER_SEARCH_PATHS 和 LIBRARY_SEARCH_PATHS中加入$(inherited)

完整如下:

GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Google-AdMob-Ads-SDK"
LIBRARY_SEARCH_PATHS = $(inherited) "$(PODS_ROOT)/Google-AdMob-Ads-SDK/GoogleMobileAdsSdkiOS-6.12.2"
OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Google-AdMob-Ads-SDK"
OTHER_LDFLAGS = -ObjC -l"GoogleAdMobAds" -l"Pods-Google-AdMob-Ads-SDK" -framework "AVFoundation" -framework "AdSupport" -framework "AudioToolbox" -framework "CoreGraphics" -framework "CoreTelephony" -framework "EventKit" -framework "EventKitUI" -framework "MessageUI" -framework "StoreKit" -framework "SystemConfiguration"
OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS)
PODS_ROOT = ${SRCROOT}/Pods

继续编译,还是出错,又是libGoogleAdMobAds.a的问题。

Other Linker Flag,加上 -force_load "$(PODS_ROOT)/Google-AdMob-Ads-SDK/GoogleMobileAdsSdkiOS-6.12.2/libGoogleAdMobAds.a"

总算搞定:


3.使用cocoapods总结


虽然还是遇到了头文件搜索目录和.a文件载入的问题,但是已经比原始的土办法好了很多。

1.它自动地解决了系统依赖库的问题

2. 解决后后续更新的问题。后续更新只需要先更改PodFile的版本号,输入pod update就OK了。

3. 所有第三方库都放在一个pods项目中,比较有调理。

当然这只是简单地接入google admob ads sdk,要真正使用它,还是要仔细地看文档。有什么banner Ad,全屏Ad,各种banner Ad尺寸,还有banner Ad位置等等。以后有空介绍下它们。


4. 安装cocoapods


安装cocoapods我放到了最后讲,因为比较简单:

gem sources --remove https://rubygems.org/
gem sources -a http://ruby.taobao.org/
sudo gem install cocoapods
pod setup

因为在天朝,那个源被墙了,所以要先移除,然后换成淘宝的源。然后gem install cocoapods就可以了。要等待比较久的时间,因为总共cocoapods大概在50-80MB大小。


http://www.waitingfy.com/archives/1509

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

  • ModernUI课程:定义一个Logo

    ModernUI教程:定义一个Logo ModernWindow的标题栏包含了一块区域用来显示自定义的窗体Logo: 这个窗体logo通过ModernWindow.LogoD...

  • Django忘记管理员账号和密码的解决方法

    Django忘记管理员账号和密码的解决办法 看着Django的教程学习搭建网站,结果忘记第一次创建的账号和密码了。结果搭建成功以后,一直...

  • GO语言小结(1)——基本知识

    GO语言总结(1)——基本知识 1、注释(与C++一样)   行注释://  块注释:/*   ...  */ 2、标识符   可以这么说,除了数字开头...

  • golang 惯用的文件读取方式

    golang 常用的文件读取方式 Golang 的文件读取方法很多,刚上手时不知道怎么选择,所以贴在此处便后速查。 一次性读取 小文件推荐一...

  • 查询深圳市通相关信息

    查询深圳通相关信息 用 HTTP.GET 从开放 API 中查询深圳通信息,然后将 JSON 数据存入结构体中,再格式化输出。 注意:获取的并不是实...

  • Go语言设计模式实践:结合(Composite)

    Go语言设计模式实践:组合(Composite) 关于本系列 这个系列首先是关于Go语言实践的。在项目中实际使用Go语言也有段时间了,一个体会就...

  • 列出索引和遍历目录

    列出目录和遍历目录 获取目录列表用 ioutil.ReadDir(),遍历目录用 filepath.Walk(),使用方法请参考文章示例。 示例代码: package ma...

  • io 包的惯用接口速记

    io 包的常用接口速记 我没有 C/C++ 基础,没有接口的概念,且从 Python 投奔而来,Python 的极简主义(一个结果往往只提供一个方法),让我在...

  • 代理服务扩充

    代理服务扩展 之前自己实现了一个代理服务,当时考虑的是只要支持SOCKS5就好了,因为我经常用CHROME,配合着SwitchySharp,体验还是很棒...

  • 文件的创造与打开

    文件的创建与打开 文件操作是个很重要的话题,使用也非常频繁,熟悉如何操作文件是必不可少的。Golang 对文件的支持是在 os package ...

热门推荐: