Hyperconnectivity 是一个完全用 Swift 编写的 Reachability 的现代化替代品,使用 Apple 的 Combine 框架。它能够检测可达性、网络连接以及 网关页面 的存在。它是 Connectivity 项目的分支,提供了类似功能。要了解哪个更适合您,请查看下面的 Connectivity 与 Hyperconnectivity 对比 部分。
功能
- 确定互联网连接是否可用并提供更改通知。
- 支持 Combine 发布者。
- 设备连接到网络时检测网关页面。
- 检测连接到没有互联网访问的热点或路由器。
快速入门
开始很简单,只需订阅以下提供的发布者即可
cancellable = Hyperconnectivity.Publisher()
.receive(on: DispatchQueue.main)
.eraseToAnyPublisher()
.sink(receiveCompletion: { [weak self] _ in
self?.updateUIWhenComplete()
}, receiveValue: { [weak self] connectivityResult in
self?.updateUI(with: connectivityResult)
})
有关完整示例,请参阅示例应用的示例代码 UIViewController
。
Connectivity 与 Hyperconnectivity 对比
超连性是连接框架的一个衍生,那么为什么你选择超连性而不是连接呢?
TL;DR
随着iOS 14即将推出,超连性取消了连接提供的Objective-C互操作性和对旧版iOS版本的支持,以便为那些仅支持iOS 13及更高版本的App提供一个更干净、更优雅的Swift界面。
连接框架旨在向Obj-C编写的Apple的可达性API用户提供一个熟悉的API,其设计受到该语言的影响很大。随着Swift语言许多最近的进步,以及iOS 12和iOS 13中分别引入的Network和Combine框架,似乎有机会提供一种“Swiftier”的、更具反应性的界面,以牺牲Obj-C兼容性和对旧版iOS版本的支持为代价。
功能比较
以下表格将在未来版本的超连性接近连接的功能相同时进行更新。
安装
超连性兼容Cocoapods、Carthage和Swift Package Manager。有关安装说明,请参阅以下相关部分。
Cocoapods
CocoaPods 是一个依赖管理器,它将依赖插入到你的Xcode工作区中。要使用 Ruby gems 安装它,请运行
gem install cocoapods
要使用Cocoapods安装超连性,只需将以下行添加到Podfile中
pod "Hyperconnectivity"
然后运行命令
pod install
有关更多信息,请参阅这里。
Carthage
Carthage 是一种依赖管理器,它生成二进制文件以便手动集成到您的项目中。您可以使用以下命令通过 Homebrew 安装它:
brew update
brew install carthage
要将 Hyperconnectivity 集成到您的项目中,请通过 Carthage 添加以下行到您的项目的 Cartfile
github "rwbutler/Hyperconnectivity"
在 macOS 终端运行 carthage update --platform iOS
来构建框架,然后将 Hyperconnectivity.framework
拖拽到您的 Xcode 项目中。
更多信息请见 此处。
Swift 包管理器
Xcode 11 包含对 Swift 包管理器 的支持。要从 Xcode 11 中添加 Hyperconnectivity 到您的项目中,从 文件
菜单选择 Swift 包
,然后选择 添加包依赖
。
将提示输入包源仓库 URL,它是
https://github.com/rwbutler/hyperconnectivity
在验证 URL 之后,Xcode 将提示您选择是否将特定分支、提交或版本发布拖入到您的项目中。
进入下一步,您将需要选择要将您项目中的哪个产品集成到包中。将有一个名为 Hyperconnectivity
的单个包产品被选中。请确保您的应用目标在对话框右列中被选中,然后点击完成以完成集成。
工作原理
iOS 采用了无线宽带的互操作性漫游协议(WISPr 2.0),由 无线宽带联盟 发布。此协议定义了智能客户端访问网关接口,描述了如何使用 通用访问方法 认证用户通过公共 IEEE 802.11(Wi-Fi)网络,该方法中门户页面会向用户展示登录页面。
用户必须通过网页浏览器进行注册或提供登录凭据,以便通过 RADIUS 或其他提供集中化认证、授权和计费(AAA)协议的网络使用权限。
为了检测设备已经连接到具有登录页面的Wi-Fi网络,iOS会调用苹果托管的一组终端节点 - 举例而言,https://www.apple.com/library/test/success.html。每个终端节点都托管一个小的HTML页面,例如
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE>Success</TITLE>
</HEAD>
<BODY>
Success
</BODY>
</HTML>
当iOS下载这个小HTML页面时,如果发现其中包含上述的Success
字样,则表示有网络连接可用。然而,如果登录页面是由以太网关提供的,则不会出现Success
这个词,iOS会意识到网络连接被以太网关劫持,并会打开一个浏览器窗口,使用户可以登录或注册。
苹果托管了大量这样的页面,因此如果其中一个页面出现故障,可以通过检查几个回退来确定是否存在网络连接,或者我们的连接是否被以太网关所阻止。不幸的是,iOS没有向开发者提供任何框架,使我们能够利用操作系统对以太网关的认识。
Hyperconnectivity是一个开源框架,它试图模仿iOS检测以太网关的方式。当NWPathMonitor检测到Wi-Fi或WWAN连接时,Hyperconnectivity会联系多个终端节点,以确定是否存在真正的网络连接,或者是否有以太网关正在拦截连接。这种方法还可以用来确定iOS设备是否连接到一个没有互联网访问的Wi-Fi路由器。
Hyperconnectivity提供了一个Combine Publisher,用于提供网络连接状态变化的通知,因此对于有过使用Combine Publisher经验的开发者来说,应该能够轻松上手。
默认情况下,Hyperconnectivity联系iOS已经使用的多个终端节点,但建议通过设置Hyperconnectivity.Configuration
对象的connectivityURLs
属性来替换这些节点,由开发者托管。可以通过设置此对象的successThreshold
属性进行进一步的定制,它确定必须有多少百分比的成功检查才能确定存在连接。默认值指定必须成功检查50%的URL。
用法
有关如何使用Hyperconnectivity的示例,请参阅示例目录中的示例应用程序。提供示例UIViewController
说明了如何使用发布者更新您的UI。
常见问题解答(FAQs)
Hyperconnectivity的发布意味着未来将不再支持Connectivity吗?
不,未来Connectivity和Hyperconnectivity将继续得到支持,并且每个框架的改进都将相互促进,从而改善另一个框架。
已知问题
AnyCancellable
对象
调用者负责保留请确保任何使用此框架的实现都保留了订阅发布者时返回的AnyCancellable
对象。如果此对象没有保留,则任何网络连接检查将在过早时取消。
模拟器问题
在报告错误之前,请确保已在物理设备上进行测试,因为与模拟器相比,iOS框架在状态转换(从未连接->连接)时没有正确报告网络适配器状态的变化。这种现象在物理设备上运行正常。
作者
许可证
Hyperconnectivity 项目采用MIT许可证。有关更多信息,请参阅许可证文件。
附加软件
控件
- AnimatedGradientView - 简化iOS上的强大渐变动画。
AnimatedGradientView |
---|
![]() |
框架
- Cheats - 现代iOS应用程序的复古欺骗代码。
- Connectivity - 提高了 Reachability 的功能,用于在您的 iOS 应用程序中确定网络连接。
- FeatureFlags - 允许开发者配置功能标志,通过捆绑的/远程托管JSON配置文件运行多个 A/B 或 MVT 测试。
- FlexibleRowHeightGridLayout - 一款专为支持动态字体而设计的UICollectionView网格布局,允许每行的宽度根据内容调整。
- Hyperconnectivity - 在Swift中用 Combine 实现的 Reachability 的现代替代品,使其更优雅。是 Connectivity 框架的一个分支。
- Skylark - 一个完全使用Swift编写的BDD测试框架,可以使用Gherkin语法编写Cucumber场景。
- TailorSwift - 一组有用的Swift Core Library / Foundation框架扩展。
- TypographyKit - 在iOS上提供一致的、可访问的视觉样式,支持动态字体。
- Updates - 自动检测应用程序更新,并以温和的方式提示用户更新。
Cheats | Connectivity | FeatureFlags | Hyperconnectivity | Skylark | TypographyKit | Updates |
---|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
工具
- Clear DerivedData - 一个实用工具,通过在终端中输入
cdd
来快速清除您的 DerivedData 目录。 - 配置验证器 - 配置验证器验证并上传您的配置文件,并在您的持续集成(CI)过程中清除您的CDN的缓存。
- IPA上传工具 - 将您的应用上传到TestFlight和App Store。
- 调色板 - 使您的TypographyKit调色板在Xcode界面构建器中可用。
配置验证器 | IPA上传工具 | 调色板 |
---|---|---|
![]() |
![]() |
![]() |