Alamofire 是用 Swift 编写的 HTTP 网络库。
特性
- 可链式请求/响应方法
- Swift并发支持从iOS 13、macOS 10.15、tvOS 13、watchOS 6开始。
- Combine支持
- URL/JSON参数编码
- 上传文件/数据/流/多部分表单数据
- 使用请求或暂停数据下载文件
- 使用
进行身份验证 - HTTP响应验证
- 带有进度条的上传和下载进度闭包
- cURL命令输出
- 动态适配并重试请求
- TLS证书和公钥固定
- 网络可达性
- 全面的单元和集成测试覆盖
- 完整文档
组件库
为了使Alamofire专注于核心网络实现,Alamofire软件基金会创建了额外的组件库,以向Alamofire生态系统添加更多功能。
- AlamofireImage - 一个包含图像响应序列化器、
UIImage
和UIImageView
扩展、自定义图像过滤器、自动清除内存缓存的图像库和基于优先级的图像下载系统。 - AlamofireNetworkActivityIndicator - 通过Alamofire控制iOS上网络活动指示器的可见性。它包含可配置的延迟定时器,有助于减轻闪烁并支持由Alamofire管理的
URLSession
实例。
要求
平台 | 最低Swift版本 | 安装 | 状态 |
---|---|---|---|
iOS 10.0+ / macOS 10.12+ / tvOS 10.0+ / watchOS 3.0+ | 5.5 | CocoaPods、Carthage、Swift Package Manager、手动 | 全面测试 |
Linux | 最新版本 | Swift Package Manager | 构建但不受支持 |
Windows | 最新版本 | Swift Package Manager | 构建但不受支持 |
Linux和Windows上的已知问题
Alamofire在Linux和Windows上可以构建,但是底层swift-corelibs-foundation
缺少许多功能,并存在许多问题,这阻碍了完全功能,并可能导致崩溃。这些问题包括:
ServerTrustManager
及其相关证书功能不可用,因此没有证书固定并且不支持客户端证书。- 各种HTTP身份验证方法可能会崩溃,包括HTTP基本和HTTP摘要。如果响应包含服务器挑战,可能会发生崩溃。
- 通过
CachedResponseHandler
及其相关API的缓存控制不可用,因为底层代理方法没有被调用。 URLSessionTaskMetrics
永远不会收集。
由于这些问题,Alamofire不支持Linux和Windows。请将任何崩溃报告给Swift问题报告器。
迁移指南
沟通
- 如果您在使用Alamofire进行网络请求时需要帮助,请使用Stack Overflow并加上
alamofire
标签。 - 如果您需要查找或理解API,请检查我们的文档http://alamofire.github.io/Alamofire/或Apple的文档(https://developer.apple.com/documentation/foundation/url_loading_system),Alamofire就是建立在之上的。
- 如果您需要帮助使用Alamofire的功能,请使用我们的论坛上的https://forums.swift.org/c/related-projects/alamofire。
- 如果您想讨论Alamofire的最佳实践,请使用我们的论坛上的https://forums.swift.org/c/related-projects/alamofire。
- 如果您想讨论功能请求,请使用论坛上的https://forums.swift.org/c/related-projects/alamofire。
- 如果您发现了bug,请在此GitHub上打开一个问题,并遵循指南。信息越详细越好!
安装
CocoaPods
CocoaPods 是一款 Cocoa 项目依赖管理工具。有关用法和安装指南,请访问其网站。要在使用 CocoaPods 的 Xcode 项目中集成 Alamofire,请在您的 Podfile
中指定它。
pod 'Alamofire'
Carthage
Carthage 是一款去中心化的依赖管理工具,可以构建您的依赖并提供二进制框架。要在使用 Carthage 的 Xcode 项目中集成 Alamofire,请在您的 Cartfile
中指定它。
github "Alamofire/Alamofire"
Swift 包管理器
Swift 包管理器 是一款自动化 Swift 代码分发工具,并集成到 swift
编译器中。
一旦您设置了 Swift 包,将 Alamofire 添加为依赖项只需将其添加到 Package.swift
的 dependencies
值即可。
dependencies: [
.package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.6.4"))
]
手动
如果您不希望使用任何上述依赖关系管理器,您可以手动将 Alamofire 集成到您的项目中。
内嵌框架
-
打开终端,使用
cd
进入您的顶级项目目录,然后运行以下命令 "如果" 您的项目尚未初始化为 Git 存储库$ git init
-
通过运行以下命令将 Alamofire 添加为 Git 子模块
$ git submodule add https://github.com/Alamofire/Alamofire.git
-
打开新的
Alamofire
文件夹,并将Alamofire.xcodeproj
拖放到您的应用程序 Xcode 项目的 Project Navigator 中。它应该嵌套在您的应用程序蓝色项目图标下面。无论它是否在所有其他 Xcode 组之上或之下并不重要。
-
在 Project Navigator 中选择
Alamofire.xcodeproj
并验证其部署目标是否与您的应用程序目标匹配。 -
接下来,在 Project Navigator 中选择您的应用程序项目(蓝色项目图标)以导航到目标配置窗口,并在侧边栏的 "Targets" 标题下选择应用程序目标。
-
在那个窗口的标签栏中,打开 "General" 面板。
-
点击 "Embedded Binaries" 部分的
+
按钮。 -
您将看到两个不同的
Alamofire.xcodeproj
文件夹,每个文件夹内部都有一个Products
文件夹,其中包含两个不同的Alamofire.framework
版本。您可以选择哪个
Products
文件夹并不重要,但您选择的是顶部的Alamofire.framework
还是底部的Alamofire.framework
很重要。 -
对于 iOS,选择顶部的
Alamofire.framework
,对于 macOS,选择底部的。您可以通过检查项目的构建日志来验证您选择了哪个。对于
Alamofire
的构建目标将列出为Alamofire iOS
、Alamofire macOS
、Alamofire tvOS
或Alamofire watchOS
。 -
到此为止!
Alamofire.framework
将自动添加为目标依赖项,链接框架和嵌入框架,在复制文件构建阶段这是您在模拟器和设备上构建所需所有内容。
贡献
在向 Alamofire 贡献之前,请阅读我们详细的指南:贡献指南。
开放的雷达
以下雷达对 Alamofire 当前的实现有一定影响。
rdar://21349340
- 测试用例中的免费用桥接问题导致编译器报错rdar://26870455
- 背景URL Session配置在模拟器中不起作用rdar://26849668
- 一些URLProtocol API没有正确处理URLRequest
已解决的雷达
以下雷达在提交给 Alamofire 项目后经过一段时间已经解决。
rdar://26761490
- Swift字符串插值在常见用法中导致内存泄漏- (已解决):2017年9月1日在Xcode 9 beta 6。
rdar://36082113
-URLSessionTaskMetrics
在watchOS 3.0+上无法链接- (已解决):只需将
CFNetwork
添加到您的链接框架中。
- (已解决):只需将
FB7624529
- 在watchOS上从未调用urlSession(_:task:didFinishCollecting:)
- (已解决):现在在watchOS 7+上收集指标。
FAQ
Alamofire这个名称的由来是什么?
Alamofire的名称来源于阿拉莫火花,这是一种蓝旋报春的杂交品种,而蓝旋报春是德克萨斯州的州花。
鸣谢
Alamofire由Alamofire软件基金会拥有和维护。您可以通过Twitter关注他们@AlamofireSF,以获取项目更新和版本发布信息。
安全披露
如果您认为您已经发现Alamofire的安全漏洞,请尽快通过电子邮件报告给 [email protected]。请勿将其发布到公共问题跟踪器。
赞助
Alamofire 团队正在寻求筹集资金,以正式注册为联邦非营利组织。注册将使得基金会成员能够获得一些法律保护,并允许我们免税使用捐款。赞助 Alamofire 将使我们能够
- 支付年度法律费用,以保持非营利组织的良好状态
- 支付我们的邮件服务器的费用,以便我们能够及时处理所有问题和安全问题
- 有潜力资助测试服务器,以便我们更容易地测试边缘情况
- 有潜力资助开发者全职参加我们的某个项目
Alamofire 库在社区中的采用率非常高。我们对您对项目的热情深感谦卑,并希望能够尽我们所能推动项目前进。在您的持续支持下,Alamofire 能够扩大其影响范围,同时也为核心成员提供更好的法律保护。如果您在工作中使用了我们的任何库,请看看您的雇主是否对捐赠感兴趣。无论是单次捐赠还是每月捐赠,任何您能够捐赠的金额都将极大地帮助我们实现目标。
支持者
MacStadium 为 Alamofire 提供免费的托管 Mac mini。
许可证
Alamofire 采用 MIT 许可证发布。详细内容请参考 LICENSE。