使用 Alamofire 控制 iOS 上网络活动指示器的可见性。
URLSession
实例CocoaPods 是 Cocoa 项目的依赖管理工具。 有关使用和安装说明,请访问他们的网站。 要使用 CocoaPods 将 Alamofire 集成到您的 Xcode 项目中,请在您的 Podfile
中指定它
pod 'AlamofireNetworkActivityIndicator', '~> 3.1'
Carthage 是一个去中心化的依赖管理器,它构建您的依赖项并为您提供二进制框架。 要使用 Carthage 将 Alamofire 集成到您的 Xcode 项目中,请在您的 Cartfile
中指定它
github "Alamofire/AlamofireNetworkActivityIndicator" ~> 3.1
https://github.com/Alamofire/AlamofireNetworkActivityIndicator
。如果您不想使用上述任何依赖管理器,您可以手动将 AlamofireNetworkActivityIndicator 集成到您的项目中。
cd
进入您的顶级项目目录,并运行以下命令“if”您的项目未初始化为 git 仓库$ git init
$ git submodule add https://github.com/Alamofire/AlamofireNetworkActivityIndicator.git
打开新的 AlamofireNetworkActivityIndicator
文件夹,并将 AlamofireNetworkActivityIndicator.xcodeproj
拖到应用程序 Xcode 项目的 Project Navigator 中。
它应该显示在应用程序蓝色项目图标下。 它位于所有其他 Xcode 组之上还是之下都没有关系。
在 Project Navigator 中选择 AlamofireNetworkActivityIndicator.xcodeproj
,并验证部署目标是否与您的应用程序目标匹配。
接下来,在 Project Navigator 中选择您的应用程序项目(蓝色项目图标)以导航到目标配置窗口,然后在侧边栏中的“Targets”标题下选择应用程序目标。
在该窗口顶部的选项卡栏中,打开“General”面板。
单击“Embedded Binaries”部分下的 +
按钮。
您将看到两个不同的 AlamofireNetworkActivityIndicator.xcodeproj
文件夹,每个文件夹都有两个不同版本的 AlamofireNetworkActivityIndicator.framework
嵌套在一个 Products
文件夹中。
您从哪个
Products
文件夹中选择并不重要。
选择 AlamofireNetworkActivityIndicator.framework
并将其添加到您的项目中。
就是这样!
AlamofireNetworkActivityIndicator.framework
自动神奇地添加为目标依赖项、链接框架和嵌入框架,位于复制文件构建阶段,这是在模拟器和设备上构建所需的一切。
NetworkActivityIndicatorManager
管理网络活动指示器的状态。 要开始使用它,只需在 AppDelegate
的 application:didFinishLaunchingWithOptions:
中启用 shared
实例即可。
NetworkActivityIndicatorManager.shared.isEnabled = true
通过为系统启用 shared
管理器,网络活动指示器将随着 Alamofire 请求的开始和完成自动显示和隐藏。
NetworkActivityIndicatorManager
通过观察 Alamofire 发出的通知来管理当前活跃的网络请求计数。 通过观察任务状态的变化,shared
管理器始终知道当前有多少请求处于活动状态,并相应地更新活动指示器的可见性。
可以使
shared
管理器观察不在 Alamofire 内部的URLSession
实例。 您需要从URLSessionDelegate
发出与 Alamofire 中找到的相匹配的通知。
为了使用户的网络活动指示器体验尽可能愉快,需要添加启动和停止延迟以避免闪烁。 shared
管理器内置了两个这样的延迟计时器。
启动延迟是一个时间间隔,指示在显示活动指示器之前应该发生的网络活动的最短持续时间。 这有助于避免不必要地为非常快的网络请求显示指示器。 默认值为 1.0
秒。 如果需要,您可以轻松更改默认值。
NetworkActivityIndicatorManager.shared.startDelay = 1.0
完成延迟是一个时间间隔,指示在解除活动指示器之前不应观察到网络活动的时间长度。 这允许活动指示器在多个网络请求之间连续显示。 如果没有此延迟,活动指示器往往会闪烁。 默认值为 0.2
秒。 如果需要,您可以轻松更改默认值。
NetworkActivityIndicatorManager.shared.completionDelay = 0.2
为了允许 Alamofire 继续在 App Extensions 中使用,此逻辑不能包含在 Alamofire 框架中。 为了将 App Extension 提交到 App Store,它只能链接到指定它们仅使用 App Extension 安全 API 的框架。 因为我们希望用户能够在 App Extensions 中使用 Alamofire,所以我们必须将 Require Only App Extension Safe APIs
设置为 true
。 因此,我们不能在 Alamofire 框架中调用非安全的 App Extension API。 在 iOS 上控制活动指示器是通过非安全的 App Extension API 完成的。 因此,需要创建一个单独的库。
但是你说的可用性呢? 在这种情况下没有帮助,因为可用性检查仍然编译所有代码。 我们也不能使用
#if os(iOS)
,因为你不能专门为 iOS 编译出逻辑,但不能为 iOS App Extension 编译。
Alamofire 由 Alamofire Software Foundation 拥有和维护。 您可以在 Twitter 上关注他们 @AlamofireSF 以获取项目更新和发布。
ASF 正在筹集资金,以便正式注册为联邦非营利组织。 注册将使我们的成员获得一些法律保护,并允许我们免税地将捐款用于实际用途。 向 ASF 捐款将使我们能够
社区对 ASF 库的采用令人惊叹。 我们对您对这些项目的热情感到非常谦卑,并希望继续尽我们所能推动事情向前发展。 在您持续的支持下,ASF 将能够扩大其影响力,并为核心成员提供更好的法律安全保障。 如果您在工作中使用我们的任何库,请看看您的雇主是否有兴趣捐款。 您今天可以捐赠的任何金额来帮助我们实现我们的目标,我们将不胜感激。
AlamofireNetworkActivityIndicator 在 MIT 许可证下发布。 有关详细信息,请参见 LICENSE。