SwiftyInsta alternatives and similar libraries
Based on the "API" category.
Alternatively, view SwiftyInsta alternatives based on common mentions on social networks and blogs.
-
Typhoon
Powerful dependency injection for Objective-C ✨✨ (https://PILGRIM.PH is the pure Swift successor to Typhoon!!)✨✨ -
Dip
Simple Swift Dependency container. Use protocols to resolve your dependencies and avoid singletons / sharedInstances! -
Telegram Vapor Bot (SDK for creating Telegram Bots in Swift)
🤖 The wrapper for the Telegram Bot API written in Swift. It's not a framework. There is no special syntax here. This is a library that implements all Telegram Bot API methods, which is available to you to work with Vapor, Smoke, Hummingbird, FlyingFox. -
Federal Data SDK
DISCONTINUED. Federal Data SDK built in the Swift programming language. Follow the link for the documentation: -
Kraken
Simple Dependency Injection container for Swift. Use protocols to resolve dependencies with easy-to-use syntax! -
PPWeatherCheck
Incorporate with CoreLocation, Cocoapods, REST APIs, Alamofire, JSON, and UI Animation to Create a Weather Check Application.
InfluxDB high-performance time series database

* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of SwiftyInsta or a related project?
README
SwiftyInsta
Please notice SwiftyInsta may not be actively maintained at the moment of you reading this note. Refer to #244 for more info.
Instagram offers two kinds of APIs to developers. The Instagram API Platform (extremely limited in functionality and close to being discontinued), and the Instagram Graph API for Business and Creator accounts only.
However, Instagram apps rely on a third type of API, the so-called Private API or Unofficial API, and SwiftyInsta is an iOS, macOS, tvOS and watchOS client for them, written entirely in Swift. You can try and create a better Instagram experience for your users, or write bots for automating different tasks.
These Private API require no token or app registration but they're not authorized by Instagram for external use. Use this at your own risk.
Installation
Swift Package Manager (Xcode 11 and above)
- Select
File
/Swift Packages
/Add Package Dependency…
from the menu. - Paste
https://github.com/TheM4hd1/SwiftyInsta.git
. - Follow the steps.
CocoaPods
CocoaPods is a dependency manager for Cocoa projects. You can install it with the following command:
$ gem install cocoapods
To integrate SwiftyInsta into your Xcode project using CocoaPods, specify it in your Podfile
:
use_frameworks!
target '<Your Target Name>' do
pod 'SwiftyInsta', '~> 2.0'
end
Then, run the following command:
$ pod install
SwiftyInsta depends on CryptoSwift<!--GzipSwift,--> and keychain-swift.
<!--
Manually
To use this library in your project manually you may:
- Add compiled framework from General > Linked frameworks and libraries
- Clone the project, right click on your root project(not SwiftyInsta) and select Add files...
, then select the SwiftyInsta.xcodeproj
. after that go to your project>embeded libraries
and select SwiftyInsta.framework
, build the project and import SwiftyInsta
-->
Login
Credentials
// these need to be strong references.
self.credentials = Credentials(username: /* username */, password: /* password */, verifyBy: .text)
self.handler = APIHandler()
handler.authenticate(with: .user(credentials)) {
switch $0 {
case .success(let response, _):
print("Login successful.")
// persist cache safely in the keychain for logging in again in the future.
guard let key = response.persist() else { return print("`Authentication.Response` could not be persisted.") }
// store the `key` wherever you want, so you can access the `Authentication.Response` later.
// `UserDefaults` is just an example.
UserDefaults.standard.set(key, forKey: "current.account")
UserDefaults.standard.synchronize()
case .failure(let error):
if error.requiresInstagramCode {
/* update interface to ask for code */
} else {
/* notify the user */
}
}
}
Once the user has typed the two factor authentication code or challenge code, you simply do
self.credentials.code = /* the code */
And the completionHandler
in the previous authenticate(with: completionHandler:)
will automatically catch the response.
LoginWebViewController
(>= iOS 12 only)
let login = LoginWebViewController { controller, result in
controller.dismiss(animated: true, completion: nil)
// deal with authentication response.
guard let (response, _) = try? result.get() else { return print("Login failed.") }
print("Login successful.")
// persist cache safely in the keychain for logging in again in the future.
guard let key = response.persist() else { return print("`Authentication.Response` could not be persisted.") }
// store the `key` wherever you want, so you can access the `Authentication.Response` later.
// `UserDefaults` is just an example.
UserDefaults.standard.set(key, forKey: "current.account")
UserDefaults.standard.synchronize()
}
if #available(iOS 13, *) {
present(login, animated: true, completion: nil) // just swipe down to dismiss.
} else {
present(UINavigationController(rootViewController: login), // already adds a `Cancel` button to dismiss it.
animated: true,
completion: nil)
}
Or implement your own custom UIViewController
using LoginWebView
, and pass it to an APIHandler
authenticate
method using .webView(/* your login web view */)
.
Authentication.Response
If you've already persisted a user's Authentication.Response
:
// recover the `key` returned by `Authentication.Response.persist()`.
// in our example, we stored it in `UserDefaults`.
guard let key = UserDefaults.standard.string(forKey: "current.account") else { return print("`key` not found.") }
// recover the safely persisted `Authentication.Response`.
guard let cache = Authentication.Response.persisted(with: key) else { return print("`Authentication.Response` not found.") }
// log in.
let handler = APIHandler()
handler.authenticate(with: .cache(cache)) { _ in
/* do something here */
}
Usage
All endpoints are easily accessible from your APIHandler
instance.
let handler: APIHandler = /* a valid, authenticated handler */
// for instance you can…
// …fetch your inbox.
handler.messages.inbox(with: .init(maxPagesToLoad: .max),
updateHandler: nil,
completionHandler: { _, _ in /* do something */ })
// …fetch all your followers.
handler.users.following(user: .me,
with: .init(maxPagesToLoad: .max),
updateHandler: nil,
completionHandler: { _, _ in /* do something */ })
Futhermore, responses now display every single value contained in the JSON
file returned by the API: just access any ParsedResponse
rawResponse
and start browsing, or stick with the suggested accessories (e.g. User
's username
, name
, etc. and Media
's aspectRatio
, takenAt
, content
, etc.).
Contributions
Pull requests and issues are more than welcome.
<!-- Remove sourcer.io because of it being discontinued. -->
Authors
We're actively looking for maintainers. Refer to #244 for more info.
License
SwiftyInsta is licensed under the MIT license. See LICENSE for more info.
*Note that all licence references and agreements mentioned in the SwiftyInsta README section above
are relevant to that project's source code only.