测试已测试 | ✗ |
Lang语言 | SwiftSwift |
许可证 | MIT |
发布最后发布 | 2017年12月 |
SPM支持 SPM | ✗ |
由 Ondrej Rafaj 维护。
依赖 | |
SnapKit | ~> 4.0.0 |
Presentables | ~> 0.4.3 |
NBNRequestKit | ~> 2.0.2 |
您是否有过在 iOS 应用中浏览您的 github 仓库、选择文件并加载的需求?没有?我也没有... 至少在我第一次提交之前两个小时我还没有。
GithubSelector 是一个文件浏览器,允许您通过 GitHub API V3 浏览所有您的仓库。您可以浏览您有权访问的任何仓库,无论是私有的还是公开的,无论是您的还是分叉的,在切换分支或选择所需的历史提交时。
完成后,文件将被下载,并带有文件的所有信息和内容(以 plain Data
格式)通过闭包发回给您。
要运行示例项目,请克隆仓库,然后首先从 Example 目录运行 pod install
。
将新的 URL 方案添加到您的应用程序的 Info.plist
中,它可能看起来类似于此
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLIconFile</key>
<string></string>
<key>CFBundleURLName</key>
<string>githubselector1</string>
<key>CFBundleURLSchemes</key>
<array>
<string>githubselector1</string>
</array>
</dict>
</array>
在您的 AppDelegate
中,您必须在其中添加一个深链接处理程序以查看传入的身份验证
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
// Create a new config (we recommend you subclass BaseConfig and initialize it with the right values for reusability)
let config = BaseConfig()
config.clientId = "<your client id>"
config.clientSecret = "<your client secret>"
// Store the oAuth token ... we didn't really want to do this for you ;)
GithubSelector(configuration: config, url: url).didReceiveAuthToken = { token in
// Store received oAuth token locally (maybe keychain?)
}
return true
}
在您的视图控制器中(最可能是),创建一个配置,处理回调方法,并最终显示选择器。
let selector = GithubSelector()
// Create a new config
let config = BaseConfig()
config.clientId = "<your client id>"
config.clientSecret = "<your client secret>"
selector.logout = {
// User requested logout, delete locally stored oAuth token (probably from keychain?)
}
// Get your token if you got any (where did you store it? Hope not user defaults!)
if let token = getYourToken() {
config.clientToken = token
}
// User has finally decided to select a file
selector.didSelectFile = { file in
/*
Access the following on your returned file
public let data: Data
public let name: String
public let url: String
public let mode: String
public let size: Int
*/
}
// Present your brand new Github file selector to the user
selector.present(inViewController: self, configuration: config)
为了运行我们提供的测试应用程序,请记住在 ./Example/GithubSelector/Secrets.plist
中提供您的 GitHub 客户端 ID 和密钥。它应该看起来像这样
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>clientId</key>
<string>vw5t45t45v45y3tc449b58f3</string>
<key>clientSecret</key>
<string>97n8v5t047tn5t7c5tcnt724r24rc2c4r2c48345le</string>
</dict>
</plist>
我们故意省略了 GithubSelector 中的任何本地化,以允许最大化的自定义。有两种本地化方式
将以下本地化键添加到您的 Localizable.strings
文件中,这是一种本地化 GithubSelector 的简单方法。
// General
"gs.general.total" = "Total: %d";
"gs.general.unknown" = "Unknown";
"gs.general.never" = "Never";
"gs.general.loading" = "Loading ...";
// Login
"gs.login.oauth-button" = "Login to github.com";
// Repos
"gs.repos.logout" = "Logout";
"gs.repos.filesize" = "Size: %@";
"gs.repos.last_push.never" = "Never";
"gs.repos.last_push" = "Last push: %@";
// Files
"gs.files.folder" = "Folder";
"gs.files.chmod" = "#%@";
"gs.files.chmod.full" = "chmod: %@"
"gs.files.size" = "Size: %@";
"gs.files.change-branch" = "Branches";
"gs.files.select" = "Select";
// Commits
"gs.commits.commited_on" = "on %@";
为了实现绝对超级惊人的自定义本地化,请创建一个符合 Localizable
协议的类,然后将它赋值给共享 GithubSelector 的 var localizable: Localizable
。
Ondrej Rafaj, [email protected]
GithubSelector 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。