ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ·ΡΡΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ ΠΈΠ· ΡΠ°Π·Π΄Π΅Π»Π° 8.6. ΠΠ° Π΄Π°Π½Π½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ Π²Ρ ΡΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π½Π°ΡΡ, ΡΡΠΎ Π³ΡΡΠΏΠΏΠ° Π΄ΠΎΡΡΡΠΏΠ°, ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌΠ°Ρ Π²ΠΎ Π²ΡΠ΅Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ , Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π±ΡΠ΄Π΅Ρ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΠΏΠΎ-ΡΠ²ΠΎΠ΅ΠΌΡ. ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΠΉ Π½Π° ΠΏΠΎΡΡΠ°Π»Π΅ Apple Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΠΎΠ΄ iOS Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΠ΄Ρ Π΄Π»Ρ Π΅Π³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² Π²Π°ΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΠΈ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΎΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ Π²Π°ΡΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ.
Π Π°Π½Π΅Π΅ Π±ΡΠ» ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠΎΡ ΡΠ°Π½ΡΡΡΠ΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΠ²ΡΠ·ΠΊΠ΅ ΠΊΠ»ΡΡΠ΅ΠΉ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π² ΠΎΠ±Π»Π°ΠΊΠ΅ iCloud. Π’Π΅ΠΏΠ΅ΡΡ ΠΎΡΡΠ°Π΅ΡΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΡΠΈΡΡΠ²Π°ΡΡΠ΅Π΅ ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅:
#import Β«AppDelegate.hΒ»
#import <Security/Security.h>
@implementation AppDelegate
β (BOOL) application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
NSString *key = @"Full Name";
/* ΠΡΠΎ Π½Π΅ ID ΠΏΠ°ΠΊΠ΅ΡΠ° ΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π·Π°ΠΏΠΈΡΡΠ²Π°Π»ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
Π² ΡΠ²ΡΠ·ΠΊΡ ΠΊΠ»ΡΡΠ΅ΠΉ Π² iCloud. ΠΡΠΎ ΠΈ Π½Π΅ ID ΠΏΠ°ΠΊΠ΅ΡΠ° Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠ°ΠΊΠ΅ΡΠ° Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ β com.pixolity.ios.cookbook.SecondSecurityApp*/
NSString *service = @"com.pixolity.ios.cookbook.SecurityApp";
NSString *accessGroup = @"F3FU372W5M.*";
NSDictionary *queryDictionary = @{
(__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,
(__bridge id)kSecAttrService: service,
(__bridge id)kSecAttrAccessGroup: accessGroup,
(__bridge id)kSecAttrAccount: key,
(__bridge id)kSecReturnData: (__bridge id)kCFBooleanTrue,
(__bridge id)kSecAttrSynchronizable: (__bridge id)kCFBooleanTrue
};
CFDataRef data = NULL;
OSStatus found =
SecItemCopyMatching((__bridge CFDictionaryRef)queryDictionary,
(CFTypeRef *)&data);
if (found == errSecSuccess){
NSString *value = [[NSString alloc]
initWithData:(__bridge_transfer NSData *)data
encoding: NSUTF8StringEncoding];
NSLog(@"Value = %@", value);
} else {
NSLog(@"Failed to read the value with error = %ld", (long)found);
}
self.window = [[UIWindow alloc]
initWithFrame: [[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄Π΅ΡΠ°Π»Π΅ΠΉ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΡΠ°Π±ΠΎΡΠΎΠΉ ΡΠΎ ΡΠ²ΡΠ·ΠΊΠΎΠΉ ΠΊΠ»ΡΡΠ΅ΠΉ Π² iCloud.
β’ Π ΡΠ°ΠΊΠΎΠΉ ΡΠ²ΡΠ·ΠΊΠ΅ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ°ΡΠΎΠ»ΠΈ.
β’ Π‘Π²ΡΠ·ΠΊΠ° ΠΊΠ»ΡΡΠ΅ΠΉ iCloud ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π³Π΄Π΅ ΡΠ³ΠΎΠ΄Π½ΠΎ β ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½Π° ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°Π·Ρ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ , ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΡ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ iCloud. ΠΡΠ»ΠΈ Π²Ρ Π·Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΡΠ²ΡΠ·ΠΊΡ ΠΊΠ»ΡΡΠ΅ΠΉ iCloud, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ Π½Π° Π²ΡΠ΅Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ΄Π°Π»ΠΈΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΡΠΎ ΠΎΠ½ ΡΠ΄Π°Π»ΠΈΡΡΡ ΡΠΎ Π²ΡΠ΅Ρ ΡΡΡΡΠΎΠΉΡΡΠ² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ iCloud. ΠΠΎΡΡΠΎΠΌΡ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΡΠ²Π»ΡΡΡ ΠΎΡΠΎΠ±ΡΡ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎΡΡΡ.
Π’Π°ΠΊΠΆΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΈΠ΅ΠΌΡ, ΠΈΠ·ΡΡΠ΅Π½Π½ΡΠ΅ Π½Π°ΠΌΠΈ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅ΡΡΠ΅Π³ΠΎΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠ²ΡΠ·ΠΊΠΈ ΠΊΠ»ΡΡΠ΅ΠΉ β ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 8.4), ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈ ΡΠΎ ΡΠ²ΡΠ·ΠΊΠΎΠΉ ΠΊΠ»ΡΡΠ΅ΠΉ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π² iCloud.
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅
Π Π°Π·Π΄Π΅Π»Ρ 8.0 ΠΈ 8.6.
8.8. ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ΅ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΠΏΠ΅ΡΠΎΡΠ½ΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ iOS Π·Π°ΡΠΈΡΠ°Π»Π° ΡΠ°ΠΉΠ»Ρ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π² ΠΏΠ΅ΡΠΎΡΠ½ΠΈΡΠ΅ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΎΡ Π½Π΅ΡΠ°Π½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ. Π’Π°ΠΊΠΎΠ΅ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΌΠΎΠ³ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠ΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΡ Π΄Π»Ρ 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;
}
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π΄ΠΎΠ²Π΅ΡΡΡΡ Π²Π°ΡΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ. ΠΠΎΡΡΠΎΠΌΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΡΠ΅ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π»ΠΈΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠΌΡ ΠΈ ΡΠ°ΠΌΠΈΠ»ΠΈΡ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ Ρ ΡΠ°Π½ΠΈΡΡΡΡ Π² Ρ ΠΎΡΠΎΡΠΎ Π·Π°ΡΠΈΡΠ΅Π½Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅, Π³Π΄Π΅ Π΄ΠΎ Π½Π΅Π΅ Π½Π΅ Π΄ΠΎΠ±Π΅ΡΡΡΡΡ Ρ Π°ΠΊΠ΅ΡΡ ΠΈΠ»ΠΈ ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ, ΠΊΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΌΡ ΡΡΡΡΠΎΠΉΡΡΠ²Ρ Ρ iOS.
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ. Π Π°Π±ΠΎΡΠ°Ρ Ρ ΡΡΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΊ ΡΠ²ΠΎΠ΅ΠΌΡ ΡΡΡΡΠΎΠΉΡΡΠ²Ρ Ρ iOS, ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΈ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΈ Π² Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° ΠΏΠΎΡΠΎΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈΠΌ Π΄Π»Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΉ ΠΈ ΡΠ°Π·Π΄Π°ΡΠΈ ΠΈΡ Π΄ΡΡΠ·ΡΡΠΌ. ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΠΎΡΡΡΠΏΠΈΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π΄Π΅Π»Π°ΡΡ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΈ ΡΠΎΡΠΎΠ³ΡΠ°ΡΠΈΠΈ Π² ΠΏΠ°ΠΏΠΊΡ Documents (ΠΠΎΠΊΡΠΌΠ΅Π½ΡΡ), Π³Π΄Π΅ ΠΎΠ½ΠΈ ΡΡΠ°Π·Ρ Π±ΡΠ΄ΡΡ Π³ΠΎΡΠΎΠ²Ρ ΠΊ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎ Ρ ΡΠ°ΠΊΠΈΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠΌ ΡΠ²ΡΠ·Π°Π½Π° ΠΎΠ΄Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°: Π»ΡΠ±ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ Π΄Π»Ρ iOS, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ Π² ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅, ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠ°ΠΏΠΊΠΈ Documents (ΠΠΎΠΊΡΠΌΠ΅Π½ΡΡ) Π² Π»ΡΠ±ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΎ. Π§ΡΠΎΠ±Ρ Π·Π°ΡΠΈΡΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΡΠ»Π΅Π΄ΡΠ΅Ρ Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π·Π°ΡΠΈΡΡ ΡΠ΅Ρ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Ρ ΡΠ°Π½ΠΈΡΠ΅ Π² ΠΏΠ΅ΡΠΎΡΠ½ΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ°ΡΠΈΡΠ° ΡΠ°ΠΉΠ»ΠΎΠ² β Π½Π΅ΠΎΡΡΠ΅ΠΌΠ»Π΅ΠΌΠ°Ρ ΡΠ°ΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΏΠ°ΡΠΎΠ»Ρ ΠΊ ΡΡΠΎΠΌΡ ΡΡΡΡΠΎΠΉΡΡΠ²Ρ. ΠΠΎΠΏΡΡΡΠΈΠΌ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ» Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ ΠΏΠ°ΡΠΎΠ»Ρ, Π±Π΅Π· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π½Π΅Π»ΡΠ·Ρ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ (ΠΏΡΡΡΡ Π΄Π°ΠΆΠ΅ ΡΡΠΎΡ ΠΏΠ°ΡΠΎΠ»Ρ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎΠΉ), ΠΈ ΡΠ°ΠΊΠ°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π°. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π±ΡΠ΄Π΅Ρ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΎ, Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΡΠ΅ Π² ΠΏΠ΅ΡΠΎΡΠ½ΠΈΡΠ΅ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡΡΠΈΠ΅ ΠΊΠ»ΡΡΠΎΠΌ NSFileProtectionComplete, Π±ΡΠ΄ΡΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π»Ρ ΠΏΠΎΡΡΠΎΡΠΎΠ½Π½ΠΈΡ . ΠΡΠΎΡΠΈΡΠ°ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ Π΄Π°ΠΆΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ.