Cronet:适用于iOS应用的Chromium网络堆栈
Cronet是作为库提供给iOS应用的Chromium网络堆栈。
Cronet利用了多种技术,以减少应用所需网络请求的延迟并提高吞吐量。
这是超过十亿的Chrome浏览器用户使用的同一网络堆栈。Cronet支持Android和iOS。
本包使您能夠轻松地在iOS应用中使用Cronet。
注意:您需要禁用目标中的bitcode。
目录
功能
-
协议支持
Cronet原生支持HTTP、HTTP/2和QUIC协议。
-
请求优先级
该库允许您为请求设置优先级标签。服务器可以使用优先级标签来确定处理请求的顺序。
-
资源缓存
Cronet可以使用内存或磁盘缓存来存储网络请求中检索的资源。后续请求会自动从缓存中提供。
-
异步请求
使用Cronet库发出的网络请求默认是异步的。在等待请求返回时,您的工作线程不会被阻塞。
-
数据压缩
Cronet支持使用Brotli压缩数据格式进行数据压缩。
这是这个仓库是什么?
您可能想知道,如果Cronet是Chromium库,那么这个仓库是关于什么的?
没错,Cronet是Chromium库,但这个仓库不添加或不修改任何Chromium代码。正因为如此,这个仓库甚至没有任何代码。这个仓库是为了让您在不是谷歌员工的情况下更容易地在iOS应用中使用Cronet。
正如一位HN用户简洁地所说
Chromium是一个相当典型的谷歌项目,其首选的构建步骤是成为谷歌员工,但如果没有实际的可行性,也有一些可替代的解决方案。
更具体地说,这个仓库
- 从Chromium发布的非官方cronet构建工件中检索。
- 使用lipo将iphoneos和iphonesimulator框架合并,用于静态和动态构建
- 在GitHub上发布带有附加的静态、动态和dysm归档的GitHub发行版
- 将模块的静态版本发布在Cocoapods下的Cronet下
安装
- 确保为目标禁用位码,您想链接到
Cronet
。 - 使用
cocoapods
或手动链接框架,将Cronet.framework
链接到iOS应用的workspace/project。
使用Cocoapods
- 在您的
Podfile
下添加pod 'Cronet'
到您的目标位置 - 运行
pod install
手动安装
- 从最新版本下载你想要使用的相应存档。
- 解压缩存档,并将
Cronet.framework
文件夹通过拖拽的方式复制到你的项目中(在Xcode中)。确保在弹出的对话框中选择“如有需要则复制项”。 - 在
Target
->Build Phase
->Link Binary With Libraries
中添加SystemConfiguration.framework
。 - 在
Target
->Build Settings
->Other Linker Flags
中添加-lc++
。
使用方法
在应用程序启动流程中的某处初始化cronet。例如,在
- (BOOL)application:... didFinishLaunchingWithOptions:...
添加
[Cronet setHttp2Enabled:YES];
[Cronet setQuicEnabled:YES];
[Cronet setBrotliEnabled:YES];
[Cronet start];
[Cronet registerHttpProtocolHandler];
要查看完整的初始化选项列表,请参阅Cronet.h
已知问题
- Cronet库在启用bitcode的版本中不可用。因此,你必须在目标中将bitcode 禁用 以使用它。
- 当cronet在该会话中注册为协议处理程序时,某些
NSURLSession*Delegate
回调不工作。 - Dsym仅适用于动态框架。
许可协议
有关更多信息,请参阅LICENSE文件。