使用 LSCopyApplicationURLsForBundleIdentifier 和 CFArrayGetValueAtIndex 获取应用的 URL/path 时出错

Error while obtaining URL/path of app using LSCopyApplicationURLsForBundleIdentifier and CFArrayGetValueAtIndex

我正在使用 LSCopyApplicationURLsForBundleIdentifier 根据其包标识符获取目标系统上安装的第三方应用程序的 URL(s)。但是,当尝试从返回的 CFArray 中检索第一个 URL 时,我在 CFArrayGetValueAtIndex 的调试器中不断收到以下错误:

Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

这是我的 Swift 代码部分:

let urls = LSCopyApplicationURLsForBundleIdentifier("com.aa.bb" as CFString, nil)
if (urls != nil) {
     let url = unsafeBitCast(CFArrayGetValueAtIndex(urls as! CFArray, 0), to: CFString.self)
}
urls?.release()
url?.release()

如何正确提取 URL,最好是 String

太复杂了,用 takeRetainedValue() 获取指针——正确处理内存管理——并将其转换为 [URL]

if let urls = LSCopyApplicationURLsForBundleIdentifier("com.aa.bb" as CFString, nil)?.takeRetainedValue() as? [URL],
   let url = urls.first {
     print(url)
}

(CF)URL(CF)StringunsafeBitCast无论如何是不可能的,要得到一个字符串路径write

print(url.path)