Skip to content
This repository has been archived by the owner on Apr 4, 2023. It is now read-only.

Running in debug works, running in release on iOS causes crash #178

Closed
mschahczinski opened this issue Oct 17, 2016 · 30 comments
Closed

Running in debug works, running in release on iOS causes crash #178

mschahczinski opened this issue Oct 17, 2016 · 30 comments
Labels
Milestone

Comments

@mschahczinski
Copy link

mschahczinski commented Oct 17, 2016

Plugin works flawlessly on Android but on iOS causes crash. I am running iOS runtime 2.3.0, with device iOS versions ranging from 8-10. If I run a "hello-world" type, basic application and initialize the plugin, the app crashes prior to the splashscreen disappearing. When building for development the app runs and receives notifications with no issue, but only happens when I publish and sign the app. Not sure what i'm missing if it's something configuration related, but all plist files are in place.

Side note: If I run the app without the plugin being initialized, I have zero issues.

Nativescript version: 2.3.0

@austinlarue
Copy link

I had this same issue and disabling the Firebase/Crash pod did the trick.

@EddyVerbruggen
Copy link
Owner

That's not good :(

Can you guys tell me the quickest way to run the app in release mode?

@mschahczinski
Copy link
Author

@austinlarue - could you explain what steps you took to disable the pod? I believe I did so correctly in my podfile (see below), just not having any luck with that as a solution. Maybe I am missing something.

` pod 'Firebase', '~> 3.7.0'
pod 'Firebase/Database'
pod 'Firebase/Auth'
#pod 'Firebase/Crash'

# Uncomment if you want to enable Remote Config
#pod 'Firebase/RemoteConfig'

# Uncomment if you want to enable FCM (Firebase Cloud Messaging)
pod 'Firebase/Messaging'

# Uncomment if you want to enable Firebase Storage
#pod 'Firebase/Storage'

# Uncomment if you want to enable Facebook Authentication
#pod 'FBSDKCoreKit'
#pod 'FBSDKLoginKit'

# Uncomment if you want to enable Google Authentication
#pod 'GoogleSignIn' 

End Podfile `

@EddyVerbruggen
Copy link
Owner

@mschahczinski That looks about right, perhaps you'll need to re-add the iOS platform (and the lib/ios folder) as well to get rid of lingering bits.

@mschahczinski
Copy link
Author

@EddyVerbruggen - Tried that as well, but when you re-add the platform, the pod file is recreated. When building it adds the 'Firebase/Crash' dependency back to the pod file. Commenting it out again and rebuilding works, but still getting the crash on startup.

Here is a snippet of the crash log from the firebase console (prior to removing the crash pod):
Exception name: EXC_BAD_ACCESS / KERN_INVALID_ADDRESS 1 NativeScript 4304733816 + 132728 2 NativeScript 4304733804 + 132716 3 NativeScript 4304856088 + 255000 4 NativeScript 4309956832 + 5355744 5 NativeScript 4309959088 + 5358000 6 UIKit -[UIApplication sendAction:to:from:forEvent:] + 284588 7 UIKit -[UIControl sendAction:to:forEvent:] + 284460 8 UIKit -[UIControl _sendActionsForEvents:withEvent:] + 195552 9 UIKit -[UIControl touchesEnded:withEvent:] + 282648 10 UIKit -[UIWindow _sendTouchesForEvent:] + 281408 11 UIKit -[UIWindow sendEvent:] + 261512 12 UIKit -[UIApplication sendEvent:] + 67668 13 UIKit __dispatchPreprocessedEventFromEventQueue + 8379572 14 UIKit __handleEventQueue + 8353564 15 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 905844 16 CoreFoundation __CFRunLoopDoSources0 + 904124 17 CoreFoundation __CFRunLoopRun + 894908 18 CoreFoundation CFRunLoopRunSpecific + 36932 19 GraphicsServices GSEventRunModal + 49556 20 UIKit -[UIApplication _run] + 505380 21 UIKit UIApplicationMain + 484188 22 NativeScript 4309958720 + 5357632 23 NativeScript 4309955616 + 5354528 24 NativeScript 4309954360 + 5353272 25 NativeScript 4304619128 + 18040 26 NativeScript 4307718620 + 3117532 27 NativeScript 4307744596 + 3143508 28 NativeScript 4307744612 + 3143524 29 NativeScript 4307744612 + 3143524 30 NativeScript 4307720884 + 3119796 31 NativeScript 4307378852 + 2777764 32 NativeScript 4307272108 + 2671020 33 NativeScript 4308496040 + 3894952 34 NativeScript 4304688948 + 87860 35 NativeScript 4309458500 + 4857412 36 NativeScript 4307746896 + 3145808 37 NativeScript 4307744612 + 3143524 38 NativeScript 4307744612 + 3143524 39 NativeScript 4307744612 + 3143524 40 NativeScript 4307720884 + 3119796 41 NativeScript 4307378852 + 2777764 42 NativeScript 4307272108 + 2671020 43 NativeScript 4308925524 + 4324436 44 NativeScript 4304653500 + 52412 45 NativeScript 4304895144 + 294056 46 MobileNotificationsNG 4295563692 + 22956 47 libdyld.dylib start + 17844

