iOS端如何构建与Turn服务器通信的客户端库并集成Coturn项目?
集成Coturn到iOS项目操作指导
前置说明
你之前直接在Mac终端执行make产出的libturnclient.a是Mac宿主架构的,无法直接在iOS设备/模拟器上运行,需要先做iOS交叉编译生成对应架构的静态库再进行集成。
1 交叉编译生成iOS可用的静态库
- 先执行
make clean清理之前的编译产物 - 重新执行configure传入iOS交叉编译参数,分别编译真机、模拟器对应的架构包:
真机arm64架构参考配置命令:
模拟器x86_64架构参考配置命令:./configure --host=aarch64-apple-ios --prefix=./ios_output/arm64 --disable-shared --enable-static CC=clang CFLAGS="-arch arm64 -isysroot $(xcrun --sdk iphoneos --show-sdk-path) -miphoneos-version-min=13.0"
模拟器arm64架构可自行调整arch参数和sdk路径即可./configure --host=x86_64-apple-ios --prefix=./ios_output/x86_64 --disable-shared --enable-static CC=clang CFLAGS="-arch x86_64 -isysroot $(xcrun --sdk iphonesimulator --show-sdk-path) -miphoneos-version-min=13.0" - 每完成一次configure配置后,依次执行
make && make install,对应架构的静态库会输出到你指定的prefix目录下 - 多架构合并:执行
lipo -create ./ios_output/arm64/lib/libturnclient.a ./ios_output/x86_64/lib/libturnclient.a -output ./libturnclient-Universal.a,生成的通用静态库可同时兼容真机和模拟器
2 导入Xcode项目配置
- 把生成的通用静态库
libturnclient-Universal.a,以及Coturn源码里的头文件(至少包含src/client、src/apps/uclient目录下的所有.h文件)拖入你的iOS项目,弹窗中勾选Copy items if needed以及对应target的关联选项 - 打开target的
Build Settings配置页做如下修改:- 找到
Search Paths分类,在Header Search Paths中添加你导入的头文件所在目录,勾选Recursive - 确认
Library Search Paths已经自动添加了静态库所在目录,若未识别手动补充即可 - 找到
Linking分类,在Other Linker Flags中添加-ObjC参数,保证C符号正常链接
- 找到
3 编译适配与功能调用
- 如果你的项目是Objective-C项目,直接import对应的Coturn头文件即可调用接口;如果是Swift项目,需要创建Objective-C桥接文件,在桥接文件中import需要用到的Coturn头文件
- 编译如果出现符号缺失报错,在
Build Phases的Link Binary With Libraries中添加如下系统依赖:libc++.tbd、libresolv.tbd、CFNetwork.framework、Security.framework - 功能开发可以直接参考Coturn源码中src/apps/uclient目录下的示例代码实现STUN/TURN中继逻辑,注意要在Info.plist中添加本地网络权限描述、按需配置ATS规则
4 集成验证
先编译项目确认无架构不匹配、符号缺失类报错,再编写测试逻辑传入你部署的Coturn服务器地址、认证信息,测试中继分配、P2P打洞逻辑是否正常运行即可。
内容的提问来源于stack exchange,提问作者Manthan
相关产品推荐
相关产品推荐

