前提
ログイン機能付きの画面を作っています。
https://youtu.be/KEvA0sSpOMo
上記の動画を見ながら作っている初心者です。
FirebaseAuthの導入部分です。
環境
MacBook Air
xcode14
swift storyboard
実現したいこと
Cannot find 'Auth' in scopeを直したい
発生している問題・エラーメッセージ
Cannot find 'Auth' in scope
該当のソースコード
swift
1import UIKit 2import Firebase 3import FirebaseAnalytics 4 5class ViewController: UIViewController { 6 7 @IBOutlet weak var registerbuttom: UIButton! 8 @IBOutlet weak var emailTextField: UITextField! 9 @IBOutlet weak var passwordTextField: UITextField! 10 @IBOutlet weak var usernameTextField: UITextField! 11 12 @IBAction func renegisterbutton(_ sender: Any) { 13 handleAuthToFirebase() 14 print("renegisterbuttom") 15 } 16 private func handleAuthToFirebase() { 17 guard let email = emailTextField.text 18 guard let password = passwordTextField.text 19 20 Auth.auth().createUser(withEmail: email, password: password) { (res,err) in 21 if let err = err { 22 print("認証に失敗しました") 23 } 24 } 25 26 } 27 28 override func viewDidLoad() { 29 super.viewDidLoad() 30 31 registerbuttom.isEnabled = false 32 registerbuttom.layer.cornerRadius = 10 33 registerbuttom.backgroundColor = UIColor.rgb(red: 225, green: 221, blue: 187) 34 35 emailTextField.delegate = self 36 passwordTextField.delegate = self 37 usernameTextField.delegate = self 38 39 NotificationCenter.default.addObserver(self, selector: #selector(showKeyboard), name: UIResponder.keyboardWillShowNotification, object: nil) 40 NotificationCenter.default.addObserver(self, selector: #selector(hideKeyboard), name: UIResponder.keyboardWillHideNotification, object: nil) 41 42 } 43 44 @objc func showKeyboard(notification: Notification) { 45 let keyboardFrame = (notification.userInfo![UIResponder.keyboardFrameEndUserInfoKey] as AnyObject).cgRectValue 46 47 guard let keyboardMinY = keyboardFrame?.minY else { return } 48 let registerButtomMaxY = registerbuttom.frame.maxY 49 let deistance = registerButtomMaxY - keyboardMinY + 20 50 51 let transform = CGAffineTransform(translationX: 0, y: -deistance) 52 53 UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: [], animations: { 54 self.view.transform = transform 55 }) 56 57 //print("keyboardMinY : ", keyboardMinY, "registerButtomMaxY: ", registerButtomMaxY) 58 } 59 60 @objc func hideKeyboard() { 61 UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: [], animations: { 62 self.view.transform = .identity 63 }) 64 } 65 66 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 67 self.view.endEditing(true) 68 } 69} 70 71extension ViewController: UITextFieldDelegate { 72 73 func textFieldDidChangeSelection(_ textField: UITextField) { 74 let emailIsEmpty = emailTextField.text?.isEmpty ?? true 75 let passwordIsEmpty = passwordTextField.text?.isEmpty ?? true 76 let usernameIsEmpty = usernameTextField.text?.isEmpty ?? true 77 78 if emailIsEmpty || passwordIsEmpty || usernameIsEmpty { 79 registerbuttom.isEnabled = false 80 registerbuttom.backgroundColor = UIColor.rgb(red: 225, green: 221, blue: 187) 81 } else { 82 registerbuttom.isEnabled = true 83 registerbuttom.backgroundColor = UIColor.rgb(red: 225, green: 141, blue: 0) 84 } 85 86 87 } 88}
検証していないので動作しなかったらすみません。
参考にしている動画のコメントにある通り、以下2つのimport分を追記したら改善したりしませんでしょうか。
※"import FirebaseAnalytics"の下とかに追記する
import FirebaseAuth
import FirebaseFirestore
エラーは取り除かれるのですが、
import FirebaseAuthにエラーが発生します。
No such module 'FirebaseAuth'
と出てきます
import FirebaseAuth にエラーが出たから、以下の情報とかを参照して「import FirebaseAnalytics」に変えたとかでしょうか。
https://teratail.com/questions/btn939tp7wlxko
パッと原因が分からないので、Podファイルの内容と修正の経緯も追記して頂けると助かります。
(他の回答者さんにも情報が伝わるため)
そうですね。その情報を参照して[import FirebaseAnalytics]に変えましたね。
Podfileが自分にはあまり理解できず動画どうりにやったので、もしかしたらそこに問題があるかもしれません
podfileの中身です。
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target 'mattingapp' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for mattingapp
pod 'RealmSwift'
pod 'FirebaseAnalytics'
pod 'Firebase/Auth'
target "mattingapp" do
inherit! :search_paths
end
# Add the pods for any other Firebase products you want to use in your app
# For example, to use Firebase Authentication and Cloud Firestore
pod 'FirebaseAuth'
pod 'FirebaseFirestore'
end
追記ありがとうございました。
他に原因ありそうなものを挙げさせて頂きます。どれも対応済みだったり問題なかったらすみません。
1、プロジェクトを開く際に、拡張子が「〜.xcodeproj」ではなく「〜.xcworkspace」の方から開いてますでしょうか
2、Auth系の記述をPodファイルに記載したあと、間違いなくPod Updateしていますでしょうか
※Xcodeのプロジェクト一覧の中に、以下のフォルダがあればAuth系のライブラリが問題なく取り込まれている確認ができるのかなと思いました。
[Pods] > [Pods] > [FirebaseAuth]
1は拡張子は「〜.xcodeproj」になっていました。
2なのですがFirebaseAuthの中にPodsはありませんでした。
1ですが、Podインストールが正常に完了していると、「〜.xcworkspace」というファイルもプロジェクトフォルダ配下にあるはずです。なので、「〜.xcworkspace」からプロジェクトを開いてみてください。
もし「〜.xcworkspace」のファイルが無い様でしたら、Podインストールが完了していない可能性があります。
※動画のリンク貼っておきます(現在参考にしている動画の、ひとつ前の動画になります)
https://youtu.be/1dCGHYYYrEY?t=434
2については、"FirebaseAuthの中にPods"ではなく、"Podsの中にFirebaseAuth"となるので、階層が逆になります。必要あれば、後ほど解答欄に画像貼らせていただきます。
1はcocoapodsのインストールからやり直せばいいということでしょうか
2についてはpodsの中にFirebaseAuthはありませんでした。
今回が初めてXcodeを使うので理解できていない部分が多くすみません。
> 1はcocoapodsのインストールからやり直せばいいということでしょうか
最終確認ですが、拡張子が「〜.xcworkspace」のファイル自体無いという認識で大丈夫でしょうか?
なければ、「pod init」コマンドあたりからやり直せば大丈夫と思います。
※cocoapods自体のインストールは不要。
> 2についてはpodsの中にFirebaseAuthはありませんでした。
ということは、ライブラリがインストール出来ていないのかなと思います。
インストールできていないから、ソースコード上でエラーが出ている可能性があります。
> 今回が初めてXcodeを使うので理解できていない部分が多くすみません。
いえいえ。こちらも直ぐに解決策を出せずで申し訳ないです。
改めて動画を参照しつつ、解決できたら良いですね
動画どうりにやっているはずなのですが「pod init」と記述するとExisting Podfile found in directoryと出てきてできません。やり方を調べたのですがいまいちわかりませんでした。どうすればいいでしょうか
> 「pod init」と記述するとExisting Podfile found in directoryと出てきてできません。
上記のエラーメッセージが出てきたということは、既にPodファイルが存在するプロジェクトでやり直したってことですよね。(新規プロジェクトを作成してやり直したのではなく、途中のプロジェクトからやり直した認識)
であれば、Podファイルへの"FirebaseAuth"の追記と、「pod update」あたりからやり直してみるのはどうでしょうか。
「pod update」時に、ターミナルにエラーが発生していないこともご確認お願いします。
・参考動画部分:https://youtu.be/KEvA0sSpOMo?t=279
度々すみません。
拡張子が「〜.xcworkspace」のファイルが無いってお話だったので、「pod install」あたりの手順からやり直す必要がありそうですね。
pod installと入力するとThe target `mattingapp` is declared multiple times.とエラーが出てきます。
どうすればいいでしょうか?もう何度も何度もすみません
「target 'mattingapp' do 〜 end」の記載が二つあるので、「複数宣言されている」というエラーだと思います。
そのため、最初の「pod install」自体が失敗していた可能性があります。
podの不備はこちらも見落としていて失礼しました。質問者さんの方でも、動画の見直しお願いいたします。
とりあえずPodファイルの記載を以下のように修正したら、Auth系のエラーが解消しませんでしょうか?
※実際に記載する時は点線不要です。また、不足しているライブラリの宣言があれば、適宜追加お願いします。
----------------------------------------
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target 'mattingapp' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for mattingapp
pod 'RealmSwift'
pod 'Firebase/Analytics'
pod 'Firebase/Auth'
pod 'Firebase/Firestore'
end
----------------------------------------
動画を見直すことですが、見直して手順通りやってこのエラーが出るので先に進むことができませんでした。
tsuki01さんの貼ってくださったコードをコピペし「pod install」をしたとこ
「[IMPORTANT]
Don't forget to include the Crash Report log file under
DiagnosticReports directory in bug reports.」
とでてきました。Firebase Authのエラーは消えませんでした。
今回のプロジェクトに関係なく、Cocoapodが正常に動いてないのではないでしょうか。
お使いのMacbookAirは、M1チップの機種だったりしませんか?
問題の切り分けのために、新規プロジェクトでCocoapodのライブラリインストール手順だけ試してみてください。「pod install」で同様のエラーが発生するなら、Cocoapodの環境などに問題あります。
別途、Cocoapodに関する質問を投稿して頂いた方が良いかもしれません。
cocoapodsをM1チップ用のダウンロード方法にしたところ解決できました。長い期間助言をくださり、解決方法も提案してくださりありがとうございます
最終的に自己解決できた様で良かったです。
お手数ですが、最後に行った手順(cocoapodsのコマンドなど)を自己解決として投稿し、この質問のクローズをお願いいたします。
※自己解決としてクローズしないと質問が未解決として残ってしまうのと、他の方の参考のためにもお願いします。
回答1件
あなたの回答
tips
プレビュー