@EddyVerbruggen
Copy link
Owner

Thanks. Does it crash for debug and prod or only prod?

@mschahczinski
Copy link
Author

It works fine running in debug, it crashes in prod.

Note: I am exporting and signing the package with an enterprise distribution profile.

@EddyVerbruggen
Copy link
Owner

Good to know. I'll disable the crash pod in the next release as I don't think we can do much about this Firebase issue.

@mschahczinski
Copy link
Author

@EddyVerbruggen - were you able to verify the above solution provided by @austinlarue? I see there was a commit, but disabling 'Firebase/Crash' still causes a crash on my end.

@EddyVerbruggen
Copy link
Owner

@mschahczinski I'm not sure what you mean as @austinlarue says disabling the Pod fixes it, so that's what will be the case in the next release.

@mschahczinski
Copy link
Author

@EddyVerbruggen - The solution that @austinlarue proposed was applied in my project but did not fix the issue. I took the steps below to follow the solution provided.

  • removed ios platform
  • deleted node_modules, lib, and hooks directories
  • installed npm packages ( npm i )
  • in node_modules/nativescript-plugin-firebase/platforms/ios/Podfile -> commented out Firebase/crash (disabling this pod)
  • added ios platform
  • ran -> tns prepare ios
  • checked -> platforms/ios/Podfile & Podfile.lock - to make sure there were no references to Firebase/Crash ( There were none )
  • ran -> tns publish ios
  • opened exported archive in xcode
  • exported archive to .ipa file
  • installed on device

Following all of the above steps, application still crashes. If I follow the same steps above with the firebase plugin removed, the app launches and runs correctly. When I run with the plugin, I get the same errors in the crash log that I referenced earlier. Please advise if I am doing a step improperly, or if I am missing something along the way.

@austinlarue
Copy link

@mschahczinski @EddyVerbruggen I was wrong. It looks like it's the Firebase/Messaging pod that is causing the crash for me. Back when I thought it was the Crash pod, I didn't realize I had also removed the Messaging pod at the same time.

I just tried to re-publish my app yesterday after adding push notifications using this plugin and the app started crashing again while using TestFlight. I'm also receiving the same EXC_BAD_ACCESS / KERN_INVALID_ADDRESS error message in the crash log that @mschahczinski received.

@mschahczinski
Copy link
Author

@austinlarue - Thanks for the feedback, glad it's not just me.

@EddyVerbruggen - I am not sure this will help at all, but I was sifting through the physical device logs while trying to run the app and this is what's showing right before the application is terminating.
iPhone kernel(Sandbox)[0] <Notice>: SandboxViolation: logd(44) deny(1) file-read-data /private/var/containers/Bundle/Application/B44BD7B2-0A90-4FF7-B2FA-6128D3CC555E/MobileNotificationsNG.app/Frameworks/NativeScript.framework/NativeScript

Unfortunately I am not finding any more details here, just the same crash log error that @austinlarue is seeing as well. Possible to re-open this issue?

@mschahczinski
Copy link
Author

mschahczinski commented Oct 27, 2016

I can verify that disabling 'Firebase/Messaging' works. I can publish and run with no issues with the pod disabled, but messaging is needed in my app.

@EddyVerbruggen
Copy link
Owner

Oh bummer! Do you guys build for release by using the archiving feature of Xcode?

@austinlarue
Copy link

@EddyVerbruggen That's how I'm building it right now to try and track down the cause of this issue. This also happens when using tns publish ios

@mschahczinski
Copy link
Author

@EddyVerbruggen - Same thing here as @austinlarue ... I have tried it both ways. tns publish ios just uses the xCode command line build (as far as I know) which will essentially lead to the same end result.

@mschahczinski
Copy link
Author

@EddyVerbruggen @austinlarue - I created a basic project, installed the plugin, ran in debug and somehow received the below error when it would normally crash in a production version. This was on a physical device- It happened twice, but haven't had any luck replicating it since. Hoping this will help- maybe collectively we can figure this out.

