Hi, my Sensei Brian and fellow readers!
After updating Swfit 4 and Firebase 5, I encountered bugs on signUpController and sharePhotoController, saying "Value of type 'StorageMetadata' has no member 'downloadURL'". because it is deprecated in Firebase 5.
I maybe found the solution for this. (not sure if this is right but the app is working)
The codes are below:
-----signupController.swift---------
@objc func handleSignup() {
guard let email = emailTextField.text, email.count > 0 else {return}
guard let username = usernameTextField.text, username.count > 0 else {return}
guard let password = passwordTextField.text, password.count > 0 else {return}
Auth.auth().createUser(withEmail: email, password: password, completion: { (user, error: Error?) in
if let err = error {
print("failed to create user", err)
return
}
print("successfully create user", user?.user.uid ?? "")
guard let image = self.plusPhotoButton.imageView?.image else {return}
guard let uploadData = image.jpegData(compressionQuality: 0.3) else {return}
let fileName = NSUUID().uuidString
Storage.storage().reference().child("profile_images").child(fileName).putData(uploadData, metadata: nil, completion: {(metadata, err) in
if let err = err {
print("failed to upload profile image:", err)
return
}
Storage.storage().reference().child("profile_images").child(fileName).downloadURL(completion: { (url, err) in
if let err = err {
print("Failed to get downloadurl", err)
return
}
guard let profileImageURL = url?.absoluteString else {return}
print("Successfully uploaded profile image", profileImageURL)
guard let uid = user?.user.uid else {return}
let disctionaryValues = ["username": username, "profileImagerl": profileImageURL]
let values = [uid: disctionaryValues]
Database.database().reference().child("users").updateChildValues(values, withCompletionBlock: { (err, ref) in
if let err = err {
print("failed to save user info into db", err)
return }
print("Successfully save user info into db")
guard let mainTabController = UIApplication.shared.keyWindow?.rootViewController as? MainTabBarController else {return}
mainTabController.setupViewControllers()
self.dismiss(animated: true, completion: nil)
})
})
})
})
}
Same logic goes to sharePhotoController.swift file
Hope this helps!