一、本文环境.
1. 电脑: Mac mini (Late 2014).
2. 系统: Mac OS X 10.15.1
3. 开发工具:
- Cocos Creator 2.2.1(当下最新的稳定版本,Cocos2d游戏开发工具).
- Visual Studio Code 1.40.2(简称: VSCode,很好用的代码编辑器,搭配Creator进行代码编辑).
- Xcode 11.2.1(iOS 原生开发工具,当下最新版,因为苹果总有各种要求,让你不得不用最新的工具).
4. 本次对接的广告是 穿山甲(v2.5.1.5) , 头条-巨量引擎(v3.2.9) 和 腾讯联盟(广点通)(v4.10.19) 两家的.
5. 本次对接的统计是 友盟统计(v6.0.5).
6. 介绍 手动打包上传 与 Fastlane 自动化打包上传.
二、环境安装.
注:会安装环境的,或已经安装好环境的可以直接跳过.
因 Xcode 只能在 Mac 上安装,所以 Windows 系统的电脑安装不了,无法进行 iOS 原生相关的开发与发布. 所以,下面的操作都是在 Mac OS X 系统上的.
安装 Xcode ,由于工具包体挺大的,再加上国内访问 Apple 普遍很慢,所以下载安装要很久,需耐心等待.
1. 可以在苹果官方的应用商店 App Store 中下载,步骤如下图:

2. 如果不会打开 App Store 或觉得太麻烦的,可以点击后面的链接,然后在链接内打开 App Store 下载,免去了搜索: Xcode 下载地址.

3. 因为 Xcode 这个开发工具一直有很多 BUG 没有解决,时不时的还曝出一些重大 BUG,所以一直备受 iOS 开发者嫌弃!如果有听说或看到网上说 Xcode 最新版有什么很重大的 BUG ,也可以去 苹果开发者中心 下载旧一两个相对比较好的版本(受苹果发布要求,不要下载太旧的版本).

通过 苹果开发者中心 网页下载的,可以受益于加速器,迅雷等工具,下载可能会快一些,下载下来后是一个 .xip 的压缩文件,双击解压缩(要一段时间,具体看电脑配置),解压完就是 Xcode.app,移动进 应用程序 文件夹内就可以了。
上面的步骤完成后,就可以在 启动台 里面看到Xcode了,然后打开 Xcode 会下载一些必要的组件,等着就行了,下完了就可以使用了.
三、导出 iOS 原生项目工程(会导出的,并且安装了 CocoaPods 环境的可以跳过).
1、打包导出 iOS 项目工程.
1.1 打开 项目 -> 构建发布(快捷键: Common + Shift + B
).
- 发布平台: 选择 iOS.
- 模板: 选择 link.
- 包名: 填入你的包名(cocos默认包名为: org.cocos2d.项目名).
- 设备方向: 依次是竖屏、倒屏(倒过来的竖屏)、左横屏、右横屏.
- 加密脚本: 为方便调试我这边取消了勾选,当然你也可以勾选起来,没有什么影响.
- 上面都设置完毕后,点击 构建.
经过漫长的等待,构建好之后,就可以在 项目/build/jsb-link/frameworks/runtime-src/proj.ios_mac/ 目录 下看到项目工程了,这边是把 iOS 与 Mac 集合到了同一个项目工程中了.
1.2 双击 .xcodeproj 文件,在 Xcode 中打开项目,界面如下:
- 绿框: 运行项目按钮(快捷键:
Common + R
). - 红框: 停止运行按钮(项目运行起来后可点, 快捷键:
Common + .
). - 蓝框: 项目运行目标,由于 cocos 导出的项目内包含了iOS(
xxx-mobile
) 和 Mac(xxx-desktop
) 两个目标,我们要的是 iOS,所以这边要确定是 -mobile 结尾. - 灰框: 运行设备,点击可切换
真机
或模拟器
.
1.3 运行项目,确保导出的项目可以正常运行后,再做其他操作。
这边我选择真机(手机通过 USB 连接电脑,点击 信任 后出现真机设备
).
选完设备后,确定运行目标是 iOS(xxx-mobile
),之后点击运行按钮(快捷键: Common + R
).

CocoaPods
。
2、安装 CocoaPods.
Pods 就相当于是 NodeJS 的 npm,不知道 NodeJS?不知道 npm?没关系,你装就对了.
当我们需要在 iOS 项目中使用第三方的 组件、SDK 时,只是导入组件、SDK通常是不够的,因为组件、SDK内部还引用了系统的一些框架库,也可能还引用了别的一些组件库,还要在项目里面设置一些配置等等;这些配置繁杂,还要根据自身的项目情况来设置,容易出错不说,还耗时费力。
而使用 Pods 可以帮我们下载导入需要的组件、SDK,同时帮我们配置好需要配置的东西;整个过程就几句命令行的事情!
注意: 并非所有的组件、SDK都可以通过 Pods 导入,只有组件的作者、或 SDK官方 那边支持 CocoaPods 后才可以(导入前可以先通过 pod search xxx 来判断是否支持 Pods).
2.1 安装方法请移步: CocoaPods 安装教程.
2.2 安装好之后,可以 cd 到 项目目录(proj.ios_mac),然后键入:
pod init
这样就帮我们建好了一个带有模板的 Podfile 文件

