Alamofire:基于 Swift 的 HTTP 网络库项目

Elegant HTTP Networking in Swift

分支21Tags107
文件最后提交记录最后更新时间
4 个月前
4 个月前
6 年前
8 个月前
8 个月前
5 年前
4 个月前
4 个月前
4 个月前
8 个月前
5 年前
10 个月前
8 年前
8 年前
4 个月前
2 年前
4 个月前
4 个月前
4 个月前
4 个月前
1 年前
4 个月前
4 年前
4 个月前
8 个月前
8 个月前
4 个月前
8 个月前

Alamofire: Elegant Networking in Swift

Swift Platforms CocoaPods Compatible Carthage Compatible Swift Package Manager Swift Forums

Alamofire 是一个用 Swift 编写的 HTTP 网络库。

功能特点

快速编写请求!

Alamofire 简洁的语法和丰富的功能集,让您能用短短几行代码就写出包含自动重试等强大功能的请求。

// Automatic String to URL conversion, Swift concurrency support, and automatic retry.
let response = await AF.request("https://httpbin.org/get", interceptor: .retryPolicy)
                       // Automatic HTTP Basic Auth.
                       .authenticate(username: "user", password: "pass")
                       // Caching customization.
                       .cacheResponse(using: .cache)
                       // Redirect customization.
                       .redirect(using: .follow)
                       // Validate response code and Content-Type.
                       .validate()
                       // Produce a cURL command for the request.
                       .cURLDescription { description in
                         print(description)
                       }
                       // Automatic Decodable support with background parsing.
                       .serializingDecodable(DecodableType.self)
                       // Await the full response with metrics and a parsed body.
                       .response
// Detailed response description for easy debugging.
debugPrint(response)

组件库

为确保 Alamofire 专注于核心网络功能的实现,Alamofire 软件基金会 开发了一系列额外的组件库,为 Alamofire 生态系统增添更多实用功能。

  • AlamofireImage - 一款图像库,包含图像响应序列化器、UIImageUIImageView 扩展、自定义图像滤镜、自动清理的内存缓存以及基于优先级的图像下载系统。
  • AlamofireNetworkActivityIndicator - 用于通过 Alamofire 控制 iOS 网络活动指示器的可见性。它包含可配置的延迟计时器以减少闪烁,并支持非 Alamofire 管理的 URLSession 实例。

系统要求

平台 最低 Swift 版本 安装方式 状态
iOS 10.0+ / macOS 10.12+ / tvOS 10.0+ / watchOS 3.0+ 6.0 / Xcode 16.0 CocoaPodsCarthageSwift 包管理器手动安装 完全测试
Linux 仅最新版 Swift 包管理器 可构建但不支持
Windows 仅最新版 Swift 包管理器 可构建但不支持
Android 仅最新版 Swift 包管理器 可构建但不支持

Linux 和 Windows 已知问题

Alamofire 可在 Linux、Windows 和 Android 上构建,但由于底层 swift-corelibs-foundation 存在功能缺失和诸多问题,导致其无法实现完整功能,甚至可能发生崩溃。具体问题如下:

  • ServerTrustManager 及相关证书功能不可用,因此不支持证书固定和客户端证书。
  • 多种 HTTP 身份验证方法可能导致崩溃,包括 HTTP Basic 和 HTTP Digest。如果响应包含服务器挑战,也可能发生崩溃。
  • 由于未调用底层委托方法,通过 CachedResponseHandler 及相关 API 进行的缓存控制不可用。
  • 无法收集 URLSessionTaskMetrics
  • WebSocketRequest 不可用。

由于上述问题,Alamofire 在 Linux、Windows 和 Android 平台上暂不提供支持。如遇崩溃,请向 Swift 错误报告器 提交报告。

迁移指南

交流沟通

安装

Swift 包管理器

Swift 包管理器 是一款用于自动分发 Swift 代码的工具,并已集成到 swift 编译器中。

设置好 Swift 包后,将 Alamofire 添加为依赖项非常简单,只需将其添加到您的 Package.swiftdependencies 值中或 Xcode 中的包列表中即可。

dependencies: [
    .package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.11.0"))
]

通常情况下,你会希望依赖 Alamofire 目标:

.product(name: "Alamofire", package: "Alamofire")

但如果您希望强制 Alamofire 进行动态链接(除非确定需要,否则请勿这样做),可以依赖 AlamofireDynamic 目标:

.product(name: "AlamofireDynamic", package: "Alamofire")

CocoaPods

CocoaPods 是 Cocoa 项目的依赖管理工具。有关使用方法和安装说明,请访问其官方网站。若要通过 CocoaPods 将 Alamofire 集成到你的 Xcode 项目中,请在 Podfile 中进行如下指定:

pod 'Alamofire'

Carthage

Carthage 是一款去中心化的依赖管理器,它能够构建您的依赖项并为您提供二进制框架。要使用 Carthage 将 Alamofire 集成到您的 Xcode 项目中,请在您的 Cartfile 中指定它:

github "Alamofire/Alamofire"

手动集成

如果您不想使用上述任何依赖管理工具,可以手动将 Alamofire 集成到您的项目中。

