我正在获取所有已安装的内部卷的数组,并检查卷是否使用FV2加密。以下是具体代码:
2
问题是无论卷是否加密,此代码都返回true。
答案 0 :(得分:0)
根据the docs of NSURLVolumeIsEncryptedKey看起来volType
将成为一个NSNumber(将原始值打包为对象的东西)。使用boolValue
从中解压缩BOOL。
NSURL *url = [NSURL fileURLWithPath:NSHomeDirectory()];
NSNumber *volumeType = nil;
NSError *error = nil;
if (![url getResourceValue:&volumeType forKey:NSURLVolumeIsEncryptedKey error:&error]) {
NSLog(@"Failed to get resource value: %@", error);
} else {
BOOL isEncrypted = [volumeType boolValue];
NSLog(@"Encrypted: %@", isEncrypted ? @"YES" : @"NO");
}
答案 1 :(得分:0)
如果系统上有多个分区,则API似乎无法正常工作。我已经在2个mac上测试了它,一个有3个分区,另一个只有root(单个分区)。以下swift代码在只有root分区(单分区)的系统上运行良好。
func checkIfHomeDirIsEncrypted() -> Bool? {
let url:URL = URL.init(fileURLWithPath: NSHomeDirectory())
do {
let resourceValues:URLResourceValues = try url.resourceValues(forKeys: [URLResourceKey.volumeIsEncryptedKey, URLResourceKey.volumeIsRootFileSystemKey])
if let isEncrypted:Bool = resourceValues.volumeIsEncrypted {
return isEncrypted
}
print("Failed to get status")
return nil
}
catch {
print("Failed to get resource values")
return nil
}
}
if let isEncrypted:Bool = checkIfHomeDirIsEncrypted() {
print("Volume is \(isEncrypted ? "encrypted":"not encrypted")")
}