GithubSelector 0.4.1

GithubSelector 0.4.1

测试已测试
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 中的任何本地化,以允许最大化的自定义。有两种本地化方式

NSLocalizedString

将以下本地化键添加到您的 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 文件。