原作者:Antonis Tsakiridis(原文链接)
翻译:刘通
在Telestax,我们通过提供高水平的iOS、网页端、以及安卓系统的WebRTC SDK,致力于让APP和网页开发者在研发WebRTC应用的时候在与Open Source Restcomm Platform整合上投入的工作量最小化。我们遇到的最大的挑战之一就是在移动端正确地捆绑WebRTC,尤其是在iOS系统上,这比在安卓系统上完成会存在更多的限制。幸亏,这项工作在过去的纪念中有了惊人的改善。在这篇文章中,我们就要来讨论一些在iOS上搭建WebRTC框架的几个非常棒的实例。
在iOS设备以及模拟器上搭建一个整体框架并不总是简单明了的。在过去,你必须给每一个结构单独创建一个静态函数库,然后把这些单独的库合并成一个整体的库。接着你还需要把头文件都与函数库捆绑起来,这样iOS应用才能正确地在WebRTC媒体设备上运行。这就意味着想要把所有事情都做对需要花费大量的时间和精力。我们下面会着重讨论现在要怎么做。
现在你可以不用静态库,可以自动的创建一个iOS框架,这样分配头文件就简单的多了,并且可以更容易地配置GN以使从最开始就可以确保整体上都是正确的。不需要进行多次的迭代,也不用手动地把每个结构都整合起来。
获取和同步
首先,你需要像WebRTC iOS系统官方指导里写的那样获取和同步WebRTC代码,这部应该是挺简单的。
用GN生成Ninja文件
在这里我们不按照官方指导里面给的做,因为我们的目标是:
1 一次创建多个结构
2 从命令行建一个WebRTC框架
下面GN指令的功能是整合我们想要的功能:
其中:
1 out/Release-universal是ninja文件将要生成到的路径,以及将要进行搭建过程的路径。
2 target_os是目标操作系统,在这里是iOS。
3 target_cpu是搭建工作中主要的结构(出于某些原因在进行多结构搭建的时候,我必须选择x64架构才能工作,详细请点击相关问题查看)。
4 additional_target_cpus是我们想要在我们的整体架构中加入的额外的架构。在这里在一个库中我们需要有:arm,arm64,x86,以及x64架构。
5 is_component_build表示的是我们需要进行静态搭建还是动态搭建。我们在这里设定为false因为iOS需要静态构建。
6 is_debug表示的是我们是否想要debug还是释放搭建(默认为debug)。这里我们将这个值设为false,因为我们希望释放搭建,也意味着框架会小的多。
7 ios_enable_code_signing表示ninja是否会签名框架。如果你想的话可以放着它不管(默认是签名),但是在这里我们有一个大问题,因为在生成的框架内的配置文件与我们在APP中使用的配置文件是不一样的,会导致在设备中加载框架失败。
所以当你运行上面的指令后,你应该看到下面这句话:
搭建框架
现在你已经生成了ninja文件,现在是时候开始搭建真正的框架了:
其中,
# -C的功能是告诉ninja文件搭建框架的根目录是什么。
# rtc_sdk_framework_objc是WebRTC开发人员创建的目标来搭建框架。
当搭建工作完成后(我搭建全部4个结构花了大概20分钟的时间)你会在out/Release-universal中找到你的框架:
在你的iOS APP中使用搭建好的框架
现在你就可以把刚搭建好的框架放到你的iOS APP中了。需要着重注意的一点是,你需要像在Xcode工程通用设置中添加Embedded Binary一样添加你的框架:
这项工作会确保框架可以在设备上正常运行,也可以让Xcode在“Linked Frameworks and Libraries”中自动添加框架。重要的是:如果习惯于只在Linked Frameworks and Libraries中添加iOS 系统框架的话,会导致框架加载失败。
就是这些,现在你可以充分享受WebRTC的优点了。
最后,特别感谢WebRTC小组在改善这部分内容所作出的贡献。