Mac Sandboxed приложение теряет разрешения на файлы другим приложениям

StackOverflow https://stackoverflow.com/questions/8838353

  •  27-10-2019
  •  | 
  •  

Вопрос

Я разрабатываю приложение, которое в настоящее время является песочницей. Он действует как основной текстовый редактор. Недавно я хотел проверить, что происходит, когда я открываю файл в своем приложении и другое приложение одновременно, сделать обновление в одном приложении, а затем увидеть обновление в другом. я использую Coda или же BBEdit Как мои альтернативные редакторы. Если я отключаю песочницу - тогда этой проблемы не существует. Однако, поскольку приложения должны быть песочницей по состоянию на 1 марта, я бы предпочел реализовать решение, а не ждать и посмотреть.

Когда я открываю оба файла и делаю редактирование в своем приложении, а затем переключаюсь на другое приложение, изменения отражаются так, чтобы эти редакторы только что сохранили из моего приложения. Однако, если я выполняю обратное сохранение от их приложения, а затем перехожу к моему - без радости. Не выполняя никаких действий, консоль сообщает о двух конкретных ошибках: deny file-issue-extension а также deny file-write-data. Анкет Приложение, по -видимому, теряет привилегии для редактирования документа, так как оно было изменено внешним редактором после того, как документ был открыт в моем приложении. Если я попытаюсь сохранить файл в моем приложении, он просит дублировать документ, потому что он потерял доступ к исходному документу. Это не происходит наоборот, потому что эти приложения не были песочницей, и поэтому есть разрешения, которые не делает мое приложение. Также не кажется, что вы можете помешать другому приложению вносить изменения, если вы не хотите такого поведения.

В документации на разработчике. Apple.com не упоминается ничего об этом типе ситуации. Я не уверен, является ли это поведение. Если это так, то я могу просто сказать своему пользователю, что разрешения на документ были потеряны, и они должны либо сохранить новую версию, либо повторно открыть файл. Если это не предназначенное поведение, то какой метод в API NSDOCUMENT предоставит файл разрешение после того, как он будет потерян? Я предполагаю, что ответ является первым, что это задумано, но может ли кто -нибудь подтвердить и есть ли документация?

Это было полезно?

Решение

Без выполнения каких-либо действий консоли сообщают о двух конкретных ошибках: отрицание файлов-утепления и отрицание файло-записей-data. Приложение, по -видимому, теряет привилегии для редактирования документа, так как оно было изменено внешним редактором после того, как документ был открыт в моем приложении. Если я попытаюсь сохранить файл в моем приложении, он просит дублировать документ, потому что он потерял доступ к исходному документу

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

ОС поступает правильно, не позволяя слепой записи по изменению файла.

См. NSFilePresenter - (void) PresentIteMdidChange, чтобы увидеть, изменился ли он. Перечитайте файл, а затем посмотрите, сможете ли вы его сохранить. Вы не говорите, что вам было отказано в чтении в файле.

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

Другие советы

Давайте позвоним в ваше приложение Scottedit и ваш конкурент в качестве Stackedit

Там может быть несколько вещей. NSDocument имеет метод LockDocument. Stackedit, возможно, заблокировал документ и не разблокировал его после сохранения. Если вы покидаете приложение, файл должен быть разблокирован и доступен для вашего приложения. Если это так, вам нужно будет создать уведомление о том, когда атрибуты файла изменяются с помощью Kqueue или другого.

Если другое приложение «блокирует» доступ к вашему приложению. Вы можете отправить электронное письмо этому разработчику и попросить его обновить его приложение, чтобы оно разблокировало документ после сохранения. Этот последний шаг в дополнение к настройке уведомлений, потому что другой разработчик может прийти и сделать то же самое (разбивая ваше приложение).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top