测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布上次发布 | 2017年8月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Piet Brauer 维护。
GitLab API 的 Swift 2.0 API 客户端。
此名称源于 GitLab 标志 这是一个抽象的标志,代表名为 Tanuki 的 日本浣熊犬亚种。不幸的是 GitLabKit
已经被占用。
TanukiKit 支持GitLab云和自托管GitLab。身份验证通过配置来处理。
有两种类型的配置,TokenConfiguration
和 OAuthConfiguration
。
TokenConfiguration
用于基于访问令牌的身份验证(例如,用户向您提供他在网站生成的访问令牌)或通过OAuth流程获得的访问令牌。
您可以用以下方式初始化一个新的针对gitlab.com
的配置:
let config = TokenConfiguration("12345")
或针对自托管的安装
let config = PrivateTokenConfiguration("12345", url: "https://gitlab.example.com/api/v3/")
在您获取了您的令牌后,您可以使用它与TanukiKit
一起使用
TanukiKit(config).me() { response in
switch response {
case .Success(let user):
println(user.login)
case .Failure(let error):
println(error)
}
}
OAuthConfiguration
旨在在没有访问令牌的情况下使用,用户必须登录到您的应用程序。这还处理OAuth流程。请注意,redirectURI
是完全任意的,且仅因为GitLab不支持如git2go://gitlab_oauth
一的redirect URIs
您可以按照以下方式对gitlab.com
进行用户身份验证
let config = OAuthConfiguration(token: "<Your Client ID>", secret: "<Your Client secret>", redirect_uri: "https://oauth.example.com/gitlab_oauth")
config.authenticate()
或针对自托管的安装
let config = OAuthConfiguration("https://gitlab.example.com/api/v3/", webURL: "https://gitlab.example.com/", token: "<Your Client ID>", redirect_uri: "https://oauth.example.com/gitlab_oauth")
在您获得了配置后,您可以进行用户身份验证
// AppDelegate.swift
config.authenticate()
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {
config.handleOpenURL(url) { config in
self.loadCurrentUser(config) // purely optional of course
}
return false
}
func loadCurrentUser(config: TokenConfiguration) {
TanukiKit(config).me() { response in
switch response {
case .Success(let user):
println(user.login)
case .Failure(let error):
println(error)
}
}
}
请注意,OAuth流程将提供给您一个TokenConfiguration
。您必须自己存储accessToken
。如果您想要进行更多请求,则无需再次执行OAuth流程。您只需使用一个TokenConfiguration
。
let token = // get your token from your keychain, user defaults (not recommended) etc.
let config = TokenConfiguration(token)
TanukiKit(config).user("tanuki") { response in
switch response {
case .Success(let user):
println(user.login)
case .Failure(let error):
println(error)
}
}
TanukiKit().me() { response in
switch response {
case .Success(let user):
// do something with the user
case .Failure(let error):
// handle any errors
}
TanukiKit().repositories() { response in
switch response {
case .Success(let repositories):
// do something
case .Failure(let error):
// handle any errors
}
}