Ios 保护plist文件不被用户编辑

Ios 保护plist文件不被用户编辑,ios,objective-c,ios7,plist,Ios,Objective C,Ios7,Plist,我目前正在将一组数据存储在NSUserDefaults或简单的plists中,如点、级别等,它们工作得非常好 问题是,任何人都可以编辑任何pList文件。不需要越狱。你甚至可以使用iExplorer的免费试用版 我想到了钥匙链,但这似乎比默认设置复杂得多。 我不介意用户是否能看到这些文件。我只是不希望他们能够编辑任何东西 Kai如果一段数据不敏感(例如,默认字体大小),请将其存储在NSUserDefaults中 如果需要防止偶然窥探(例如用户密码),请将其存储在钥匙链中 如果需要对用户进行安全保

我目前正在将一组数据存储在NSUserDefaults或简单的plists中,如点、级别等,它们工作得非常好

问题是,任何人都可以编辑任何pList文件。不需要越狱。你甚至可以使用iExplorer的免费试用版

我想到了钥匙链,但这似乎比默认设置复杂得多。 我不介意用户是否能看到这些文件。我只是不希望他们能够编辑任何东西


Kai

如果一段数据不敏感(例如,默认字体大小),请将其存储在
NSUserDefaults

如果需要防止偶然窥探(例如用户密码),请将其存储在钥匙链中

如果需要对用户进行安全保护(例如,注册码),则需要使用自己的加密,然后将数据存储在您喜欢的任何位置

编辑:


或者,如果您的数据结构很简单,更直接的方法(比加密)是将它们写入一个.txt文件,该文件将不可编辑或用户不可见。

我的建议是对您希望保护的任何数据使用Keychain,以防被用户编辑。一开始可能看起来很复杂,但并没有那么复杂:Keychain可以存储任意的
NSData
,因此您可以编写一个函数,将您的
NSPropertyList
,序列化并存储到Keychain中

将任意
NSData
存储到钥匙链中的函数如下所示:

+(BOOL)setKeychainData:(NSData*)value forAccount:(NSString*)account {
    if (account == nil || value == nil) {
        return false;
    }

    NSDictionary* query = @{
        (__bridge id) kSecClass          : (__bridge id) kSecClassGenericPassword,
        (__bridge id) kSecAttrAccessible : (__bridge id) kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly, // <- read about this in docs and pick the right one
        (__bridge id) kSecAttrService    : @"MyServiceName",
        (__bridge id) kSecAttrAccount    : account,
        (__bridge id) kSecValueData      : value,
    };

    OSStatus err = SecItemAdd((__bridge CFDictionaryRef) query, NULL);

    if (err != errSecSuccess) {
        NSLog(@"SecItemAdd(): %d", (int) err);
    }

    return (err == errSecSuccess);
}
+(BOOL)setKeychainData:(NSData*)帐户的值:(NSString*)帐户{
如果(科目==nil | |值==nil){
返回false;
}
NSDictionary*查询=@{
(u桥id)kSecClass:(u桥id)kSecClassGenericPassword,

(\u bridge id)ksecattracible:(\u bridge id)ksecattracible在首次仅解锁此设备后,//是的,我考虑过类似的事情。但我有点难过,用户能够如此轻松地操作数据。无论如何,感谢您的帮助!