NSWorkspace 在启动邮件应用程序时抛出错误

NSWorkspace throws error when launch the mail application

我试过下面的代码,它对我来说工作正常。也可以启动邮件应用程序。

//Note the below path is coming from bundle identifier of Mail APP 
NSString *path=@"/Applications/Mail.app"
NSURL *mailURL = [NSURL URLWithString:path];
NSError *err=nil;
[[NSWorkspace sharedWorkspace] launchApplicationAtURL:mailURL
                                              options:NSWorkspaceLaunchDefault
                                        configuration: someData
                                                error:&err];

但它在控制台上向我抛出以下错误消息,这实际上意味着什么。如何解决以下问题。

CFURLCopyResourcePropertyForKey failed because it was passed this URL which has no scheme: /Applications/Mail.app

抛出错误是因为您没有创建有效的 URL。 URL 需要一个方案,在您的情况下它是文件:所以正确的 URL 是 file:///Applications/Mail。您需要创建一个文件 URL,其工作方式如下:

NSString *path=@"/Applications/Mail.app";
NSURL *mailURL = [NSURL fileURLWithPath:path];

请注意,如果用户将 Mail.app 移动到另一个位置,您的代码就会中断。另请注意,如果用户不使用 Apple 的 Mail 应用程序,则该应用程序也无法正常工作。

这里给出了一种更正确的方法:How to launch New Message window in Mail.app from my application

另一种选择是以更灵活的方式为 Mail.app 获取 URL,以涵盖已移动 Mail.app 的用户。这个想法是使用包标识符,然后使用

要求 NSWorkspace 启动此应用程序
- (BOOL)launchAppWithBundleIdentifier:(NSString *)bundleIdentifier
                          options:(NSWorkspaceLaunchOptions)options
   additionalEventParamDescriptor:(NSAppleEventDescriptor *)descriptor
                 launchIdentifier:(NSNumber **)identifier

(详见此处 http://theocacao.com/document.page/183)。