Как сохранить файлы основных данных в личной папке
Я выпустил приложение iOS для пользователя через дистрибутив Adhoc. Пользователь установил приложение, и они могут просматривать файлы, такие как файлы sqlite, изображения, хранящиеся в каталоге документов. Доступ к нему можно получить через сторонние приложения, такие как iExplorer, iMazing.
Вопросы:
1. Можно ли хранить данные в личном каталоге, к которым нет доступа из других источников или программного обеспечения.
2. Есть ли библиотека для шифрования основных данных, которую другие приложения не должны читать?
Я пробовал следующие решения, но это не помогает.
1. Я использовал атрибуты защиты данных - NSFileProtectionComplete и NSFileProtectionCompleteUnlessOpen. Но все же данные доступны для чтения, даже если устройство заблокировано.
2. Я пробовал библиотеку SQLCipher для шифрования данных, но она не поддерживает базовую структуру данных.
Пожалуйста, совет и спасибо.
1 ответ
Вы должны использовать каталог поддержки приложений для безопасного хранения файлов БД. Вы можете получить путь к этой папке следующим образом:
let appSupportDirURL = FileManager.default.urls(for:.applicationSupportDirectory, in:.userDomainMask).last
Вам нужно создать этот каталог в do/catch при первом использовании:
try FileManager.default.createDirectory(at: appSupportDirURL, withIntermediateDirectories: true, attributes: nil)
Теперь добавьте имя вашего файла БД в этот путь:
let storeURL = appSupportDirURL.appendingPathComponent("MyDatabaseName")
И, наконец, используйте этот URL, когда вы звоните addPersistentStore(ofType:configurationName:at:options:)
на ваше NSPersistentStoreCoordinator
создать БД на диске.
Я не знаю каких-либо библиотек, которые бы помогли вам зашифровать всю базу данных Core Data, но на самом деле я не думаю, что вам нужно делать это, когда ваш файл DB больше не доступен - по крайней мере, для приложений с обычными требованиями безопасности.