Easy and powerful way to interact with VK API for iOS and macOS

Overview

SwiftyVK

Platform Swift VK API Cocoapods compatible Carthage compatible License

Build status Codecov Codebeat Reviewed by Hound

Donale

Easy and powerful way to interact with VK API for iOS and macOS.

Key features

😊 It's not ios-vk-sdk 😊
🍏 One library for iOS and mac OS 🍏
🤘 Fully written in Swift and doesn't contain any Objective-C code 🤘
🎮 Very simple interface, made with care about those who will use it 🎮
Fully strong typed that you can not shoot yourself in the leg
🏆 High code quality with lot of unit tests, linter integration and CI 🏆
🚀 Frequent updates and bug fixes 🚀
🔊 LongPoll support 🔊

Table of contents


Requirements

  • Swift 4.0 +
  • iOS 8.0 +
  • macOS 10.10 +
  • Xcode 9.0 +

Integration

Carthage (recommended)

github "SwiftyVK/SwiftyVK"

CocoaPods

use_frameworks!

target '$MySuperApp$' do
  pod 'SwiftyVK'
end

Manually

  1. Just drag SwiftyVK.framework or include the whole SwiftyVK.xcodeproj into project
  2. Link SwiftyVK.framework with application in Your target preferences -> General -> Embedded binaries

Getting started

Implement SwiftyVKDelegate

To start using SwiftyVK you should implement SwiftyVKDelegate protocol in your custom VKDelegate class. It is used to notify your app about important SwiftyVK lifecycle events.

For example:

import SwiftyVK
class VKDelegateExample: SwiftyVKDelegate {

    func vkNeedsScopes(for sessionId: String) -> Scopes {
      // Called when SwiftyVK attempts to get access to user account
      // Should return a set of permission scopes
    }

    func vkNeedToPresent(viewController: VKViewController) {
      // Called when SwiftyVK wants to present UI (e.g. webView or captcha)
      // Should display given view controller from current top view controller
    }

    func vkTokenCreated(for sessionId: String, info: [String : String]) {
      // Called when user grants access and SwiftyVK gets new session token
      // Can be used to run SwiftyVK requests and save session data
    }

    func vkTokenUpdated(for sessionId: String, info: [String : String]) {
      // Called when existing session token has expired and successfully refreshed
      // You don't need to do anything special here
    }

    func vkTokenRemoved(for sessionId: String) {
      // Called when user was logged out
      // Use this method to cancel all SwiftyVK requests and remove session data
    }
}

See full implementation in Example project

Setting up VK application

  1. Create new standalone application
  2. Save application ID from Preferences -> Application ID
  3. Set up SwiftyVK with application ID and VKDelegate obtained in the previous steps:
VK.setUp(appId: String, delegate: SwiftyVKDelegate)

Releasing

in order to free up resources that holds SwiftyVK use:

VK.release()

note you must setup it again for further using

Authorization

SwiftyVK provides several ways to authorize user. Choose the one that's more suitable for you.

oAuth WebView

This is a standard authorization method which shows web view with oAuth dialog. Suitable for most cases.

VK.sessions.default.logIn(
      onSuccess: { _ in
        // Start working with SwiftyVK session here
      },
      onError: { _ in
        // Handle an error if something went wrong
      }
  )

Official VK Application

If a user has the official VK app installed on their device, SwiftyVK can be authorized using it. To do that:

  1. In Xcode -> Target -> Info -> URL Types

    • Add new URL Type like vk$YOUR_APP_ID$ (e.g. vk1234567890)
    • Add app schemas to Info.plist file:
<key>LSApplicationQueriesSchemes</key>
  <array>
    <string>vkauthorize</string>
    <string>vk$YOUR_APP_ID$</string>
  </array>
  1. Copy Application Bundle from Xcode -> $App Target$ -> General -> Bundle Identifier (e.g. com.developer.applicationName)

  2. Set copied Application Bundle to https://vk.com/apps?act=manage -> Edit App -> Settings -> App Bundle ID for iOS field

  3. Add the following code to AppDelegate:

  • For iOS 9 and below
