Updated to Xcode 8 and App is crashing on Launch - ios

Edit:
====================================================================
This may seem Duplicate at the First look but in all other questions they are treating this as Warning But in my case I am getting Crash at this Error and I have applied all the questions But yet not able to solve the issue.
====================================================================
I just installed Xcode 8 and also Updated my Mac to Sierra,
My xcode project contains cocoapods, I updated the cocoapods,and then I opened my project in Xcode,
and at the first run App crashed at the launch time with following error.
objc[7518]: Class PLBuildVersion is implemented in both
/Applications/Xcode
8.0.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/AssetsLibraryServices.framework/AssetsLibraryServices
(0x1100ad910) and /Applications/Xcode
8.0.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices
(0x10fed7210).
One of the two will be used. Which one is undefined.
What I found on Internet.
https://forums.developer.apple.com/thread/63254
Applied This Also But no Success
Runtime issues with iOS 10/XCode 8
Also Applied This But No Success
Class PLBuildVersion is implemented in both frameworks
I was unable to find a way to get rid of the warning, but if you want to prevent the app from crashing, you need to provide a description for why you are accessing the camera, photo library, etc. This is new in iOS10.
Added following into your Info.plist file. But none are working.
Key: Privacy - Photo Library Usage Description Value: $(PRODUCT_NAME) photo use
Key: Privacy - Camera Usage Description Value: $(PRODUCT_NAME) camera use
Please help Have to submit app next week, I am in a tight situation.

Related

PLBuildVersion issue in Spritekit [duplicate]

