【问题标题】:How do I use Cocoa to get a URL of a bundle with a given ID, or vice versa?如何使用 Cocoa 获取具有给定 ID 的捆绑包的 URL,反之亦然?
【发布时间】:2018-09-04 19:42:33
【问题描述】:

如果我有一个包标识符为String,我如何找出它所标识的包的URL?相反,如果我有一个包的URL,我如何找出那个包的标识符为String

我只想使用 Foundation/Cocoa API 来执行此操作。

【问题讨论】:

    标签: cocoa url foundation bundle-identifier app-bundle


    【解决方案1】:

    您可以使用Bundleinit(identifier:) 后跟bundleURL 来从包标识符中获取URL,并使用Bundleinit(url:) 后跟bundleIdentifier 来获取包的URL。

    示例:

    let myBundleUrl = Bundle(identifier: "com.me.app")?.bundleURL
    
    let theirBundleId = Bundle(url: URL(fileURLWithPath: "/Applications/Mail.app"))?.bundleIdentifier
    

    请注意,NSWorkspace 也有一个 API,用于从给定的 bundle ID 获取 URL:urlForApplication(withBundleIdentifier:)。我在这里不推荐这个,因为NSWorkspace 没有从URL 获取标识符的API。

    【讨论】:

    • 对我来说,只有 NSWorkspace 方法可以通过捆绑 ID 找到(另一个)应用程序。
    • @gavv 令人着迷!因此,当您将捆绑 ID 传递给 Bundle(identifier:) 时,您会得到 nil?也许是沙盒的事情?
    • 是的,IIRC 我收到了 nil。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 2013-07-05
    相关资源
    最近更新 更多