func application(
   _ application: UIApplication,
   open url: URL,
   sourceApplication: String?,
   annotation: Any
   ) -> Bool {
   VK.handle(url: url, sourceApplication: sourceApplication)
   return true
}
  • For iOS 10 and above
func application(
    _ app: UIApplication,
    open url: URL,
    options: [UIApplicationOpenURLOptionsKey : Any] = [:]
    ) -> Bool {
    let app = options[.sourceApplication] as? String
    VK.handle(url: url, sourceApplication: app)
    return true
}
  1. Authorize as described in oAuth WebView.

    If user denies authorization in VK App, SwiftyVK will present oAuth dialog

Raw token string

If you have previously received user token, just pass it to the following method:

VK.sessions.default.logIn(rawToken: String, expires: TimeInterval)

// Start working with SwiftyVK session here

TimeInterval is a time, after which the token will no longer be valid. Pass 0 if you want token to never expire.

Interaction with VK API

SwiftyVK provides a very simple interface for interaction with VK API. All requests are performed asynchronously in a private queue by API scheduler (the scheduler sends no more than 3 requests per second by default). You can just send a request and get a response without a lot of work.

All API methods are listed here

Let's look closer to requests syntax:

Request

The basic request calls look like VK.methodGroup.methodName().

For example, to get short info about current user:

VK.API.Users.get(.empty)
    .onSuccess { /* handle and parse response */ }
    .onError { /* handle error */ }
    .send()

Object created with

VK.API.Users.get(.empty)

represents a request that can be sent immediately or can be configured first and sent later.

Parameters

If you want to get additional fields for a user in previous example, you can set request parameters:

VK.API.Users.get([
    .userId: "1",
    .fields: "sex,bdate,city"
    ])

Use .empty if you don't want to pass any parameters.

Callbacks

Requests are executed asynchronously and provide some callbacks for handling execution results:

onSuccess

This callback will be called when request has succeeded and returned Data object. You can handle and parse response using any JSON parsing method (e.g. JSONSerialization, Codable, SwiftyJSON and others)

VK.API.Users.get(.empty)
    .onSuccess {
        let response = try JSONSerialization.jsonObject(with: $0)
    }

You can throw errors in onSuccess callback, which will cause onError to be called with your error.

onError

This callback will be called when request has failed for some reason. You may handle the error that was thrown in this callback.

VK.API.Users.get(.empty)
    .onError {
        print("Request failed with error: ($0)")
     }

Cancellation

If you no longer need to send sheduled request (e.g. screen was popped out), just cancel it:

// `send()` function returns `Task` object which has `cancel()` function
let request = VK.API.Users.get([
    .userId: "1",
    .fields: "sex,bdate,city"
    ])
    .onSuccess { print($0) }
    .send()

// Cancel sheduled request.
// onSuccess callback will never be executed.
request.cancel()

Chaining

SwiftyVK allows you to chain requests. If your second request needs to consume a response from the first one, just chain them together:

VK.API.Users.get(.empty)
    .chain { response in
        // This block will be called only
        // when `users.get` method is successfully executed.
        // Receives result of executing `users.get` method.
        let user = try JSONDecoder().decode(User.self, from: response)
        return VK.API.Messages.send([
            .userId: user.id,
            .message: "Hello"
        ])
    }
    .onSuccess { response in
        // This block will be called only when both `users.get` and `messages.send`
        // methods are successfully executed.
        // `response` is a result of `messages.send` method
    }
    .onError { error in
        // This block will be called when either `users.get` or `messages.send` methods is failed.
        // Receives error of executing `users.get` or `messages.send` method.
    }
    .send()

You can make very long chains with SwiftyVK!

Configuring

In SwiftyVK each session has default configuration for its requests. Each request gets configuration from its session. Configuration contains settings such as httpMethod, attemptTimeout and others.

You can change configuration for a single request

// Set different httpMethod only for this request
VK.API.Users.get(.empty)
    .configure(with: Config(httpMethod: .POST))

or for the whole session

