Книга: iOS. Приемы программирования

Решение

Решение

Сделайте следующие шаги.

1. Выполните все операции, необходимые для создания профиля инициализации приложения, — об этом см. в разделе 8.0. Приложение должно быть подключено к такому идентификатору, для которого действует защита данных (Data Protection).

2. Подпишите ваше приложение профилем инициализации.

3. Задайте разрешения на подписывание кода вашего приложения (следуйте указаниям, изложенным в разделе 8.6).

4. Используйте метод createFileAtPath: contents: attributes: экземпляра NSFileManager, чтобы сохранить ваш файл. Для свойства attributes передайте словарь, содержащий ключ NSFileProtectionKey. Этот ключ может иметь одно из следующих значений.

• NSFileProtectionNone — при таком значении сохраненный файл не имеет никакой защиты. Файл, сохраненный с таким уровнем защиты, будет доступен в приложении, сохранившем его на диск, а также любым бесплатным или коммерческим файловым менеджером, взятым из Интернета. Такая программа-менеджер может свободно просматривать файловую систему устройства с iOS, даже если это устройство защищено паролем. Указывая этот ключ, вы получаете возможность как считывать ваш файл, так и записывать в этот файл, в том числе и тогда, когда пользовательское устройство заблокировано.

• NSFileProtectionComplete — это наиболее высокий уровень защиты, который вы можете задать для ваших файлов. При наличии данного ключа приложение сможет считывать такой файл и записывать в него информацию, пока устройство разблокировано. Если устройство заблокировано, считывать файл и записывать в него какие-либо данные невозможно. При применении такого уровня защиты коммерческие файловые менеджеры не могут читать содержимое файла, даже если пользовательское устройство разблокировано.

• NSFileProtectionCompleteUnlessOpen — значение очень похоже на NSFileProtectionComplete. Разница понятна уже из названия: вы сможете получить доступ к файлу, если уже открыли его, даже если впоследствии пользователь заблокирует устройство. Итак, открыв файл впервые, вы получаете к нему гарантированный доступ до тех пор, пока существует ваше приложение.

• NSFileProtectionCompleteUntilFirstUserAuthentication — при таком значении ваше приложение сможет считывать файл и заносить в него информацию, как только пользователь в первый раз разблокирует свое устройство. После этого вы можете и далее обращаться к файлу, даже если впоследствии пользователь вновь заблокирует устройство.

Вот пример:

— (NSString *) filePath{
NSFileManager *fileManager = [[NSFileManager alloc] init];
NSError *error = nil;
NSURL *documentFolderUrl = [fileManager URLForDirectory: NSDocumentDirectory
inDomain: NSUserDomainMask
appropriateForURL: nil
create: YES
error:&error];
if (error == nil && documentFolderUrl!= nil){
NSString *fileName = @"MyFile.txt";
NSString *filePath = [documentFolderUrl.path
stringByAppendingPathComponent: fileName];
return filePath;
}
return nil;
}
— (BOOL) application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
/*
Предпосылки:
1) подписать приложение валидным профилем инициализации;
2) в вашем профиле должна быть активизирована полная защита файла;
3) добавить в проект разрешения на подписывание кода.
*/
NSFileManager *fileManager = [[NSFileManager alloc] init];
if ([self filePath]!= nil){
NSData *dataToWrite = [@"Hello, World"
dataUsingEncoding: NSUTF8StringEncoding];
NSDictionary *fileAttributes = @{
NSFileProtectionKey: NSFileProtectionComplete
};
BOOL wrote = [fileManager createFileAtPath: [self filePath]
contents: dataToWrite
attributes: fileAttributes];
if (wrote){
NSLog(@"Successfully and securely stored the file");
} else {
NSLog(@"Failed to write the file");
}
}
self.window = [[UIWindow alloc]
initWithFrame: [[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}

Оглавление книги


Генерация: 0.085. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз