15,353
stars
+0+0+0
1,990
forks
–
watchers
–
prs
–
issues
–
releases
–
discussions
README
Moya 15.0.0
在这里查看英文版文档
你是个聪明的开发者。你可能使用 Alamofire 来抽象对 URLSession 的访问,以及所有那些你并不关心的糟糕细节。但是接下来,就像许多聪明开发者一样,你编写专有的网络抽象层,它们可能被称作 "APIManager" 或 "NetworkModel",它们的下场总是很惨。
!Moya Overview
在 iOS app 中,专有网络层非常常见,但它们有以下缺点:
- 编写新项目很困难(「我从哪儿开始呢?」)
- 维护现有的项目很困难(「天啊,这一团糟……」)
- 编写单元测试很困难(「我该怎么做呢?」)
所以 Moya 的基本思想是,提供一些网络抽象层,它们经过充分地封装,并直接调用 Alamofire。它们应该足够简单,可以很轻松地应对常见任务,也应该足够全面,应对复杂任务也同样容易。
如果你使用 Alamofire 来抽象 URLSession,那为什么不使用某些方式来进一步抽象 URLs 和 parameters 等等的本质呢?
Moya 的一些特色功能:
- 编译时检查正确的 API 端点访问。
- 允许你使用枚举关联值定义不同端点的明确用法。
- 将 test stub 视为一等公民,所以单元测试超级简单。
你可以在 愿景文档 中查看更多关于项目方向的信息。
示例项目
我们在仓库中提供了两个示例项目。要使用它,请下载仓库,运行 carthage update 下载所需的库,然后打开 Moya.xcodeproj。你会看到两个 scheme:Basic 和 Multi-Target ——选择一个然后构建并运行!这些源文件位于项目导航的 Examples 目录中。玩得开心!
项目状态
这个项目正在积极地开发中,并且它正被用于 Artsy 的新拍卖应用。我们认为它已经可以用于生产了。
安装
Moya 版本 vs Swift 版本
下边的表格展示了 Moya 版本与其对应的 Swift 版本。
| Swift | Moya | RxMoya | ReactiveMoya |
| ----- | -------------- |---------------- |--------------- |
| 5.X | = 13.0.0 | = 13.0.0 | = 13.0.0 |
| 4.X | 9.0.0 - 12.0.1 | 10.0.0 - 12.0.1 | 9.0.0 - 12.0.1 |
| 3.X | 8.0.0 - 8.0.5 | 8.0.0 - 8.0.5 | 8.0.0 - 8.0.5 |
| 2.3 | 7.0.2 - 7.0.4 | 7.0.2 - 7.0.4 | 7.0.2 - 7.0.4 |
| 2.2 | 注意:如果你在你的项目中使用 Swift 4.2,但是同时使用了 Xcode 10.2,那么 Moya 13 也能够正常工作,即使我们使用了 Swift 5.0。
升级到 Moya 的最新主版本?查看我们的 迁移向导。
Swift Package Manager
注意:以下的说明都未使用 Xcode 内嵌的 UI 版 Swift PM。使用 Swift PM 的最简单的方式是找到 Project Setting - Swift Packages 并将 Moya 添加在其中。
要使用苹果的 Swift Package Manager 集成,将以下内容作为依赖添加到你的 Package.swift:
swift
.package(url: "https://github.com/Moya/Moya.git", .upToNextMajor(from: "15.0.0"))
然后指定 "Moya" 为你想要使用 Moya 的 Target 的依赖。如果你想要使用响应式扩展,将 "ReactiveMoya" 和 "RxMoya" 也也作为依赖加入进来。这里是一个 PackageDescription 实例:
swift
// swift-tools-version:5.3
import PackageDescription
let package = Package(
name: "MyPackage",
products: [
.library(
name: "MyPackage",
targets: ["MyPackage"]),
],
dependencies: [
.package(url: "https://github.com/Moya/Moya.git", .upToNextMajor(from: "15.0.0"))
],
targets: [
.target(
name: "MyPackage",
dependencies: ["ReactiveMoya"])
]
)
注意:如果你正在使用 ReactiveMoya,我们正在使用我们自己 fork 版本的 ReactiveMoya。这个 fork 版本添加了 2 个 commits 用于移除在发行版(开始于 6.1.0)上的测试依赖。这是为了防止 Xcode 在 Xcode 11/11.1 上的 Xcode Previews 建立测试依赖项(FB7316430)。如果你不想使用我们的 fork 版本,你可以在你的 SPM package 列表中添加另一个依赖:[email protected]:ReactiveCocoa/ReactiveSwift.git,这样它就会从原仓库拉取代码。
Accio
Accio 是一个建立在 SwiftPM 之上的依赖管理器,它为 iOS/macOS/tvOS/watchOS 创建 frameworks 库。因此使用 Accio 集成 Moya 的步骤与以上几乎相同。一旦你的 Package.swift文件配置完成,运行 accio update 而不是 swift package update 即可。
CocoaPods
在你的 Podfile 文件中添加 Moya:
rb
pod 'Moya', '~ 15.0'
or
pod 'Moya/RxSwift', '~ 15.0'
or
pod 'Moya/ReactiveSwift', '~ 15.0'
or
pod 'Moya/Combine', '~ 15.0'
然后运行 pod install。
在任何你想使用 Moya 的文件中,使用 import Moya 导入框架。
Carthage
Carthage 用户可以指向这个仓库并使用他们喜欢的生成框架,Moya,RxMoya 或者 ReactiveMoya。
在你的 Car