IOS8 Невозможно создать папку/файл в папке с общим контейнером группы приложений

Я использую следующий код для создания папки/файла под общим контейнерный путь. Это поможет как расширению приложения, так и расширению, содержащему приложение, получить доступ к данным.

чтобы получить общее расположение URL-адреса контейнера:

+(NSURL*)getSharedContainerURLPath
{
    NSFileManager *fm = [NSFileManager defaultManager];

    NSString *appGroupName = APP_EXTENSION_GROUP_NAME; /* For example */

    NSURL *groupContainerURL = [fm containerURLForSecurityApplicationGroupIdentifier:appGroupName];

    return groupContainerURL;
}

для создания каталога

+(void)createDirAtSharedContainerPath
{
    NSString *sharedContainerPathLocation = [[self getSharedContainerURLPath] absoluteString];    
    NSString *directoryToCreate = @"user_abc";
    //basically this is <shared_container_file_path>/user_abc
    NSString *dirPath = [sharedContainerPathLocation stringByAppendingPathComponent:directoryToCreate];

    BOOL isdir;
    NSError *error = nil;

    NSFileManager *mgr = [[NSFileManager alloc]init];

    if (![mgr fileExistsAtPath:dirPath isDirectory:&isdir]) { //create a dir only that does not exists
        if (![mgr createDirectoryAtPath:dirPath withIntermediateDirectories:YES attributes:nil error:&error]) {
                NSLog(@"error while creating dir: %@", error.localizedDescription);                
        } else {
                NSLog(@"dir was created....");
        }
    }
}

приведенный выше код не вызывает ошибки, он говорит об успехе, но я не могу найти папку под общим контейнером. Любая идея, которая может быть оценена

Ответы

Ответ 1

Я только что сделал свой код, изменив следующий код

NSString *sharedContainerPathLocation = [[self getSharedContainerURLPath] absoluteString];

to

NSString *sharedContainerPathLocation = [[self getSharedContainerURLPath] path];    

Ответ 2

Для Swift

func createProjectDirectoryPath(path:String) -> String
    {
        let containerURL = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.abc")
        let logsPath = containerURL!.URLByAppendingPathComponent(path)
        //print(logsPath.path);

        do {
            try NSFileManager.defaultManager().createDirectoryAtPath(logsPath.path!, withIntermediateDirectories: true, attributes: nil)
        } catch let error as NSError {
            NSLog("Unable to create directory \(error.debugDescription)")
        }
        return logsPath.path!
    }

Использовать

var strSavePath : String = self.createProjectDirectoryPath("Large")

Примечание. После того, как ваша группа приложений настроена, этот выше код полезен для создания папки.