2016-06-19 14 views
13

Sto costruendo la mia prima applicazione iOS, e sto usando Firebase per gestire l'autenticazione, database, ecc ho aggiunto una schermata di accesso e usato il seguente codice per creare un nuovo utente:Arresto anomalo dell'app quando si utilizza l'autenticazione Firebase, motivo: "L'app predefinita è già stata configurata."

FIRAuth.auth()?.createUserWithEmail(emailAddress.text!, password: password.text!, completion: { (user, error) in 

     }) 

Quando il l'utente tocca il pulsante di registrazione, c'è un passaggio che dovrebbe riportarli al controller di visualizzazione login originale. Tuttavia, quando ho avuto modo di eseguire l'app, si blocca sulla schermata di avvio. Ecco l'output del debugger:

2016-06-19 14:35:05.402 unitaskr[4386:82981] Configuring the default app. 
2016-06-19 14:35:05.413 unitaskr[4386:] <FIRAnalytics/INFO> Firebase Analytics  v.3200000 started 
2016-06-19 14:35:05.414 unitaskr[4386:] <FIRAnalytics/INFO> To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled (see ...) 
2016-06-19 14:35:05.419: <FIRInstanceID/WARNING> FIRInstanceID AppDelegate proxy enabled, will swizzle app delegate remote notification handlers. To disable add "FirebaseAppDelegateProxyEnabled" to your Info.plist and set it to NO 
2016-06-19 14:35:05.418 unitaskr[4386:] <FIRAnalytics/INFO> Successfully created Firebase Analytics App Delegate Proxy automatically. To disable the proxy, set the flag FirebaseAppDelegateProxyEnabled to NO in the Info.plist 
2016-06-19 14:35:05.430 unitaskr[4386:82981] *** Terminating app due to uncaught exception 'com.firebase.core', reason: 'Default app has already been configured.' 
*** First throw call stack: 
(
0 CoreFoundation      0x00000001100a8d85 __exceptionPreprocess + 165 
1 libobjc.A.dylib      0x00000001108e7deb objc_exception_throw + 48 
2 CoreFoundation      0x00000001100a8cbd +[NSException raise:format:] + 205 
3 unitaskr       0x000000010b58844d +[FIRApp configureDefaultAppWithOptions:sendingNotifications:] + 102 
4 unitaskr       0x000000010b588238 +[FIRApp configure] + 302 
5 unitaskr       0x000000010b541f1a _TFC8unitaskr11AppDelegate11applicationfTCSo13UIApplication29didFinishLaunchingWithOptionsGSqGVs10DictionaryCSo8NSObjectPs9AnyObject____Sb + 266 
6 unitaskr       0x000000010b542204 _TToFC8unitaskr11AppDelegate11applicationfTCSo13UIApplication29didFinishLaunchingWithOptionsGSqGVs10DictionaryCSo8NSObjectPs9AnyObject____Sb + 180 
7 UIKit        0x000000010e5bf9ac -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 272 
8 UIKit        0x000000010e5c0c0d -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 3415 
9 UIKit        0x000000010e5c7568 -[UIApplication _runWithMainScene:transitionContext:completion:] + 1769 
10 UIKit        0x000000010e5c4714 -[UIApplication workspaceDidEndTransaction:] + 188 
11 FrontBoardServices     0x00000001127b78c8 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 24 
12 FrontBoardServices     0x00000001127b7741 -[FBSSerialQueue _performNext] + 178 
13 FrontBoardServices     0x00000001127b7aca -[FBSSerialQueue _performNextFromRunLoopSource] + 45 
14 CoreFoundation      0x000000010ffce301 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 
15 CoreFoundation      0x000000010ffc422c __CFRunLoopDoSources0 + 556 
16 CoreFoundation      0x000000010ffc36e3 __CFRunLoopRun + 867 
17 CoreFoundation      0x000000010ffc30f8 CFRunLoopRunSpecific + 488 
18 UIKit        0x000000010e5c3f21 -[UIApplication _run] + 402 
19 UIKit        0x000000010e5c8f09 UIApplicationMain + 171 
20 unitaskr       0x000000010b542a42 main + 114 
21 libdyld.dylib      0x00000001113b692d start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
(lldb) 

posso fornire ulteriori informazioni, se necessario, qualsiasi aiuto/consiglio sarebbe molto apprezzato come sto appena agli inizi e cercando di imparare il più possibile. Vi auguro una buona giornata!

risposta

8

Ho scritto FIRApp.configure() due volte, che sembrava correggere l'errore.

+0

Ho fatto la stessa cosa per errore e ha generato lo stesso errore. Non dovresti avere più problemi! –

2

È possibile chiamare una volta in AppDelegate metodo di inizializzazione per configurare.

override init() { 
    // Firebase Init 
    FIRApp.configure() 
} 
+1

Sto chiamando questo metodo nella mia classe di estensione della tastiera in cui non ho la classe AppDelegate. quindi come dovrei fare? –

+0

prova a chiamare questo nel tuo view controllerDidLoad. override func viewDidLoad() { } –

+1

Ma questo è il problema, perché se cambio la mia tastiera di estensione in nativa e nativa in estensione, si blocca e genera lo stesso errore. –

2

nel caso in cui qualcun altro si imbattesse in questo problema. quando si utilizza firebase sdk con sdk googleSignIn. devi solo configurarli una volta. o fare [[GGLContext sharedInstance] configureWithError: &configureError]; o [FIRApp configure]

29

ho avuto un problema con un Messaggi estensione:

Se sei in un App estensione, non avete delegato, e dovrete mettere il FIRApp.configure() nella init del ViewController principale (o nel viewDidLoad come suggerito).

Il problema è: in un'estensione messaggi, se l'utente preme più messaggi nel thread che apre l'estensione, init (o viewdidLoad) verrà chiamato più volte, quindi si blocca a causa di FIRApp.configure() chiamato più volte .. .

la soluzione che ho trovato è stato quello di creare un bool statico nel principale View controller:

static var isAlreadyLaunchedOnce = false // Used to avoid 2 FIRApp configure 

e provarlo prima di chiamare FIRApp.configure() nella init o viewDidLoad:

// Configure Firebase 
    // ------------------ 
    // We check if FIRApp has already been configured with a static var, else it will crash... 
    if !MessagesViewController.isAlreadyLaunchedOnce { 
     FIRApp.configure() 

     MessagesViewController.isAlreadyLaunchedOnce = true 
    } 

In questo modo, non si verificano più arresti anomali.


Oh, ho trovato un modo molto più elegante per risolvere il problema qui: iOS Extension - Fatal Exception: com.firebase.core Default app has already been configured

// Configure Firebase 
    // ------------------ 
    if FIRApp.defaultApp() == nil { 
     FIRApp.configure()    
    } 

Non più statico in questo modo;)

+1

Questo è bello. Utilizzato in un contesto di estensione. –

0

Nome classe: AppDelegate + FCMPlugin.m

[FIRApp.configurare()];

Mettete questo nella parte superiore la maggior parte di questo metodo

  • (bool) Applicazione: (UIApplication *) customDidFinishLaunchingWithOptions di applicazione: (NSDictionary *) launchOptions
0

per SWIFT 4

Aveva lo stesso problema con l'arresto anomalo. Quando provi a fare riferimento da Firebase con un file .plist.

(Questo fissa il mio problema.)

provare a scrivere questo al di fuori o all'interno del metodo viewDidLoad:

1. var ref: DatabaseReference! 

quindi fare riferimento all'interno del metodo viewDidLoad:

2. Database.database().reference() 

Ed ora è:

FirebaseApp.configure() 

Invece.