NSWorkspace выдает ошибку при запуске почтового приложения

Я попробовал приведенный ниже код, он отлично работает для меня. Также я могу запустить почтовое приложение.

//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

person Hussain Shabbir    schedule 07.05.2015    source источник


Ответы (1)


Ошибка возникает, потому что вы не создаете допустимый URL-адрес. URL-адресу нужна схема, в вашем случае это файл: поэтому правильный URL-адрес — file:///Applications/Mail. Вам нужно создать URL-адрес файла, который работает следующим образом:

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

Обратите внимание, что ваш код ломается, если пользователь переместил Mail.app в другое место. Также обратите внимание, что если пользователь не использует приложение Apple Mail, оно также не будет работать для пользователя.

Здесь приведена одна из возможностей сделать это более правильным способом: my-application">Как запустить окно нового сообщения в Mail.app из моего приложения

Другой вариант — получить URL-адрес для Mail.app более гибким способом, охватывающим пользователей, которые переместили Mail.app. Идея состоит в том, чтобы использовать идентификатор пакета, а затем попросить NSWorkspace запустить это приложение, используя

- (BOOL)launchAppWithBundleIdentifier:(NSString *)bundleIdentifier
                          options:(NSWorkspaceLaunchOptions)options
   additionalEventParamDescriptor:(NSAppleEventDescriptor *)descriptor
                 launchIdentifier:(NSNumber **)identifier

(см. также подробно здесь http://theocacao.com/document.page/183) .

person Volker    schedule 07.05.2015
comment
Спасибо за ответ, но определили идентификатор пакета. Также он работает, но просто выдает предупреждающее сообщение. - person Hussain Shabbir; 07.05.2015
comment
Также я хотел отправить данные Web HTML. Так что он запустит почтовое приложение с содержимым webView. Но если используется открытый URL, то это не поможет. - person Hussain Shabbir; 07.05.2015
comment
Он выдает предупреждение по какой-то причине, это неверный URL-адрес файла. см. мой ответ. - person Volker; 07.05.2015
comment
Когда я использовал fileURLWithPath, он не выдает мне предупреждающее сообщение. Я думаю, что это тот, который исправит это предупреждение. Спасибо - person Hussain Shabbir; 07.05.2015