Swift: Can I get information for an application which is not running?(SWIFT:我可以获取未运行的应用程序的信息吗?)
本文介绍了SWIFT:我可以获取未运行的应用程序的信息吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在编写一个存储有关其他应用程序的数据的应用程序。我可以很容易地找到当前最前面的应用程序及其信息:
let frontApp = NSWorkspace.shared.frontmostApplication!
从那里我可以得到:
let currentAppName = currentApp.localizedName ?? "Dunno"
let currentAppIcon = currentApp.icon
如果应用程序不在前台,我知道我可以循环访问其他正在运行的应用程序:
let apps = NSWorkspace.shared.runningApplications
for app in apps as [NSRunningApplication] {
print(app.localizedName ?? "whatever")
print(app.bundleIdentifier ?? "bundle")
}
我希望获得有关当前未运行的应用程序的相同信息,但我确实知道该应用程序的捆绑包标识符。我怎样才能得到这个?
推荐答案
首先,使用
获取应用程序的捆绑包let bundleURL = NSWorkspace.shared.urlForApplication(withBundleIdentifier: someBundleID)!
let bundle = Bundle(url: bundleURL)!
一旦有了捆绑包,您就可以从NSRunningApplication:
bundleIdentifier您已经知道了。bundleURL您刚刚掌握了上面的代码。executableArchitecture现在是bundle.executableArchitectures,带有复数。因为它没有运行,所以您获得了可以在其上运行的所有体系结构,而不是它正在运行的特定体系结构。executableURL您可以使用bundle.executableURL,没有问题。launchDate、isFinishedLaunching、processIdentifier、ownsMenuBar没有意义,因为应用程序没有运行。
icon和localizedName。我提出的获得这些数据的方法不太可靠。若要获取icon,请执行
NSWorkspace.shared.icon(forFile: bundleURL.path)
我确信这至少在99%的情况下会产生与NSRunningApplication.icon相同的结果,但我不确定是否存在边缘情况...
获取localizedName更不可靠。有两种方法,两种都不好。选择最适合您目的的
FileManager.default.displayName(atPath: bundleURL.path)这将为您提供本地化名称,但如果用户重命名应用程序,它将返回新名称,而不是包名称从捆绑包的
localizedInfoDictionary获取CFBundleDisplayName,回退到CFBundleName和infoDictionary。由于某种原因,这并没有给出本地化名称,即使我说了localizedInfoDictionary。let infoDict = (bundle.localizedInfoDictionary ?? bundle.infoDictionary) let localizedName = infoDict?["CFBundleDisplayName"] ?? infoDict?["CFBundleName"]
这篇关于SWIFT:我可以获取未运行的应用程序的信息吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
织梦狗教程
本文标题为:SWIFT:我可以获取未运行的应用程序的信息吗?
基础教程推荐
猜你喜欢
- 通过重定向链接在 Google Play 中打开应用 2022-01-01
- iPhone - 获取给定地点/时区的当前日期和时间并将其与同一地点的另一个日期/时间进行比较的正确方法 2022-01-01
- 如何从 logcat 中删除旧数据? 2022-01-01
- libGDX 从精灵或纹理中获取像素颜色 2022-01-01
- AdMob 广告未在模拟器中显示 2022-01-01
- NSString intValue 不能用于检索电话号码 2022-01-01
- Android:getLastKnownLocation(LocationManager.NETWORK_PROVIDER 2022-01-01
- navigator.geolocation.getCurrentPosition 在 Android 浏览器上 2022-01-01
- Cocos2d iPhone 非矩形精灵触摸检测 2022-01-01
- iOS4 创建后台定时器 2022-01-01
