Github API V3 Swifty Wrapper
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
GithubPilot.xcodeproj
GithubPilot.xcworkspace
GithubPilot
GithubPilotTests
Pods
Sources
.gitignore
.swift-version
.travis.yml
CHANGELOG.md
GithubPilot.podspec
LICENCE
Podfile
Podfile.lock
README.md

README.md

GithubPilot - Github API V3 Swifty Wrapper

Build Status

This is a Swift Github API Wrapper, it could make your life a little easier if you want to make an App with Github's wonderful data.

Installation

CocoaPods

Add a Podfile to your project, then edit it by adding:

use_frameworks!
pod 'GithubPilot', '~>1.0.3'

then, run the following command:

$ pod install

From now on you should use {Project}.xcworkspace to open your project

Before You start

Setup Your developer applications

Go to your Github homepage, tap your avatar -> Setting, on your left choose Applications -> Developer applications, then you should tap register a new OAuth application on your top right side.

Remember you should use a custom Authorization callback URL, which will be used later, eg. FunnyGithubTest://random After registration, you could get your Client ID and Client Secret.

Setup Your Project

To allow your user to be re-directed back to your app after OAuth dance, you'll need to associate a custom URL scheme with your app.

Open your Xcode then open Info.plist of your project. copy and paste following code to your Info.plist source code.

  <key>CFBundleURLTypes</key>
  <array>
      <dict>
          <key>CFBundleURLSchemes</key>
          <array>
              <string>your.custom.scheme(eg. FunnyGithubTest)</string>
          </array>
      <dict>
  <array>

Usage

Authentication

First, add import GithubPilot at the top of your AppDelegate. You could then add application(_: didFinishLaunchingWithOptions:) with following to authenticate your client. You also should take care of scope parameter that your client will use, refer to Github Scope

Github.setupClientID("YourClientID", clientSecret: "YourClientSecret", scope: ["user", "repo"], redirectURI: "YourCustomCallBackURL")
Github.authenticate()

Second, add following code to your AppDelegate to get Github access token

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool 
{
    Github.requestAccessToken(url)
    return true
}

Used in Code

Users

Get the authenticated user

if let client = Github.authorizedClient {
        client.users.getAuthenticatedUser().response({ user, requestError in
            if let me = user {
                print(me.description)
            } else {
                print(requestError?.description)
            }
        })
}

Get a user with username

if let client = Github.authorizedClient {
        client.users.getUser(username: "onevcat").response({ (githubUser, error) -> Void in
            if let user = githubUser {
                print(user.description)
            } else {
                print(error?.description)
            }
        })
}

Get a page of users from since id

if let client = Github.authorizedClient {
        client.users.getAllUsers("1209").response({ (httpResponse, users, requestError) -> Void in
            if let response = httpResponse {
                // next `since` id
                print("Since   :\(response)")
            }
            if let result = users {
                for user in result {
                    print(user.description)
                }
            } else {
                print(requestError?.description)
            }
        })
}

Repositories

Get repositories of authenticated user

if let client = Github.authorizedClient {
        client.repos.getAuthenticatedUserRepos().response({ (result, error) -> Void in
            if let repos = result {
                print(repos.count)
                for i in repos {
                    print(i.name)
                    print(i.stargazersCount)
                }
            }
            if let requestError = error {
                print(requestError.description)
            }
        })
}

Get a repo by repo name and repo owner name

if let client = Github.authorizedClient {
        client.repos.getRepo("Yep", owner: "CatchChat").response({ (result, error) -> Void in
            if let repo = result {
                print(repo.name)
            }
            if let requestError = error {
                print(requestError.description)
            }
        })
}

Get repos belong to a user

if let client = Github.authorizedClient {
    client.repos.getRepoFrom(owner: "onevcat").response({ (nextPage, result, error) -> Void in
        if let page = nextPage {
            print("Next Page is \(page)")
        }
        if let repos = result {
            print(repos.count)
            for r in repos {
                print(r.name)
                print(r.stargazersCount)
            }
        }
        if let requestError = error {
            print(requestError.description)
        }
    })
}

Events

Get received events for a user

if let client = Github.authorizedClient {
    client.events.getReceivedEventsForUser("someUser", page: "1").response({ (nextpage, results, error) -> Void in
        if let events = results {
            // New events
        }
    })
}

Example

You could refer to one of my project GitPocket as an example.

Credits

SwiftyDropbox

Future Work

There all tons of other API I haven't implementated, like Search. I will continuously make this repo better. Welcome to pull request and open issues.