我尝试了以下代码,它对我来说很好。也可以启动邮件应用程序。
//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
答案 0 :(得分:1)
因为您没有创建有效的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