// Set default apiVersion value for all requests in default session
VK.sessions.default.config.apiVersion = "5.68"

You may change following configuration properties:

Property Default Description
httpMethod .GET HTTP method. You can use GET or POST. For big body (e.g. long message text in message.send method) use POST method.
apiVersion latest version VK API version. By default uses latest version. If you need different version - change this value.
language User system language Language of response. For EN Pavel Durov, for RU Павел Дуров.
attemptsMaxLimit 3 Maximum number of attempts to send request before returning an error.
attemptTimeout 10 Timeout in seconds of waiting for a response before returning an error.
handleErrors true Allow to handle specific VK errors automatically by presenting a dialog to a user when authorization, captcha solving or validation is required.

Upload files

SwiftyVK provides the ability to easily upload a file to VK servers. For example:

// Get path to image file
guard let path = Bundle.main.path(forResource: "testImage", ofType: "jpg") else { return }

// Get data from image file by path
guard let data = try Data(contentsOf: URL(fileURLWithPath: path)) else { return }

// Create SwiftyVK Media representation from given data
let media = Media.image(data: data, type: .jpg)

// Upload image to server
VK.API.Upload.Photo.toWall(media, to: .user(id: "4680178"))
    .onSuccess { print($0) }
    .onError { print($0) }
    .onProgress {
        // This callback available only for uploading requests
        // Use it to handle uploading status and show it to user
        
        switch $0 {
            case let .sent(current, of):
                print("sent", current, "of": of)
            case let .recieve(current, of):
                print("recieve", current, "of": of)
        }
    } 
    .send()

Some upload requests do not immediately download files

e.g VK.API.Upload.Photo.toMessage will return photoId which you can use in messages.send method. See docs for more info.

Interaction with LongPoll

Start LongPoll

With SwiftyVK you can interact with VK LongPoll server very easily. Just call:

VK.sessions.default.longPoll.start {
    // This callback will be executed each time
    // long poll client receives a set of new events
    print($0)
}

Handle updates

Data format is described here. LongPollEvent is an enum with associated value of type Data in each case. You can parse this data to JSON using your favorite parser like this:

VK.sessions.default.longPoll.start {
    for event in $0 {
        switch event {
            case let .type1(data):
                let json = JSON(data)
                print(json)
            default:
                break
        }
    }
}

LongPollEvent has two special cases:

.forcedStop - returned when LongPoll has experienced unexpected error and stop. You can restart it again.

.historyMayBeLost - returned when LongPoll was disconnected from server for a long time and either lpKey or timestamp is outdated. You do not need to reconnect LongPoll manually, client will do it itself. Use this case to refresh data that could have been updated while network was unavailable.

Stop LongPoll

If you don't need to receive LongPoll updates anymore, just call this function:

VK.sessions.default.longPoll.stop()

Share dialog

With SwiftyVK can make a post to user wall. To do this, you need:

