Swift 如何使用相同的BundleIdentifier清除应用程序

Swift 如何使用相同的BundleIdentifier清除应用程序,swift,macos,bundle-identifier,Swift,Macos,Bundle Identifier,我一直在测试我正在开发的一个应用程序,但在包标识符方面遇到了问题 我已将应用程序复制到某个位置进行测试,然后将其删除。然而,我发现当我尝试这样的事情时: //当前应用程序 让id=Bundle.main.bundleIdentifier! 让thisApp=NSRunningApplication.runningApplications(带bundleIdentifier:id)。最后! //得到一捆 让bundleURL=NSWorkspace.shared.urlForApplication

我一直在测试我正在开发的一个应用程序,但在包标识符方面遇到了问题

我已将应用程序复制到某个位置进行测试,然后将其删除。然而,我发现当我尝试这样的事情时:

//当前应用程序
让id=Bundle.main.bundleIdentifier!
让thisApp=NSRunningApplication.runningApplications(带bundleIdentifier:id)。最后!
//得到一捆
让bundleURL=NSWorkspace.shared.urlForApplication(带bundleIdentifier:bundleID)!
guard let bundle=bundle(url:bundleURL)
否则{
打印(“oops!bundleURL:\(bundleURL)”)
返回
}
我通常会收到错误消息。似乎
urlForApplication
us使用的是旧副本的位置(自删除后),而不是当前位置


如何找到这些过去的位置并将其删除?应用程序的旧副本已被删除(存储箱已清空)。

您可以从正在运行的应用程序列表中获取一个数据包,然后按这些数据包标识符进行筛选,然后再次筛选不等于当前数据包标识符的数据包:

let sameBundleIdentifiers = NSWorkspace.shared.runningApplications.filter({$0.bundleIdentifier == (Bundle.main.bundleIdentifier ?? "")})

print("sameBundleIdentifiers", sameBundleIdentifiers.count)

let filtered = sameBundleIdentifiers.filter {$0 != NSRunningApplication.current } 

当前位置在哪里?
urlForApplication
的文档中说,“如果多个应用程序具有相同的bundle ID,则此方法使用各种(当前未指定的)试探法。”假设它认为删除的应用程序仍然存在,您需要将要查找的应用程序移动到一个位置,该位置通过其未指定的启发式函数更理想。试试
/Applications
。我注意到它在
iCloud Drive(Archive)
文件夹中,它一定是我在摆弄iCloud帐户时创建的。我会删除那个特定的位置,看看会发生什么。我更担心如果我有多个版本会发生什么。对于应用程序来说,这是一个特殊的位置。。。如果某个应用程序确实在iCloud上,它是否“安装”在mac上?我不知道。或者“iCloud驱动器(存档)”是本地目录?我以前从未弄乱过iCloud。尝试将其移动到
/Applications
并查看
urlForApplication
是否可以找到它。
thisApp.bundleURL
@LeoDabus这太棒了。它给了我工作的动力。谢谢