iOS 10 / Xcode 8 GM build getting the below, never had it before on Xcode 7. Any ideas?
objc[25161]: Class PLBuildVersion is implemented in both
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/AssetsLibraryServices.framework/AssetsLibraryServices
(0x12049a910) and
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices
(0x1202c4210). One of the two will be used. Which one is undefined.
(NOTE: Only seems to happen in simulator, does not appear on real device).
Main Idea
Main idea is simple:
If your app (or dependencies, such as Pods) uses framework, that uses explicit (or implicit) PhotoLibraryServices.framework or AssetsLibraryServices.framework as dependency, Xcode warns you (even if you are using only one of them). It might be Photos/PhotosUI.framework or AssetsLibrary.framework, or another (I don't have full list of dependencies, but it is possible).
What is the problem?
Class with name PLBuildVersion is defined in both PhotoLibraryServices.framework and AssetsLibraryServices.framework. Class name is unique in Objective-C (you can't define 2 classes with same name), so it is undefined which one will be used in runtime.
However, I think that it will not be a problem, because both classes have same methods and fields (checked this with disassembler) and I guess that both were compiled from the same source.
Radar is already sent.
As per answer from Apple employee on Apple's Developer Forum:
You don't control either of the class sources listed, so there isn't anything you can or should do – aside from Reporting a Bug.
I was unable to find a way to get rid of the warning, but if you want to prevent the app from crashing, you need to provide a description for why you are accessing the camera, photo library, etc. This is new in iOS10.
Input the following into your Info.plist file.
Photo
Key: Privacy - Photo Library Usage Description
Value: $(PRODUCT_NAME) photo use
Camera
Key: Privacy - Camera Usage Description
Value: $(PRODUCT_NAME) camera use
More info can be found here: https://iosdevcenters.blogspot.com/2016/09/infoplist-privacy-settings-in-ios-10.html
I find you can get this error merely by using a UIWebView. My solution was to replace my use of UIWebView with WKWebView.
I had this after adding Answers on Fabric to my project.
Deleting derived data did the trick for me. (shift alt command k in XCode)
Edit a year later:
After deleting derived data, always exit XCode and start it again.
In unrelated cases I have the impression that deleting derived data does not clear XCode’s in memory caches of the derived data.
Resetting the iOS simulator fixed this for me. Simulator -> Reset Content And Settings.
In my case this warning started to appear after opening a second xcode project and running the second app on the simulator. After changing back to the first app, the warning started to appear. I just quit the Simulator and Xcode and reopened my project. The warning disappeared after that. If that doesn't solve it, proceed with the other answers. Xcode can be really picky sometimes.

I crashed sample code from Apple [duplicate]

iOS 10 / Xcode 8 GM build getting the below, never had it before on Xcode 7. Any ideas?
objc[25161]: Class PLBuildVersion is implemented in both
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/AssetsLibraryServices.framework/AssetsLibraryServices
(0x12049a910) and
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices
(0x1202c4210). One of the two will be used. Which one is undefined.
(NOTE: Only seems to happen in simulator, does not appear on real device).
Main Idea
Main idea is simple:
If your app (or dependencies, such as Pods) uses framework, that uses explicit (or implicit) PhotoLibraryServices.framework or AssetsLibraryServices.framework as dependency, Xcode warns you (even if you are using only one of them). It might be Photos/PhotosUI.framework or AssetsLibrary.framework, or another (I don't have full list of dependencies, but it is possible).
What is the problem?
Class with name PLBuildVersion is defined in both PhotoLibraryServices.framework and AssetsLibraryServices.framework. Class name is unique in Objective-C (you can't define 2 classes with same name), so it is undefined which one will be used in runtime.
However, I think that it will not be a problem, because both classes have same methods and fields (checked this with disassembler) and I guess that both were compiled from the same source.
Radar is already sent.
As per answer from Apple employee on Apple's Developer Forum:
You don't control either of the class sources listed, so there isn't anything you can or should do – aside from Reporting a Bug.
I was unable to find a way to get rid of the warning, but if you want to prevent the app from crashing, you need to provide a description for why you are accessing the camera, photo library, etc. This is new in iOS10.
Input the following into your Info.plist file.
Photo
Key: Privacy - Photo Library Usage Description
Value: $(PRODUCT_NAME) photo use
Camera
Key: Privacy - Camera Usage Description
Value: $(PRODUCT_NAME) camera use
More info can be found here: https://iosdevcenters.blogspot.com/2016/09/infoplist-privacy-settings-in-ios-10.html
I find you can get this error merely by using a UIWebView. My solution was to replace my use of UIWebView with WKWebView.
I had this after adding Answers on Fabric to my project.
Deleting derived data did the trick for me. (shift alt command k in XCode)
Edit a year later:
After deleting derived data, always exit XCode and start it again.
In unrelated cases I have the impression that deleting derived data does not clear XCode’s in memory caches of the derived data.
Resetting the iOS simulator fixed this for me. Simulator -> Reset Content And Settings.
In my case this warning started to appear after opening a second xcode project and running the second app on the simulator. After changing back to the first app, the warning started to appear. I just quit the Simulator and Xcode and reopened my project. The warning disappeared after that. If that doesn't solve it, proceed with the other answers. Xcode can be really picky sometimes.

dyld`__abort_with_payload: Without an error message

When I start my app with Xcode, I have a crash, but without an error.
The app is just stopping on this thread:
What can I do to have more information about the issue?
If you are using custom frameworks, you need to put it inside the "Embedded Binaries" section located in the Xcode project under the tab Target / General.
For me a simple Clean and Rebuild sorted it out.
This problem appeared after a system update up to macOS 10.15.2 beta (Catalina). Disabling "Thread Sanitizer" solved the issue (Xcode 11.2). Now I can't use Thread Sanitizer and have to wait for the next OS update.
Adding the framework to the embedded binary asset list fixed this. Here is what the setup of a foreign framework looks like in final form in the Xcode GUI as an Embedded Framework (Xcode 9.2, personally I like a visual breadcrumb trail better ;-) ):
Did Apple intentionally crash the runtime to somehow tell the developer about the problem that you cannot use non-Apple frameworks as simply linked frameworks in iOS development? It would be better to have it come up as a build error I would think... with a button that said "move it!"
The use of Embedded Binaries keeps the end user from having to add the Framework independently of your app (or have you do with an installer). In the case of the iPhone (iOS), that is impossible, but on macOS, it is possible, but it can get messy fast.
For the end user, it is much nicer to simply drag and drop an app to install it on macOS, which is where embedded becomes a benefit. Embedding also avoids the classic "DLL conflicts" of having external versions of your framework to manage. (Disk space is cheap, but my customer's time is precious.)
I fixed the error in my project just now!
If you are using the Swift framework in an Objective-C project, I advice you to change the build settings.
Set the Always Set Embed the Swift Standard Libraries option to Yes. Like this:
It was finally solved!
Making the framework "optional" instead of "required" worked for me.
To answer the original question "What can I do to have more informations about the issue?", this Apple forum thread provides a very simple tip: simply run your crashing app outside Xcode (i.e., stop it from Xcode, then run it manually on your device).
This will produce a crash log containing more details about what happened. You can then review this log from the Xcode Window menu → Devices and Simulators → View Device Logs.
In Xcode 11.1, turn off Do not Embed in Embed & Sign is a nice option.
Credit: mkonovalov's answer and William Cerniuk's answer
Unchecking "Guard Malloc" in diagnostics worked for me.
Continue the execution to see if any message shows up in debugger such as "MyFramework.framework" not found. If that is the case, follow this question: OS X Framework Library not loaded: 'Image not found'
For me Amos Joshua's answer worked.
Make sure you have added your binaries through "Embed Binaries" section.
Make sure you have enabled signing of frameworks in build phase section.
Make sure the embedded frameworks are not symlinks.
You can make the linked frameworks optional instead of required in "Link binary with libraries" phase. This will tell iOS to not look for these frameworks during launch. But anyway you need to fix the errors to use those frameworks!
Check if all the info.plist entries are good. In my case, I was using a Mac info.plist file for iOS. It was looking for some xib file which was not present in the iOS project.
Do a clean and build after any such change. This is required because Xcode does not copy/change these files if they already exist.
Remove the app from iPad and then install. Same reason as 7.
I had just missed applying the "Privacy - Camera Usage Description" in the info.plist file.
I faced the same issue with Xcode 11.3 and macOS v10.15.2 (Catalina) . The app was running well on the device, but not in the simulator. It seems there is an issue with the simulator and the workaround is to disable Thread Sanitizer.
Refer to Xcode 11.3 simulator SIGABRT on launch.
I encountered an error with the same signature (my project was in Objective-C) and discovered I had forgotten to link with the appropriate framework. The error message in the debug log that led to finding the error was:
dyld: Symbol not found: OBJC_CLASS$_SFSafariViewController
For my specific error, adding SafariServices.framework in the Targets → Build Phases → "Link Binary With Libraries" resolved the issue. While you probably don't have the same specific error and resolution, checking the debug log for clues is useful.
Sometimes it happens when you use system frameworks that are accessible only from a later iOS version than your target version. It might be fixed by marking this linked framework as optional.
For example, a project targeted on iOS 11 and being using AuthenticationServices for the iOS 12 AutoFill feature will crash on iOS 11 in the described way.
I had a similar issue that was resolved by a missing permission specification in plist (as weird as it is...).
I've tried to use AVCaptureDevice and it just crashed at starting (my app was very minimal).
Adding Privacy - Camera Usage Description to the info.plist file solved it for me.
I've had this situation after updating Xcode to v10.2.1 and Swift to v5.0.
If you are using Carthage + RxSwift, the new RxSwift uses RxRelay.framework. You should go to your /Carthage/Build directory find that framework and drag it to your project. Don't forget also add it to your carthage copy-frameworks script:
$(SRCROOT)/Carthage/Build/iOS/RxRelay.framework
It was resolved thanks to fred's answer.
I had this issue and didn't have success with the answers.
I was using a custom framework that would connect with Bluetooth devices. So the crash was happening because I had missed applying the "Privacy - Bluetooth Always Usage Description" in the info.plist file.
Check all your permissions fields are set up in the p-list file.
I was facing the same issue. Setting 'Always Embed Swift Standard Libraries' to Yes in Build Settings of my target worked for me.
If you use the Carthage build framework, after dragging the framework to your project, you should add it to General/Embedded Binaries.
I found the right way to resolve it.
Make sure the AppleWWDRCA.cer is set to the system default mode, and then it will work:
If you're using a framework written in Swift in an Objective-C application, you need to include the Swift toolchain in the app that consumes the framework.
The way I've found to do this is to create a dummy Swift file in the app, so that Xcode recognizes Swift and appropriately adds it to the project. You can then delete the dummy file.
Also if you are using custom frameworks, make sure you set the Mach-O type to static library. I read somewhere that iOS doesn't allow dylib. Anyway, this worked for me.
To add to the long list of encounters with this error, it occurs when I am on Xcode 12.2 Beta 2 deploying to my Mac running macOS v10.15.5 (Catalina) with the deployment target set to macOS v11.0 (Big Sur).
This situation happened because I was trying out the Mac Catalyst Tutorial app on adding a SideBar. Switching the target to macOS v10.15.5 eliminated the error and launched the app properly.
I faced this issue on iOS 14.5 when playing/implementing ATT (App Tracking Transparency) and have yet to add a usage description in file info.plist on why user tracking is needed.
The app crashes whenever the settings "Allow Apps to Request to Track" was enabled (when disabled, everything worked well).
The crash in Xcode provided no clues, except
libsystem_kernel.dylib`__abort_with_payload: (SIGABRT)
CoreSimulator 757.5 - Device: iPhone 11 (29AD27B2-6EC0-4B9C-8C8C-C5450695A19C) - Runtime: iOS 14.5 (18E182) - DeviceType: iPhone 11
Using the answer from fred's answer and getting the crash log from the actual device yielded this clue which was extremely helpful.
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: TCC, This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSUserTrackingUsageDescription key with a string value explaining to the user how the app uses this data.
Triggered by Thread: 1
I fixed it by changing "Embed & Sign" to "Embed without Signing" under General > Frameworks, Libraries and Embedded Content.
I didn't think this applied to me because I wasn't using the camera, but it did.
Many answers reference adding a Usage Description to Info.plist. I didn't know there are many more cases where a usage description is necessary (besides just the camera), see this link.
The link lists these services as needing a usage description or will cause this error:
Calendar, Contact, Reminder, Photo, Bluetooth Sharing, Microphone, Camera, Location, Heath, HomeKit, Media Library, Motion, CallKit, Speech Recognition, SiriKit, and TV Provider.
Add an entry to Info.plist, start typing "Privacy" as the key, and you will see all the available options pop up.
I've just had the same issue and the reason why was due to the fact that I've revoked my Developer Certificates and created new ones with Xcode 10, after a fresh macOS v10.14 (Mojave) update (for some reason, it deleted all login credentials and outdated some keychain certificates).
So, all I had to do was to remove the installed apps from my device and run them through Xcode again, in order for it to install the right new Provisioning Profile in my device :)
Actually, I had the issue with Xcode 11.3.1 and Thread Sanitizer was already turned off as mentioned in previous answers.
In my case, the issue was I used to have different Xcode versions in my Application folder like this:
/Applications/xcode11.3.1/Xcode.app
/Applications/xcode11.3/Xcode.app
/Applications/xcode10.1/Xcode.app
and
/Applications/Xcode.app - was 11.2
The build system looks on the /Applications/Xcode.app file by default. So bringing Xcode 11.3.1 to the /Applications/Xcode.app finally resolve the problem.
The same issue happened with me. I had iOS 14 Beta and the problem was fixed when I updated it to the official version.
I have fixed my error in my project.
I checked the other threads when the error happened. I found my error is about the camera.
Add the Camera privacy in the Info.plist file.
Open the info.plist file.
Add a new key called "Privacy - Camera Usage Description" and enter a string that describes why the app need camera. The describes will display when your app need to use the privacy.

My app crashes with the information: "objc[94875]: Class PLBuildVersion is implemented in both..." [duplicate]

iOS 10 / Xcode 8 GM build getting the below, never had it before on Xcode 7. Any ideas?
objc[25161]: Class PLBuildVersion is implemented in both
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/AssetsLibraryServices.framework/AssetsLibraryServices
(0x12049a910) and
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices
(0x1202c4210). One of the two will be used. Which one is undefined.
(NOTE: Only seems to happen in simulator, does not appear on real device).
Main Idea
Main idea is simple:
If your app (or dependencies, such as Pods) uses framework, that uses explicit (or implicit) PhotoLibraryServices.framework or AssetsLibraryServices.framework as dependency, Xcode warns you (even if you are using only one of them). It might be Photos/PhotosUI.framework or AssetsLibrary.framework, or another (I don't have full list of dependencies, but it is possible).
What is the problem?
Class with name PLBuildVersion is defined in both PhotoLibraryServices.framework and AssetsLibraryServices.framework. Class name is unique in Objective-C (you can't define 2 classes with same name), so it is undefined which one will be used in runtime.
However, I think that it will not be a problem, because both classes have same methods and fields (checked this with disassembler) and I guess that both were compiled from the same source.
Radar is already sent.
As per answer from Apple employee on Apple's Developer Forum:
You don't control either of the class sources listed, so there isn't anything you can or should do – aside from Reporting a Bug.
I was unable to find a way to get rid of the warning, but if you want to prevent the app from crashing, you need to provide a description for why you are accessing the camera, photo library, etc. This is new in iOS10.
Input the following into your Info.plist file.
Photo
Key: Privacy - Photo Library Usage Description
Value: $(PRODUCT_NAME) photo use
Camera
Key: Privacy - Camera Usage Description
Value: $(PRODUCT_NAME) camera use
More info can be found here: https://iosdevcenters.blogspot.com/2016/09/infoplist-privacy-settings-in-ios-10.html
I find you can get this error merely by using a UIWebView. My solution was to replace my use of UIWebView with WKWebView.
I had this after adding Answers on Fabric to my project.
Deleting derived data did the trick for me. (shift alt command k in XCode)
Edit a year later:
After deleting derived data, always exit XCode and start it again.
In unrelated cases I have the impression that deleting derived data does not clear XCode’s in memory caches of the derived data.
Resetting the iOS simulator fixed this for me. Simulator -> Reset Content And Settings.
In my case this warning started to appear after opening a second xcode project and running the second app on the simulator. After changing back to the first app, the warning started to appear. I just quit the Simulator and Xcode and reopened my project. The warning disappeared after that. If that doesn't solve it, proceed with the other answers. Xcode can be really picky sometimes.

how to solve this the crash when running after updating to swift 3?

I just updated to Xcode 8 (swift 3). Converted code, etc. No errors. A few build warnings...nothing that should be an issue.
When I run, with my IPHone connected, it crashed with a Thread 1: signal SIGABRT . It has hardly anything in the trace back other than
0_abort_with_payload
5 _dyld_start
and the console error is
dyld: could not load inserted library '/Developer/usr/lib/libBacktraceRecording.dylib' because no suitable image found. Did find:
/Developer/usr/lib/libBacktraceRecording.dylib: code signature invalid for '/Developer/usr/lib/libBacktraceRecording.dylib'
I had the same error since upgrading to xcode 8 (swift 3). The fix, for me, was to add an entry in info.plist
To add the permission information for the microphone:
Open info.plist
Add a new key called "Privacy - Microphone Usage Description"
Enter a string that describes why the app need microphone access
Just restart your iPhone device.
It mainly crash because you have to write some privacy thing in info.plist if you are using hardwares like camera, gallery etc. Check console for details and add everything you are using in info.plist of your app.
I had the same problem and finally figured it out. I created a Framework in Swift 3 that I then added to one of my other projects. This project that I added it to uses both Swift and Objective-C but is originally an Objective-C project.
For some reason the Framework made in Swift 3 was causing my app to crash immediately when running on an iPhone with that exact error. I deleted the Framework and now it is running fine.
Again, not sure why this happens because the Framework was working fine with the app before and works fine on simulators. So I guess it has to do with the Framework being created in the latest XCode with Swift 3. Maybe someone else can clear this up.
Hope this helps someone!

Resources