2.3 终端运行:
open -a Xcode Podfile
使用Xcode打开编辑.
注意:千万不要图方便,直接双击打开. 默认内容如下:
- 红框: 平台, 版本 默认就是 iOS 不需要修改,版本修改成项目支持的最低版本,比如我的项目最低只能在
10.0
上运行,我就改成10.0
,然后去掉前面的#
号。 - 灰框是
Mac
项目使用,这边不需要;在没有#
号的行前边键入#
号注释掉(或者直接删除掉也行). - 绿框就是 iOS 的内容,可以在里面输入你要导入的库.
2.4 修改后的内容如下,蓝框内的就是我要导入的库。

Common + S
保存后,关闭文件,终端输入:
pod install
安装.
2.5 运行后,虽然安装完成了,但是报了两个警告需要我们解决,不然项目运行会报错.

2.6 双击 .xcworkspace
打开项目(注意:在这之后都要通过 xcworkspace 来打开项目了)!
根据提示,打开 PROJECT -> Info -> Configurations,然后把绿框里面的都切换成 None
。

2.7 之后,打开 cocos2d_libs.xcodeproj -> PROJECT -> Info -> Configurations,然后跟上面一样切换成 None
。

2.8 这时候如果你运行项目,会发现运行不起来,报错了!因为我们前面安装库的时候报了警告,一些配置没有设置;需要我们重新再
pod install

四、对接 穿山甲广告 SDK - 接入文档.
1. 导入 SDK,根据官方文档明确说明可以使用Pods导入,在 Podfile 输入:
pod 'Bytedance-UnionAD', '~> 2.5.1.5'

Common + S
保存,关闭项目,打开终端,输入
pod install
下载安装.
因为包体有点大,可能会失败,可以多试几次!
如果一直装不上,可以参考官方推荐的方法: pods 一直装不上,解决方案.
实在不行的,可以参照 官方接入文档 采取手动引入,然后 配置编译选项设置,一个流程下来你就知道有多麻烦痛苦了,而 Pods 引入的则完全不需要!
2. 设置完 编译配置(Pods引入的不需要自己手动配置,Pods帮我们配置好了
) 后,可以开始初始化SDK了.
打开 AppController(原生应用项目是: AppDelegate),具体哪个文件由 main.m 文件内定:

// 引入 穿山甲SDK 类.
#import <BUAdSDK/BUAdSDKManager.h>
// 初始化 穿山甲SDK.
[BUAdSDKManager setAppID:@"你的App ID"];

