NSFileWrapper имеет различный вес на iPhone и ОС Ma c (Catalyst) - PullRequest
0 голосов
/ 18 марта 2020

Во время этого вынужденного перерыва я работаю над своим приложением и пытаюсь выпустить его для ОС Ma c благодаря Catalyst. Но у меня есть большая проблема с ключевой функцией: я использую NSFileWrapper для (не) сериализации моих файлов Core Data (store, shm, wal). Он отлично работает на iPhone, но на ОС Ma c он не ...

Вот код:

- (NSData *) bundleContents {
    // Make sure project has been saved on device
    if (!self.project.fileExists) return nil;

    // Create the file wrappers
    NSFileWrapper *store = [[NSFileWrapper alloc] initWithURL:[self _storeContainerURL] options:0 error:nil];
    NSFileWrapper *additionalContent = [[NSFileWrapper alloc] initWithURL:[self _additionalContentContainerURL] options:0 error:nil];
    NSMutableDictionary *fileWrappers = [NSMutableDictionary dictionaryWithCapacity:2];
    fileWrappers[[self.class _storeContainerName]] = store;
//  if (additionalContent) fileWrappers[[self.class _additionalContentContainerName]] = additionalContent;
    NSFileWrapper *versionBundle = [[NSFileWrapper alloc] initDirectoryWithFileWrappers:fileWrappers];

    // Serialize bundle and compress it
    NSLog (@"Store Serialized RAW Data: %d bytes", store.serializedRepresentation.length);
    NSLog (@"Contents:");
    NSDictionary *wrappers = store.fileWrappers;
    for (NSString *filename in wrappers) {
        NSFileWrapper *wrapper = wrappers[filename];
        NSLog(@"-- %@: %d bytes", filename, wrapper.serializedRepresentation.length);
    }
    NSLog (@"Bundle: %d bytes", versionBundle.serializedRepresentation.length);

    return [versionBundle.serializedRepresentation compressedData];
}

При работе на iPhone, это ведение журнала:

Store Serialized RAW Data: 376969 bytes
Contents:
-- persistentStore-shm: 49244 bytes
-- persistentStore: 163924 bytes
-- persistentStore-wal: 173068 bytes
Bundle: 376969 bytes

Что выглядит нормально (каталог хранилища имеет размер 377 КБ, что соответствует сумме вложенных упаковщиков файлов (файлы store, shm и wal). И конечный результат имеет тот же вес , поскольку на данный момент мы не включаем AdditionalContent (в любом случае он пуст).

Но при работе на Ma c я не получаю те же результаты:

Store Serialized RAW Data: 3387669 bytes
Contents:
-- persistentStore: 151636 bytes
-- persistentStore-wal: 160780 bytes
-- persistentStore-shm: 36956 bytes
Bundle: 9015573 bytes

Вес каталога Store составляет 3,4 МБ (!!), что ни к чему не относится. Его обертки для файлов по-прежнему не превышают 400 КБ. И что еще более странно, конечный выходной файл (Bundle) составляет 9 МБ, тогда как он просто содержит каталог Store и его 3 файла.

Кто-нибудь имеет представление о том, что не так с моим кодом?

Большое вам спасибо! Я застрял на нем со вчерашнего дня ..

Томас

...