在iOS上构建Fat WebRTC框架

通过提供适用于iOS,Web和Android的高级开源WebRTC SDK,Telestax致力于在开发WebRTC应用程序时尽量减少App&Web开发人员与Open Source Restcomm平台集成所花费的精力。 最大的挑战之一是为移动设备(尤其是iOS)正确捆绑WebRTC,它比Android更具限制性。 值得庆幸的是,在过去的几年中,这种情况已大大改善。 在本文中,我们将介绍一些构建iOS的WebRTC框架的最佳实践。

构建用于在iOS设备和模拟器上进行部署的通用(即Fat)框架并不总是那么容易。 在过去,您通常必须为每种体系结构分别构建一个静态库,然后将它们全部组合成一个通用库。 然后,您必须将头文件与lib捆绑在一起,以便iOS App能够正确利用WebRTC媒体工具。 这意味着需要时间和大量的精力来使一切正确。 我们可以花很多篇幅描述艰难的局面,但现在让我们关注一下。

现在,您可以自动创建iOS框架而不是静态库,这使得分发变得更加容易(因为标头被捆绑在一起),并且还配置了GN(WebRTC人们最近推出的新忍者生成器)使其通用从一开始。 无需进行多次迭代,每次迭代都针对一个体系结构,然后手动进行合并。 所以这里…

提取并同步

首先,您需要按照iOS的WebRTC官方指南的“获取代码”部分中所述获取和同步WebRTC代码,这应该非常简单。

用GN生成忍者文件

在这里,我们将与官方指南有所不同,因为我们的目标是:

  • 一次构建多种架构
  • 直接从命令行提出WebRTC框架

这是GN命令,用于组合我们所需的功能:

  $ gn gen out / Release-universal -args ='target_os =“ ios” target_cpu =“ x64” Additional_target_cpus = [“ arm”,“ arm64”,“ x86”] is_component_build = false is_debug = false ios_enable_code_signing = false' 

哪里:

  • out / Release-universal是忍者文件的生成路径以及生成位置。
  • 顾名思义,target_os是目标操作系统,在这种情况下为iOS。
  • target_cpu是构建的主要体系结构(出于某种原因,在进行多体系结构构建时,我不得不在此处放置x64体系结构才能正常工作,请查看相关问题以获取更多详细信息)。
  • Additional_target_cpus是我们想要在胖框架中构建的其他体系结构。 因此,在我们的案例中,我们将在一个库(包含在框架中)中拥有所有的arm,arm64,x86和x64体系结构。
  • is_component_build决定我们将获得静态还是动态构建。 我们将其设置为false是因为iOS需要静态版本。
  • is_debug控制我们是要调试还是发布版本(默认为debug)。 在这里,我们将其设置为false是因为我们想要一个发布版本,这意味着框架要小得多。
  • ios_enable_code_signing控制忍者是否会对框架进行代码签名。 您可以根据需要将其关闭(默认为签名),但是在我们的情况下,我们遇到了一个大问题,因为框架内生成的Provisioning Profile与我们的App使用的Provisioning Profile之间存在不一致的情况,在设备上加载框架失败。

因此,一旦运行该命令,您应该会得到以下内容:

 做完了 在1576毫秒内从104个文件中建立了1144个目标 

建立框架

现在您已经生成了忍者文件,是时候构建实际的框架了:

  $忍者-C输出/通用rtc_sdk_framework_objc 

哪里:

  • -C参数告诉ninja将哪个目录用作根目录。
  • rtc_sdk_framework_objc是WebRTC人们为构建​​框架而创建的目标。

建筑物结束后(对我而言,构建这4种体系结构大约花费了20分钟),您将在out / Release-universal找到您的框架:

在iOS应用中使用框架

现在,您可以在iOS应用中放置框架。 重要的一点是,您必须在常规的Xcode项目设置中将框架添加为嵌入式二进制文件

这将确保允许框架在设备上运行,并且Xcode还将在下面的“ 链接的框架和库”部分中自动添加框架 重要提示 :如果习惯使用iOS系统框架,而仅将其添加到“链接框架和库”,则该框架将无法加载,并且出现难以阅读的错误。

就是这样,您现在可以利用WebRTC的强大功能😉

您也可以检查我们自己的开源Restcomm Olympus iOS应用,该应用使用上面描述的生成的WebRTC.Framework,以获取有关客户端集成的更多详细信息,甚至可以通过下载我们准备的,在您的iOS设备中试一下的方法,由TestFairy制作.ipa。

最后但并非最不重要的一点是,由于WebRTC团队为简化此过程并在webrtc-discussing邮件列表中如此反应迅速而付出的巨大努力。