When using the absolutePathForApplication(withBundleIdentifier:) api, I find 
that if the path is on an external mount, the api will return nil / none if the 
uid is 0, when it will return an actual path when the uid is a valid user login 
id (eg, 501, 502 etc). 

To reproduce, mount a .dmg containing some app that isn’t on the boot drive, 
and insert its bundeID for the value of inputPath in the code below:


import Foundation
import AppKit

let inputPath = “com.some.bundleID"
let pathToApp: String? = 
NSWorkspace.shared.absolutePathForApplication(withBundleIdentifier: inputPath)
let result = pathToApp ?? "nil"
print(result)


In Xcode, if I edit the scheme to debug/run as myself, I’ll get a valid result, 
but if I edit it to run as root, I’ll get back this error msg:

schedule invalidation <DYTransport 0x10128bcc0, error: lost transport 
connection (31)>

I have also tried querying LaunchServices directly with 

let altPath = LSCopyApplicationURLsForBundleIdentifier(inputPath as CFString, 
&error)

which again returns successfully as me, but as root gives the error:

Error Domain=NSOSStatusErrorDomain Code=-10814 "kLSApplicationNotFoundErr: E.g. 
no application claims the file”))

It’s been suggested to me that the problem may be that the LS database isn’t 
updated for transient mounts for the root user. That makes sense of the error 
messages, but two questions:

1. Should this be considered a bug, or expected behaviour?
2. Any suggestions for a workaround?


TIA



Best


Phil
@sqwarq




_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to