Как правильно управлять файлами iCloud через NSFileManager?

Я пытаюсь добавить синхронизацию iCloud в мое приложение для iOS/Mac, используя методы iCloud в NSFileManager (без документов или файловых координаторов). Приложение должно синхронизировать аудиофайлы между различными экземплярами; создавать, удалять и метаданные изменения. Это не приложение для совместной работы, поэтому я не очень беспокоюсь о конфликтах и ​​т. Д. У меня есть кое-что базовое, но я столкнулся с некоторыми базовыми вопросами, на которые не могу найти однозначных ответов.

  1. При использовании iCloud участвуют две локальные директории: директория с песочницей, из которой создается файл, и директория контейнера ubiquity. После того, как я включу файл для Ubiquity, должен ли я начать взаимодействовать с файлом в контейнере Ubiquity напрямую или я должен продолжать взаимодействовать с файлом песочницы и выталкивать / извлекать изменения из аналога Ubiquity? Похоже, что последний лучше, так что я не теряю все пользовательские файлы, если они отключают iCloud (не уверен, что происходит с файлами в контейнере ubiquity в этом случае).

  2. Если я сохраняю два файла, есть ли предпочтительный способ отправлять / извлекать инкрементные изменения в / из контейнера ubiquity? Насколько я понимаю, если пользователь изменяет файл на данном устройстве, все другие устройства получают инкрементные изменения в своей локальной копии вездесущей (если загружено). Должен ли я просто копировать файл целиком в локальный каталог песочницы каждый раз, когда изменяется файл ubiquity, и наоборот?

1 ответ

Решение

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

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

Другие вопросы по тегам