3. 初始化SDK后就可以开始实现具体的广告了。因为篇幅原因,这边不做说明了,可以打开 官方的接入文档 进行对接,内容都不难。
五、对接 头条巨量化引擎 - 接入文档
1. 导入 SDK.
根据文档集成说明,支持 Pods 引入,所以我们直接在 Podfile
加入SDK.
# 接入无埋点版本.
pod 'RangersAppLog', '~> 3.2.9'
或
# 接入埋点版本.
pod 'RangersAppLog', '~> 3.2.9', :subspecs => ['Core']
同样的,提供手动集成的方式,具体请参照文档配置: 手动集成
2. 初始化SDK.
/* 初始化开始 */
BDAutoTrackConfig *config = [BDAutoTrackConfig new];
/**
* 域名.
* 国内(默认): BDAutoTrackServiceVendorCN.
* 新加坡: BDAutoTrackServiceVendorSG.
* 美东: BDAutoTrackServiceVendorVA.
* 注意:国内外不同 vendor 服务注册的 did 不一样。由 CN 切换到 SG 或者 VA,会发生变化,切回来也会发生变化。
因此 vendor 的切换一定要慎重,随意切换导致用户新增和统计的问题,需要自行评估.
*/
config.serviceVendor = BDAutoTrackServiceVendorCN;
// 广告后台申请,工具-转化跟踪-跟踪应用-使用sdk.
config.appID = @"appID";
// 与你申请 app ID 时的 app_name 一致.
config.appName = @"appName";
// iOS一般默认 App Store.
config.channel = @"App Store";
// 是否在控制台输出日志,仅调试使用。release版本请设置为 NO.
config.showDebugLog = NO;
// 是否加密日志,默认加密。release版本请设置为 YES
config.logNeedEncrypt = YES;
/**
* 是否开启无埋点。同时需要在Tea配置.
* @discussion 如果设置NO且Tea平台配置NO,则不会采集无埋点事件.
* @discussion 如果设置NO且Tea平台配置YES,则拉取配置成功后开始采集无埋点事件.
* @discussion 如果设置YES且Tea平台配置NO,则拉取配置成功后停止采集无埋点事件.
* @discussion 如果设置YES且Tea平台配置YES,则采集无埋点事件.
*/
config.autoTrackEnabled = YES;
// 游戏模式,开启游戏模式会默认上报游戏心跳事件.
config.gameModeEnable = YES;
// 是否自动激活。默认YES,一般情况请不要修改.
config.autoActiveUser = YES;
/* 初始化结束 */
[BDAutoTrack startTrackWithConfig:config];
/**
* 自定义 "用户公共属性"(可选,初始化后调用, key相同会覆盖).
* 关于自定义 "用户公共属性" 请注意:
* 1. 上报机制是随着每一次日志发送进行提交,默认的日志发送频率是1分钟,
所以如果在一分钟内连续修改自定义用户公共属性,,按照日志发送前的最后一次修改为准.
* 2. 不推荐高频次修改,如每秒修改一次.
*/
[BDAutoTrack setCustomHeaderBlock:^NSDictionary<NSString *, id> * _Nonnull{
return @{@"gender" : @"female"};
}];
3. 初始化完成后,就是上报埋点的API调用了,比较简单,这边就不做说明了,结合自身情况接入即可。没有什么难度,基本就是拷贝粘贴代码!请参照: 文档 -> iOS 端 SDK 使用说明.
六、对接 友盟统计 SDK - 接入文档.
1. 导入 SDK.
1.1 根据 官方文档 - iOS 集成说明. 明确支持使用 Pods 快速导入!所以这边还是使用的 Pod 导入方式:
# 友盟.
pod 'UMCCommon', '~> 2.1.1'
pod 'UMCAnalytics', '~> 6.0.5'
保存修改后,终端运行 pod install
安装,安装完成就可以使用了.
1.2 手动集成.
同样的官方也支持下载 SDK 文件包,手动进行导入!具体请参照 官方文档 - 手动集成.
2. 初始化 SDK.
导入 SDK 之后,就可以开始初始化 SDK 了.
在 AppController.m 内加入以下代码:
#import <UMCommon/UMCommon.h>
/**
* 初始化友盟所有组件产品
* @param appKey 开发者在友盟官网申请的appkey.
* @param channel 渠道标识,可设置nil表示"App Store".
*/
[UMConfigure initWithAppkey:@"Appkey" channel:@"App Store"];
3. 初始化其他配置.
/**
* 设置日志, 默认0(关闭状态).
* @param logger 是否开启日志..
* @param encrypt 是否加密(默认为NO).
*/
[UMConfigure setLogEnabled:YES];
[UMConfigure setEncryptEnabled:YES];
/**
* 开启CrashReport收集, 默认YES(开启状态).
* @param enabled 设置为NO,可关闭友盟CrashReport收集功能.
*/
[MobClick setCrashReportEnabled:YES];
4. 自定义事件上报.
4.1 自定义事件, 数量统计(自动计数).
/**
* 自定义事件, 数量统计(自动计数).
* 使用前,请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID,然后在工程中传入相应的事件ID
* @param eventId 事件ID.
* @param label 事件名称.
*/
[MobClick event:@"eventId" label:@"事件名称"];
4.2 自定义事件,数量统计(自动计数).
/**
* 自定义事件,数量统计(自动计数).
* 使用前,请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID,然后在工程中传入相应的事件ID
* @param eventId 事件ID.
* @param attributes 自定义参数.
*/
[MobClick event:@"eventId" attributes:@{@"name" : @"名称", @"count" : @10}];
4.3 自定义事件,数量统计(手动计数).
/**
* 自定义事件,数量统计(手动计数).
* 使用前,请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID,然后在工程中传入相应的事件ID
* @param eventId 事件ID.
* @param attributes 自定义参数.
* @param number 手动计数.
*/
[MobClick event:@"eventId" attributes:@{@"name" : @"名称", @"age" : @10} counter:8];
七、对接 腾讯联盟(广点通) SDK - 接入文档.
1. 导入 SDK.
1.1 官方文档 - SDK 项目部署. 明确说明支持 自动导入!所以这边还是使用的 Pods 来导入.
# 腾讯广告(广点通).
# pod 'GDTMobSDK', '~> 4.11.0'
pod 'GDTMobSDK', '~> 4.10.19'
保存修改后,终端运行 pod install
导入安装.
这边没有使用最新的 v4.11.0 版本,因为最新版本(v4.11.0)SDK 导入后产生文件重复引用问题报错(具体文件包含在静态库内部,无法定位),所以没有使用.
SDK 导入后, 需要我们在 Build Setting 下 HEADER_SEARCH_PATHS 和 LIBRARY_SEARCH_PATHS 的值添加 $(inherited)
.
1.2 手动导入.
除了自动部署外,还支持 手动部署!可以参考:官方文档 - SDK 项目部署 - 手动部署.
2. 初始化 SDK.
广点通 SDK 与别的 SDK 在这边有所不同,没有一开始的初始化,然后需要在每次创建广告时传入 Appkey.
3. 接入广告.
接入广告方面只是拷贝粘帖代码,没有什么难度,官方文档说明的很详细,具体参照自己的项目的需求即可.
八、打包导出 IPA.
- 待续...