ReCaptcha - Add Google's Invisible ReCaptcha v2 to your project

Overview

ReCaptcha

Build Status codecov PRs welcome Carthage compatible Version License Platform


Add Google's Invisible ReCaptcha v2 to your project. This library automatically handles ReCaptcha's events and retrieves the validation token or notifies you to present the challenge if invisibility is not possible.

Example Gif 2 Example Gif

Warning ⚠️

Beware that this library only works for ReCaptcha v2 Invisible keys! Make sure to check the reCAPTCHA v2 Invisible badge option when creating your API Key.

ReCaptcha v2 invisible key example

You won't be able to use a ReCaptcha v3 key because it requires server-side validation. On v3, all challenges succeed into a token which is then validated in the server for a score. For this reason, a frontend app can't know on its own wether or not a user is valid since the challenge will always result in a valid token.

Installation

ReCaptcha is available through CocoaPods and Carthage. To install it, simply add the following line to your dependencies file:

Cocoapods

pod "ReCaptcha"
# or
pod "ReCaptcha/RxSwift"

Carthage

github "fjcaetano/ReCaptcha"

Carthage will create two different frameworks named ReCaptcha and ReCaptcha_RxSwift, the latter containing the RxSwift extension for the ReCaptcha framework.

Usage

The reCAPTCHA keys can be specified as Info.plist keys or can be passed as parameters when instantiating ReCaptcha().

