Заявка "вы никогда не должны писать в / etc /" - папка недействительна.
Конечно, есть много причин для записи в системные папки - если вы пишете корпоративное программное обеспечение, которое настраивает пользователей так, что пользователю не нужно делать это вручную. Это требуется многими корпорациями, чтобы вообще одобрить Mac как рабочие компьютеры. Обычно это делается с помощью сценариев оболочки или языков высокого уровня (таких как Python или Ruby), но для удобства использования конечным пользователем необходимо, чтобы также приложения пользовательского интерфейса могли читать и записывать изменения в системные папки (например, в папку, принадлежащую конфигурации). система управления).
Я пишу профессиональное программное обеспечение, которое должно постоянно записывать в системные папки, изменять содержимое файлов конфигурации и т. Д. В папках, требующих привилегий суперпользователя. Я не достиг 100% успеха в этом, так как MacOSX был слишком недружелюбен для этого варианта использования (корпоративное программное обеспечение для корпоративного внутреннего использования), и подход, который я использую, кажется, иногда не работает. В итоге я открыл диалоговое окно запроса пароля администратора с помощью объекта Apple Script. Это отстой, но работал для моего основного варианта использования:
NSString *shellCommand = [[NSString alloc] initWithFormat:@"do shell script \"/bin/bash /usr/bin/nameoftheshellscriptgoeshere.sh\" with administrator privileges"];
NSAppleScript *script;
script = [[NSAppleScript alloc] initWithSource:shellCommand];
NSDictionary* errDict = NULL;
[script executeAndReturnError:&errDict];
Если ваш установщик поместил сценарий оболочки nameoftheshellscriptgoeshere.sh (или любое другое имя, которое вы ему дадите) в / usr / bin, вы можете сделать свое волшебство в сценарии оболочки.
Этот подход работает только в том случае, если административные действия можно выполнить с помощью сценария оболочки. Существует обходной путь, но на самом деле он не очень красив: необходимость записывать файлы конфигурации в системный каталог с помощью приложения Objective C, использование которого приводит к очень утомительному обходному пути: вы создаете измененный файл конфигурации в папку, доступную для записи какао приложение, а затем это приложение выполняет Apple Script, который выполняет сценарий оболочки с одним вкладышем, который копирует этот временный файл конфигурации в его правильное местоположение в системной папке, требующей привилегий root. Это очень неоптимально и неуклюже и вводит зависимость от указанного сценария оболочки - другими словами, приложение пользовательского интерфейса будет работать со сбоями, если сценарий оболочки не установлен в системе. И множество ненужных отдельных частей для обслуживания только по одной единственной причине: повысить привилегии приложения Cocoa сложно или невозможно, а корпоративное программное обеспечение, очевидно, не было точкой проектирования при разработке OSX.