使用 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)String
的unsafeBitCast
无论如何是不可能的,要得到一个字符串路径write
print(url.path)
我正在使用 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)String
的unsafeBitCast
无论如何是不可能的,要得到一个字符串路径write
print(url.path)