32 votes

L'application Sandboxed Mac perd les autorisations de fichiers au profit d'autres applications

Je suis le développement d'une application qui est actuellement en bac à sable. Il agit comme un éditeur de texte de base. Récemment, j'ai voulu tester ce qui se passe quand j'ouvre un fichier dans mon application et une autre application en même temps, faire une mise à jour en une seule application, puis ensuite voir le jour dans les autres. Je suis à l'aide d' Coda ou BBEdit que mon alternative éditeurs. Si je désactive le "bac à sable" -- puis, ce problème n'existe pas. Cependant, depuis les applications doivent être en bac à sable à partir du 1er Mars, je serais plutôt de mettre en œuvre une solution plutôt que d'attendre et de voir.

Quand j'ouvre les deux fichiers et d'effectuer une modification dans mon application, et puis de passer à l'application d'autres, les modifications sont prises en compte de manière que ces éditeurs ont la version que vous venez d'enregistrer à partir de mon application. Cependant, si j'effectue l'inverse de l'enregistrement à partir de leur application et puis de passer à la mienne-pas de joie. Sans entreprendre aucune action, la console signale deux erreurs spécifiques: deny file-issue-extension et deny file-write-data. L'application semble être en perte de privilèges pour modifier le document, car il a été changé par un éditeur externe après que le document a été ouvert dans mon application. Si j'essaie d'enregistrer le fichier dans mon application, il lui demande de reproduire le document parce qu'il a perdu l'accès au document original. Cela ne se produit pas dans l'autre sens parce que ces applications n'ont pas été en bac à sable et à cet effet, disposer d'autorisations que mon application ne fonctionne pas. Il ne semble pas que vous pouvez empêcher l'application d'autres de faire des modifications si vous ne souhaitez pas ce comportement.

La documentation sur developer.apple.com mentionne rien à ce type de situation. Je ne suis pas sûr si c'est un comportement intentionnel. Si c'est le cas, je peux juste dire que mon utilisateur que le document autorisations ont été perdues et elles devraient enregistrer une nouvelle version ou de ré-ouvrir le fichier. Si il n'est PAS prévu de comportement, alors que la méthode dans le NSDocument API serait d'accorder les autorisations pour le fichier une fois qu'il a été perdu? Je suppose que la réponse est la première, que c'est prévu, mais quelqu'un peut confirmer et s'il y a de la documentation?

1voto

deleted_user Points 3118

Sans entreprendre aucune action, la console signale deux erreurs spécifiques: refuser de fichiers-problème-extension et de refuser d'écriture de fichiers de données. L'application semble être en perte de privilèges pour modifier le document, car il a été changé par un éditeur externe après que le document a été ouvert dans mon application. Si j'essaie d'enregistrer le fichier dans mon application, il lui demande de reproduire le document parce qu'il a perdu l'accès au document original

Le comportement correct dans ce genre de situation est de ne pas écraser le fichier, mais pour demander à l'utilisateur s'il souhaite recharger le document, si donc le recharger et ensuite l'écrire.

L'OS est en train de faire la bonne chose en ne permettant pas à un aveugle d'écrire sur un fichier qui a été modifié.

Voir NSFilePresenter - (void)presentedItemDidChange pour voir si elle a changé. Relire le fichier et ensuite voir si vous pouvez l'enregistrer. Vous n'avez pas de dire que vous avez été refusé une lecture sur le fichier.

Aussi, puisque vous navez pas affiché le code qu'il pourrait être utile de montrer quel est le code que vous utilisez pour accéder au fichier et l'enregistrer. NSDocument a construit dans le traitement de certains types de modifications de fichiers dans le bac à sable.

0voto

Cocoa Dev Points 2442

Permet d'appeler votre Application ScottEdit et votre concurrent comme StackEdit

Il peut y avoir plusieurs choses qui se passent. NSDocument a un lockDocument méthode. StackEdit peut avoir verrouillé le document et ne PAS l'ouvrir après l'enregistrer. Si vous quittez l'application, le fichier doit être déverrouillé et disponible pour votre application. Si c'est le cas, vous aurez besoin pour créer une notification lorsque les attributs de fichier à modifier à l'aide kqueue ou d'une autre.

Si l'autre application est de le "bloquer" l'accès à votre application. Vous pouvez envoyer un e-mail pour que développeur et lui demander de mettre à jour son application de manière à ce qu'il se débloque le document après l'avoir sauver. Cette dernière étape est en plus de la configuration des notifications parce qu'un autre développeur peut venir et faire la même chose (la rupture de votre application).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X