AlamofireNetworkActivityIndicator
使用 Alamofire 控制 iOS 上网络活动指示器的可见性。
特点
- 自动管理活动指示器可见性
- 延迟定时器以减少闪烁
- 支持 Alamofire 未管理的
URLSession
实例 - 全面测试覆盖
- 完整文档
要求
- iOS 10.0+
- Xcode 11+
- Swift 5.1+
依赖
通信
- 如果您需要帮助,请访问 Stack Overflow。 (标签 'alamofire')
- 如果您想提问,请使用 Stack Overflow。
- 如果您发现了一个错误,请提交一个 Issue。
- 如果您有功能请求,请提交一个 Issue。
- 如果您想贡献力量,请提交一个 Pull Request。
安装
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理器。有关使用和安装说明,请访问他们的网站。要使用 CocoaPods 在您的 Xcode 项目中集成 Alamofire,请在您的 Podfile
中指定它。
pod 'AlamofireNetworkActivityIndicator', '~> 3.1'
Carthage
Carthage 是一个分散的依赖管理器,它构建您的依赖并提供二进制框架。要使用 Carthage 在您的 Xcode 项目中集成 Alamofire,请在您的 Cartfile
中指定它。
github "Alamofire/AlamofireNetworkActivityIndicator" ~> 3.1
Swift Package Manager (需要 Xcode 11)
- 选择“文件 > Swift 包 > 添加包依赖”。在“选择包仓库”对话框中输入
https://github.com/Alamofire/AlamofireNetworkActivityIndicator
。 - 在下一页中,指定版本解析规则为“到下一个主要版本”,其最早版本为“3.1.0”。
- 在 Xcode 检出源并解析版本后,您可以选择“AlamofireNetworkActivityIndicator”库并将其添加到您的应用程序目标中。
手动
如果您不想使用上述任何依赖管理器,您可以手动将 AlamofireNetworkActivityIndicator 整合到您的项目中。
嵌入框架
- 打开终端,使用
cd
命令进入您的顶级项目目录,如果您的项目没有初始化为Git仓库,请运行以下命令:
$ git init
- 运行以下命令通过将 AlamofireNetworkActivityIndicator 作为 Git 子模块 添加:
$ git submodule add https://github.com/Alamofire/AlamofireNetworkActivityIndicator.git
-
打开新的
AlamofireNetworkActivityIndicator
文件夹,并将AlamofireNetworkActivityIndicator.xcodeproj
拖动到您的应用程序 Xcode 项目的项目导航器中。它应该嵌套在您的应用程序的蓝色项目图标下面。它位于所有其他 Xcode 组的上方或下方无关紧要。
-
在项目导航器中选中
AlamofireNetworkActivityIndicator.xcodeproj
并检查其部署目标是否与您的应用程序目标相符。 -
接下来,在项目导航器中选中您的应用程序项目(蓝色项目图标),导航到目标配置窗口,并在侧边栏的“目标”标题下选择应用程序目标。
-
在窗口顶部的选项卡栏中,打开“General”面板。
-
在“嵌入式二进制”部分下点击“+”按钮。
-
您将看到两个不同的
AlamofireNetworkActivityIndicator.xcodeproj
文件夹,每个文件夹中都有一个嵌套在“Products”文件夹中、版本不同的AlamofireNetworkActivityIndicator.framework
。选择哪个“Products”文件夹都无关紧要。
-
选择
AlamofireNetworkActivityIndicator.framework
并将其添加到项目中。 -
就这样!
AlamofireNetworkActivityIndicator.framework
将自动作为目标依赖项、链接框架和嵌入式框架在复制文件构建阶段中添加,这是您在模拟器和设备上构建所需的全部。
使用方法
NetworkActivityIndicatorManager
控制着网络活动指示器的状态。要开始使用它,只需在您的 AppDelegate
中,通过 application:didFinishLaunchingWithOptions:
方法启用与其共享的实例即可。
NetworkActivityIndicatorManager.shared.isEnabled = true
通过为系统启用 shared
管理器,网络活动指示器将会在 Alamofire 请求开始和完成后自动显示和隐藏。
通知
NetworkActivityIndicatorManager
通过观察来自 Alamofire 发出的通知来管理当前活跃的网络请求计数。通过观察任务状态的变化,shared
管理器总是知道当前有多少请求正在活跃,并据此更新活动指示器的可见性。
可以配置
shared
管理器来观察 Alamofire 之外的URLSession
实例。您需要从匹配 Alamofire 中找到的相应的URLSessionDelegate
发出匹配的通知。
延迟计时器
为了使用户的活动指示器体验尽可能愉快,需要添加开始和停止的延迟来进行,以避免闪烁。在 shared
管理器中内置了两个这样的延迟计时器。
开始延迟
开始延迟表示在显示活动指示器之前,网络活动应该持续的最短时间间隔。这有助于避免不必要地显示指示器用于快速的网络请求。默认值是 1.0
秒。如果需要,可以轻松更改默认值。
NetworkActivityIndicatorManager.shared.startDelay = 1.0
完成延迟
完成延迟是一个时间间隔,表示在取消活动指示器之前不应观察到任何网络活动的时间长度。这允许活动指示器在多个网络请求之间持续显示。如果没有这个延迟,活动指示器容易闪烁。默认值是 0.2
秒。如果需要,您可以轻松更改默认值。
NetworkActivityIndicatorManager.shared.completionDelay = 0.2
常见问题解答(FAQ)
为什么这个不在 Alamofire 中?
为了允许 Alamofire 在 App Extensions 中继续使用,这个逻辑不能包含在 Alamofire 框架中。为了提交 App Extension 到 App Store,它只能链接到指定仅使用 App Extension 安全 API 的框架。由于我们希望用户能够在 App Extensions 中使用 Alamofire,我们必须将 仅使用 App Extension 安全 API
设置为 true
。正因为如此,我们无法在 Alamofire 框架中调用非安全 App Extension API。在 iOS 上控制活动指示器是通过非安全 App Extension API 完成的。因此,需要创建一个单独的库。
那关于可用性呢?在这种情况下没有帮助,因为可用性检查仍然会编译所有代码。我们也不能使用
#if os(iOS)
,因为你不能只针对 iOS 编译出特定的逻辑,而不是 iOS App Extension。
鸣谢
Alamofire 由 Alamofire 软件基金会所有并维护。您可以在推特上关注他们以获取项目更新和版本信息 @AlamofireSF。
捐赠
ASF 正在寻求筹集资金,以正式作为一个联邦的非营利组织注册。注册将使我们的成员获得一些法律保护,并允许我们将捐款用于免税。向 ASF 捐赠将使我们能够
- 支付我们每年的法律费用,以保持非营利组织的良好状态
- 支付我们的邮件服务器费用,帮助我们跟踪所有问题和安全问题
- 可能为测试服务器提供资金,以便我们更容易测试边缘情况。
- 可能为开发者提供资金,让他们全职从事我们的某个项目。
ASF库在社区中的采用率令人惊叹。我们对您对项目的热情感到非常谦卑,并希望尽我们所能继续推动项目的发展。在您的持续支持下,ASF将能够扩大其影响力,并为核心成员提供更好的法律保障。如果您在工作中使用了我们的任何库,看您的雇主是否愿意捐款。您今天能捐赠的任何金额都能帮助我们实现目标,我们将不胜感激。
许可证
AlamofireNetworkActivityIndicator 在MIT许可证下发布。有关详细信息,请参阅LICENSE。