MacOS – In-app updating of macOS applications doesn’t work (ShipIt)

macossoftware-update

Ever since OS X El Capitan came out, I've been having troubles updating third-party applications (non-App Store) using any provided in-app updating functions. Usually, these will auto-download the update and ask you to restart the application to apply the update. Sometimes this is handled in the application menu bar, and sometimes there will be an in-app pop-up asking you to restart the application.

enter image description here

However, no matter how many times I restart the application, the update will never be applied, so it starts to download the update anew and ask again to restart the application.

Some examples of applications I'm having problems with are: Atom Editor, Slack (Web DL version), and a few others.

I read somewhere that this might be related to SIP protection that was introduced with El Capitan, and that only root users can use that particular flavour of auto-update now. Is this correct?

My main user is not an admin user. Instead I need to invoke my admin user's authorization when admin privileges are required. I don't know if that has anything to do with the issue – the in-app updates never asks for admin privileges.

With that in mind, I'd like to avoid disabling SIP protection if possible.

Edit: system.log example

Unfortunately, I was quicker than the first comment below, and against that advice I installed cask. So now the problematic applications like Atom and Slack, are currently at their latest version. However, I appear to have a similar problem with a new app called RealTime Board. Where Atom and Slack auto-updates via the file menu and then asks for a restart, RealTime Board downloads the update and asks for a restart via a pop-up. So I suspect it works much in the same way as those other applications I've been having problems with. Again, the app update refuses to apply upon restart, and will continuously ask me to update & restart via a pop-up on app launch. I will have to wait and see how Atom and Slack behaves once new versions are available. Here is the attempted update of RealTime Board from system.log:

May 17 22:56:49 myuser ShipIt[2803]: Beginning installation
May 17 22:56:49 myuser ShipIt[2803]: Couldn't abort install and restore owned bundle to previous location file:///Applications/RealtimeBoard.app, error NSError { domain: NSPOSIXErrorDomain, code: 2, description: "No such file or directory" }
May 17 22:56:52 myuser ShipIt[2803]: Installation error: Error Domain=NSPOSIXErrorDomain Code=13 "Permission denied" UserInfo={NSLocalizedDescription=Permission denied}
May 17 22:56:52 myuser com.apple.xpc.launchd[1] (com.electron.realtimeboard.ShipIt[2803]): Service exited with abnormal code: 1
May 17 22:56:52 myuser ShipIt[2848]: Resuming installation attempt 2
May 17 22:56:52 myuser ShipIt[2848]: Couldn't abort install and restore owned bundle to previous location file:///Applications/RealtimeBoard.app, error NSError { domain: NSPOSIXErrorDomain, code: 2, description: "No such file or directory" }
May 17 22:56:54 myuser ShipIt[2848]: Installation error: Error Domain=NSPOSIXErrorDomain Code=13 "Permission denied" UserInfo={NSLocalizedDescription=Permission denied}
May 17 22:56:54 myuser com.apple.xpc.launchd[1] (com.electron.realtimeboard.ShipIt[2848]): Service exited with abnormal code: 1
May 17 22:56:54 myuser ShipIt[2857]: Resuming installation attempt 3
May 17 22:56:54 myuser ShipIt[2857]: Couldn't abort install and restore owned bundle to previous location file:///Applications/RealtimeBoard.app, error NSError { domain: NSPOSIXErrorDomain, code: 2, description: "No such file or directory" }
May 17 22:56:56 myuser com.apple.usbmuxd[114]: notice    USBMuxBonjourDeviceListenerCreate: LOCKDOWN_V2_BONJOUR_SERVICE_NAME is _apple-mobdev2._tcp,8d1f07bd
May 17 22:56:57 myuser ShipIt[2857]: Installation error: Error Domain=NSPOSIXErrorDomain Code=13 "Permission denied" UserInfo={NSLocalizedDescription=Permission denied}
May 17 22:56:57 myuser syslogd[60]: ASL Sender Statistics
May 17 22:56:57 myuser com.apple.xpc.launchd[1] (com.electron.realtimeboard.ShipIt[2857]): Service exited with abnormal code: 1
May 17 22:56:57 myuser ShipIt[2877]: Too many attempts to install, aborting update
May 17 22:56:57 myuser ShipIt[2877]: Error aborting installation: Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory" UserInfo={NSLocalizedDescription=No such file or directory}
May 17 22:56:57 myuser ShipIt[2877]: Application launched at file:///Applications/RealtimeBoard.app

I suspect the problem may have to do with ShipIt, which I think is the same system Atom uses for updates.

There is a thread here suggesting (disputedly) that the problem may have to do with the admin user not being the "owner" of the app. Listing chown on the application reveals this:

drwxr-xr-x@   3 myuser  admin     102 Mar 22 13:34 RealtimeBoard.app

I'm assuming this means that I am the application owner.


Using cask?

NB: I read something about Homebrew-Cask as an alternative to not having to do all of the manual work of updating non-App Store applications. I've never heard about cask before, but I use Homebrew. Could it be an advisable solution?

Best Answer

You need admin permissions to write to /Applications – that's why the update is failing. Try running the app through Terminal:

sudo path/to/app/Contents/MacOS/appname.

Or just use an administrator account.