For the Info.plist configuration, add ReCaptchaKey and ReCaptchaDomain (with a protocol ex. http:// or https://) to your Info.plist and run:

let recaptcha = try? ReCaptcha()

override func viewDidLoad() {
    super.viewDidLoad()

    recaptcha?.configureWebView { [weak self] webview in
        webview.frame = self?.view.bounds ?? CGRect.zero
    }
}


func validate() {
    recaptcha?.validate(on: view) { [weak self] (result: ReCaptchaResult) in
        print(try? result.dematerialize())
    }
}

If instead you prefer to keep the information out of the Info.plist, you can use:

let recaptcha = try? ReCaptcha(
    apiKey: "YOUR_RECAPTCHA_KEY", 
    baseURL: URL(string: "YOUR_RECAPTCHA_DOMAIN")!
)

...

You can also install the reactive subpod and use it with RxSwift:

recaptcha.rx.validate(on: view)
    .subscribe(onNext: { (token: String) in
        // Do something
    })

Alternte endpoint

If your app has firewall limitations that may be blocking Google's API, the JS endpoint may be changed on initialization. It'll then point to https://www.recaptcha.net/recaptcha/api.js:

public enum Endpoint {
    case default, alternate
}

let recaptcha = try? ReCaptcha(endpoint: .alternate) // Defaults to `default` when unset

Help Wanted

Do you love ReCaptcha and work actively on apps that use it? We'd love if you could help us keep improving it! Feel free to message us or to start contributing right away!

Full Documentation

License

ReCaptcha is available under the MIT license. See the LICENSE file for more info.

Comments
  • JavaScript Exception

    JavaScript Exception

    I got this exception most of the times when I run the app on device, and sometimes on simulator. I can not find the root cause. Any idea?

    Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo={WKJavaScriptExceptionLineNumber=11, WKJavaScriptExceptionMessage=TypeError: Argument 1 ('target') to MutationObserver.observe must be an instance of Node, WKJavaScriptExceptionSourceURL=http://localhost/, NSLocalizedDescription=A JavaScript exception occurred, WKJavaScriptExceptionColumnNumber=13}))

    bug released 
    opened by kasraqq 18
  • No callback from ReCaptcha

    No callback from ReCaptcha

    Hi, Currently we are using this library for Google ReCaptcha in apps, for now in development state. While this library was integrated for long time and just now ( like week ago ) we started to have issues with this library. I thought that this was fault of our code / configuration, but after debugging i found that in some cases user is stuck on sign in / sign up because of no response from ReCaptcha library.

    our "sign up" flow:

    • type credentials
    • get recaptcha token
    • send recaptcha token along with credentials to API

    To Reproduce

    • try to use wrong password to be able to invoke captcha multiple times
    • repeat until you get following log from webview:

    #CAPTCHA LOG: "["log": did load]" "["log": executing]" "["log": resetting]"

    • then completion block will not be called

    Bug description

    Since there is no completion block, app will wait for ReCaptcha result infinitely

    Expected behavior

    Library always respond with callback ( either error / token / challange )

    Logs

    responses from webview ( ReCaptchaDecoder::handle )

     "[\"log\": did load]"
     "[\"log\": executing]"
     "[\"log\": resetting]"
    

    Additional context

    I noticed that this issue more often occurs on real devices rather than on simulators device i used for debugging: iPhone 7 with iOS 12.1.4

    I also tried to find documentation for ReCaptcha and the things you've implemented, but i couldn't find them. Could you share some links in response? (this official link is not sufficient for me, there is no information about statuses)

    bug released 
    opened by Przemyslaw-Wosko 14
  • Validate completion executes more than once; every 120 seconds.

    Validate completion executes more than once; every 120 seconds.

    I call validate(on: view, completion: completion). If I sit there (pretend the user is slow/reading something) the completion continuously calls about every 120 seconds, or, eventually the captcha dialog (img selection) shows up.

    ReCaptcha v1.1

    bug released 
    opened by MaximusMcCann 11
  • Javascript exception occurred

    Javascript exception occurred

    ReCaptchaDomain is http://localhost/, but at validate the webview is interrupted with a Javascript exception expecting ReCaptchaDomain in the html?

    Unexpected Error: Error Domain=WKErrorDomain Code=4 \"A JavaScript exception occurred\"
    UserInfo={WKJavaScriptExceptionLineNumber=24, WKJavaScriptExceptionMessage=TypeError:
    Argument 1 (\'target\') to MutationObserver.observe must be an instance of Node,
    WKJavaScriptExceptionColumnNumber=13, WKJavaScriptExceptionSourceURL=http://localhost/,
    NSLocalizedDescription=A JavaScript exception occurred}"
    
    bug released 
    opened by elodd 10
  • hiding recaptcha webview after completing the challenge?

    hiding recaptcha webview after completing the challenge?

    I am having some problems figuring out how can I hide the webview after displaying the challenge, my code is

    recaptcha.validate(on: view) { [weak self] result in
           //some logic here (no recaptcha api calls)
    }
    

    after completing the challenge, the puzzle itself disappears, but a blank white screen is all that's left, do I have to hide the webview somehow after completing the challenge?

    thanks for the great effort you put in this library

    question 
    opened by ebeem 10
  • Validate method does not work

    Validate method does not work

    Hello I am using ReCaptcha v1.3.1 and my validate calling has no effect.

    Steps to reproduce:

    1. In didLoad I create my ReCaptcha instance in Controller
    2. Call validate method
    3. Don't see a WebView widget with google recaptcha quiz

    Also I noticed that if I comment this if statement it works properly. With this modification I see Recaptcha widget on the screen and also get a response token in success callback. So debug tells me that didFinishLoading of ReCaptchaWebViewManager instance equals false and it returns immediately from the execute method.

    Could you help me with this?

    Thank a lot for lib.

    bug 
    opened by nbob 9
  • Updates to support Swift 4.2.

    Updates to support Swift 4.2.

    There are a few errors that are thrown when trying to compile against Swift 4.2 so I made some fixes. I doubt you want the changes to go in to target the Swift 4.2 version so let me know how to proceed with any changes necessary.

    released 
    opened by manderson420 9
  • WebView doesn't show up in the app

    WebView doesn't show up in the app

    Hi, I have installed pod "ReCaptcha" and follow your usage description but when i run app and click a button, the Webview doesn't show up. This is my code, please give a look and tell me what is wrong. Thank you.

    class ConfirmViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
        // Outlets
        @IBOutlet weak var btnReceivedPlace: UIButton!
        @IBOutlet weak var stackView: UIStackView!
        @IBOutlet weak var pickerReceivedPlace: UIPickerView!
        
        // Varibles
        var receivedPlacePosition: Int = 0
        fileprivate let recaptcha = try! ReCaptcha()
        fileprivate static let webViewTag = 123
        
        override func viewDidLoad() {
            super.viewDidLoad()
            pickerReceivedPlace.dataSource = self
            pickerReceivedPlace.delegate = self
            
            recaptcha.configureWebView { [weak self] webview in
                webview.frame = self?.view.bounds ?? CGRect.zero
                webview.tag = ConfirmViewController.webViewTag
            }
        }
        
        @available(iOS 2.0, *)
        func numberOfComponents(in pickerView: UIPickerView) -> Int {
            return 1
        }
        
        func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
            return receivedPlaceArr.count
        }
        
        func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
            return receivedPlaceArr.count
        }
        
        func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
            var label = view as! UILabel!
            
            if label == nil {
                label = UILabel()
            }
            let data = receivedPlaceArr[row]
            let title = NSAttributedString(string: data, attributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: 14.0, weight: UIFont.Weight.regular)])
            label?.attributedText = title
            label?.textAlignment = .center
            return label!
        }
        
        func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
            btnReceivedPlace.setTitle(receivedPlaceArr[row], for: .normal)
            pickerReceivedPlace.isHidden = true
        }
        
        @IBAction func btnReceivedPlaceClick(_ sender: Any) {
            pickerReceivedPlace.isHidden = false
        }
        
        @IBAction func btnCaptchaClick(_ sender: Any) {
            print("btnCaptcha clicked")
            
            recaptcha.validate(on: view) { (result) in
                print(try! result.dematerialize())
            }
        }
        
        func saveInfo() -> Confirm {
            return Confirm(receivedPlaceId: "\(receivedPlacePosition)")
        }
    

    I make a view like that and when clicking on I'm not robot image I will call validate. screen shot 2017-07-13 at 4 33 57 pm

    invalid waiting-reply 
    opened by lamhuynh96 9
  • White page on offline validation

    White page on offline validation

    Hi, I'd like to ask if it is possible to remove recaptcha web view even if the validation does not return a token. In my particular case, before pressing 'verify' button I turned off my connectivity. The result is a white screen which is impossible to remove.

    Thanks for the support,

    Andrea

    bug 
    opened by andrewcookies 8
  • Javascript Exception

    Javascript Exception

    This is still broken on version 1.0.1 for us. iOS 11.0 iPhone 6 device. This ONLY seems to be an issue on iOS 11.0 so far; not on any minor/major revisions after it. We are getting the following error from the ReCaptcha library: Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo={WKJavaScriptExceptionLineNumber=16, WKJavaScriptExceptionMessage=TypeError: undefined is not an object (evaluating 'document.getElementsByTagName("div")[4].outerHTML = ""'), WKJavaScriptExceptionColumnNumber=44, WKJavaScriptExceptionSourceURL=https://ourdomain.com/, NSLocalizedDescription=A JavaScript exception occurred}

    The curious thing is that this causes an exception every other time we kick off the ReCaptcha webview flow. The following time we get a successful result. Any ideas?

    Update: As mentioned from @fjcaetano: that seems to be a different error. It appears to have been introduced with 78fa352, since it fails on getElementsByTagName("div")[4].

    Could you open a new issue so we can address this?

    Also, as a workaround, could you try removing that line from recaptcha.html to check if the issue stops?

    crash released 
    opened by manderson420 8
  • Validate doesn't respond if it's called second time

    Validate doesn't respond if it's called second time

    If I call the validate function for the second time it doesn't respond, the log only says [JS LOG]: executing and the completion is not called waiting forever.

    The bug can be reproduce in the "Example" project also, tapping validate button first time works but not the second time.

    bug released 
    opened by hamdshah 7
  • Skipped installing ReCaptcha binary due to Incompatible Swift version

    Skipped installing ReCaptcha binary due to Incompatible Swift version

    Hi, I am updating the ReCaptcha framework by using Carthage. I have taken latest version 1.6.0 but while update it I got following error

    Skipped installing ReCaptcha binary due to the error: "Incompatible Swift version - framework was built with 5.3 (swiftlang-1200.0.29.2 clang-1200.0.30.1) and the local version is 5.7.1 (swiftlang-5.7.1.135.3 clang-1400.0.29.51)."

    Using Xcode version is 14.1

    Anyone having this problem?

    opened by pradipdesaifc 0
  • Change Widget WebView Frame, is it Possible ?

    Change Widget WebView Frame, is it Possible ?

    I'm using ReCaptcha v2 Invisible keys! In my application I'm adding webview inside my custom view and then after getting token just removing it from my custom view and hiding the custom view.

    My question is I want to change frame of widget screen of ReCaptcha(challenge selection) which is being shown within webview, plus needed to be transparent webview so background base view controller can be visible.

    is it possible ?

    Thank you.

    question missing-template 
    opened by hinaHingrajia 1
  • chore(deps): bump tzinfo from 1.2.9 to 1.2.10

    chore(deps): bump tzinfo from 1.2.9 to 1.2.10

    Bumps tzinfo from 1.2.9 to 1.2.10.

    Release notes

    Sourced from tzinfo's releases.

    v1.2.10

    TZInfo v1.2.10 on RubyGems.org

    Changelog

    Sourced from tzinfo's changelog.

    Version 1.2.10 - 19-Jul-2022

    Commits
    • 0814dcd Fix the release date.
    • fd05e2a Preparing v1.2.10.
    • b98c32e Merge branch 'fix-directory-traversal-1.2' into 1.2
    • ac3ee68 Remove unnecessary escaping of + within regex character classes.
    • 9d49bf9 Fix relative path loading tests.
    • 394c381 Remove private_constant for consistency and compatibility.
    • 5e9f990 Exclude Arch Linux's SECURITY file from the time zone index.
    • 17fc9e1 Workaround for 'Permission denied - NUL' errors with JRuby on Windows.
    • 6bd7a51 Update copyright years.
    • 9905ca9 Fix directory traversal in Timezone.get when using Ruby data source
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • chore(deps): bump jmespath from 1.4.0 to 1.6.1

    chore(deps): bump jmespath from 1.4.0 to 1.6.1

    Bumps jmespath from 1.4.0 to 1.6.1.

    Release notes

    Sourced from jmespath's releases.

    Release v1.6.1 - 2022-03-07

    • Issue - Use JSON.parse instead of JSON.load.

    Release v1.6.0 - 2022-02-14

    • Feature - Add support for string comparissons.

    Release v1.5.0 - 2022-01-10

    • Support implicitly convertible objects/duck-type values responding to to_hash and to_ary.

      [See related GitHub pull request #51](jmespath/jmespath.rb#51).

    Changelog

    Sourced from jmespath's changelog.

    1.6.1 (2022-03-07)

    • Issue - Use JSON.parse instead of JSON.load.

    1.6.0 (2022-02-14)

    • Feature - Add support for string comparisons.

    1.5.0 (2022-01-10)

    • Support implicitly convertible objects/duck-type values responding to to_hash and to_ary.

      [See related GitHub pull request #51](jmespath/jmespath.rb#51).

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • chore(deps): bump cocoapods-downloader from 1.4.0 to 1.6.3

    chore(deps): bump cocoapods-downloader from 1.4.0 to 1.6.3

    Bumps cocoapods-downloader from 1.4.0 to 1.6.3.

    Release notes

    Sourced from cocoapods-downloader's releases.

    1.6.3

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.2

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.1

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.0

    Enhancements
    • None.
    Bug Fixes
    • Adds a check for command injections in the input for hg and git.
      orta #124

    1.5.1

    Enhancements
    • None.
    Bug Fixes
    • Fix "can't modify frozen string" errors when pods are integrated using the branch option
      buju77 #10920

    1.5.0

    ... (truncated)

    Changelog

    Sourced from cocoapods-downloader's changelog.

    1.6.3 (2022-04-01)

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.2 (2022-03-28)

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.1 (2022-03-23)

    Enhancements
    • None.
    Bug Fixes
    • None.

    1.6.0 (2022-03-22)

    Enhancements
    • None.
    Bug Fixes
    • Adds a check for command injections in the input for hg and git.
      orta #124

    1.5.1 (2021-09-07)

    Enhancements
    • None.

    ... (truncated)

    Commits
    • c03e2ed Release 1.6.3
    • f75bccc Disable Bazaar tests due to macOS 12.3 not including python2
    • 52a0d54 Merge pull request #128 from CocoaPods/validate_before_dl
    • d27c983 Ensure that the git pre-processor doesn't accidentally bail also
    • 3adfe1f [CHANGELOG] Add empty Master section
    • 591167a Release 1.6.2
    • d2564c3 Merge pull request #127 from CocoaPods/validate_before_dl
    • 99fec61 Switches where we check for invalid input, to move it inside the download fun...
    • 96679f2 [CHANGELOG] Add empty Master section
    • 3a7c54b Release 1.6.1
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • reCaptcha not working for iOS 15.1.1

    reCaptcha not working for iOS 15.1.1

    Bug description

    As the title says, the reCaptcha won't load on iOS 15.1.1 with and iPhone 13 pro. To be more specific, when performing the validate method, the webview wont appear above the current view.

    I followed the path, and before the executeJS method is called, the webview must be set to visible, but this do not happen. So because of this, the webview never appears and the validate won't throw any errors.

    This bug don't happened on older versions, like iOS 14.6 or lesser.

    To Reproduce

    Run on iPhone 13 Pro - iOS15.1.1

    Steps to reproduce the behavior:

    1. Setup the reCaptcha
    let recaptcha = try? ReCaptcha(
        apiKey: Constants.captchaKey,
        baseURL: URL(string: Constants.captchaURL)!,
        endpoint: .alternate
    )
    
    1. Configure the reCaptcha
    recaptcha?.configureWebView { [weak self] webview in
        webview.frame = self?.view.bounds ?? CGRect.zero
    }
    
    1. Validate
    recaptcha?.validate(on: view) { [weak self] (result: ReCaptchaResult) in
        // the callback will never be called
    }
    

    Expected behavior

    The expected behavior should be the same as the older versions, to add the webview to the current view and show the captcha images.

    Logs

    The reCaptcha library don't throws any errors.

    Additional context

    We are using the .alternate endpoint but the error is present regardless if is .default or .alternate

    opened by davo156 4
Releases(1.6.0)
A simple project for Face ID Authentication for iOS device using LocalAuthentication Framework

BiometricAuthentication This respository is a simple project for Face ID Authentication for iOS device using LocalAuthentication Framework and infoPli

Lee McCormick 0 Oct 23, 2021
SFA: Swift Firebase Auth Project✨

SFAssets SFA: Swift Firebase Auth Project✨ 파이어베이스로 로그인/회원가입 뿌수기 Login View (로그인 뷰) 담당 기능 배정 Facebook Login 후릐 Google Login 태끼 Apple Login 이준초이 Github

null 6 Nov 7, 2021
A simple way to implement Facebook and Google login in your iOS apps.

Simplicity Simplicity is a simple way to implement Facebook and Google login in your iOS apps. Simplicity can be easily extended to support other exte

Simplicity Mobile 681 Dec 18, 2022
A quick and simple way to authenticate an Instagram user in your iPhone or iPad app.

InstagramSimpleOAuth A quick and simple way to authenticate an Instagram user in your iPhone or iPad app. Adding InstagramSimpleOAuth to your project

Ryan Baumbach 90 Aug 20, 2022
A quick and simple way to authenticate a Dropbox user in your iPhone or iPad app.

DropboxSimpleOAuth A quick and simple way to authenticate a Dropbox user in your iPhone or iPad app. Adding DropboxSimpleOAuth to your project CocoaPo

Ryan Baumbach 42 Dec 29, 2021
A quick and simple way to authenticate a Box user in your iPhone or iPad app.

BoxSimpleOAuth A quick and simple way to authenticate a Box user in your iPhone or iPad app. Adding BoxSimpleOAuth to your project CocoaPods CocoaPods

Ryan Baumbach 15 Mar 10, 2021
Krypton turns your iOS device into a WebAuthn/U2F Authenticator: strong, unphishable 2FA.

Krypton turns your iOS device into a WebAuthn/U2F Authenticator: strong, unphishable 2FA. Krypton implements the standardized FIDO Universal 2nd Facto

krypt.co 332 Nov 5, 2022
Windless makes it easy to implement invisible layout loading view.

Windless Windless makes it easy to implement invisible layout loading view. Contents Requirements Installation Usage Looks Credits Communication Licen

ArLupin 940 Dec 22, 2022
Windless makes it easy to implement invisible layout loading view.

Windless Windless makes it easy to implement invisible layout loading view. Contents Requirements Installation Usage Looks Credits Communication Licen

ArLupin 940 Dec 22, 2022
Tutorials from sparrowcode.io website. You can add new, translate or fix typos. Also you can add your apps from App Store for free.

Tutorials from sparrowcode.io website. You can add new, translate or fix typos. Also you can add your apps from App Store for free.

Sparrow Code 31 Jan 3, 2023
Add to-do List - a mobile application where you can add your to-dos and follow them

This project, is a mobile application where you can add your to-dos and follow them. You can add your to-do's.

Cem 4 Apr 1, 2022
Tutorials from sparrowcode.io website. You can add new, translate or fix typos. Also you can add your apps from App Store for free.

Страницы доступны на sparrowcode.io/en & sparrowcode.io/ru Как добавить свое приложение Добавьте элемент в json /ru/apps/apps.json. Если ваше приложен

Sparrow Code 30 Nov 25, 2022
A blog project where you can write your articles, upload photos, categorize them, and add them to your favorites

A blog project where you can write your articles, upload photos, categorize them, and add them to your favorites. The aim of the project is to learn the use of Core Data.

Cem 7 Mar 21, 2022
Easily add vertical and horizontal pull to refresh to any UIScrollView. Can also add multiple pull-to-refesh views at once.

This is a fork from the famous SVPullToRefresh pod with 2 additional functionalities: Can add multiple pull-to-refresh views into one single UIScrollV

Hoang Tran 42 Dec 28, 2022
Simple side/slide menu control for iOS, no code necessary! Lots of customization. Add it to your project in 5 minutes or less.

▤ SideMenu If you like SideMenu, give it a ★ at the top right of this page. SideMenu needs your help! If you're a skilled iOS developer and want to he

Jon Kent 5.4k Dec 29, 2022
Swift Library based on AVFoundation that allow to easily add camera feature with custom UI into your project.

Would you like to create your camera same as Snapchat or Instagram? I think this library could help you. Basicly it is a wrapper above AVFoundation th

Taras Chernyshenko 14 Sep 21, 2022
This project will add a done button on your UITextField and UITextView

This project will add a done button on your UITextField and UITextView

Botla Venkatesh 0 Nov 23, 2021
This project will add done button on TexField and TextViews by just turning on from storyboard.

RTDoneKeyboard Example To run the example project, clone the repo, and run pod install from the Example directory first. Requirements Installation RTD

Rahul Tiwari 0 Oct 29, 2021
Don't start from scratch, start from Here! This is a starter project for iOS projects. It contains all the basic configurations and common libraries for your project.

Starter-iOS Don't start from scratch, start from Here! This is a starter project for iOS projects. It contains all the basic configurations and common

Shaban Kamel 6 May 24, 2022
LoginKit is a quick and easy way to add Facebook and email Login/Signup UI to your app.

LoginKit About LoginKit is a quick and easy way to add Facebook and email Login/Signup UI to your app. If you need to quickly prototype an app, create

Icalia Labs 653 Dec 17, 2022