隐藏(或加密)应用资源?

sud*_*-rf 8 macos cocoa objective-c

我正在开发一个Cocoa应用程序,它具有某些我希望保护但仍然可以显示的资源(图像).通常只需将它们放在资源文件夹中,但存储在那里可以很容易地抓取和使用它们.有没有办法隐藏这些图像,但仍然可以在应用程序中访问它们?

Ann*_*nne 9

简单方案:

将所有文件合并到一个大数据文件中,可选择使用"salt".
然后使用以下内容检索特定文件:

NSData *dataFile = [NSData dataWithContentsOfFile:filePath];  
NSData *theFile = [dataFile subdataWithRange: NSMakeRange(startPos,endPos)];
Run Code Online (Sandbox Code Playgroud)

这并不能真正保护文件,
但会阻止人们简单地拖出资源.
至少,数据文件是无法使用的,当然还有盐.

另一种方案:

为每个资源创建NSData对象.
将所有对象添加到NSMutableArray.
将数组转换为一个大的NSData对象.
将NSData对象写入文件.
并将其添加到资源文件夹中.

然后,您的应用可以读取数据文件.
并使用资源检索数组.

// Convert array to data
NSData* data=[NSKeyedArchiver archivedDataWithRootObject:theArray];
Run Code Online (Sandbox Code Playgroud)

使用NSKeyedUnarchiver再次检索数组.