This is a solution using NSURL .
It expects an NSURL object as a parameter and returns the original path if url is an alias or nil .
func resolveFinderAlias(url:NSURL) -> String? { var isAlias : AnyObject? do { try url.getResourceValue(&isAlias, forKey: NSURLIsAliasFileKey) if isAlias as! Bool { do { let original = try NSURL(byResolvingAliasFileAtURL: url, options: NSURLBookmarkResolutionOptions()) return original.path! } catch let error as NSError { print(error) } } } catch _ {} return nil }
Swift 3:
func resolveFinderAlias(at url: URL) -> String? { do { let resourceValues = try url.resourceValues(forKeys: [.isAliasFileKey]) if resourceValues.isAliasFile! { let original = try URL(resolvingAliasFileAt: url) return original.path } } catch { print(error) } return nil }
Be aware to grant appropriate rights if the function is called in an isolated environment.
source share