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文件载入的问题,但是已经比原始的土办法好了很多。
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大小。