質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Facebook

Facebookは、実名登録制のSNS(ソーシャル・ネットワーキング・サービス)です。開発者用のデベロッパーサイトが存在し、一般ユーザーによるFacebook向けアプリケーション開発が可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

1603閲覧

メールアドレスベースでログインを実現したいです。

退会済みユーザー

退会済みユーザー

総合スコア0

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Facebook

Facebookは、実名登録制のSNS(ソーシャル・ネットワーキング・サービス)です。開発者用のデベロッパーサイトが存在し、一般ユーザーによるFacebook向けアプリケーション開発が可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

2クリップ

投稿2017/12/31 05:05

編集2018/01/02 08:12

swift4
xcode9.2

FirebaseAuthで、メールアドレスベースでログイン認証を実装したいです。

サインアップには成功しました。
(画像の"会員登録"ビューで登録buttonをタップし、"ログインしたよ"まで遷移できています。)

ですが、"ログイン"ビューのログインbuttonをタップすると、
エラーでクラッシュします。

イメージ説明

この場合の、
ログインするのに相応しいMailLogInViewControllerrのコードを教えて頂きたいです。

よろしくお願いします。

参考サイト(動画)

(MailSignUpViewControllerサインアップです) import UIKit import Firebase import FirebaseAuth class MailSignUpViewController: UIViewController { @IBOutlet weak var emailTF: UITextField! @IBOutlet weak var passwordTF: UITextField! @IBOutlet weak var usernameTF: UITextField! override func viewDidLoad() { super.viewDidLoad() } //サインアップボタン! @IBAction func mailSignUpButton(_ sender: Any) { guard let email = emailTF.text else { return } guard let pass = passwordTF.text else { return } guard let username = usernameTF.text else { return } Auth.auth().createUser(withEmail: email, password: pass) { user, error in if error == nil && user != nil { print("ユーザー登録したよ") let changeRequest = Auth.auth().currentUser?.createProfileChangeRequest() changeRequest?.displayName = username changeRequest?.commitChanges { error in if error == nil { print("User display name changed!") self.dismiss(animated: false, completion: nil) } } } else { print("ユーザー登録失敗!: (error!.localizedDescription)") } } } }
(MailLogInViewControllerrログインです) import UIKit import Firebase import FirebaseAuth class MailLogInViewController: UIViewController { @IBOutlet weak var emailTF: UITextField! @IBOutlet weak var passwordTF: UITextField! override func viewDidLoad() { super.viewDidLoad() } @IBAction func mailLogInButton(_ sender: Any) { func login() { Auth.auth().signIn(withEmail: emailTF.text!, password: passwordTF.text!, completion: { user,error in if error != nil { print("ユーザーログイン失敗!: (error!.localizedDescription)") } else { print("ログイン!") } } )} } }
(エラーコンソールです) 2017-12-31 14:37:33.475932+0900 make01[5540:498135] [Firebase/Analytics][I-ACS023007] Firebase Analytics v.40005000 started 2017-12-31 14:37:33.476093+0900 make01[5540:498135] [Firebase/Analytics][I-ACS023008] To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled (see http://goo.gl/RfcP7r) アプリを開いたよ 2017-12-31 14:37:33.898667+0900 make01[5540:498022] [MC] System group container for systemgroup.com.apple.configurationprofiles path is /Users/tanakaatsushi/Library/Developer/CoreSimulator/Devices//data/Containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles 2017-12-31 14:37:33.901754+0900 make01[5540:498022] [MC] Reading from private effective user settings. 2017-12-31 14:37:33.913445+0900 make01[5540:498022] Could not successfully update network info during initialization. 2017-12-31 14:37:34.032210+0900 make01[5540:498145] TIC Read Status [1:0x0]: 1:57 2017-12-31 14:37:34.032329+0900 make01[5540:498145] TIC Read Status [1:0x0]: 1:57 2017-12-31 14:37:34.230953+0900 make01[5540:498143] TIC Read Status [2:0x0]: 1:57 2017-12-31 14:37:34.231077+0900 make01[5540:498143] TIC Read Status [2:0x0]: 1:57 2017-12-31 14:37:35.029164+0900 make01[5540:498022] Unknown class MailLogInViewController in Interface Builder file. 2017-12-31 14:37:35.060771+0900 make01[5540:498022] [MC] Lazy loading NSBundle MobileCoreServices.framework 2017-12-31 14:37:35.062220+0900 make01[5540:498022] [MC] Loaded MobileCoreServices.framework 2017-12-31 14:37:37.085986+0900 make01[5540:498022] -[UIViewController mailLogInButton:]: unrecognized selector sent to instance 0x7fa07680fc10 2017-12-31 14:37:37.090251+0900 make01[5540:498022] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController mailLogInButton:]: unrecognized selector sent to instance 0x7fa07680fc10' *** First throw call stack: ( 0 CoreFoundation 0x000000010e53d12b __exceptionPreprocess + 171 1 libobjc.A.dylib 0x000000010dbd1f41 objc_exception_throw + 48 2 CoreFoundation 0x000000010e5be024 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132 3 UIKit 0x000000010f301f51 -[UIResponder doesNotRecognizeSelector:] + 295 4 CoreFoundation 0x000000010e4bff78 ___forwarding___ + 1432 5 CoreFoundation 0x000000010e4bf958 _CF_forwarding_prep_0 + 120 6 UIKit 0x000000010f0cf972 -[UIApplication sendAction:to:from:forEvent:] + 83 7 UIKit 0x000000010f24ec3c -[UIControl sendAction:to:forEvent:] + 67 8 UIKit 0x000000010f24ef59 -[UIControl _sendActionsForEvents:withEvent:] + 450 9 UIKit 0x000000010f24de86 -[UIControl touchesEnded:withEvent:] + 618 10 UIKit 0x000000010f145807 -[UIWindow _sendTouchesForEvent:] + 2807 11 UIKit 0x000000010f146f2a -[UIWindow sendEvent:] + 4124 12 UIKit 0x000000010f0ea365 -[UIApplication sendEvent:] + 352 13 UIKit 0x000000010fa36a1d __dispatchPreprocessedEventFromEventQueue + 2809 14 UIKit 0x000000010fa39672 __handleEventQueueInternal + 5957 15 CoreFoundation 0x000000010e4e0101 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 16 CoreFoundation 0x000000010e57ff71 __CFRunLoopDoSource0 + 81 17 CoreFoundation 0x000000010e4c4a19 __CFRunLoopDoSources0 + 185 18 CoreFoundation 0x000000010e4c3fff __CFRunLoopRun + 1279 19 CoreFoundation 0x000000010e4c3889 CFRunLoopRunSpecific + 409 20 GraphicsServices 0x000000011497d9c6 GSEventRunModal + 62 21 UIKit 0x000000010f0ce5d6 UIApplicationMain + 159 22 make01 0x000000010b727f97 main + 55 23 libdyld.dylib 0x0000000111f09d81 start + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)

//エラーを追記しました

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yatima

2017/12/31 05:32

エラーが表示されるのであれば,記載したほうが答えがつきやすいと思います.
退会済みユーザー

退会済みユーザー

2017/12/31 06:00 編集

Yatima様 ありがとうございます。現在のエラーを追記しました。見ていただければ幸いです。
退会済みユーザー

退会済みユーザー

2017/12/31 06:00

エラーコンソールの内容を追記しました。
komo_ta

2017/12/31 06:38 編集

print(Auth.auth().currentUser)←こちらを行うと`FIRUser`インスタンス取得できたりしますか?もしかしたらすでにログインの状態なのではと思ったのですが。もしinstanceが取得できていたら、すでにログインできています
退会済みユーザー

退会済みユーザー

2017/12/31 06:49

komo_ta様ありがとうございます。すみません、print(Auth.auth().currentUser)というコードは無いと思いますが、新たに組み込めば良いのでしょうか?
komo_ta

2017/12/31 06:52

そうです。Appdelegateとかどこでもいいので、print(Auth.auth().currentUser)を入れてみてください。そこにブレイクポイントを当ててFIRUserインスタンスが取得できるかデバックエリアで確認してみてください
退会済みユーザー

退会済みユーザー

2017/12/31 06:59

komo_ta様 入れてブレイクポイントをつけてRUNしました。アドレスとパスを入力しログインボタンを押したら、本文のエラーコンソールと同じエラーが発生しました。reason: '-[UIViewController mailLogInButton:]: unrecognized selector sent to instance 0x7fdc3a816770'
komo_ta

2017/12/31 07:18

mailLogInButtonがただしく接続されているか確認してください。上のコードの記述ですが、mailLogInButtonメソッドにloginメソッドがネストで入っている感じなので、正しいコードに修正していただきたいです。 先ほどのprint(Auth.auth().currentUser)こちらに関しては、AppDelegateの一番最初にやってもらってもいいですか?すでにログインしているかどうかを確認したかったので、ログインボタンを押す前に試してみたかったのですが
退会済みユーザー

退会済みユーザー

2017/12/31 07:41 編集

正しく接続されています。この時メールとパスのコネクトが外れているので繋ぎました。AppDelegateのFirebaseApp.configure()の下に入れました。RUNしスタート画面の"ログイン"をタップすると、エラーreason: '[<UIViewController 0x7f9840b15e20> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key emailTF.'が出ます。
退会済みユーザー

退会済みユーザー

2017/12/31 07:31

続きます
退会済みユーザー

退会済みユーザー

2017/12/31 07:42 編集

MainStoryboardのSouceCodeでemailTFに関する行を消し、再びRUNしてスタート画面の"ログイン"ボタンをタップすると、今度はエラーreason: '[<UIViewController 0x7f7eef218050> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key passwordTF.’が出ますので、同じ様にSouceCodeでpasswordTFに関する行を消します。 そしてRUNして"ログイン"ビューのログインbuttonをタップすると、本文のエラーが発生します。
退会済みユーザー

退会済みユーザー

2017/12/31 07:39 編集

実はこの3つのエラーのループをずっと繰り返していて、原因が分からない状態に陥っています。komo_ta様が仰る”正しいコード”が分からない為、相応しいコードがどの様なコードなのか、回答を求めていました。
退会済みユーザー

退会済みユーザー

2017/12/31 07:41 編集

修正しながらとても長くなってしまいました。見て頂けると助かります。
komo_ta

2017/12/31 07:55

ありがとうございます。ここまできてしまったので解決方法一緒に考えたいんですが、実際にstroyboardとかその辺みたいです。githubとかでレポジトリ作ってもらえたら、多少手助けはできるかとは思います。
退会済みユーザー

退会済みユーザー

2017/12/31 09:14 編集

komo_ta様 本当ですか とてもありがたいです。この後githubで作りますので、お時間ある時に是非よろしくお願いします。komo_ta様には私の他の質問にもコメントして頂いていた様で、お世話になっていました。ありがとうございます。レポジトリを作った際には、こちらでお伝えしたいと思います。お願いします。
komo_ta

2017/12/31 10:33

りょうかいです!
退会済みユーザー

退会済みユーザー

2018/01/02 08:12 編集

komo_ta様 すみません何度も 感謝します。githubのレポジトリを作成できたと思います。見ていただけますか?
退会済みユーザー

退会済みユーザー

2017/12/31 11:00 編集

レポジトリのストーリーボードには、本文の画像には写ってないビューがあったりして分かりづらいですが今回の質問には関係ありません。よろしくお願いします。
guest

回答1

0

ベストアンサー

①Main.storyboardを開いてください。
②MailLogInViewControllerをクリックして、画像のように右のサイドバーの3タブ目を開いてください。
③CustomClassの inherit Module From Targetのチェックボックスをつけてください。
画像も載せておくので確認してください。ModuleがNoneからmake01に変わったらOKです
イメージ説明

これでビルドすると大丈夫かと思います。正しくMailLogInViewControllerとして紐付けがうまくいってなかったようです。いちお確認として、mailLogInButtonにブレイクポイントを置いて確認してください

もう一つ気になった点で
小規模のアプリですと、main.storyboardにViewControllerを全て配置しても大丈夫だとは思いますが、
基本的には一つのViewControllerに対して、一つのstoryboardの設計がいいかと思います。
理由としては、共同で作業を行う場合、main.storyboardにViewControllerを置いておくと、
それが原因でコンフリクトする危険が高いのと、
main.storyboardにViewControllerを入れすぎると、読み込むのに時間がかかります(Xcodeでという意味)

なのでコードによってViewControllerのインスタンスを作成して、画面遷移させる方法も覚えておいて損はないかと思います。以下にFirstViewControllerから、 SecondViewControllerに遷移する方法をコードで書いたので参考にしてみてください。(あくまで一例です)


FirstViewControllerに対応するstoryboardをFirstViewController.storyboard,
SecondViewControllerに対応するstoryboardをSecondViewController.storyboard,
とします

class FirstViewController: UIViewController { static func createInstance() -> FirstViewController { let storyboard = UIStoryboard(name: "FirstViewController", bundle: nil) let instance = storyboard.instantiateViewController(withIdentifier:"FirstViewController") as! FirstViewController return instance } override func viewDidLoad() { super.viewDidLoad() } //あるボタンがあったとしてbuttonタップしたときにSecondViewContollerへmodal遷移する func btnTapped() { let secondVC = SecondViewController.createInstance() present(secondVC, animated: true, completion: nil) } }
class SecondViewController: UIViewController { static func createInstance() -> SecondViewController { let storyboard = UIStoryboard(name: "SecondViewController", bundle: nil) let instance = storyboard.instantiateViewController(withIdentifier:"SecondViewController") as! SecondViewController return instance } override func viewDidLoad() { super.viewDidLoad() } }

よろしくお願いします

投稿2017/12/31 12:22

編集2017/12/31 12:24
komo_ta

総合スコア275

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/12/31 12:41 編集

komo_ta様 回答や、メインストーリーボードの使い方など大変ご丁寧に教えて頂きありがとうございます。 恐れ入りますが、ただいま③を設定しビルドし、メールアドレスとパスを入力してログインボタンをタップしましたが、そこから遷移されず何も動作しません。(エラーはありません。)コンソールにも何も現れません。
komo_ta

2017/12/31 12:45

そのあとは考えてみてください。答えを教えることもできますが、考えることも必要かと思うので。こちらの質問に対する回答にはなっています。今現れないといっているのはこの質問を解決した後に起こった問題なので、もう少し考えてみてください。それで無理だったら質問を立てるようにお願いします〜
退会済みユーザー

退会済みユーザー

2017/12/31 12:48

分かりました!長い間お付き合い頂いてとても助かりました。 トライして見ます ありがとうございました。良いお年を!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問