Утверждение «вы никогда не должны писать в папку /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, использование которого вызывает очень утомительный цикл: вы создаете измененный файл конфигурации в папке, доступной для записи Cocoa. приложение, а затем это приложение выполняет Apple Script, который выполняет однострочный сценарий оболочки, который копирует этот временный файл конфигурации в правильное место в системной папке, требуя привилегий root. Это очень неоптимально и неуклюже и вводит зависимость от указанного сценария оболочки - другими словами, приложение пользовательского интерфейса будет работать со сбоями, если сценарий оболочки не установлен в системе. И множество ненужных отдельных частей, которые нужно поддерживать только по одной-единственной причине: повышение привилегий приложения Cocoa сложно или невозможно, а корпоративное программное обеспечение, по-видимому, не было точкой проектирования при разработке OSX.
person
karoliina
schedule
20.08.2012