Как выполнить привилегированную операцию, как Finder, используя FileManager? - PullRequest
2 голосов
/ 16 января 2020

После запуска Xcode я выбираю Файл / Новый / Проект / macOS / Инструмент командной строки / Далее и запускаю следующий код:

import SecurityFoundation

do {
  // Authorize for privileged operations
  guard
    let authorization = SFAuthorization.authorization() as? SFAuthorization,
    let right = NSString(string: kAuthorizationRuleAuthenticateAsAdmin).utf8String
  else {
    throw CocoaError(.fileWriteNoPermission)
  }
  try authorization.obtain(withRight: right, flags: [.extendRights, .interactionAllowed])
  defer { authorization.invalidateCredentials() }

  // Rename MyApp.app into MyApp-Renamed.app
  let sourceFileURL = URL(fileURLWithPath: "/Applications/MyApp.app")
  let destFileURL = sourceFileURL.deletingLastPathComponent().appendingPathComponent("MyApp-Renamed.app")
  try FileManager.default.moveItem(at: sourceFileURL, to: destFileURL)

} catch {
  print(error)
}

К сожалению, эта программа не работает:

Error Domain = NSCocoaErrorDomain Code = 513 «Не удалось переместить« MyApp », поскольку у вас нет прав доступа к« Приложениям »." » UserInfo = {NSSourceFilePathErrorKey = / Applications / MyApp.app, NSUserStringVariant = (Переместить), NSDestinationFilePath = / Applications / MyApp-Renamed.app, NSFilePath = / Applications / MyApp.app, NSUnderlyingError = 0x1006173Do = код ошибки 13E В доступе отказано "}}

Приложение не помещено в" песочницу ". Как решить проблему?

1 Ответ

2 голосов
/ 16 января 2020

Если я правильно понимаю, получение разрешения не повышает ваш процесс. Вы просто получаете ссылку авторизации для проверки или для использования с другим API, который позволит вам выполнить привилегированную операцию. Как запуск привилегированного процесса или передача его привилегированному вспомогательному инструменту.

Задачи службы авторизации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...