Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error when enabling auto login of macOS app using a helper

I'm trying to have my app auto launch on login following Tim's tutorial: http://blog.timschroeder.net/2012/07/03/the-launch-at-login-sandbox-project/

I followed the instructions to the letter but I'm getting an error when I re-login to my computer as follows:

Jan 10 12:55:01 pc61 com.apple.xpc.launchd[1] (com.myApp.macgap.helper[25725]): Could not resolve CFBundleIdentifier specified by service: -10814: com.myApp.macgap.helper
Jan 10 12:55:01 pc61 com.apple.xpc.launchd[1] (com.myApp.macgap.helper): Service only ran for 0 seconds. Pushing respawn out by 10 seconds.

To outline:

  • I have my main app called "myApp" (ID: com.myApp.macgap )
  • In that app I have a helper app with ID: com.myApp.macgap.helper
  • When you launch the main app and go to preferences, you have an option to enable auto login (to fit to the Apple compliance rules)
  • I log out of my computer, log back in and look at the console to see what's going on (that's how I get the code above)

Another point worth mentioning, is when I do "Show package content" on the app and double click the helper app, it does launch the main app...

like image 234
denislexic Avatar asked Jan 10 '15 12:01

denislexic


People also ask

Why can't I turn on automatic login on my Mac?

When you go to System Preferences > Users & Groups > Login Options on your Mac, the option for "Automatic login" may be grayed out and cannot be enabled. The "Users & Groups" settings may be locked for security purposes or encryption may be enabled on your Mac.

Can t uncheck open at login Mac?

Right-click on the app and hover over Options in the menu. Apps that are set to open automatically will have a check mark next to Open at Login. Click that option to uncheck it and disable it from opening.

How to Add login items on Mac?

On your Mac, choose Apple menu > System Preferences, then click Users & Groups . Select your user account, then click Login Items at the top of the window. Do any of the following: Add a login item: Click the Add button below the list of items, select a document, folder, app, server, or other item, then click Add.


3 Answers

It all comes down to how launchd and launchctl work, as already answered, the regular use case often can be solved by reinstalling the app and ensuring the app is inside the applications folder. But there's another case that @byb is talking about, when this happens on your development machine – this can be caused by invalid launchd configuration.

When you run SMLoginItemSetEnabled it registers your bundle identifier along with other information in launchd service. At some point later, when your app changes, gets cleaned, or something else happens to it, which gets picked up by launchd, launchd may disable that particular login item. Apparently, sometimes this doesn't go smoothly, and consecutive calls with SMLoginItemSetEnabled will not work as expected or the agent / helper app simply won't launch.

The first thing to try is simply changing the bundle identifier for your launcher. If this solves the issue, try figuring out what's wrong with the original. Run launchctl print-disabled "user/$(id -u)" to display disabled services and login item associations. If the output contains your troubling bundle identifier – you are in luck.

I didn't find a way of removing disabled services by name using launchctl and had to do it by manually editing configuration files. Because they system-owned, you won't be able to simply click and edit, instead launch Xcode as root and remove the necessary references.

sudo /Applications/Xcode.app/Contents/MacOS/Xcode "/private/var/db/com.apple.xpc.launchd/loginitems.$(id -u).plist"
sudo /Applications/Xcode.app/Contents/MacOS/Xcode "/private/var/db/com.apple.xpc.launchd/disabled.$(id -u).plist"

Restart, run launchctl print-disabled "user/$(id -u)" to confirm removed items are no longer in the list. Try SMLoginItemSetEnabled again, hopefully now it will work as expected.

like image 186
Ian Bytchek Avatar answered Sep 18 '22 22:09

Ian Bytchek


I had the exact same problem just now, and while looking for a solution found this (unanswered) question.

At least in my case, this desired functionality of the worked fine when I copied the app (exported from Xcode as a dev-id signed .app) to a fresh OS X install/account without all my development stuff on it. Of course it must also be in /Applications, as stated in the tutorial referred to in the question.

I am not sure why this feature of the app did not work on my development machine. Perhaps the problem could be due to some form of conflict with all the other near-identical copies of my app I have on disk (I have an archive of different versions of the app, plus the copies Xcode stores itself), all with the same bundle id of course.

Hope this helps in one way or another!

like image 26
byb Avatar answered Sep 20 '22 22:09

byb


I had the same problem, removing other copies of app except one in /Applications solved the problem for me. To remove .app files generated by Xcode you can run Product->Clean.

like image 33
Rognarroc Avatar answered Sep 17 '22 22:09

Rognarroc



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!