https://console.firebase.google.com/
ContentView.swift
// // ContentView.swift // DevSwiftUI // // Created by Cairocoders // import SwiftUI import Firebase import FirebaseStorage struct ContentView: View { @State var email = "" @State var password = "" @State var StatusMessage = "" @State var shouldShowImagePicker = false @State var image: UIImage? var body: some View { NavigationView { ScrollView { VStack(spacing: 16) { Text("Create Account") Button { shouldShowImagePicker.toggle() } label: { VStack { if let image = self.image { Image(uiImage: image) .resizable() .scaledToFill() .frame(width: 128, height: 128) .cornerRadius(64) } else { Image(systemName: "person.fill") .font(.system(size: 64)) .padding() .foregroundColor(Color(.label)) } } .overlay(RoundedRectangle(cornerRadius: 64) .stroke(Color.black, lineWidth: 3) ) } Group { TextField("Email", text: $email) .keyboardType(.emailAddress) .autocapitalization(.none) SecureField("Password", text: $password) } .padding(12) .background(Color.white) .cornerRadius(10) Button { handleAction() } label: { HStack { Spacer() Text("Create Account") .foregroundColor(.white) .padding(.vertical, 10) .font(.system(size: 14, weight: .semibold)) Spacer() }.background(Color.blue) }.cornerRadius(10) Text(self.StatusMessage) } .padding() } .navigationViewStyle(StackNavigationViewStyle()) .fullScreenCover(isPresented: $shouldShowImagePicker, onDismiss: nil) { ImagePicker(image: $image) .ignoresSafeArea() } .background( LinearGradient(gradient: Gradient(colors: [.orange, .gray]), startPoint: .top, endPoint: .bottom) .edgesIgnoringSafeArea(.all)) } } private func handleAction() { createNewAccount() } private func createNewAccount() { Auth.auth().createUser(withEmail: email, password: password) { result, err in if let err = err { print("Failed to create user:", err) self.StatusMessage = "Failed to create user: \(err)" return } print("Successfully created user: \(result?.user.uid ?? "")") self.StatusMessage = "Successfully created user: \(result?.user.uid ?? "")" self.persistImageToStorage() } } private func persistImageToStorage() { guard let uid = Auth.auth().currentUser?.uid else { return } let ref = Storage.storage().reference(withPath: uid) guard let imageData = self.image?.jpegData(compressionQuality: 0.5) else { return } ref.putData(imageData, metadata: nil) { metadata, err in if let err = err { self.StatusMessage = "Failed to push image to Storage: \(err)" return } ref.downloadURL { url, err in if let err = err { self.StatusMessage = "Failed to retrieve downloadURL: \(err)" return } self.StatusMessage = "Successfully stored image with url: \(url?.absoluteString ?? "")" print(url?.absoluteString) } } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }ImagePicker.swift
// // ImagePicker.swift // DevSwiftUI // // Created by Cairocoders // import SwiftUI struct ImagePicker: UIViewControllerRepresentable { @Binding var image: UIImage? private let controller = UIImagePickerController() func makeCoordinator() -> Coordinator { return Coordinator(parent: self) } class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate { let parent: ImagePicker init(parent: ImagePicker) { self.parent = parent } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { parent.image = info[.originalImage] as? UIImage picker.dismiss(animated: true) } func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { picker.dismiss(animated: true) } } func makeUIViewController(context: Context) -> some UIViewController { controller.delegate = context.coordinator return controller } func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) { } }DevSwiftUIApp.swift
// // DevSwiftUIApp.swift // DevSwiftUI // // Created by Cairocoders // import SwiftUI import Firebase @main struct DevSwiftUIApp: App { @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { ContentView() } } } class AppDelegate: NSObject,UIApplicationDelegate{ func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { FirebaseApp.configure() return true } }