IOS技术分享

2023-11-05

前言

最近对 WebRTC iOS 端源码进行了下载和编译,网上针对 WebRTC iOS 端的编译文章基本都是几年前的,有些地方已经不适用于最新版的 WebRTC 的编译,简单记录下载&编译的过程,以 M93 版本为例。

编译环境

硬件:MacBook Pro (Retina, 15-inch, Mid 2015)

系统:macOS Big Sur 11.5

安装 depot_tools

depot_tools 是一套 Google 用来编译 Chromium 或者 WebRTC 的构建工具,获取 depot_tools 源码前,需开启 VPN 服务。

$ mkdir webrtc

$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

如果出现如下错误,首先检查 VPN 是否连接成功,其次配置 macOS 终端代理

deport_tools

配置终端代理

在开启的 VPN 客户端偏好设置中配置信息如下:
proxy

注意:配置终端代理只对当前终端有用,重启后需要重新配置

$ export http_proxy=http://127.0.0.1:10887
$ export https_proxy=http://127.0.0.1:10887
$ export all_proxy=http://127.0.0.1:10887

depot_tools

配置环境变量

$ echo "export PATH=$PWD/depot_tools:$PATH" > $HOME/.bash_profile
$ source $HOME/.bash_profile

检查是否配置成功

$ echo $PATH

安装 ninja

ninja 是 WebRTC 的编译工具。

$ git clone git://github.com/martine/ninja.git
$ cd ninja/
$ ./bootstrap.py

复制到系统目录(也可配置坏境变量)

$ sudo cp ninja /usr/local/bin/
$ sudo chmod a+rx /usr/local/bin/ninja

下载 WebRTC 源码

设置要编译的平台到环境变量

$ export GYP_DEFINES="OS=ios"

下载源码

$ fetch --nohooks webrtc_ios

指定分支(以 M93版本为例)

$ gclient sync -r 25e3fd53a79bfdb2bd647ee3a199eb9c3a71d271

分支版本可以在Release Notes中查找,目前最新的是M95版本。

M93

编译 WebRTC 源码

iOS 版本我们可以使用源码中自带的编译脚本,目录如下,不同的 WebRTC 版本路径可能不一样,脚本可根据需求自行配置。

ios

$ cd /Users/a1/Desktop/webrtc/src 
$ /Users/a1/Desktop/webrtc/src/tools_webrtc/ios/build_ios_libs.py 

编译完成后可在 src/out_ios_libs 目录下找到WebRTC.framework

生成 Example 并运行

$ gn gen out/ios --args='target_os="ios" target_cpu="arm64" is_component_build=false ios_enable_code_signing=false' --ide=xcode 

下载&编译操作源码

Last login: Tue Sep 14 12:49:30 on ttys001

The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
yushengzhudeMacBook-Pro:~ a1$ cd /Users/a1/Desktop/webrtc
$ ls
depot_tools
$ export PATH=$PATH:"/Users/a1/Desktop/webrtc/depot_tools"
$ export http_proxy=http://127.0.0.1:10887
$ export https_proxy=http://127.0.0.1:10887
$ export all_proxy=http://127.0.0.1:10887
$ export GYP_DEFINES="OS=ios"
$ fetch --nohooks webrtc_ios
Running: gclient root
WARNING: Your metrics.cfg file was invalid or nonexistent. A new one will be created.
Running: gclient config --spec 'solutions = [
  {
    "name": "src",
    "url": "https://webrtc.googlesource.com/src.git",
    "deps_file": "DEPS",
    "managed": False,
    "custom_deps": {},
  },
]
target_os = ["ios"]
'
Running: gclient sync --nohooks --with_branch_heads

________ running 'git -c core.deltaBaseCacheLimit=2g clone --no-checkout --progress https://webrtc.googlesource.com/src.git /Users/a1/Desktop/webrtc/_gclient_src_mgr39v0v' in '/Users/a1/Desktop/webrtc'
Cloning into '/Users/a1/Desktop/webrtc/_gclient_src_mgr39v0v'...
remote: Sending approximately 332.17 MiB ...
remote: Counting objects: 75, done
remote: Finding sources: 100% (75/75)
remote: Total 388264 (delta 284781), reused 388243 (delta 284781)
Receiving objects: 100% (388264/388264), 332.12 MiB | 5.96 MiB/s, done.
Resolving deltas: 100% (284781/284781), done.

