How to debug .app bundle crash-on-startup on Mac OS X? - macos

What is the best way to find out why an .app bundle immediately crashes when started? Does Mac OS X store logs anywhere?
For example, this does not work, and crashes immediately:
open /Applications/MyApp.app
However, calling the executable directly seems to work:
/Applications/MyApp.app/Contents/MacOS/MyAppLauncher
Info.plist should be fine and point to the right executable:
<key>CFBundleExecutable</key>
<string>MyAppLauncher</string>
For all I know, OS X never even calls my code. How can I find out what it is doing, and why it is failing?
Note: This application uses sandboxing, so I presume it has something to do with that. But I'd like to see some logs that confirm that.

Run the console app, you can find it with spotlight
Run your app
at the bottom of the list, you will see messages the app is sending to log, for eaxmple:
MyApp(14489) deny mach-lookup com.apple.networkd

I had a similar issue, The Console app idea was great. But in my case, I was trying to open the package in a location different from /Applications. Copying it to /Applications solved my issue.
I got this message in the Console, which wasn’t very clear what the problem really was:
fault 23:35:12.833776-0300 runningboardd RunningBoard launch requested for identifier launched process with different identifier QtMeshEditor
Hope this helps anyone running in a similar issue.

Related

Mac SDL+OpenGL App refuses to launch from anything but terminal

We've got a fairly mature cross-platform game engine which we've had running on OSX for several years now without a hitch; we recently upgraded the game from SDL 1.2.15 to 2.0, and at some point in the conversion, I goofed something up and now we have a bizarre problem where the app launches just fine from the terminal, but when you launch the app from a double-click in the Finder, it just bounces once in the dock and just goes away.
We're baffled because insofar as I can tell, there's only a one-liner being printed in Console.app: Exited with code: 255 (naturally running from the terminal doesn't help here because we can't reproduce the problem there; the app runs fine when launched in a terminal).
So the only thing we can figure is it's either something we're goofing up in our main.cpp, or something we've hosed in how I set up the dylibs/frameworks. It's also possible that it's something to do with the working directory not being set right, but to the best of my abilities, I believe we're doing it right (regardless of your current working directory; the app attempts to forcibly set said directory to be in the Resources folder - this was necessary to get the game to launch, but I don't know if we're doing it wrong). This feels like a somewhat awkward fit for stackoverflow, for which I apologize, since it's not a simple "paste this code and ask what's wrong" job. I have two ways for you to reproduce it; firstly we are an open-source project, and you can get our source code (complete with a mac project file and all dependencies included in the repo, set up and ready-to-go exactly as I've perhaps erroneously created them), at our github page. The one change you'll need to do is open a file at the root level, named master-config.cfg, and remove the // comments from it (so the engine knows you want to launch a simple demo game shipped with the engine).
Alternately, I have a stripped down (~15mb zipped) binary you can directly download and try to run, if that's sufficient to diagnose the problem.
As said before, we're open-source, so we welcome any pull-requests for fixes!
You need to write a minimal Cocoa wrapper so that OS X will not SIGKILL you for not launching properly. I will give you a pull request with that wrapper.

EDSDK EdsOpenSession EXC_BAD_ACCESS signal

I believe this is similar to the thread: Canon SDK 2.11 on OSX
However the solution there did not work for me. I'm perplexed because I'm not sure how to figure out what has changed. I had some working software, did not work on it over the holiday and now when I open it up to work it fails. Not only my software but the demo app included with the SDK, which I have never changed and indeed used to work just fine.
I have tried with two different cameras (5DmII and 5DmIII) with the same result.
when I try and run the application, the camera is recognized but, as it attempts to open a session it receives a EXC_BAD_ACCESS signal. In each program it happens when a call is made to EdsOpenSession() with this message...
*** -[NSConcreteData release]: message sent to deallocated instance 0x8157af0
Interestingly, when I tried to use the EOS Utility that would crash also. So I updated and now that works great. I followed the suggestion in the above thread and copied the EDSDK.framework from the working bundle to my program and recompiled but I get the same results.
I'm trying to figure out how to contact Canon to get some information but they don't make it easy to get help so I'm appealing to the one group I know is responsive.
The only thing I can think is that sometime over the holiday I updated some critical library without knowing it.
Has anyone else run into and been able to solve this?
I'm running OS X 10.7.5, xcode 4.1, and EDSDK 2.11.3
Solved this. It did turn out to be the same solution as the mentioned link. However, what I was missing was that I needed to also copy the new EDSDK.framework into /Library/Frameworks not just have it in my source directory. This may be because I don't have everything setup correctly in XCode.

