{"id":28362782,"url":"https://github.com/cashoefman/fuap","last_synced_at":"2025-07-26T22:37:19.390Z","repository":{"id":297234523,"uuid":"988030040","full_name":"cashoefman/fuap","owner":"cashoefman","description":"FUAP (\"Firebase User Authentication Project\") is an iOS application demonstrating robust and privacy-compliant user authentication using Firebase.","archived":false,"fork":false,"pushed_at":"2025-05-22T00:33:50.000Z","size":232,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-22T19:40:22.941Z","etag":null,"topics":["apple","authentication","firebase","ios","iphone","login","swift","swiftui","xcode"],"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/cashoefman.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":"docs/support/Support_and_Troubleshooting_Guides.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-22T00:32:28.000Z","updated_at":"2025-05-22T00:35:23.000Z","dependencies_parsed_at":"2025-06-04T20:31:08.409Z","dependency_job_id":"bf051f3a-e3aa-4b4d-b159-03b47fe5fa67","html_url":"https://github.com/cashoefman/fuap","commit_stats":null,"previous_names":["cashoefman/fuap"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cashoefman/fuap","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cashoefman%2Ffuap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cashoefman%2Ffuap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cashoefman%2Ffuap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cashoefman%2Ffuap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cashoefman","download_url":"https://codeload.github.com/cashoefman/fuap/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cashoefman%2Ffuap/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265798513,"owners_count":23829954,"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":["apple","authentication","firebase","ios","iphone","login","swift","swiftui","xcode"],"created_at":"2025-05-28T15:10:37.048Z","updated_at":"2025-07-18T17:07:04.815Z","avatar_url":"https://github.com/cashoefman.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# FUAP iOS App\n\nFUAP (\"Firebase User Authentication Project\") is an iOS application demonstrating robust and privacy-compliant user authentication using Firebase. The project leverages Swift, SwiftUI, Combine, and Firebase Authentication (Magic Links and Password Authentication), along with Firestore for user profile management.\n\n**Note:** An Android version of FUAP is currently under active development.\n\n## 🚀 Key Features\n\n- **Magic Link Authentication:** Users can sign in seamlessly via email without needing a password.\n- **Email/Password Authentication:** Optional traditional authentication with password management.\n- **Dynamic User Onboarding:** Automatically detects new users, prompting them for name details and creating a profile dynamically.\n- **Firebase Firestore Integration:** User profiles are securely managed using Firestore.\n- **Clean Architecture (MVVM):** Clearly separated ViewModels and Views with Combine for reactive event handling.\n\n## 📱 App Flow Overview\n\n1. **Welcome Screen:**  \n   - Users enter their email.\n   - App checks Firestore for existing user status:\n     - Existing user with password: prompted to enter password.\n     - Existing user without password: magic link sent automatically.\n     - New users: prompted for name entry, then sent a magic link.\n\n2. **Magic Link Authentication:**  \n   - Users click on a magic link sent via email.\n   - App handles deep link to authenticate and signs in the user.\n   - New user profiles are created on-the-fly in Firestore.\n\n3. **User Profile:**  \n   - Displays user details (name, email, bio).\n   - Allows profile editing and optional password setting.\n   - Users can securely log out at any time.\n\n## 🛠️ Technical Stack\n\n- **Swift \u0026 SwiftUI:** Modern declarative UI development.\n- **Firebase Authentication:** Magic link (email link) and password sign-in support.\n- **Firestore:** Persistent storage of user profiles.\n- **Combine:** Reactive programming for state management.\n- **Swift Concurrency:** Async/Await for clear asynchronous operations.\n\n## 📁 Project Structure\n\n```\nsrc/ios/fuap/\n├── AppCoordinator.swift        # Handles app-wide routing and deep link management.\n├── FUAPApp.swift               # Entry point, Firebase setup, root view injection.\n├── RootView.swift              # Main navigation container.\n├── ViewModels/                 # MVVM ViewModels handling logic and Firebase interactions.\n│   ├── WelcomeViewModel.swift\n│   ├── PasswordEntryViewModel.swift\n│   ├── NameEntryViewModel.swift\n│   └── ProfileViewModel.swift\n├── Views/                      # SwiftUI Views representing UI screens.\n│   ├── WelcomeView.swift\n│   ├── PasswordEntryView.swift\n│   ├── NameEntryView.swift\n│   ├── MagicLinkSentView.swift\n│   ├── ProfileView.swift\n│   └── ProfileEditView.swift\n└── Assets.xcassets             # App icons and color assets\n```\n\n## 🧑‍💻 Getting Started\n\n1. **Clone the repository:**\n\n```bash\ngit clone \u003crepository-url\u003e\ncd src/ios/fuap\n```\n\n2. **Install dependencies:**\n\n- Configure your Firebase project.\n- Replace `GoogleService-Info.plist` with your own Firebase configuration file.\n\n3. **Open \u0026 Run Project:**\n\n- Open `fuap.xcodeproj` with Xcode 16.3+.\n- Build and run the app on an iOS 18+ device or simulator.\n\n## 🔗 Firebase Configuration\n\n- Ensure Firebase Authentication has Email/Password and Email Link sign-in enabled.\n- Set Firestore security rules to protect user data appropriately.\n\nExample rules for Firestore security:\n```javascript\nmatch /users/{uid} {\n  allow read, write: if request.auth.uid == uid;\n}\n```\n\n## 📌 Important Notes\n\n- **Privacy Compliance:** Uses Firestore explicitly for user identification, avoiding deprecated Firebase methods affected by Email Enumeration Protection.\n- **Debugging:** Comprehensive logging statements are included to ease debugging and provide clarity during development.\n\n## 📃 License\n\nThis project is available under the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcashoefman%2Ffuap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcashoefman%2Ffuap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcashoefman%2Ffuap/lists"}