Xcode:隐藏/保护最终的iOS应用程序中的资源文件?

我打算为iOS开发一个应用程序,并希望使用HTML5,CSS和Javascript。 最终的应用程序应该使用Xcode和UIWebView作为本地应用程序来实现。

我可以隐藏或保护我的HTML文件在最终的应用程序? 我必须将这些文件放在Xcode中名为“支持文件”的文件夹中。 因此,每个人都可以通过提取.ipa文件来购买应用程序后查看纯文件,对吧?

有很多方法可以保护您的数据,具体取决于您希望保护的程度。 为了防止偶然的黑客攻击,您可以使用string混淆algorithm来将NSString的HTML内容混淆和去混淆。 这是一个例子 。 我没有使用特定的代码,但我也没有真正推荐混淆作为一种技术,除非数据真的不是非常敏感。

更好的解决scheme是encryption HTML内容,虽然这是更多的工作,并可能涉及一些出口控制问题 ,这取决于你在哪里,以及你在哪里分发你的应用程序。

对于encryption,你有很多select。

1) 这是一个开放源码的实现,提供了NSUserDefaults之类的安全版本 。 我没有看到相当于registerDefaults:在该代码中,所以有可能一次运行你的应用程序,你可能不得不从网上下载内容。 但是,那么您可以encryption并将其作为string值存储在PDKeychainBindings中。 在随后的运行中,您可以提取存储的HTML “文件”,如下所示:

 NSString* webPageContent = [[PDKeychainBindings sharedKeychainBindings] valueForKey: @"index.html"]; 

2)这是另一个提供AESencryption包装的开源项目 。 在发布您的应用程序之前,您可以编写一些非生产代码,将HTML内容encryption成为捆绑资源的encryption数据文件。 当你的应用程序运行时,它将打开文件并解密成NSString对象,通过loadHTMLString: baseURL:

3)最后, 这里是使用底层CommonCrypto API来保护bundle资源的另一个例子 。 此示例使用自定义构build步骤来自动encryption特定文件夹中的资源,如果受保护的HTML内容将经常发生合理变化,这将节省您一些时间。

您可以在运行时encryption文件并对其进行解密,或者不能将它们包含在您的包中,并且有一个编译时脚本来读取它们,并将它们转换为应用程序中的编码数据,您可以使用以下代码将它们加载到UIWebView中:

 - (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)encodingName baseURL:(NSURL *)baseURL 

你可以在你的代码中创build所有的HTML等,然后使用UIWebView

 - (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL 

手动加载每个HTMLstring为纯文本。 不过,我build议你不要这样做。 如果有人真的想从你编译的源代码中分离出每一个string,这对他来说是可能的(除非你确实要求很高的东西)。

大多数用户根本不在意ipa文件里面的内容。 如果你能够接受检查的不到1%,不要太担心这个话题。

另一个方面也是可能的(即使这不是一个好主意):你可以将你的UIWebView指向一个秘密的网站,只有你和你的应用程序知道。 这绝对不可取