[0:01:50] Still working on:
[0:01:50]   src
1>Syncing projects:   0% ( 0/ 2)
[0:01:55] Still working on:
[0:01:55]   src
Syncing projects:  26% (11/42) src/ios
[0:04:39] Still working on:
[0:04:39]   src/third_party
[0:04:39]   src/tools

[0:08:52] Still working on:
[0:08:52]   src/third_party
[0:08:52]   src/tools
Syncing projects:  38% (16/42) src/tools/luci-go:infra/tools/luci/swarming/${pla
[0:09:52] Still working on:
[0:09:52]   src/third_party

...

[0:24:17] Still working on:
[0:24:17]   src/third_party
Syncing projects: 100% (42/42), done.
Running: git submodule foreach 'git config -f $toplevel/.git/config submodule.$name.ignore all'
Running: git config --add remote.origin.fetch '+refs/tags/*:refs/tags/*'
Running: git config diff.ignoreSubmodules all
$ gclient sync
Syncing projects: 100% (42/42), done.
Running hooks:  41% (10/24) mac_toolchain
________ running 'vpython src/build/mac_toolchain.py' in '/Users/a1/Desktop/webrtc'
Skipping Mac toolchain installation for mac
Running hooks:  45% (11/24) clang
________ running 'vpython src/tools/clang/scripts/update.py' in '/Users/a1/Desktop/webrtc'
Downloading https://commondatastorage.googleapis.com/chromium-browser-clang/Mac/clang-llvmorg-14-init-2175-g945cde8b-1.tgz .......... Done.
Downloading https://commondatastorage.googleapis.com/chromium-browser-clang/Mac/clang-llvmorg-14-init-2175-g945cde8b-1.tgz .......... Done.
Hook 'vpython src/tools/clang/scripts/update.py' took 30.90 secs
Running hooks:  58% (14/24) clang_format_mac
________ running 'download_from_google_storage --no_resume --platform=darwin --no_auth --bucket chromium-clang-format -s src/buildtools/mac/clang-format.sha1' in '/Users/a1/Desktop/webrtc'
NOTICE: You have PROXY values set in your environment, but gsutilin depot_tools does not (yet) obey them.
Also, --no_auth prevents the normal BOTO_CONFIG environmentvariable from being used.
To use a proxy in this situation, please supply those settingsin a .boto file pointed to by the NO_AUTH_BOTO_CONFIG environmentvariable.
0> Downloading src/buildtools/mac/clang-format@5ba974b3b37f9f4e3b44fdde11d7ef2ab71619ab...
Downloading 1 files took 25.228423 second(s)
Hook 'download_from_google_storage --no_resume --platform=darwin --no_auth --bucket chromium-clang-format -s src/buildtools/mac/clang-format.sha1' took 25.33 secs
Running hooks:  79% (19/24) test_fonts
________ running 'download_from_google_storage --no_resume --extract --no_auth --bucket chromium-fonts -s src/third_party/test_fonts/test_fonts.tar.gz.sha1' in '/Users/a1/Desktop/webrtc'
NOTICE: You have PROXY values set in your environment, but gsutilin depot_tools does not (yet) obey them.
Also, --no_auth prevents the normal BOTO_CONFIG environmentvariable from being used.
To use a proxy in this situation, please supply those settingsin a .boto file pointed to by the NO_AUTH_BOTO_CONFIG environmentvariable.
0> Downloading src/third_party/test_fonts/test_fonts.tar.gz@cd96fc55dc243f6c6f4cb63ad117cad6cd48dceb...
0> Extracting 33 entries from src/third_party/test_fonts/test_fonts.tar.gz to src/third_party/test_fonts/test_fonts
Downloading 1 files took 25.751998 second(s)
Hook 'download_from_google_storage --no_resume --extract --no_auth --bucket chromium-fonts -s src/third_party/test_fonts/test_fonts.tar.gz.sha1' took 25.84 secs
Running hooks:  91% (22/24)
________ running 'download_from_google_storage --directory --recursive --num_threads=10 --no_auth --quiet --bucket chromium-webrtc-resources src/resources' in '/Users/a1/Desktop/webrtc'
NOTICE: You have PROXY values set in your environment, but gsutilin depot_tools does not (yet) obey them.
Also, --no_auth prevents the normal BOTO_CONFIG environmentvariable from being used.
To use a proxy in this situation, please supply those settingsin a .boto file pointed to by the NO_AUTH_BOTO_CONFIG environmentvariable.
Hook 'download_from_google_storage --directory --recursive --num_threads=10 --no_auth --quiet --bucket chromium-webrtc-resources src/resources' took 1268.21 secs
Hook 'vpython src/testing/generate_location_tags.py --out src/testing/location_tags.json' took 34.77 secs
Running hooks: 100% (24/24), done.
$ gclient sync -r 25e3fd53a79bfdb2bd647ee3a199eb9c3a71d271
Syncing projects: 100% (43/43), done.
Running hooks:  41% (10/24) mac_toolchain
________ running 'vpython src/build/mac_toolchain.py' in '/Users/a1/Desktop/webrtc'
Skipping Mac toolchain installation for mac
Running hooks:  45% (11/24) clang
________ running 'vpython src/tools/clang/scripts/update.py' in '/Users/a1/Desktop/webrtc'
Downloading https://commondatastorage.googleapis.com/chromium-browser-clang/Mac/clang-llvmorg-13-init-14732-g8a7b5ebf-2.tgz .......... Done.
Downloading https://commondatastorage.googleapis.com/chromium-browser-clang/Mac/clang-llvmorg-13-init-14732-g8a7b5ebf-2.tgz .......... Done.
Hook 'vpython src/tools/clang/scripts/update.py' took 31.97 secs
Running hooks:  58% (14/24) clang_format_mac
________ running 'download_from_google_storage --no_resume --platform=darwin --no_auth --bucket chromium-clang-format -s src/buildtools/mac/clang-format.sha1' in '/Users/a1/Desktop/webrtc'
NOTICE: You have PROXY values set in your environment, but gsutilin depot_tools does not (yet) obey them.
Also, --no_auth prevents the normal BOTO_CONFIG environmentvariable from being used.
To use a proxy in this situation, please supply those settingsin a .boto file pointed to by the NO_AUTH_BOTO_CONFIG environmentvariable.
Running hooks:  79% (19/24) test_fonts
________ running 'download_from_google_storage --no_resume --extract --no_auth --bucket chromium-fonts -s src/third_party/test_fonts/test_fonts.tar.gz.sha1' in '/Users/a1/Desktop/webrtc'
NOTICE: You have PROXY values set in your environment, but gsutilin depot_tools does not (yet) obey them.
Also, --no_auth prevents the normal BOTO_CONFIG environmentvariable from being used.
To use a proxy in this situation, please supply those settingsin a .boto file pointed to by the NO_AUTH_BOTO_CONFIG environmentvariable.
Running hooks:  91% (22/24)
________ running 'download_from_google_storage --directory --recursive --num_threads=10 --no_auth --quiet --bucket chromium-webrtc-resources src/resources' in '/Users/a1/Desktop/webrtc'
NOTICE: You have PROXY values set in your environment, but gsutilin depot_tools does not (yet) obey them.
Also, --no_auth prevents the normal BOTO_CONFIG environmentvariable from being used.
To use a proxy in this situation, please supply those settingsin a .boto file pointed to by the NO_AUTH_BOTO_CONFIG environmentvariable.
Hook 'vpython src/testing/generate_location_tags.py --out src/testing/location_tags.json' took 35.13 secs
Running hooks: 100% (24/24), done.

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IOS技术分享 的相关文章

  • 如何向标准 UIButton 添加徽章? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否可以在标准中添加看起来标准的徽章UIButton 如果不支持半原生 那么实现此目的最简单的方法是什么 示例图片 这是 Sascha
  • watchOS 错误:控制器接口描述中的未知属性

    我将 WKInterfacePicker 添加到情节提要中 并将其连接到界面控制器中的 IBOutlet 运行应用程序时 它在控制台中显示一条错误消息 控制器的接口描述 watchPicker 中的未知属性 Code interface I
  • 访问目标 c 中的类方法。使用 self 还是类名?

    我正在学习 iOS 编程 并且对以下有关关键字 self 的使用的代码感到困惑 据我了解 self就像Java的this 它指的是当前实例 当我想调用类方法时 通常的方式应该是这样 PlayingCard validSuits 但是侵入实例
  • 如何在代码中编辑约束

    我有一个以 100 开始宽度限制的网页 当用户单击按钮时 我想将约束更改为 200 我试过这个 NSLayoutConstraint constrain NSLayoutConstraint constraintWithItem self
  • 在 UIWebView 中播放 Facebook 视频

    有谁知道如何在 Facebook 上播放视频UIWebView 我的应用程序将视频上 传到 Facebook 并检索视频的网址 我想将此网址嵌入到UIWebView播放 我已经为 youtube 解决了这个问题 但没有为 Facebook
  • UIView 圆角 - Swift 2.0?

    我会尝试将一些项目更新到 Swift 2 0 我有一个视图 左上角有一个圆角 在 Swift 没有警告 没有错误 只是没有圆角 这就是它在 Swift let maskPath UIBezierPath roundedRect conten
  • 隐藏选项卡栏项目并对齐其他选项卡项目

    在我的应用程序中 我有 4 个选项卡栏项目 我正在 XIB 文件中添加这 4 个选项卡栏项目 最初我必须显示 3 个选项卡栏项目 同步后我必须在我的应用程序中显示第 4 个选项卡栏项目 因此 为此 我使用以下代码隐藏第四个选项卡栏项目 se
  • Swift - 我可能已经删除了 Apple Swift Packages 集合

    我对 swift 和 XCode 很陌生 昨天我正在开发一个项目 想尝试一下某人制作的自定义日期选择器 所以我转到 添加包 并粘贴 GitHub 链接并添加它 我已经在我的项目中添加了一个名为 KeychainAccess 的不同包 方式
  • ios如何搜索目录

    我想知道如何检查我的应用程序中是否存在目录 例如 如果我想搜索我的应用程序文档中是否存在文件夹 以及如何在其中创建新文件夹 此致 检查文件是否存在 BOOL fileExistsAtAbsolutePath NSString filenam
  • 如何在ios开发中从mp3文件中提取元数据

    我正在开发一个带有云存储的 ios 音乐播放器 我需要提取音乐信息 如标题 艺术家 艺术作品 我有一个名为 playit 的操作 可以播放和暂停 mp3 文件 它还应该使用与 mp3 文件关联的元数据来填充一些 UILables 和 UII
  • 核心数据executeFetchRequest消耗大量内存

    我正在核心数据数据库中插入 cca 100 000 条记录 数据库包含 3 个实体 球员 俱乐部 球员俱乐部 实体之间存在关系 玩家 gt 玩家俱乐部俱乐部 在 PlayerClub 中插入时 我注意到插入大约 50 000 条记录后会消耗
  • 强制本地化图像或图像资产

    正如在这个问题中 如何强制 NSLocalizedString 使用特定语言 https stackoverflow com questions 1669645 how to force nslocalizedstring to use a
  • ios GPUImage,小尺寸图像处理效果不好?

    我正在尝试为 OCR 准备图像 我使用 GPUImage 来完成 代码工作正常 直到我裁剪图像 裁剪后我得到了糟糕的结果 作物面积 https www dropbox com s e3mlp25sl6m55yk IMG 0709 PNG h
  • iOS 中第一响应者的正式定义是什么?

    据我所知 第一响应者对象是根据输入活动等接收回调信号 并且它将沿着链向上冒泡 直到找到愿意处理它的响应者 但更正式地说 第一响应者的范围是什么 例如 它是应用程序范围的响应程序吗 似乎作为第一响应者只是说这个特定的对象将收到交互通知 其他响
  • XOR或其他简单的文件混淆方法ios目标c

    我正在开发一个使用受版权保护的 pdf 文件的 ios 应用程序 我正在寻找一些简单的方法来混淆文件以确保安全 这些方法不需要我经历额外的大众市场 CCATS 加密审查流程 但也将确保版权所有者已尽我所能来保证他们的数据安全 当然 我用密码
  • 从应用程序打开/关闭 iPhone 的 Wifi

    我需要打开或关闭 iPhone 中的 wifi 有什么方法可以做到吗 还是被禁止了 私有框架 所有使用公共 SDK 编写的应用程序都经过沙箱处理 他们只能访问苹果认为可以在该沙箱中使用的属性和数据 恐怕 Wi fi 不在列表中 请看一下这个
  • 辅助功能标识符在 iOS 模拟器的辅助功能检查器中不可见

    我想使用辅助功能检查器来验证在模拟器 iOS 9 2 中运行的应用程序中的所有辅助功能标识符 辅助功能检查器能够返回多个辅助功能字段 但不能返回标识符 知道为什么以及如何我能看到它们吗 实际上有一种方法 克里斯 普林斯 Chris Prin
  • RTCDataChannel发送方法不发送数据

    我的 RTCDataChannel 遇到一个奇怪的问题 我正在对 WebRTC 进行一些研究 并且已经可以进行 WebRTC 音频 视频聊天 现在我想使用 RTCDataChannel 添加文本聊天和文件共享 我已经像这样创建了 RTCDa
  • Textview 中心文本对齐 IOS 7

    void observeValueForKeyPath NSString keyPath ofObject id object change NSDictionary change context void context NSLog He
  • Xcode 中的 Prefix.pch 文件是什么?

    许多开发人员正在向其中添加各种方便的宏Prefix pch 但我的问题是那是什么Prefix pch file 如果我删除它Prefix pch来自我的文件Xcode 那么我的应用程序会运行吗 或者会显示什么错误吗 或者它会在构建过程中崩溃

随机推荐

  • 哪些工具可以实现在线ps的需求

    在线Photoshop有哪些工具可以选择 在 Adobe 的官网上就能够实现 很惊讶吧 其实 Adobe 官方推出了在线版本的 Photoshop 的 尽管目前还是 Beta版本 但其实也开放了蛮久了 编辑切换为居中 添加图片注释 不超过
  • TCP协议及特性详解

    文章目录 TCP 确认应答 超时重传 连接建立与断开 三次挥手 四次挥手 四种常见状态 效率提升机制 滑动窗口 流量控制 拥塞控制 延时应答 捎带应答 粘包问题 TCP TCP 协议是一个有连接 可靠传输 面向字节流 全双工的传输层通信协议
  • Hive中数组的使用

    基本操作 创建文本 gt cat test txt 输入文本数据 12 23 23 34 what are this 34 45 34 23 12 who am i are 打开Hive 创建表 hive gt create table t
  • 常见几种滤波器的比较

    经典的数字滤波器有巴特沃斯滤波器 切比雪夫滤波器 椭圆滤波器和贝塞尔滤波器等 巴特沃斯滤波器的特点是通频带内的频率响应曲线最大限度平坦 没有起伏 而在阻频带则逐渐下降为零 在振幅的对数对角频率的波特图上 从某一边界角频率开始 振幅随着角频率
  • Linux FTP服务(只允许白名单用户访问FTP)

    目录 一 FTP服务器 二 FTP文化传输协议 FTP的传输模式有两种 三 Vsftpd服务程序 四 实验步骤 1 安装vsftpd软件包 2 备份主配置文件 3 去掉 号开头的行 4 创建黑 白名单的目的 约束 允许某些特定用户登录系统
  • 深入学习java源码之ArrayList.addAll()与ArrayList.retainAll()

    深入学习java源码之ArrayList addAll 与ArrayList retainAll 引入多态 List是接口 所以实现类要把接口中的抽象方法全部重写 在重写的时候父类中的方法的时候 操作的数据类型也是要与父类保持一致的 所以父
  • IPX9K IP69K:ISO 20653:2006

    IPX9K IP69K ISO 20653 2006 ISO 20653 2006 已由 ISO 20653 2013 标准代替 道路车辆 防护等级 IP 代码 电气设备对 外来物 水和接触的防护 参考编号 ISO 20653 2006 版
  • 古老的Solidity智能合约错误代码编写

    任何编程语言都有不完善的地方 而使用语言的过程中也可能产生一些逻辑上的Bug 在Solidity0 4 23版本的时候 有人在GitHub上列举了一些使用Solidity编写智能合约时常见的错误用法 虽然现在大家基本上都不会再写同样的问题代
  • Python布雷森汉姆直线算法RViz可视化ROS激光占位网格映射

    使用对数赔率映射已知姿势算法 ROS 包 布雷森汉姆直线算法 布雷森汉姆直线算法是一种线绘制算法 它确定应选择的 n 维栅格的点 以便形成两点之间的直线的近似值 它通常用于在位图图像中 例如在计算机屏幕上 绘制线条图元 因为它仅使用整数加法
  • 安卓系统培训!五年Android开发者小米、阿里面经,一线互联网公司面经总结

    前言 最近有不少人问我这样一个问题 我刚接触编程 准备学习下Android开发 但是担心现在市场饱和了 Android开发的前景怎么样 想着可能有很多人都有这样的担心 于是就赶紧写篇文章 来跟你们谈下Android开发的前景到底怎么样 一
  • 三个美观的个人博客网站源码

    怎么让源码更适合你 改造 名称 二开版UI漂亮的PHP博客论坛网站源码 介绍 可切换皮肤界面 下载 https wwwf lanzout com ihLNM10bfgnc 二 名称 Emlog Pro博客管理系统源码绿色版下载 介绍 源码说
  • MySQL:创建数据库,数据表,主键和外键

    目录 前言 安装MySQL 打开MySQL 创建数据库 查看已建数据库 查看数据库引擎 创建数据表 主键约束 单字段主键 多字段联合主键 外键约束 前言 MySQL数据库安装了很久 一直也没静下心来学习 因为起步太晚 所以什么都想学点 又感
  • Kafka的中的数据清理你知道多少

    Kafka将数据持久化到了硬盘上 为了控制磁盘容量 需要对过去的消息进行清理 那么 删除策略有哪几种呢 日志压缩和日志删除 其中日志压缩一般用的比较少 log cleanup policy compact 启用压缩策略 按照消息key进行整
  • 全局光照技术解析Global Illumination Explained

    解析全局光照Global Illumination Explained 前言 Global Illumination全局光照技术是实时渲染的必然发展方向 我参考了一些研究成果 琢磨了一下 让更多的人可以理解这项 古老 的技术 Front L
  • (Jquery功能篇) Jquery UI 相关组件(手风琴、tab分页、进度条、 滚动条、 时间控件)

    截图 实例代码
  • python dataframe增加数据_Pandas学习笔记(DataFrame基本操作)

    对于生成的dDataFrame 下一步进行的是对他的基本操作 增 减 改 查 一 数据选取 从已有的DataFrame中取出其中一列或几列 并对其进行操作 Pandas取出DataFrame的列有两种方式 两个方式没有好与坏之分 还是看个人
  • 用java做打字训练测试软件,《打字训练测试软件-Java课程设计》.doc

    PAGE PAGE 3 程序设计实践 题目 打字训练测试软件 学校 陕西工业学院 学院 信息学院 班级 信管12 2 学号 201213156619 姓名 刘克豪 2014 年 11 月 09 日 基础类 IO流与异常处理程序设计 一 实践
  • linux如何查看所有的用户、用户组、密码

    linux如何查看所有的用户和组信息 百度经验https jingyan baidu com article a681b0de159b093b184346a7 html linux添加用户 用户组 密码 百度经验https jingyan
  • 【pandas】(六)增删改查

    文章目录 一 增加数据 1 1 增加一行 1 2 增加一列 1 3 pd concat 拼接数据 1 objs Series DataFrame或Panel对象的 序列或映射 2 axis 0 1 默认为0 纵向拼接 3 join inne
  • IOS技术分享

    前言 最近对 WebRTC iOS 端源码进行了下载和编译 网上针对 WebRTC iOS 端的编译文章基本都是几年前的 有些地方已经不适用于最新版的 WebRTC 的编译 简单记录下载 编译的过程 以 M93 版本为例 编译环境 硬件 M