Mac песочница приложение теряет права доступа к файлам для других приложений - PullRequest
32 голосов
/ 12 января 2012

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

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

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

Ответы [ 2 ]

1 голос
/ 08 августа 2012

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

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

ОС делает правильные вещи, не позволяя слепой записи поверх измененного файла.

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

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

0 голосов
/ 03 августа 2012

Позволяет называть ваше приложение ScottEdit и вашего конкурента как StackEdit

Может происходить несколько вещей.NSDocument имеет метод lockDocument.StackEdit, возможно, заблокировал документ и НЕ разблокировал его после сохранения.Если вы выходите из приложения, файл должен быть разблокирован и доступен для вашего приложения.В этом случае вам необходимо создать уведомление об изменении атрибутов файла с помощью kqueue или другого.

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

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