VK.sessions.default.share(
    ShareContext(
        text: "This post made with #SwiftyVK 🖖🏽",
        images: [
            ShareImage(data: data, type: .jpg), // JPG image representation
        ],
        link: ShareLink(
            title: "Follow the white rabbit", // Link description
            url: link // URL to site
        )
    ),
    onSuccess: { /* Handle response */ },
    onError: { /* Handle error */ }

Images and link are optional, text is required Sharing not available on macOS 10.10. If you want to use it, please make pull request to this repo.

FAQ

I can't find some API method or parameter in library

License

SwiftyVK is released under the MIT license. See LICENSE for details.

Comments
  • ShareContext don't post and dont have error too

    ShareContext don't post and dont have error too

    Description

    Describe the issue in detail here

    i am trying to share from my ios app here is my code

    no error from this

    guard let pic = PerfectLocalAuth.userdetails["picture"] as? String else {
                return
            }
            
            if let url = URL(string: pic) {
                let task = URLSession.shared.dataTask(with: url, completionHandler: { data, response, error in
                    if let data = data {
                        VK.sessions.default.share(
                            ShareContext(
                                text: "This post made with #SwiftyVK 🖖🏽",
                                images: [
                                    ShareImage(data: data, type: .jpg)
                                ],
                                link: ShareLink(
                                    title: "Follow the white rabbit", // Link description
                                    url: URL(string: "localhost")! // URL to site
                                )
                            ),
                            onSuccess: { response in
                                print(response)
                        },
                            onError: { error in
                                print(error)
                        })
                    }
                })
                task.resume()
    }
    

    here is my func

    func postToFeedForVK() {
            VK.API.Users.get([
                .filters: "post",
                .returnBanned: "0",
                .fields: "first_name,last_name,photo_50,gid,name,photo"
                ])
                .onSuccess {
    
                    do {
                        let response = try JSONSerialization.jsonObject(with: $0)
                        print(response)
    
                    } catch {
                        print(error)
                    }
                }.send()
            } < this func working that mean i have token and session 
    
    

    i have already Oauth2 install so I get this so do this

    /* ==========================================================
         VK
         ========================================================== */
        @IBAction func doVkOAuth(_ sender: Any) {
            let service = "Vk"
            
            guard var parameters = services[service] else {
                print("\(service) not configured")
                return
            }
            
            let oauthswift = OAuth2Swift(
                consumerKey:    parameters["consumerKey"] ?? "",
                consumerSecret: parameters["consumerSecret"] ?? "",
                authorizeUrl:   "https://oauth.vk.com/authorize",
                accessTokenUrl: "https://oauth.vk.com/access_token",
                responseType:   "code"
            )
            
            self.oauthswift = oauthswift
            oauthswift.authorizeURLHandler = getURLHandler()
            let state = generateState(withLength: 20)
            _ = oauthswift.authorize(
                withCallbackURL: URL(string: "\(PerfectLocalAuth.host)/api/v1/oauth/return/vk")!,
                scope: "profile, city, photos, email, friends",
                state: state,
                success: { credential, response, parameters in
                    print("credential.oauthToken", credential.oauthToken)
                    
                    // send upgrade user signal to Perfect OAuth2 Server
                    let accessToken = credential.oauthToken
                    
                    do {
                        try VK.sessions.default.logIn(rawToken: accessToken, expires: TimeInterval(0)) *******
                    } catch {
                        print("VK.sessions.default.logIn rawToken error")
                    }
    

    Environment

    Key | Value | -------------------------|-------------------------------------| Platform | e.g. ios Platform version | 11.3 Xcode version | exact version e.g. 9.3.1 Swift version | exact version e.g. 4.1 SwiftyVK version | exact version3.1.5 Integration Method | cocoapods

    Checklist

    Check all points of list below and set [x] on each checked point:

    • [x ] I have looked and not find decision at README.md
    • [x ] I have looked and reproduce this behaviour in Example project
    • [ x] I have not find duplicates of this issue in issues list
    • [x ] I made an understandable short title and exhaustive description
    • [x ] I attach stack traces or errors description
    • [ x] I completely describe the environment
    • [x ] I have full filled out this issue template
    help wanted 
    opened by saroar 20
  • IPV6

    IPV6

    Спасибо за библиотеку. Все отлично работает на эмуляторе и моем устройстве, но приложение второй раз отклонили по причине креша при авторизации в ВК. Логи, которые присылает Apple косвенно намекают, что это связанно с вашей библиотекой. Они тесты проводят в IPV6 сети. Возможно ваша библиотека, не работает в IPV6. Если я что-то не так понял, то прошу совета. Заранее благодарю :)

    won't do 
    opened by bumsun 13
  • LongPoll

    LongPoll

    Description

    При длительном сворачивании приложения с запущенным longpoll и последующем разворачивании, начинают висеть все запросы до тех пор, пока longpoll не обновится.

    Environment

    Key | Value | -------------------------|-------------------------------------| Platform | e.g. ios Platform version | 11 Xcode version | 9.1 Swift version | 4 SwiftyVK version | 3.0.5 Integration Method | сarthage

    bug 
    opened by ranix-k 12
  • Получение LongPoll обновлений

    Получение LongPoll обновлений

    New Issue Checklist

    • [x] I have looked at the README.md
    • [x] I have looked at the Example project
    • [x] I have filled out this issue template.

    Issue Info

    Info | Value | -------------------------|-------------------------------------| Platform | ios Platform Version | 10.3 Swift Version | 3.1 SwiftyVK Version | 2.0 Integration Method | cocoapods

    Issue Description

    Доброго времени суток! Подскажите, пожалуйста, как принимается ответ от LongPollServer? Я запускаю VK.LP.start() и подписываюсь на все обновления в NotificationCenter:

    NotificationCenter.default.addObserver(self, selector: #selector(getVKUpdates), name: VK.LP.notifications.typeAll, object: nil)

    getVKUpdates метод прикрепляю скрином. Для проверки я отправлял себе с другого аккаунта сообщения, но ответ мне всегда приходит

    { "history" : [

    ], "profiles" : [

    ], "messages" : { "items" : [

    ],
    "count" : 0
    

    } } 2017-06-16 23 25 06

    help wanted 
    opened by callmehowever 11
  • Crash with VK.configure

    Crash with VK.configure

    Здравствуйте. При вызове метода VK.configure(withAppId: Constants.vkId, delegate: self) у меня вылетает warning: could not load any Objective-C class information. This will significantly reduce the quality of type information available. screen shot 2016-11-24 at 2 12 33 pm

    opened by Victor1506 11
  • LongPool

    LongPool

    New Issue Checklist

    • [+] I have looked at the README.md
    • [+] I have looked at the Example project
    • [+] I have filled out this issue template.

    Issue Info

    Info | Value | -------------------------|-------------------------------------| Platform | iOS Platform Version | 11.0 b10 Swift Version | 4.0 SwiftyVK Version | 2.0.12 Integration Method | carthage

    Issue Description

    LongPool ложит приложение когда отключается/слабый интернет. Простой пример как воспроизвести:

    1. Включить его
    2. Свернуть приложение и отключить интернет
    3. Развернуть Приложение зависнет полностью до того момента, пока longpoll не гетнет сервер. Так-же иногда проскакивает краш приложения с ошибкой на swiftyvk, т.к. у меня при разворачивании выполняется VK.API.remote и лонг с методами как-то конфликтует
    bug 
    opened by ranix-k 10
  • Get LongPoll Server

    Get LongPoll Server

    New Issue Checklist

    • [+] I have looked at the README.md
    • [+] I have looked at the Example project
    • [+] I have filled out this issue template.

    Issue Info

    Info | Value | -------------------------|-------------------------------------| Platform | ios Platform Version | All Swift Version | 4 SwiftyVK Version | последняя Integration Method | carthage

    Issue Description

    Вызов метода messages.getLongPollServer должен срабатывать только 1 раз и только при старте, а не при сворачивании/разворачивании, сейчас идет просто лишняя нагрузка на запросы.

    bug 
    opened by ranix-k 9
  • Unhandled error

    Unhandled error

    'error SwiftyVKApiError[5]: User authorization failed: invalid session.'

    This error isn't represented in the API as far as I am aware.

    The way I have fixed it is manually logging out and back in.

    opened by ilyakooo0 9
  • Отправка/прием видео в личных сообщениях.

    Отправка/прием видео в личных сообщениях.

    New Issue Checklist

    • [x] I have looked at the README.md
    • [x] I have looked at the Example project
    • [x] I have filled out this issue template.

    Issue Info

    Info | Value | -------------------------|-------------------------------------| Platform |ios Platform Version | 10.3 Swift Version | 3.1 SwiftyVK Version | 2.0.0 Integration Method | cocoapods

    Issue Description

    Здравствуйте! Пытаюсь отправить видео в личном сообщении, но в диалогах вместо видео отображается "...". 2017-06-19 13 52 49

    А при загрузке диалога методом getHistory получаю в ответ от сервера: 2017-06-19 14 03 18 Тут нет поля с url видео для воспроизведения. Подскажите, пожалуйста, что я делаю не так?

    help wanted 
    opened by callmehowever 8
  • Получить access_token если уже зарегестрировался

    Получить access_token если уже зарегестрировался

    Здравствуйте, спасибо большое за библиотеку, очень хорошая работа.

    Возник вопрос, я уже залогинился и получил токен, но не сохранил его нигде. Убил приложение и пробую логинится заново, могу получить статус зарегестрирован/нет. Но не могу получить сам токен из апишки, без того, чтобы пабликом не сделать token поле в SessionImpl.

    Подскажите, пожалуйста, может я что-то не так делаю?

    Спасибо

    enhancement 
    opened by akantsevoi 7
  • VK app authorization failed.

    VK app authorization failed.

    Environment

    Key | Value | -------------------------|-------------------------------------| Platform | iOS Platform version | 9.0 Xcode version | 9.1 Swift version | 4.0 SwiftyVK version | 3.1.4 Integration Method | cocoapods

    Checklist

    Check all points of list below and set [x] on each checked point:

    • [x ] I have looked and not find decision at README.md
    • [x] I have looked and reproduce this behaviour in Example project
    • [x] I have not find duplicates of this issue in issues list
    • [x] I made an understandable short title and exhaustive description
    • [x ] I attach stack traces or errors description
    • [ ] I completely describe the environment
    • [ ] I have full filled out this issue template

    Hi, i am trying to login by VK app but when window switches to VK app, after i choose to give permission the app crashes. The reason is that it cannot find the a Web view controller which i do not know what it is. Supposed that it about web authentication. but the thing is that i use VK app the authorise user. It failed at this point with the fatal error.

    private func viewController( name: String, onDismiss: (() -> ())? ) -> ControllerType { var controller: VKViewController?

        #if os(iOS)
            controller = storyboard().instantiateViewController(
                withIdentifier: name
                )
        #elseif os(macOS)
            controller = storyboard().instantiateController(
                withIdentifier: NSStoryboard.SceneIdentifier(rawValue: name)
                ) as? VKViewController
        #endif
        
        guard
            let unwrappedController = controller,
            let resultController = unwrappedController as? ControllerType
            else {
            fatalError("Can't find \(name) controller")
        }
        
        if let dismisableController = resultController as? DismisableController {
            dismisableController.onDismiss = onDismiss
        }
        
        DispatchQueue.anywayOnMain {
            self.delegate?.vkNeedToPresent(viewController: unwrappedController)
        }
        
        return resultController
    }
    

    Please help, it's kind of urgent! Many thanks in advance!

    opened by trandinhlinh94 7
  • При отмене алерта перехода не попадает в onError с authorizationCancelled

    При отмене алерта перехода не попадает в onError с authorizationCancelled

    SwiftyVK version: 3.4.2 Xcode: 12.5.1

    После VK.sessions.default.logIn открывается экран

    image

    Если нажать отмена, то в логах пишется

    WF: _userSettingsForUser mobile: {
        filterBlacklist =     (
        );
        filterWhitelist =     (
        );
        restrictWeb = 1;
        useContentFilter = 0;
        useContentFilterOverrides = 0;
        whitelistEnabled = 0;
    }
    WF: _WebFilterIsActive returning: NO
    

    и в onError не заходит с ошибкой. Как я думаю - должен заходить с .authorizationCancelled.

    opened by NikKovIos 4
  • SPM Resolution Failure with swift-tools-version

    SPM Resolution Failure with swift-tools-version

    Description

    Trying to add framework via spm in xCode 12.5 always fails.

    Screenshot 2021-07-15 at 09 25 55

    Environment

    Key | Value | -------------------------|-------------------------------------| Xcode version | 12.5.1 Swift version | 5 SwiftyVK version | 3.4.2 Integration Method | spm

    Checklist

    Check all points of list below and set [x] on each checked point:

    • [x] I have looked and not find decision at README.md
    • [x] I have looked and reproduce this behaviour in Example project
    • [x] I have not find duplicates of this issue in issues list
    • [x] I made an understandable short title and exhaustive description
    • [x] I attach stack traces or errors description
    • [x] I completely describe the environment
    • [x] I have full filled out this issue template
    opened by romdevios 2
  • Authorization Code Flow

    Authorization Code Flow

    Added the ability to receive code for the server-side auth. Code Flow is available only through the WebView due to the hardcoded response_type in the VK iOS app.

    opened by petersamokhin 2
  • Attention please: real maintainer please stand up!

    Attention please: real maintainer please stand up!

    Привет, друг. Я принял непростое решение и хочу рассказать как это произошло.

    Я начал разработку SwiftyVK еще в далеком 2014 году с выходом первых версий Swift. В 2016 я перестал сам использовать его, но активно поддерживал и полностью отрефакторил в конце 2017.

    За это время ко мне обратилось большое число разработчиков с различными проблемами, вопросами и предложениями. Я в одиночку закрыл больше 100 issues и сделал больше 1000 коммитов.

    К сожалению, все это требует моих ресурсов и последние 2 года все тяжелее уделять их, так как проект больше не является частью моей жизни, работы или хобби. Он висит грузом, который жалко отпустить из-за количества вложенных сил и времени.

    Я думал, что если дал сообществу SwiftyVK, то должен поддерживать его и дальше, но понял, что пора двигаться вперед и решил, что больше не буду делать это в одиночку.

    Я верю в силу open source и комьюнити, а так же надеюсь, что если SwiftyVK кому-то нужен, то он продолжит жить с участием небезразличных, кто готов вложить в него силы для того, чтобы использовать в дальнейшем.

    При этом я не растворяюсь в воздухе, мне можно писать в telegram (@west0r), задавать вопросы, я буду рад на них ответить и помочь всем, что знаю. Но писать код в проект больше не могу, только консультировать по нему. Поэтому если у вас есть предложения или вы нашли ошибку, то вам придется написать код самостоятельно с моей консультацией.

    Пока я являюсь формальным мейнтейнером, то лучше писать мне до того, как вы делаете pull request, чтобы минимизировать число правок в уже написанном коде и подумать вместе как лучше реализовать вашу идею в проекте. Именно с этим я всячески готов помогать и буду только рад такому развитию событий.

    В идеале я жду человека, который готов выступить мейнтейнером и заняться поддержкой проекта в дальнейшем. Если такой найдется, то я не пожалею сил, чтобы передать все знания о нем и права на репозиторий.

    А пока, как бы мне не было жаль, я признаю, что нужно двигаться вперед. Я дал проекту все, что мог и либо он окажется кому-то нужен и дальше заживет своей жизнью, либо нет и заростет плесенью. Теперь его судьба в руках комьюнити.

    opened by west0r 0
Releases(3.4.2)
Owner
null
An easy-to-use Objective-C wrapper for the Uber API (no longer supported)

UberKit UberKit is a simple Objective-C wrapper for the new Uber API . Installation Cocoapods UberKit is available through Cocoapods. To install it, s

Sachin Kesiraju 95 Jun 30, 2022
An Elegant Spotify Web API Library Written in Swift for iOS and macOS

Written in Swift 4.2 Spartan is a lightweight, elegant, and easy to use Spotify Web API wrapper library for iOS and macOS written in Swift 3. Under th

Dalton Hinterscher 107 Nov 8, 2022
The Swift-est way to build native mobile apps that connect to Salesforce.

Swiftly Salesforce is the Swift-est way to build native mobile apps that connect to Salesforce: Written entirely in Swift. Very easy to install and up

Michael Epstein 131 Nov 23, 2022
Unofficial Dribbble iOS wrapper allows you to integrate Dribble API into iOS application (Designer, Shot, Comment, User Story, Like, Follow)

DribbbleSDK DribbbleSDK is easy-to-use iOS wrapper for Dribbble SDK. We're working hard to complete the full coverage of available methods and make th

Agilie Team 74 Dec 2, 2020
A Swift wrapper for Foursquare API. iOS and OSX.

Das Quadrat Das Quadrat is Foursquare API wrapper written in Swift. Features Supports iOS and OSX. Covers all API endpoints. Authorization process imp

Constantine Fry 171 Jun 18, 2022
Giphy API client for iOS in Objective-C

Giphy-iOS Giphy-iOS is a Giphy API client for iOS in Objective-C. Usage To run the example project, clone the repo, and run pod install from the Examp

alex choi 52 Jul 11, 2019
Easy Proximity-based Bluetooth LE Sharing for iOS

Description Easy Proximity-based Sharing for iOS Perfect for any iOS app that needs to quickly share items with nearby friends, such as groups, photo

Laura Skelton 132 Aug 10, 2022
A stable, mature and comprehensive Objective-C library for Twitter REST API 1.1

STTwitter A stable, mature and comprehensive Objective-C library for Twitter REST API 1.1 Like a FOSS version of Twitter Fabric TwitterKit, without th

Nicolas Seriot 1k Nov 30, 2022
Twitter API for Cocoa developers

FHSTwitterEngine Twitter API for Cocoa developers Created by Nathaniel Symer FHSTwitterEngine can: Authenticate using OAuth and/or xAuth. Make a reque

Nathaniel Symer 213 Jul 8, 2022
ObjectiveFlickr, a Flickr API framework for Objective-C

ObjectiveFlickr ObjectiveFlickr is a Flickr API framework designed for Mac and iPhone apps. OAuth Support ObjectiveFlickr now supports Flickr's new OA

Lukhnos Liu 714 Jan 9, 2023
Unofficial GitHub API client in Swift

Github.swift ❤️ Support my apps ❤️ Push Hero - pure Swift native macOS application to test push notifications PastePal - Pasteboard, note and shortcut

Khoa 184 Nov 25, 2022
Unified API Library for: Cloud Storage, Social Log-In, Social Interaction, Payment, Email, SMS, POIs, Video & Messaging.

Unified API Library for: Cloud Storage, Social Log-In, Social Interaction, Payment, Email, SMS, POIs, Video & Messaging. Included services are Dropbox, Google Drive, OneDrive, OneDrive for Business, Box, Egnyte, PayPal, Stripe, Google Places, Foursquare, Yelp, YouTube, Vimeo, Twitch, Facebook Messenger, Telegram, Line, Viber, Facebook, GitHub, Google+, LinkedIn, Slack, Twitter, Windows Live, Yahoo, Mailjet, Sendgrid, Twilio, Nexmo, Twizo.

CloudRail 195 Nov 29, 2021
A swift SDK for Medium's OAuth2 API

Medium SDK - Swift A library to allow access to Medium API for any Swift iOS application. Features Medium.com authorization & token handling Login sta

null 11 Jan 22, 2022
Swift Wrapper For Bittrex API

BittrexApiKit Swift client for Bittrex api. It support all APIs with most recent changes. more info here let api = Bittrex(apikey: "api key", secretke

Saeid 8 Apr 5, 2021
Instagram API client written in Swift

SwiftInstagram is a wrapper for the Instagram API written in Swift. It allows you to authenticate users and request data from Instagram effortlessly.

Ander Goig 579 Dec 31, 2022
A Slack API Client for the Perfect Server-Side Swift Framework

PerfectSlackAPIClient is an API Client to access the Slack API from your Perfect Server Side Swift application. It is build on top of PerfectAPIClient

Cap.雪ノ下八幡 2 Dec 1, 2019
An API wrapper for bitFlyer.

SwiftFlyer An API wrapper for bitFlyer that supports all providing API. API Document https://lightning.bitflyer.jp/docs Usage Public API Fetch a marke

Ryo Ishikawa 39 Nov 3, 2022
A Swift library for the Forecast.io Dark Sky API

Requirements To use ForecastIO, all you need is an API key for the Dark Sky API. ForecastIO supports iOS (≥9.0), macOS (≥10.10), watchOS (≥2.0), and t

Satyam Ghodasara 163 Jul 26, 2022
A clima based app with use of API

Clima Our Goal It’s time to take our app development skills to the next level. We’re going to introduce you to the wonderful world of Application Prog

null 0 Nov 28, 2021