Mac OS X app sandbox issue

I am writing a command line tool. There I'd like to create a directory in the /Users/user_name/Library directory. When I run that program from Terminal as a root, then everything is ok, but the problem is when I want to use that tool as a backend for cups (that program is called, also as root, when I print something). The program is called, but in the system.log file I found the error: sandboxd: deny file-write-*. I'm a new Mac OS X programmer and I'm not sure how to fix it. Anybody can help me?
Since Snow Leopard cups is running in a sandbox that prevents it from misbehaving - like accessing user's home. Depending on your OS X version you can get away by using another directory, not user's home. On Lion it is even more restrictive than that. The sandboxing rules are built-in to the cups binary (as opposed to sb scripts), so your only luck may be replacing cups with a version that specifically allows access to what you need in the sandbox (if you really want to go there, the rules are defined by cupsdCreateProfile in cups/scheduler/process.c). AFAICT there is nothing you can do in your application, because sandboxing is designed to prevent exactly what you are trying to do.
Another alternative is to not run cups as root, because sandboxing is only used when cups is run as root.

Couldn't register with the bootstrap Server

I just changed some code in my program and got this error:
Couldn't register com.yourcompany.XXX with the bootstrap server.
Error: unknown error code.
This generally means that another instance of this process was already
running or is hung in the debugger.Program received signal:
“SIGABRT”.
I tried restoring my program to a version that worked, rebooted, restarted, empty caches and rebuild on versions that even worked before.
Any help would be appreciated.
I was able to recover from this by unplugging the iPad, powering it down and back up, clearing all XCode caches and targets, and doing a clean build.
I'm running XCode 3.5.4 and iOS 4.2.1
UPDATE: Same problem running Xcode 4.3 and iOS5 - just power-cycle the device.
You might wish to kill all Simulator processes, that can cause this error as well.
Here's a one-liner to kill 'em all:
kill -9 `ps ax | grep Simulator | grep -v grep | awk '{print $1}'`
Or more concise, like #brianegge mentions as a comment:
killall -9 Simulator
My solution was to restart the ipad, wait a while and try again.
If you get the hang when using the simulator, look at this thread: Strange Error When Testing Simulator
You may find this test of interest, as it will tell you ASAP if the only solution is to reboot now or not:
Open Terminal and run this command: ps -Ael | grep Z. If you get two entries, one "(clang)" and the other your app or company name, you're hosed - reboot.
If you are a developer, enter a short bug and tell Apple how absolutely annoying having to reboot is, and mention they can dup this bug to "rdar://10401934" .
I received the same problem, running an app on an iPhone from Xcode. The message that I was getting was the same as above:
Couldn't register xxx.com.company.appname with
the bootstrap server. This generally
means that another instance of this
process was already running or is hung
in the debugger.
I tried many things to fix the problem, in this order, all which failed:
force quitting the app on the iPhone
force quitting and then deleting the app the iPhone
opening and closing the project
cleaning the project
restarting XCode
Eventually, I rebooted the iPhone and the problem went away, which leads me to think that the source of the problem is a hung process that Xcode cannot or will not kill. If I am able to reproduce exactly what I was doing during my debugging session to get this strange state I'll add another note here.
I opened a bug report with Apple: https://bugreport.apple.com/cgi-bin/WebObjects/RadarWeb.woa/19/wo/WBbbbyopNFW8FFUuNSbk0w/10.66
Please let me know if you can't access it.
Summary: XCode debugger is not releasing bootstrap server port
Steps to Reproduce:
While debugging an iPhone iOS5 app in the simulator in Xcode 4.2 Build 4D5163b on Lion 10.7.2, a crash can sometimes result in being unable to start the bugger. Instead, Xcode produces this error:
Couldn't register com.MyApp.MyApp with the bootstrap server.
Error: unknown error code. This generally means that another instance
of this process was already running or is hung in the debugger.Program
received signal: “SIGABRT”.
Expected Results:
Should be able to start debugger after a crash.
Actual Results:
Cannot start debugger. The only way I've discovered to make the simulator work again is to restart Mac OS.
Regression:
Notes:
Lots of people are having this problem:
iPhone - strange error when testing on simulator
Couldn't register with the bootstrap Server
Bootstrap Server Error in Xcode IPHONE
https://discussions.apple.com/message/10416765?messageID=10416765
Quitting XCode and the Simulator (& ensuring ps -Al | egrep "Xcode|Simulator" returns nothing) does not help the problem.
Running "launchtl bslist | grep MyApp" reveals that com.MyApp is still registered with the bootstrap server:
$ launchctl bslist | grep MyApp
A com.MyApp.MyApp.UIKit.migserver
A com.MyApp.MyApp
I wrote some code to find the port and invalidate it, but this too fails:
NSMachBootstrapServer *bsserver = [NSMachBootstrapServer sharedInstance];
NSMachPort *port = (NSMachPort *)[bsserver portForName:#"com.MyApp.MyApp"];
[port removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:<#(NSString *)#>
NSLog(#"port = %#",port);
NSLog(#"port.isValid=%d",[port isValid]);
[port invalidate];
NSLog(#"port.isValid=%d",[port isValid]);
I got the same issue with Xcode 4. The solution was to change the scheme.
Run set to Debug,
Test set to Debug,
Profile set to Release,
Analyze set to Debug,
Archive set to Release
Restarting my computer solved my problem. This error happened when I connected my new iPod Touch to my mac and ran my project in simulator at the same time.
The easiest way its to change the target name,
Remembert to change it back next day after a restart.
To sum it all up.
Sometimes kill -9 (the process id) helps.
Sometimes (as stated) launchctl list | grep UIKitApplication | grep "(your app name/identifier)" | awk '{print $3}' | xargs launchctl remove works.
But if its a "zombie" process, only a restart will solve your problem.
A temporary solution is to just change the identifier (IOS Application Target, Summary Tab) to something else (like "com.mycompany1.myapp" from "com.mycompany.myapp") but remember to change it back after the reboot and before you submit it.
(of course this will create another app on the simulator, but I guess that's the least of your problems....)
Unfortunately, there is no "easy way to greatness"... ;-)
Here is how I think I solved this 'strange' error:
Couldn't register com.yourcompany.XXX with the bootstrap server. Error: unknown error code.
This generally means that another instance of this process was already running or is hung in the debugger.Program received signal: “SIGABRT”.
(1) Clean all the caches, targets, headers on both Xcode and the simulator.
(2) Restart your iPhone when it is not connected to the computer and make sure no versions of the program that gave you problems are left on your iPhone.
(3) Restore any previous version of your program that you know absolutely worked at one point in time.
(4) Shut down your computer/laptop. (I needed to do it 4 times.) Makes no sense to me.
(5) Restart your machine and try running a different program to see if you still get the error. If you do not get the error on another program.
(6) Compile the program that gave you the error:(1) First with an earlier version that worked. And then, the version that gave you the error. Naturally, you may have to re-add code on a step-wise basis to make sure you know what code caused the error.
This happened to me because another application was eating up the computer's resources. I quit the simulator, quit the application which was hanging my computer and restarted the simulator, and it worked then. The error means that a previously killed process couldn't reach the end of the queue, and is holding up the current one.
Lot's of good answers have been provided for fixing the problem.
I have found that I can recreate this bug by creating a breakpoint in my code so that the execution pauses. Then if I press on the Stop Button the bug will now appear when I try to run the code again. Resuming the execution before pressing the Stop Button therefore avoids this issue.
Hope this helps.
closing down xcode then starting it, and restarting my iphone solved my problem
I didn't find a better solution than mentioned above: restart the iPhone. It seems that there's a daemon that connects to the Xcode debugger not properly killed.
You can avoid this behavior ALWAYS stopping the debugging session through the "Stop" button in Xcode, and waiting for the app to exit automatically on the iPhone. I always have to reboot if I click "Start" without stopping first, or exiting with the iPhone's button, or something like that. Hope it helps
I encountered this issue myself just now while evaluating AppCode. I discovered that XCode had somehow attached itself to my application while I was attempting to attach AppCode to my application. I simply stopped the XCode debug session and it worked as expected. I hope this will help somebody.
Just rebooting the device should solve the problem. See the analogous question about the simulator: iPhone - strange error when testing on simulator
This may be caused by an instance of your app running in the background. This simplified process worked for me without even having to close xCode or shutdown my computer.
Close simulator
Stop the app from running in xCode.
Open activity monitor and search for a process running with your App NAME.
Kill this process in Activity Monitor
Rebuild your project and you should be all set
In theory Pål's command line solution should work as well. The issue definitely seems to be caused by an extra instance of the app running in the background. The app does not always seem to be getting killed properly after each test in simulator or on the device. I first noticed this when jumping between simulator and a device frequently.
As a preventive measure it is good practice to always hit the stop button in xCode after each test.
Very interesting results when trying to restart my computer. It said, and this is no joke, that 103 users where "sharing" the system. When I restarted, it back down to the usual four (I have Time Machine stuff for all of my computers going through this computer). I stopped the problem by simply setting up an app that monitors that activity, and does not allow additional users to "share" my computer without my permission. What it does is create a window every time someone wants access, and I have to press "Approve" before they can get in. This didn't work properly until I made the changes below.
I made sure it would tell me when somebody stopped sharing. Whenever Xcode has this problem, I know long before it returns the errors.
This is now useful for almost everything, but annoying during gaming of any kind.
I then wrote a script that fixed the problem by, basically, clearing the Simulator processes that might possible cause problems.
This app will be very useful to developers, so I am "polishing" it up a bit, then it is off to the App Store. When it gets to that point, I will post a link to it here (it will be free).
Okay, I've got a workaround for the hardware issue that doesn't involve rebooting the phone. I assume this will also work on the simulator but I haven't tried it.
Force Springboard to relaunch by changing the language. Settings -> General -> International -> Language.
I just changed it to Spanish, waited for Springboard to relaunch, changed it back to English, and was good to go.
This evening I got the same issue saying
"Couldn't register com.xxx.yyy with the bootstrap server. Error:
unknown error code.
This generally means that another instance of this process was already
running or is hung in the debugger.(lldb)"
and I got solved
1.Just disconnect my Device (for me its iPhone) from Xcode/ Mac machine
2.Reboot the Device (my iPhone)
3.Removed previously installed/corrupted app
4.Again connect device and started exception
It works well
Hope this will help someone there.

Mac OS X 10.5 App "not supported on this architecture" cured by copying?

I have an app that updates itself over the internet, and the updated copy won't run on PowerPC machines (G5) running Leopard (10.5.8). Double-clicking the app produces a message saying "You can't open the application "appname" because it is not supported on this architecture." But here's the weird part: if I duplicate the app using the Finder or using a cp -R command, then the duplicate runs fine! And yet, if I do ls -laeR on both apps, the results are identical. I restarted the machine, and the difference between the two copies was still there.
Sometimes, renaming the app made it run. After a few tries, I managed to rename it back to the original name and still have it run.
If this was just on one machine, I'd dismiss it as disk corruption, cosmic rays, or a voodoo hex, but it was reported by a customer and then I reproduced it on my own machine.
Any ideas what could cause this behavior?
It turns out that the Launch Services database had somehow flagged the app as unsupported, which I verified by using the semi-secret lsregister command line tool to dump the database. Anything that would change the mod date of the app, such as touch, sufficed to make Launch Services wake up and smell the coffee.
Sounds to me like an extended attribute or some other aspect that isn't being carried over to the duplicate of the program files.
Maybe try looking into running the xattr command on the output of ls -laeR on the app bundle?

Resources