嵌入式框架

  • 打开终端,使用 cd 命令导航到您的顶级项目目录,如果您的项目尚未初始化为 git 仓库,请运行以下命令:

    $ git init
    
  • 通过运行以下命令将 Alamofire 添加为 git 子模块

    $ git submodule add https://github.com/Alamofire/Alamofire.git
    
  • 打开新出现的 Alamofire 文件夹,将 Alamofire.xcodeproj 拖拽到您应用的 Xcode 项目的项目导航器中。

    它应该嵌套在您应用的蓝色项目图标下方。它位于其他所有 Xcode 组的上方还是下方都没有关系。

  • 在项目导航器中选择 Alamofire.xcodeproj,并确认其部署目标与您的应用目标一致。

  • 接下来,在项目导航器中选择您的应用项目(蓝色项目图标),以导航到目标配置窗口,并在侧边栏的“目标”标题下选择应用目标。

  • 在该窗口顶部的标签栏中,打开“通用”面板。

  • 点击“嵌入式二进制文件”部分下方的 + 按钮。

  • 您将看到两个不同的 Alamofire.xcodeproj 文件夹,每个文件夹的 Products 文件夹中都嵌套了两个不同版本的 Alamofire.framework

    选择哪个 Products 文件夹并不重要,但选择顶部还是底部的 Alamofire.framework 则很重要。

  • 对于 iOS,选择顶部的 Alamofire.framework;对于 macOS,选择底部的。

    您可以通过检查项目的构建日志来验证所选内容。Alamofire 的构建目标将显示为 Alamofire iOSAlamofire macOSAlamofire tvOSAlamofire watchOS

  • 这样就完成了!

    Alamofire.framework 会自动添加为目标依赖项、链接框架,并在“复制文件”构建阶段中作为嵌入式框架,这些就是您在模拟器和设备上构建所需的全部设置。

贡献指南

在为 Alamofire 贡献代码之前,请阅读我们贡献指南中详细说明的指示。

公开的问题报告

以下问题报告对 Alamofire 当前的实现有一定影响。

  • rdar://21349340 - 由于测试用例中的无缝桥接问题,编译器抛出警告
  • rdar://26870455 - 后台 URL 会话配置在模拟器中无法工作
  • rdar://26849668 - 某些 URLProtocol API 无法正确处理 URLRequest

已解决的问题报告

以下问题报告在提交给 Alamofire 项目后,随着时间推移已得到解决。

  • rdar://26761490 - Swift 字符串插值在常见使用场景下导致内存泄漏。
    • (已解决):17年9月1日,在 Xcode 9 beta 6 中。
  • rdar://36082113 - URLSessionTaskMetrics 在 watchOS 3.0+ 上链接失败
    • (已解决):只需将 CFNetwork 添加到您的链接框架中。
  • FB7624529 - urlSession(_:task:didFinishCollecting:) 在 watchOS 上从未被调用
    • (已解决):watchOS 7+ 上现已收集指标。

常见问题

Alamofire 这个名字的由来是什么?

Alamofire 的名字来源于 Alamo Fire flower(阿拉莫之火花),它是蓝帽花(德克萨斯州的官方州花)的一种杂交变种。

致谢

Alamofire 由 Alamofire 软件基金会 拥有并维护。您可以在 Twitter 上关注他们的官方账号 @AlamofireSF,以获取项目更新和发布信息。

安全漏洞披露

如果您认为已发现 Alamofire 的安全漏洞,请尽快通过电子邮件 security@alamofire.org 进行报告。请勿将其发布到公共问题跟踪器。

赞助

Alamofire 软件基金会 正在筹集资金,以便正式注册为联邦非营利组织。注册后,基金会成员将获得一定的法律保护,并且能够将捐款用于免税用途。赞助 Alamofire 软件基金会将使我们能够:

  • 支付年度法律费用,以保持非营利组织的良好状态
  • 支付邮件服务器费用,以帮助我们及时处理所有问题和安全事宜
  • 有可能资助测试服务器,以便我们更轻松地测试边缘情况
  • 有可能资助开发人员全职从事我们的某个项目

社区对 Alamofire 软件基金会库的采用情况非常出色。我们对您对这些项目的热情感到非常荣幸,并希望继续尽我们所能推动其发展。在您的持续支持下,Alamofire 软件基金会将能够扩大其影响力,并为核心成员提供更好的法律保障。如果您在工作中使用了我们的任何库,请看看您的雇主是否有兴趣进行捐赠。无论您是一次性捐赠还是每月捐赠,任何能帮助我们实现目标的金额都将受到极大的感谢。

赞助 Alamofire

支持者

MacStadium 为 Alamofire 提供了一台免费的托管 Mac mini。

由 MacStadium 提供支持

许可证

Alamofire 基于 MIT 许可证发布。详情请参见 LICENSE

项目介绍

Alamofire/Alamofire:Alamofire 是一款专为 iOS 和 macOS 设计的网络库,它封装了 RESTful API 并提供了 SDK,旨在助力开发者构建网络应用程序及 Web 服务。【此简介由AI生成】

定制我的领域
1.05 K42.42 K7.66 K访问 GitHub