以编程方式启动应用程序

Launching apps programmatically

我一直在玩 NSWorkspace。

(Mac OS 塞拉利昂)

所以,我想知道是否有任何安全的方法来找到“真正的”应用程序路径。也许联系人应用程序在系统的不同本地化中有不同的名称?为什么只有“照片”功能正常?

我想应该有一种方法,从 Apple 记录的应用程序标识符获取应用程序路径,但我什么也没找到。

记住launchApplication: returns一个BOOL不管成功与否。

要真正确定您正在启动的应用程序,您还可以尝试通过 NSWorkspace 的 URLForApplicationWithBundleIdentifier: API 查找它,您可以将 Contact 的应用程序 ID com.apple.AddressBook 插入其中.

根据结果,您可以通过以下方式调用应用的显式位置:

- (NSRunningApplication *)launchApplicationAtURL:(NSURL *)url options:(NSWorkspaceLaunchOptions)options configuration:(NSDictionary<NSString *,id> *)configuration error:(NSError * _Nullable *)error;

打开应用程序的最佳方式是从文件 url 路径。我对我的应用程序做了同样的事情,如下所示:

NSString *appPathIs = Url.path;

我把 url 路径放在一个字符串中,然后按照您的指示打开它

[[NSWorkspace sharedWorkspace] launchApplication:appPathIs];

我已经尝试过各种方法来实现相同的目标,但有时它们有效,有时却无效。如果你想尝试另一个,请考虑这个:

NSString *appPathIs = [[NSWorkspace sharedWorkspace] fullPathForApplication:appName];
NSString *identifier = [[NSBundle bundleWithPath:appPathIs] bundleIdentifier];
NSString *path = [[NSWorkspace sharedWorkspace] absolutePathForAppBundleWithIdentifier:identifier];

[[NSWorkspace sharedWorkspace] launchApplication:appPathIs];