Почему моя папка приложений iCloud Drive видна в MacOS, но отключена в приложении iCloud Drive на iOS?

Я разработал функцию экспорта iCloud Drive для своего приложения iOS, и она работает. Я вижу экспортированные документы в нашей общедоступной папке AppContainerFolder в папке iCloud Drive в Mac OS X 10.11.

Но на iOS я вижу папку AppContainerFolder только в приложении iCloud Drive. Он отключен, и я не могу открыть эту папку или просмотреть документы внутри.

Изображение папки отключения в приложении iOS iCloud Drive

Из настроек iCloud Drive я вижу, что файлы, которые я экспортировал, находятся в этой папке AppContainerFolder в iCloud Drive.

Изображение папки AppContainerFolder в настройках iCloud

У кого-нибудь была такая проблема с iCloud Drive?

Я использую два контейнера приложений в своем приложении, один с идентификатором "iCloud.com..." для экспорта, а другой с идентификатором "TeamIdentifier.com..." для синхронизации Ensembles-CoreData. Я явно использую URL-адреса для контейнеров, используя метод:

[[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:@"iCloud.com..."]

Я уже пытался использовать только TeamIdentifier-Container, но видимость AppContainerFolder не изменилась.

Пробовал накачать BundleVersion, поигрался с настройками Info.plist NSUbiquitousContainers. Я также сделал сборки доступными через TestFlight для внешних тестировщиков, чтобы узнать, имеет ли это какое-то отношение к устройствам разработки.

Единственное, что я еще не сделал, — выпустить новую версию в AppStore с новым BundleVersion, чтобы посмотреть, имеет ли это какое-то отношение к продуктивному приложению или приложению в разработке.

Любые советы и подсказки приветствуются.


person Bernd    schedule 14.10.2015    source источник
comment
Вы установили доступ к Public в приложениях info.plist? (NSUbiquitousContainerIsDocumentScopePublic = YES)   -  person Duncan Groenewald    schedule 14.10.2015
comment
‹key›NSUbiquitousContainers‹/key› ‹dict› ‹key›iCloud.au.com.ossh.AppName‹/key› ‹dict› ‹key›NSUbiquitousContainerIsDocumentScopePublic‹/key› ‹true/› ‹key›NSUbiquitousContainerSupportedFolderLevels‹/key› ‹string›Нет‹/string› ‹/dict› ‹/dict›   -  person Duncan Groenewald    schedule 14.10.2015
comment
Привет, Дункан, спасибо за подсказку, но да, я сделал это: ‹key›iCloud.com...‹/key› ‹dict› ‹key›NSUbiquitousContainerIsDocumentScopePublic‹/key› ‹true/› ‹key›NSUbiquitousContainerName‹/ key› ‹string›TaptileApps‹/string› ‹key›NSUbiquitousContainerSupportedFolderLevels‹/key› ‹string›One‹/string› ‹/dict›   -  person Bernd    schedule 14.10.2015
comment
Итак, для вас работает @Duncan? Вы сохраняете файл из приложения iOS в iCloud Drive и видите этот файл в приложении iCloud Drive на том же устройстве вскоре после сохранения?   -  person Bernd    schedule 14.10.2015
comment
Что ж, приложение сохраняет его в универсальном контейнере приложений, и это отображается в виде папки на iCloud Drive, оттуда вы можете добавлять/удалять документы — вы можете проверить это самостоятельно, загрузив бесплатную версию приложения (iProjectFree).   -  person Duncan Groenewald    schedule 15.10.2015
comment
@Duncan Я верю тебе, я просто надеялся, что ты написал бы что-то вроде Майкла ниже об утверждении и выпуске приложения. Хотя мое приложение уже выпущено, и оно не работает, как в разработке.   -  person Bernd    schedule 16.10.2015
comment
Клаус, я вижу ту же проблему. Как и вы, полевой игрок iCloud Drive виден и может быть открыт в Mac OS X и через Интернет. Однако папка отключена в приложении iOS iCloud Drive. Мое приложение еще не одобрено Apple. Теперь вы думаете, что это проблема?   -  person btschumy    schedule 19.10.2015
comment
Бчуми, похоже такая же проблема, хотя мое приложение уже одобрено. Может быть, это что-то еще, мы пока не видим.   -  person Bernd    schedule 20.10.2015
comment
@btschumy Решение теперь размещено ниже, возможно, оно то же самое для вас?!   -  person Bernd    schedule 06.11.2015


Ответы (2)


После разъяснений со службой технической поддержки Apple Developer я смог решить проблему.

Мое приложение объявляет два экспортированных UTI (собственные файлы резервных копий), так что контейнер iCloud по умолчанию будет НЕ включен (или будет выделен серым цветом), когда в эту папку будут сохранены другие файлы, кроме этих UTI. Наше приложение может создавать файлы PDF и CSV, но эти типы файлов НЕ были объявлены как «Типы документов» в info.plist, потому что наше приложение не может их отображать.

При добавлении типов документов PDF и CSV в info.plist контейнер iCloud мгновенно становится видимым в приложении iCloud Drive.

Для справки, вот выдержка из info.plist:

...
<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeIconFiles</key>
        <array/>
        <key>CFBundleTypeName</key>
        <string>Adobe PDF</string>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>LSHandlerRank</key>
        <string>Alternative</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.adobe.pdf</string>
        </array>
    </dict>
    <dict>
        <key>CFBundleTypeIconFiles</key>
        <array/>
        <key>CFBundleTypeName</key>
        <string>CSV</string>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>LSHandlerRank</key>
        <string>Alternative</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.comma-separated-values-text</string>
        </array>
    </dict>
</array>
...
person Bernd    schedule 06.11.2015
comment
Это кажется раздражающим. Мое приложение помещает пару файлов .txt в облачный контейнер. Это файлы конфигурации, которыми я хочу поделиться на разных устройствах. Это не означает, что я хочу сказать, что мое приложение в целом может открывать файлы .txt. Я предполагаю, что возможное решение состоит в том, чтобы изобрести собственное расширение для них и добавить его в мои экспортированные UTI. В любом случае, спасибо за информацию. - person btschumy; 08.11.2015
comment
@btschumy Мои файлы экспорта имеют собственное расширение, и я добавил их в экспортированные UTI (хотя и там у меня была ошибка), но, как я понял, мне также нужно добавить типы документов, даже если мое приложение не может открыть экспортированные PDF-файлы. И ДА, это раздражает ... лучше НЕПРАВИЛЬНО, потому что теперь наше приложение отображается в списке приложений, способных открывать PDF-файлы. Мне придется обновить Apple Bug, но я слишком занят для этого. Возможно, Apple изменит свою реализацию этого. В любом случае... попробуйте сначала без DocumentTypes, но теперь вы знаете, что делать дальше, если это не работает. - person Bernd; 09.11.2015
comment
Спасибо за советы здесь. Я последовал тому, что вы сделали, но нашел немного другое решение. У меня есть только один тип документа в моем вездесущем контейнере — мой собственный тип документа. Поэтому я не добавлял CSV или PDF, так как мое приложение ничего с ними не делает. Я обнаружил, что мне нужно иметь массив CFBundleDocumentTypes (с одной записью для моего типа документа), а также словарь NSUbiquitousContainers и массив UTExportedTypeDeclarations. После того, как я запустил свое приложение на своем iPad, я заметил, что моя папка все еще отключена в приложении iCloud Drive. Я перезапустил приложение iCloud Drive, и моя папка стала активной - person Derek Knight; 21.11.2015
comment
@derekknight У меня похожая ситуация, и я сделал все, что у вас есть, но он все еще отключен. Приложение не должно быть одобрено и находиться в магазине, верно? - person Chris Van Buskirk; 29.06.2016
comment
Неважно. мне нужно было добавить ‹string›public.data‹/string› ‹string›public.content‹/string› в UTTypeConformsTo. - person Chris Van Buskirk; 29.06.2016

Сообщение Почему мое приложение не отображается в папке iCloud Drive, по-видимому, указывает на то, что ваше приложение должно быть одобрено и выпущено, прежде чем общедоступная папка iCloud заработает в полной мере.

person Michael Rourke    schedule 15.10.2015
comment
Не так, у меня есть приложения в бета-тестировании и их контейнеры видны. - person Duncan Groenewald; 15.10.2015
comment
Спасибо @DuncanGroenewald - вы совершенно правы. Я только что попробовал это. Существовавший ранее идентификатор контейнера в старом стиле — значение NSUbiquitousContainerIsDocumentScopePublic изменено с false на true, и контейнер появляется в приложении iCloud Drive, а файлы доступны. Синхронизация NSUbiquitousContainerName и NSUbiquitousContainerIsDocumentScopePublic между iOS и OS X кажется довольно быстрой. Скачивание CFBundleVersion каждый раз. - person Michael Rourke; 16.10.2015
comment
@Michael Спасибо за подсказку, я уже видел этот вопрос, а также выпустил первую версию с функцией экспорта в iCloud Drive. Но, похоже, это не имело к этому никакого отношения. Кажется, мне придется открыть технический запрос в Apple, чтобы узнать, не является ли это какой-то другой «волшебной» работой с iCloud на серверах Apple. - person Bernd; 16.10.2015