Alamofire 是用 Swift 编写的 HTTP 网络库。
特性
- 链式请求/响应方法
- 支持 Combine
- URL/JSON 参数编码
- 上传文件/数据/流/多部分表单数据
- 使用请求或续载数据下载文件
- 使用
URLCredential
进行身份验证 - HTTP 响应验证
- 带有进度的上传和下载进度闭包
- cURL 命令输出
- 动态适应和重试请求
- TLS 证书和公钥固定
- 网络可达性
- 综合单元和集成测试覆盖率
- 完整文档
组件库
为了使Alamofire专注于核心网络实现,Alamofire软件基金会创建了额外的组件库,以向Alamofire生态系统带来更多功能。
- AlamofireImage - 一个图像库,包括图像响应序列化器,
UIImage
和UIImageView
扩展,自定义图像过滤器,自动清除内存缓存的自动释放缓存和基于优先级的图像下载系统。 - AlamofireNetworkActivityIndicator - 使用Alamofire控制iOS上网络活动指示器的可见性。它包含可配置的延迟定时器,有助于减轻闪烁,并可支持由Alamofire管理的
URLSession
实例。
要求
- iOS 10.0+ / macOS 10.12+ / tvOS 10.0+ / watchOS 3.0+
- Xcode 11+
- Swift 5.1+
迁移指南
交流
- 如果您需要帮助使用Alamofire进行网络请求,请使用
Stack Overflow
并标记alamofire
。 - 如果您需要找到或理解一个API,请查看我们的文档或查看基于Alamofire构建的
URLSession
的Apple文档。 - 如果您需要关于Alamofire功能的帮助,请使用我们在swift.org上的论坛。
- 如果您想讨论Alamofire最佳实践,请使用我们在swift.org上的论坛。
- 如果您想讨论功能请求,请使用我们在swift.org上的论坛。
- 如果您发现了错误,请在此GitHub上创建一个问题,并遵循指南。越详细越好!
- 如果您想要贡献,提交一个pull request!
安装
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理器。有关使用和安装说明,请访问他们的网站。要使用 CocoaPods 将 Alamofire 集成到您的 Xcode 项目中,请在您的 Podfile
中指定它。
pod 'Alamofire', '~> 5.2'
Carthage
Carthage 是一个去中心化的依赖管理器,它构建您的依赖并提供二进制框架。要使用 Carthage 将 Alamofire 集成到您的 Xcode 项目中,请在您的 Cartfile
中指定它。
github "Alamofire/Alamofire" ~> 5.2
Swift 包管理器
Swift 包管理器 是一个用于自动分发 Swift 代码的工具,并集成到 swift
编译器中。它处于早期开发阶段,但 Alamofire 支持在支持的平台上使用。
一旦您设置了您的 Swift 包,添加 Alamofire 作为依赖项就像将其添加到您的 Package.swift
中的 dependencies
值一样简单。
dependencies: [
.package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.2.0"))
]
手动
如果您不打算使用上述任一依赖管理器,您可以将 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
文件夹,每个文件夹中都包含两个不同版本的Alamofire.framework
,它们位于一个Products
文件夹中。你选择哪个
Products
文件夹都无关紧要,但它确实决定了你是选择顶部还是底部的Alamofire.framework
。 -
对于iOS选择顶部的
Alamofire.framework
,对于macOS选择底部的。你可以通过检查你的项目构建日志来验证你的选择。构建目标将是“Alamofire iOS”,“Alamofire macOS”,“Alamofire tvOS”或“Alamofire watchOS”。
-
就这样!
Alamofire.framework
将自动作为目标依赖项添加,并作为链接框架和嵌套框架在复制文件构建阶段链接,这些都是你在模拟器和设备上构建所需的所有内容。
打开雷达
以下雷达对Alamofire的当前实现有一些影响。
rdar://21349340
- 测试用例中的免费桥接问题导致编译器抛出警告rdar://26870455
- 背景URL会话配置在模拟器中不工作rdar://26849668
- 一些URLProtocol API没有正确处理URLRequest
FB7624529
- 在watchOS上urlSession(_:task:didFinishCollecting:)
从不调用
已解决的雷达
以下雷达在被提交到 Alamofire 项目后,随着时间的推移被解决了。
rdar://26761490
- Swift 字符串插值导致内存泄露。- (已解决):2017年9月1日在 Xcode 9 测试版6中。
rdar://36082113
- 在 watchOS 3.0 及以上版本中URLSessionTaskMetrics
无法链接并出现错误。- (已解决):只需将
CFNetwork
添加到你的链接框架中。
- (已解决):只需将
解决方案
- 由于
FB7624529
,目前 watchOS 上禁用URLSessionTaskMetrics
的收集。
常见问题解答
Alamofire 命名的由来是什么?
Alamofire 的名字来源于 Alamo Fire flower,这是德克萨斯州州花蓝bonnet 的杂交变种。
鸣谢
Alamofire 由 Alamofire 软件基金会 拥有和维护。您可以在 Twitter 上关注他们 @AlamofireSF 以获取项目更新和发布信息。
安全公告
如果您认为您已发现与 Alamofire 相关的安全漏洞,您应尽快通过电子邮件向 [邮箱地址受保护] 报告。请勿将其发布到公开的问题跟踪器。
捐赠
Apache 软件基金会(ASF)正在寻找筹集资金,以便正式注册为联邦非营利组织。注册将使基金会成员获得一些法律保护,并允许我们免税使用捐款。向 ASF 捐款将使我们能够:
- 支付我们每年用于维护非盈利组织良好状态的法律费用
- 为邮件服务器付费,帮助我们处理所有问题和安全问题
- 资助测试服务器,使我们更容易测试边缘情况
- 资助开发者全职进行我们的项目之一
ASF 库的社区采用情况令人惊叹。我们对您对项目的热情深感谦卑,并希望继续尽一切努力推动项目发展。在您的持续支持下,ASF 将能够改善其覆盖范围,并为核心成员提供更好的法律保护。如果您在工作中使用过我们的任何库,请看看您的雇主是否有兴趣捐款。您今天能捐出的任何金额都将对我们实现目标有很大帮助。
许可证
Alamofire 采用 MIT 许可证发布。有关详细信息,请参阅 LICENSE。