Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS App crashing before entering main() with Xcode 4.2 & iOS 5

Background

After upgrading xcode4.1/ios4 to xcode4.2/ios5 I am experiencing crashes while the App is loading and before it even enters main().

I have set a break point in main() but it is never reached.

main() break point

  • Compiling the project in Xcode 4.1 with a Base SDK of 4.3 works fine on iOS 4.x and iOS 5.
  • Compiling the same project in Xcode 4.2 with a Base SDK of 5.0 works fine on 4.x but crashes in iOS 5, both on the simulator and on a device.

Simulator Crash

iOS 5 Simulator LLDB Crash Xcode 4.2 Output

Crashes with EXC_BAD_ACCESS

Stack calls

List of calls, all system calls, not even the main() has not been called yet.

My best guess is a problem loading a library, but have know idea how to track it down!

Attempts at a resolution

  1. Turned on Zombies
  2. Turned on all logging
  3. Added different versions of system libraries (libz.1.2.5.dylib and libz.dylib)
  4. Cleaned the project
  5. Deleted the App form the simulator
  6. Delete the Derived Data folder
like image 618
Richard Stelling Avatar asked Oct 10 '11 08:10

Richard Stelling


2 Answers

What is your deployment target?

My deployment target was iOS4.0. I changed it to iOS4.3 and the issue is resolved! (Building against iOS5 GM SDK, of course.) My app now runs in the iOS5 simulator.

I got this idea from an answer in another SO thread that said ARC is supported in iOS4.3 and above. My app doesn't use ARC, nor do any of it's dependent libraries, as far as I can tell. The answer also said something about weak reference zeroing, which seemed... perhaps relevent since a lot of people have had success in removing specific linker directives concerning weak references to libSystem.B.dylib.

It bothers me a little that I have to move up my base deployment target beyond 4.0 because that feels like I am cutting out a lot of potential users. Despite Apple's hope that everyone will always upgrade their devices, many people do not. Oh well.

EDIT

It's worth mentioning that this project was originally done under Xcode3, so there is likely just some bizarre cruft in the project itself that is both unneeded and causing this problem. But I'll be damned if I can find it!

EDIT 2

Well, well, well... upon further inspection... I found 2 errant references to libSystem.B.dylib in my project.pbxproj file that were not visible through Xcode's build settings, but that I had to remove by hand with a text editor!

Once doing this, I reset the base deployment version to 4.0, built for the iOS5 simulator, and the app ran without issue.

Amazing.

The lesson: Never underestimate the chances for there to be garbage in your project file.

EDIT 3

Xcode project edit

Removing the 3 occurrences of these lines in the project.pbxprojfile inside the Xcode project package (right click and show package contents).

show package contents

like image 165
Mark Granoff Avatar answered Oct 21 '22 17:10

Mark Granoff


Check your linker flags. Some libraries you might have been using required a flag like this:

-weak_library /usr/lib/libSystem.B.dylib

The weak linking allowed building against iOS 4.x with a 3.x deployment target. For whatever reason, it's completely broken in the simulator now.

like image 44
Phillip Kast Avatar answered Oct 21 '22 15:10

Phillip Kast