Когда вы используете сжатый тильдой путь в оболочке, оболочка расширяет тильду для вас, поэтому, когда вы запускаете команду в оболочке, вы устанавливаете путь к изображению рабочего стола в расширенный путь (/ путь / к / desktop.jpg). Когда вы используете NSTask, оболочка не работает, поэтому показанный вами код устанавливает ее в сжатый тильдой путь. Очень немногие ожидают такого пути; они не расширяют тильду, поэтому она не работает.
Чтобы этот код работал, вам нужно расширить саму тильду, используя соответствующий метод объекта NSString, или создать путь, добавив к пути, возвращенному NSHomeDirectory()
.
Тем не менее, разговор с System Events, как предложил Чак, является гораздо лучшим способом реализовать это. Обратите внимание на его комментарий, рассказывающий, как это сделать, не требуя леопарда.