URLForUbiquityContainerIdentifier возвращает nil, даже если настроен правильно - PullRequest
14 голосов
/ 14 декабря 2011

У меня проблема, что URLForUbiquityContainerIdentifier возвращает nil в некоторых случаях, даже если пользователь правильно все настроил в настройкахМой код:

dispatch_async(someQueue, ^{

    if (![[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]) {
        ErrLog(@"iCloud container not available.");
        return;
    }

    dispatch_async(dispatch_get_main_queue(), ^{
       [...]
    });

});

Кто-нибудь сталкивался с такой же проблемой?Я устанавливаю nil в качестве идентификатора контейнера, который должен работать в соответствии с документами Apple, но я больше не уверен в этом.Также этот код отлично работает для большинства пользователей, но почему-то не для всех.

Ответы [ 8 ]

8 голосов
/ 04 июля 2013

iPad mini с iOS7. Я только что испытал, что URLForUbiquityContainerIdentifier внезапно начал возвращать ноль. Я попытался перезагрузить устройство, но это не помогло.

В приложении «Настройки», в меню «iCloud». Я заметил, что «Документы и данные» были отключены.

Решением было изменить «Документы и данные» на «Вкл».

8 голосов
/ 27 февраля 2012

Убедитесь, что вы включили контейнеры iCloud в своем праве.Контейнеры не добавляются по умолчанию при включении прав.Нажмите знак «+» в Target / Summary / Entitlements, чтобы добавить свой appId.

7 голосов
/ 05 июля 2014

Если у кого-то возникла такая же проблема с использованием бета-версий iOS8, похоже, есть ошибка в способе генерирования прав доступа в Xcode 6. Я бился головой об этом в течение нескольких дней, пока не наткнулся на этот пост в Apple Developer. Форумы: https://devforums.apple.com/thread/229509?

По сути, Xcode генерирует ключ с именем com.apple.developer.icloud-container-identifiers, когда он должен быть com.apple.developer.ubiquity-container-identifiers ( вездесущность , а не icloud ). Также может быть установлено значение iCloud.$(CFBundleIdentifier), когда оно должно быть $(TeamIdentifierPrefix).$(CFBundleIdentifier).

Конечно, это может быть исправлено в следующей бета-версии, но я надеюсь, что это поможет любому, кто смущен.

3 голосов
/ 13 февраля 2012

Я бы посмотрел ваш файл authorlement.plist в одном приложении, в котором мне нужно было изменить $ (TEAMID) на идентификатор профиля, цифры и буквы перед днс в профиле - вот код, который будет работать с UIManagedDocument

/// test iCloud Access
- (void)initializeiCloudAccess {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        if ([[NSFileManager defaultManager]
             URLForUbiquityContainerIdentifier:nil] != nil)
            NSLog(@"iCloud is available\n");
        else
            NSLog(@"This Application requires iCloud, but it is not available.\n");
    });
}

- (NSURL *)iCloudURL
{

    return [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
}

- (NSURL *)iCloudDocumentsURL
{

    return [[self iCloudURL] URLByAppendingPathComponent:@"Documents"];
}

- (NSURL *)iCloudCoreDataLogFilesURL
{

    return [[self iCloudURL] URLByAppendingPathComponent:@"CoreDataLogs"];
}
2 голосов
/ 07 октября 2012

URLForUbiquityContainerIdentifier всегда возвращать ноль

NSURL *ubiquityURL = [fileManager URLForUbiquityContainerIdentifier:nil]; if (ubiquityURL == nil)
  • сборка приложения по xcode4.5
  • приложение включено icloud
  • IOS зарегистрирован в учетной записи icloud

ubiquityURL обычно в отладке, но ubiquityURL всегда ноль после распространения в appstore.

1 голос
/ 28 сентября 2013

Сегодня я снова столкнулся с этой проблемой.

На этот раз это было потому, что у меня был неправильный профиль обеспечения.

Invalid provisioning profile

На сайте разработчика мне пришлось создать новый профиль обеспечения. После перезагрузите профили обеспечения в Xcode5. Теперь URLForUbiquityContainerIdentifier снова возвращает действительные URL.

0 голосов
/ 24 декабря 2017

Включить «iCloud Drive» в настройках iPhone

0 голосов
/ 22 февраля 2012

Если проблема не устранена, убедитесь, что вы работаете на устройстве, так как симулятор не всегда возвращает верное значение. Я пробовал код в моем приложении, и я не получаю ноль

...