{"id":31558007,"url":"https://github.com/tsotannde/simplifiedauthkit","last_synced_at":"2026-04-17T13:33:11.329Z","repository":{"id":314676730,"uuid":"1056376567","full_name":"tsotannde/SimplifiedAuthKit","owner":"tsotannde","description":"SimplifiedAuthKit","archived":false,"fork":false,"pushed_at":"2025-09-14T02:49:23.000Z","size":7,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-14T03:07:24.256Z","etag":null,"topics":["apple-signin","auth-kit","authentication","authentication-library","developer-tools","firebase","firebase-auth","firebase-authentication","google-auth","google-signin","ios","ios-library","ios-swift","login","spm","swift","swift-package"],"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/tsotannde.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-14T00:41:04.000Z","updated_at":"2025-09-14T02:49:26.000Z","dependencies_parsed_at":"2025-09-14T03:17:27.548Z","dependency_job_id":null,"html_url":"https://github.com/tsotannde/SimplifiedAuthKit","commit_stats":null,"previous_names":["tsotannde/simplifiedauthkit"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/tsotannde/SimplifiedAuthKit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsotannde%2FSimplifiedAuthKit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsotannde%2FSimplifiedAuthKit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsotannde%2FSimplifiedAuthKit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsotannde%2FSimplifiedAuthKit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tsotannde","download_url":"https://codeload.github.com/tsotannde/SimplifiedAuthKit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsotannde%2FSimplifiedAuthKit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278391404,"owners_count":25978983,"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","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["apple-signin","auth-kit","authentication","authentication-library","developer-tools","firebase","firebase-auth","firebase-authentication","google-auth","google-signin","ios","ios-library","ios-swift","login","spm","swift","swift-package"],"created_at":"2025-10-05T00:10:58.296Z","updated_at":"2026-04-17T13:33:11.317Z","avatar_url":"https://github.com/tsotannde.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/License-MIT-green?style=for-the-badge\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Swift-5.9_5.10_5.11-orange?style=for-the-badge\u0026logo=swift\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Platforms-iOS_14+-blue?style=for-the-badge\u0026logo=apple\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Firebase-Auth-yellow?style=for-the-badge\u0026logo=firebase\" /\u003e\n\u003c/p\u003e\n\n\u003ch2 align=\"center\"\u003eSimplifiedAuthKit\u003c/h2\u003e\n\u003ch4 align=\"center\"\u003eA lightweight Swift package that makes Firebase Authentication easier — Google \u0026 Apple Sign-In with minimal boilerplate.\u003c/h4\u003e\n\n---\n## ✨ Why SimplifiedAuthKit?\n\nFirebase Authentication usually requires a lot of setup:\n\n- Configuring Firebase\n- Generating and hashing nonces for Apple\n- Constructing OAuth credentials\n- Handling delegate callbacks\n- Creating sign-in buttons\n- Validating Info.plist URL schemes\n- Logging and debugging\n\nSimplifiedAuthKit wraps that into:\n\n- **One call to sign in**\n- **One call to create provider-specific buttons**  [oai_citation:0‡authkit.txt](sediment://file_00000000c35871f591b4871b4270b8f4)\n\n---\n\n## 🚀 Features\n\n### Authentication Providers\n\n| Provider | Status | Notes |\n|---------|--------|-------|\n| 🍎 **Sign in with Apple** | ✅ Implemented | Nonce generation, SHA256, Firebase OAuth |\n| 🔵 **Sign in with Google** | ✅ Implemented | Validates reversed client ID URL scheme |\n| 🔒 **Anonymous** | ⏳ Planned | |\n| 🟣 **Email / Password** | ⏳ Planned | |\n\n---\n\n## 📦 Installation (Swift Package Manager)\n\n1. In Xcode, go to **File → Add Packages…**\n2. Enter the package URL:\n\n   ```swift\n   https://github.com/tsotnande/SimplifiedAuthKit.git\n```\n3.\tAdd the package to your app target.\n\n⸻\n\n⚙️ Required Setup\n\n1. Firebase iOS Setup\n\t1.\tCreate a Firebase project and add an iOS app.\n\t2.\tDownload GoogleService-Info.plist from the Firebase console.\n\t3.\tAdd GoogleService-Info.plist to your Xcode project:\n\t•\tDrag it into the project navigator.\n\t•\tMake sure it is included in your app’s main target.\n\nYou can either:\n\t•\tCall FirebaseApp.configure() yourself in AppDelegate, or\n\t•\tLet SimplifiedAuthKit auto-configure Firebase using GoogleService-Info.plist when you call sign-in.\n\n⸻\n\n2. Enable Providers in Firebase Console\n\nIn the Firebase Console:\n\t1.\tGo to Authentication → Sign-in method.\n\t2.\tEnable the providers you plan to use:\n\t•\tGoogle\n\t•\tApple\n\nFollow the on-screen instructions for each provider (bundle ID, service ID, etc.).\n\n⸻\n\n3. iOS Configuration for Google Sign-In\n\t1.\tOpen GoogleService-Info.plist.\n\t2.\tCopy the value of REVERSED_CLIENT_ID.\n\t3.\tIn Xcode:\n\t•\tSelect your app target → Info → URL Types.\n\t•\tAdd a new URL Type.\n\t•\tPaste the REVERSED_CLIENT_ID into URL Schemes.\n\t•\tLeave the other fields blank.\n\nSimplifiedAuthKit performs a runtime check and will log a clear error if this URL scheme is missing.\n\n⸻\n\n4. iOS Configuration for Sign in with Apple (Optional)\n\nIf you plan to use .apple:\n\t1.\tIn Xcode, select your app target → Signing \u0026 Capabilities.\n\t2.\tClick “+ Capability” and add “Sign in with Apple”.\n\t3.\tMake sure the app is correctly configured in your Apple Developer account for Sign in with Apple.\n\nIf you don’t use Apple Sign-In, you don’t need this capability.\n\n⸻\n\n🧑‍💻 Quick Start\n\nCreate a Button (UIKit)\n```swift\nimport SimplifiedAuthKit\n\nclass ViewController: UIViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        let googleButton = SimplifiedAuthKit.makeAuthButton(\n            for: .google,\n            color: .white,\n            adaptive: true\n        )\n\n        googleButton.addTarget(self, action: #selector(handleGoogleSignIn), for: .touchUpInside)\n        view.addSubview(googleButton)\n        // Add layout constraints here…\n    }\n\n    @objc private func handleGoogleSignIn() {\n        SimplifiedAuthKit.signIn(with: .google, from: self) { result in\n            switch result {\n            case .success(let user):\n                print(\"Signed in:\", user.email ?? \"no email\")\n            case .failure(let error):\n                print(\"Google sign-in failed:\", error.localizedDescription)\n            }\n        }\n    }\n}\n```\n**Sign in with Apple**\n\n```swift\nlet appleButton = SimplifiedAuthKit.makeAuthButton(\n    for: .apple,\n    color: .black,\n    adaptive: true\n)\n\nSimplifiedAuthKit.signIn(with: .apple, from: self) { result in\n    switch result {\n    case .success(let user):\n        print(\"Signed in with Apple:\", user.email ?? \"no email\")\n    case .failure(let error):\n        print(\"Apple sign-in failed:\", error.localizedDescription)\n    }\n}\n\n```\n⸻\n\n🔍 API Overview\n\n**Sign In**\n```swift\nSimplifiedAuthKit.signIn(  with: .google, from: viewController)\n{ result in\n    // Result\u003cSimplifiedAuthUser, Error\u003e\n}\n```\n\nCreate Provider Button\n```swift\nlet button = SimplifiedAuthKit.makeAuthButton(\n    for: .google,   // or .apple\n    color: .black,  // .black or .white\n    adaptive: true  // adapt to light/dark mode\n)\n```\nSession Helpers\n```swift\nlet isLoggedIn = SimplifiedAuthKit.isSignedIn()\nlet user = SimplifiedAuthKit.currentUser()\nlet uid = SimplifiedAuthKit.currentUserID()\nlet email = SimplifiedAuthKit.currentUserEmail()\nlet photoURL = SimplifiedAuthKit.currentUserPhotoURL()\n\n_ = SimplifiedAuthKit.signOut()\n\nObserve Auth Changes\n```swift\nSimplifiedAuthKit.observeAuthChanges { user in\n    if let user = user {\n        print(\"User signed in:\", user.email ?? \"\")\n    } else {\n        print(\"User signed out\")\n    }\n}\n```\n\n⸻\n\n🧪 Logging\n```swift\nYou can control how noisy logging is:\n```swift\nSimplifiedAuthKitLogger.level = .info     // default\n// .warning\n// .error\n// .none\n```\n\n⸻\n\n📄 License - MIT license.\n\n⸻\n\nAuthor - Adebayo Sotannde\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftsotannde%2Fsimplifiedauthkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftsotannde%2Fsimplifiedauthkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftsotannde%2Fsimplifiedauthkit/lists"}