Tracking down a SIGABRT on startup

I have a small puzzle app that I'm trying to deploy on the iPad. The app runs fine within the Unity IDE with zero errors and zero warnings. Once I deploy it it crashes on startup with a SIGABRT.

I've started going through an eliminating code that runs at startup just to see if I could start to narrow it down but so far I'm coming up empty.

Does anyone have a strategy for dealing with this type of problem?

GDB log:

[Session started at 2010-09-07 15:38:24 -0400.]

GNU gdb 6.3.50-20050815 (Apple version gdb-1470) (Thu May 27 05:54:06 UTC 2010)

Copyright 2004 Free Software Foundation, Inc.

GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions.

There is absolutely no warranty for GDB. Type "show warranty" for details.

This GDB was configured as "--host=i386-apple-darwin --target=arm-apple-darwin".tty /dev/ttys000

Loading program into debugger

Program loaded.

target remote-mobile /tmp/.XcodeGDBRemote-21706-22

Switching to remote-macosx protocol

mem 0x1000 0x3fffffff cache

mem 0x40000000 0xffffffff none

mem 0x00000000 0x0fff none

run

Running

[Switching to thread 12035]

[Switching to thread 12035]

sharedlibrary apply-load-rules all

continue

2010-09-07 15:39:26.011 hextian[2722:207] -> registered mono modules -> applicationDidFinishLaunching()

Mono path[0] = '/var/mobile/Applications/661248B3-75FA-46FC-84C8-8F5B58B738CE/hextian.app/Data/Managed'

Creating OpenGLES1.x graphics device

Non platform assembly: /private/var/mobile/Applications/661248B3-75FA-46FC-84C8-8F5B58B738CE/hextian.app/Data/Managed/UnityEngine.dll (this message is harmless)

Non platform assembly: /private/var/mobile/Applications/661248B3-75FA-46FC-84C8-8F5B58B738CE/hextian.app/Data/Managed/Assembly-CSharp-firstpass.dll (this message is harmless)

Non platform assembly: /private/var/mobile/Applications/661248B3-75FA-46FC-84C8-8F5B58B738CE/hextian.app/Data/Managed/Assembly-CSharp.dll (this message is harmless)

You are using Unity iPhone Basic. You are not allowed to remove the Unity splash screen from your game

Program received signal: SIGABRT.

mi_cmd_stack_list_frames: Not enough frames in stack.

mi_cmd_stack_list_frames: Not enough frames in stack.

There are a lot of things that cause errors, here are a bunch to look for.

  1. Are using any dynamic typing in any scripts on your project? Unity puts all of them in the build.

  2. Did you make any null references or divisions by 0? Such as transform.LookAt(nullObject.position) and it isn't there.

  3. Try changing the stripping level. You might have stripped out something that your app needs.

  4. Run, slow but exceptions to receive a more detailed stack trace.

  5. Here is the only real possibility visible from your stack trace:


"You are using Unity iPhone Basic. You are not allowed to remove the Unity splash screen from your game"

If that is the case, then you need to know that it is against the EULA and you can be punished with revocation of you license and possible legal trouble.

In the end I ended up recreating the initial scene one item at a time and testing. Oddly enough this one had no issues. The only difference is that I didn't move over an (unneeded) audio source attached to the main camera.

Edit: Leaving the question open for a bit to see if someone has a solution beyond what I ended up doing.

After 3 days of upgrading a project from Unity 2.6 to 3.0 and running into every problem seemingly possible, I almost ran aground with this same issue. The project finally ran properly on an iPod Touch 3rd Gen device, but as soon as I changed the "Player Settings"->"Target Device" to "iPhone + iPad" it died with this same error.

The "iPhone Only" build would not write "You are using Unity iPhone Basic. You are not allowed to remove the Unity splash screen from your game", but the "iPhone + iPad" build would display this message.

Your solution gave me a clue to try and create a test scene and place it before my previous splash scene. I moved it to the top and built again with no SIGABRT errors! The "remove the Unity splash" message also disappeared. From new test scene, I just loaded my normal starting splash scene and everything worked properly again.

I would say that this is a bug in Unity 3.0 when converting old scenes. The strange thing is it only happens with the iPad setting.

One last thing, even when run in "iPhone Only" mode, my program would not display my splash scene like it used to (in Unity 2.6). Now that I have a dummy test scene at the beginning, my splash scene now displays properly again.

Thanks for your post and solution.

I tweaked my Player settings. I believe it was switching the Target Platform to arm6 (OpenGL ES1.1) rather than Universal arm6+arm7

I get this bug, it's not from setting your own splash screen it's due to a bug in unity3 that still needs to be addressed

The solution described here helped me with this. You should build the project anew in Unity and NOT append the existing build, instead replace it.

I had this problem when my PRO 30 day license ran out, and I had set a splash screen in the editor. It did not remove itself, and I could not change it. I had to recreate the project to fix it- but I think if you delete your default settings from the library folder you will fix it too.

Basically it thought I had fiddled with the splash screen because the editor had kept some Pro settings when it reverted to Basic.

Simply put- even if you change a pixel in the splash screen, if it does not 100% match their default splash, it will abort intentionally. Rightfully so. it’s too easy to replace that image in an APK or APP file- they need to protect their license requirements. :slight_smile:

As a work around you should change a build setting in XCode. First select the target. Next, browse to the build settings until you find the entry about compressing PNG pictures. Select compression ‘NO’. Now try to build your game again. The issue should be solved.