{"id":19195909,"url":"https://github.com/mercari/qrscanner","last_synced_at":"2025-04-05T03:11:16.520Z","repository":{"id":35909617,"uuid":"219895822","full_name":"mercari/QRScanner","owner":"mercari","description":"A simple QR Code scanner framework for iOS. Provides a similar scan effect to ios13+.","archived":false,"fork":false,"pushed_at":"2023-10-10T07:30:23.000Z","size":11934,"stargazers_count":324,"open_issues_count":9,"forks_count":76,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-03-28T08:47:29.011Z","etag":null,"topics":["ios","qr","qrcode","qrcode-reader","qrcode-scanner","qrscanner","swift"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mercari.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-11-06T02:33:59.000Z","updated_at":"2025-02-27T20:18:56.000Z","dependencies_parsed_at":"2024-06-18T22:46:20.278Z","dependency_job_id":"aaf32557-8431-4cf9-a983-a129c881dd7a","html_url":"https://github.com/mercari/QRScanner","commit_stats":{"total_commits":45,"total_committers":6,"mean_commits":7.5,"dds":"0.24444444444444446","last_synced_commit":"0262bf06c1f4683b6cde9ee9a72f3b720147e81c"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mercari%2FQRScanner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mercari%2FQRScanner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mercari%2FQRScanner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mercari%2FQRScanner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mercari","download_url":"https://codeload.github.com/mercari/QRScanner/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247280272,"owners_count":20912967,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ios","qr","qrcode","qrcode-reader","qrcode-scanner","qrscanner","swift"],"created_at":"2024-11-09T12:11:56.059Z","updated_at":"2025-04-05T03:11:16.493Z","avatar_url":"https://github.com/mercari.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# QRScanner\nA simple QR Code scanner framework for iOS. Provides a similar scan effect to ios13+. Written in Swift.\n\n* [日本語のブログ](https://tech.mercari.com/entry/2019/12/12/094129)\n\n|iOS 13.0+| Use QRScanner in iOS 10.0+|\n|-|-|\n|\u003cimg src=\"https://raw.githubusercontent.com/mercari/QRScanner/master/images/ios13qr.gif\" width=\"350\"\u003e|\u003cimg src=\"https://raw.githubusercontent.com/mercari/QRScanner/master/images/qr.gif\" width=\"350\"\u003e|\n\n\"QR Code\" is a registered trademark of DENSO WAVE INCORPORATED\n\n## Feature\n- Similar to iOS 13.0+ design\n- Simple usage  \u003ca href=\"https://github.com/mercari/QRScanner/blob/master/QRScannerSample/QRScannerSample/ViewController.swift\" target=\"_blank\"\u003eSample\u003c/a\u003e\n- Support from iOS 10.0+\n\n## Development Requirements\n- iOS 11.0+\n- Swift: 5.7.1\n- Xcode Version: 14.1\n\n## Installation\nQRScanner supports multiple methods for installing the library in a project.\n\n### Installation with CocoaPods\n\n- To integrate QRScanner into your Xcode project using CocoaPods, specify it in your \u003ccode\u003ePodfile\u003c/code\u003e\n```ruby\n  platform :ios, '11.0'\n  pod 'MercariQRScanner'\n```\n\n- Run command\n```\n  pod install\n```\n- Write Import statement on your source file\n```swift\n  import MercariQRScanner\n```\n\n### Installation with Swift Package Manager\n\nOnce you have your Swift package set up, adding QRScanner as a dependency is as easy as adding it to the dependencies value of your \u003ccode\u003ePackage.swift\u003c/code\u003e.\n```\ndependencies: [\n    .package(url: \"https://github.com/mercari/QRScanner.git\", .upToNextMajor(from: \"1.9.0\"))\n]\n```\n\n- Write Import statement on your source file\n```swift\nimport QRScanner\n```\n\n### Installation with Carthage\n\n- To integrate QRScanner, add the following to your \u003ccode\u003eCartfile\u003c/code\u003e.\n```\ngithub \"mercari/QRScanner\"\n```\n- Write Import statement on your source file\n```swift\nimport QRScanner\n```\n\n## Usage\n\nSee [QRScannerSample](https://github.com/mercari/QRScanner/tree/master/QRScannerSample)\n\n### Add `Privacy - Camera Usage Description` to Info.plist file\n\n\u003cimg src=\"https://raw.githubusercontent.com/mercari/QRScanner/master/images/privacy_camera.png\" width=\"500\"\u003e\n\n### The Basis Of Usage\n\n```swift\nimport QRScanner // If use the Pod way, please import MercariQRScanner\nimport AVFoundation\n\nfinal class ViewController: UIViewController {\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        setupQRScanner()\n    }\n\n    private func setupQRScanner() {\n        switch AVCaptureDevice.authorizationStatus(for: .video) {\n        case .authorized:\n            setupQRScannerView()\n        case .notDetermined:\n            AVCaptureDevice.requestAccess(for: .video) { [weak self] granted in\n                if granted {\n                    DispatchQueue.main.async { [weak self] in\n                        self?.setupQRScannerView()\n                    }\n                }\n            }\n        default:\n            showAlert()\n        }\n    }\n\n    private func setupQRScannerView() {\n        let qrScannerView = QRScannerView(frame: view.bounds)\n        view.addSubview(qrScannerView)\n        qrScannerView.configure(delegate: self, input: .init(isBlurEffectEnabled: true))\n        qrScannerView.startRunning()\n    }\n\n    private func showAlert() {\n        DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { [weak self] in\n            let alert = UIAlertController(title: \"Error\", message: \"Camera is required to use in this application\", preferredStyle: .alert)\n            alert.addAction(.init(title: \"OK\", style: .default))\n            self?.present(alert, animated: true)\n        }\n    }\n}\n\nextension ViewController: QRScannerViewDelegate {\n    func qrScannerView(_ qrScannerView: QRScannerView, didFailure error: QRScannerError) {\n        print(error)\n    }\n\n    func qrScannerView(_ qrScannerView: QRScannerView, didSuccess code: String) {\n        print(code)\n    }\n}\n```\n\n### Customization\n\n#### Source Code Way\n\n```swift\noverride func viewDidLoad() {\n        super.viewDidLoad()\n\n        let qrScannerView = QRScannerView(frame: view.bounds)\n\n        // Customize focusImage, focusImagePadding, animationDuration\n        qrScannerView.focusImage = UIImage(named: \"scan_qr_focus\")\n        qrScannerView.focusImagePadding = 8.0\n        qrScannerView.animationDuration = 0.5\n\n        qrScannerView.configure(delegate: self)\n        view.addSubview(qrScannerView)\n        qrScannerView.startRunning()\n}\n```\n\n#### Interface Builder Way\n\n|Setup Custom Class|Customize|\n|-|-|\n|\u003cimg src=\"https://raw.githubusercontent.com/mercari/QRScanner/master/images/ib2.png\" width=\"350\"\u003e|\u003cimg src=\"https://raw.githubusercontent.com/mercari/QRScanner/master/images/ib1.png\" width=\"350\"\u003e|\n\n### Add FlashButton\n\n[FlashButtonSample](https://github.com/mercari/QRScanner/blob/master/QRScannerSample/QRScannerSample/FlashButton.swift)\n\n```swift\nfinal class ViewController: UIViewController {\n\n    ...\n\n    @IBOutlet var flashButton: FlashButton!\n\n    @IBAction func tapFlashButton(_ sender: UIButton) {\n        qrScannerView.setTorchActive(isOn: !sender.isSelected)\n    }\n}\n\nextension ViewController: QRScannerViewDelegate {\n\n    ...\n\n    func qrScannerView(_ qrScannerView: QRScannerView, didChangeTorchActive isOn: Bool) {\n        flashButton.isSelected = isOn\n    }\n}\n```\n\n### Add Blur Effect\n\n#### Source Code Way\n\n```swift\n     qrScannerView.configure(delegate: self, input: .init(isBlurEffectEnabled: true))\n```\n\n#### Interface Builder Way\n\n|Customize|\n|-|\n|\u003cimg src=\"https://raw.githubusercontent.com/mercari/QRScanner/master/images/ib1.png\" width=\"350\"\u003e|\n\n## Committers\n\n* Hitsu ([@hitsubunnu](https://github.com/hitsubunnu))\n* Sonny ([@tedbrosby](https://github.com/tedbrosby))\n* Daichiro ([@daichiro](https://github.com/daichiro))\n\n## Contribution\n\nPlease read the CLA carefully before submitting your contribution to Mercari.\nUnder any circumstances, by submitting your contribution, you are deemed to accept and agree to be bound by the terms and conditions of the CLA.\n\nhttps://www.mercari.com/cla/\n\n## License\n\nCopyright 2019 Mercari, Inc.\n\nLicensed under the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmercari%2Fqrscanner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmercari%2Fqrscanner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmercari%2Fqrscanner/lists"}