JavaScript stack trace: 1 @file:///app/tns_modules/nativescript-plugin-firebase/firebase.js:12:44 JavaScript error: 2016-10-27 16:17:48.578235 fireTest[446:73296] file:///app/tns_modules/nativescript-plugin-firebase/firebase.js:12:44: JS ERROR TypeError: NSNotificationCenter.defaultCenter is not a function. (In 'NSNotificationCenter.defaultCenter()', 'NSNotificationCenter.defaultCenter' is an instance of NSNotificationCenter) file:///app/tns_modules/nativescript-plugin-firebase/firebase.js:12:44: JS ERROR TypeError: NSNotificationCenter.defaultCenter is not a function. (In 'NSNotificationCenter.defaultCenter()', 'NSNotificationCenter.defaultCenter' is an instance of NSNotificationCenter) (lldb)

Installed Nativescript version: 2.3.0

Package.json:

"nativescript": {
"id": "xxx.xxx.xxx",
"tns-ios": {
"version": "2.3.0"
}
},
"dependencies": {
"@angular/common": "2.1.0",
"@angular/compiler": "2.1.0",
"@angular/core": "2.1.0",
"@angular/forms": "2.1.0",
"@angular/http": "2.1.0",
"@angular/platform-browser": "2.1.0",
"@angular/platform-browser-dynamic": "2.1.0",
"@angular/router": "3.1.0",
"nativescript-angular": "1.1.0",
"nativescript-plugin-firebase": "^3.7.1",
"reflect-metadata": "~0.1.8",
"tns-core-modules": "^2.3.0"
},
"devDependencies": {
"nativescript-dev-typescript": "^0.3.2",
"typescript": "^2.0.6",
"zone.js": "~0.6.21"
}

@EddyVerbruggen
Copy link
Owner

Thanks for chipping in, @mschahczinski! The issue you've logged here was fixed in this version: https://github.com/EddyVerbruggen/nativescript-plugin-firebase/releases/tag/3.6.3, so that must have been an old file lingering around in your project.

@mschahczinski
Copy link
Author

@EddyVerbruggen - Well that would explain why I haven't been able to replicate the error... Thanks for the info.

@austinlarue
Copy link

austinlarue commented Oct 31, 2016

@EddyVerbruggen I've narrowed it down to this line in firebase.ios.js in the function firebase._onTokenRefreshNotification:

var token = FIRInstanceID.instanceID().token();

Removing that line (and the subsequent code that relies on it) prevents the app from crashing but I won't receive the FCM token.

@EddyVerbruggen
Copy link
Owner

@austinlarue Strange.. that code is similar to this official sample.

Do you know what the error is?

@mschahczinski
Copy link
Author

@EddyVerbruggen @austinlarue - Have either of you seen this one? Looks to me like it's the reason we are getting the app crash on launch and definitely seems to be the culprit of @austinlarue's line of code.

file:///app/tns_modules/nativescript-plugin-firebase/firebase.js:176:65: JS ERROR ReferenceError: Metadata for "FirebaseInstanceID.kFIRInstanceIDTokenRefreshNotification" found but symbol not available at runtime.

@EddyVerbruggen
Copy link
Owner

@mschahczinski that one looks a LOT like this one. That constant may have been stripped for release build so it needs to be replaced by its actual value.

So can you try replacing kFIRInstanceIDTokenRefreshNotification by "com.firebase.iid.notif.refresh-token" and see if the crash is gone?

@mschahczinski
Copy link
Author

@EddyVerbruggen - Following your instructions worked like a charm! What will need to be changed to fix the plugin long-term as hard-coding is not a great solution?

For anyone having this issue ( @austinlarue ), you need to change the line of code in firebase.ios.js that matches
firebase._addObserver(kFIRInstanceIDTokenRefreshNotification, firebase._onTokenRefreshNotification); to
firebase._addObserver("com.firebase.iid.notif.refresh-token", firebase._onTokenRefreshNotification);

for reference, this line was #170 in my firebase.ios.js file. It might not be exact in yours but should be very close.

@austinlarue
Copy link

@EddyVerbruggen @mschahczinski I just tried this out and can confirm that it does fix the crashing issue.

@mschahczinski
Copy link
Author

mschahczinski commented Nov 8, 2016

I think it's also good to note for anyone that should stumble upon this issue... If the plugin is ever removed & re-added/updated for any reason, the change referenced above will need to be applied- at least until the npm package is updated with a long-term solution.

UPDATE - This only applies to plugin versions <3.7.2 as it now contains the temporary fix.

@EddyVerbruggen
Copy link
Owner

EddyVerbruggen commented Nov 8, 2016

Thanks guys for confirming. Will update npm very soon!

Update: done (3.7.2)

@VimalKumarS
Copy link

VimalKumarS commented May 19, 2018

@EddyVerbruggen - I am also running in the same issue, app crashed if build in release mode with distribution profile ios, I m using 5.3.1 version of firebase plugin. Any pointers what could have wrong and a way to fix this.

@EddyVerbruggen
Copy link
Owner

@VimalKumarS I have no idea - you're not giving me much to work with. And please don't post on closed issues.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

4 participants