2017-01-16 3 views
0

У меня есть программа установки, которая помещает приложение в /Applications. После того, как приложение скопировано там, я написал плагин для установки, чтобы получить пользовательские конфигурации, такие как адрес сервера и номер порта. Плагин записывает эти конфиги в файл plist внутри /Applications/myapp.app.Objective-C: Редактировать содержимое plist в комплекте приложений

Я пишу:

NSString *filePath = @"/Applications/emptyapp.app/Contents/Resources/DummyConfig.plist"; 
NSString *test = @"somestring"; 
NSError *error; 
[[NSFileManager defaultManager] createFileAtPath:filePath contents:nil attributes:nil]; 
[test writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error]; 
if(error){ 
    [self alert:error.localizedDescription]; 
} 

Im получая разрешение отказано для записи там, что имеет смысл, но как я могу обойти эту проблему?

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

(Я использую Packages, чтобы сделать установщик и создать плагин в Objective C. В пакетах есть флажок «требуется пароль администратора», но он, похоже, не использует эти учетные данные для чего-либо, так как я не могу написать приложение bundle.)

+0

I не думайте, что вы должны написать в App Bundle. Если Apple разрешит это, тогда другие приложения легко взломают и изменят ситуацию в других приложениях. Что вам нужно сделать, это записать в папку «Документы» приложения. – GeneCode

+1

Хорошо, я придумал работу с временными файлами. благодаря – theQuestions

ответ

0

Наилучшей практикой было бы, чтобы ваше приложение записывало и получало доступ к этому файлу plist внутри папки библиотеки пользователя где-то, как правило, в поддержке приложений. Тогда вам не нужно беспокоиться о проблемах с разрешениями, или система может обнаружить ваше приложение как поврежденное. Если вам абсолютно необходимо что-то изменить в своем приложении, установщик должен будет выполнить весь путь с повышенными разрешениями, или вам понадобится создать механизм для получения повышенных разрешений в вашем приложении (например, Little Snitch)