В этом случае недопустимым параметром является имя приложения.
Если вы проверите документацию по NSTask, вы увидите, что используемый вами метод в основном является оболочкой для низкоуровневого exec (Системный вызов.Это означает, что вам нужно предоставить имя фактического исполняемого или двоичного файла, чтобы он мог создавать процесс.В вашем случае вы даете ему каталог (используйте терминал, чтобы подтвердить, что большинство пакетов приложений в / Applications являются каталогами).Вот почему это barfs.
Вы можете заглянуть в каталог комплектов TextMate, чтобы найти фактический исполняемый файл (должен быть где-то в /Applications/TextMate.app/Contents/MacOS).Затем вы можете изменить свой код так, чтобы он вызывал фактический исполняемый файл.
Однако может показаться, что правильный способ сделать это с помощью Cocoa - использование NSWorkspace, вы можете взглянуть на его openFile: withApplication: метод,который, кажется, делает то, что вам нужно, и в этом случае вы действительно указываете каталог пакета приложения в качестве параметра, как вы это делали изначально.
Официальная документация здесь .
Кстати, я не могу полностью взять на себя ответственность за это;см. этот ответ StackOverflow , чтобы узнать больше об этой теме.