【问题标题】:Xcode: hide / protect resource files in final iOS app?Xcode:隐藏/保护最终 iOS 应用程序中的资源文件?
【发布时间】:2012-06-18 00:08:13
【问题描述】:

我计划为 iOS 开发一个应用程序,并希望使用 HTML5、CSS 和 Javascript。最终应用应使用 Xcode 和 UIWebView 实现为原生应用。

我可以在最终应用中隐藏或保护我的 html 文件吗?我必须将文件放在 Xcode 中名为 "Supporting Files" 的文件夹中。所以大家购买app后可以通过解压ipa文件来查看纯文件吧?

【问题讨论】:

    标签: iphone ios objective-c xcode encryption


    【解决方案1】:

    有很多方法可以保护您的数据,具体取决于您希望保护的程度。对于仅针对临时黑客的最小保护,您可以使用字符串 obfuscation 算法对 HTML 内容进行混淆和去混淆,如NSStrings。这是example of doing that。我没有使用过那个特定的代码,但我也不是真的推荐 混淆 作为一种技术,除非数据真的不是很敏感。

    更好的解决方案是加密 HTML 内容,虽然这需要更多的工作,并且可能涉及一些export control issues,具体取决于您所在的位置以及您分发应用的位置。

    对于加密,您有很多选择。

    1) Here is an open source implementation that provides a secure version of something like NSUserDefaults。不过,我在该代码中没有看到与registerDefaults: 等效的内容,因此您的应用程序在第一次运行时可能需要从网络下载内容。但是,您可以将其加密并作为字符串值存储在PDKeychainBindings 中。在随后的运行中,您可以像这样提取存储的 HTML "files"

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

    2) 这是另一个open source project that provides AES encryption wrappers。您将在发布应用程序之前编写一些非生产代码,以将 HTML 内容加密为捆绑资源的加密数据文件。当您的应用程序运行时,它会打开文件并将它们解密为 NSString 对象,这些对象可以通过 loadHTMLString: baseURL: 提供给您的 UIWebView

    3) 最后,here's another example of using the underlying CommonCrypto APIs to protect bundle resources。此示例使用自定义构建步骤来自动加密特定文件夹中的资源,如果受保护的 HTML 内容会经常更改,这将为您节省一些时间。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我假设您的意思是第一句话中的“加密”和“解密”,对吧?
      【解决方案3】:

      您也可以在代码中创建所有 HTML 等,然后使用 UIWebView's

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

      手动将每个 HTML 字符串加载为纯文本。但是,我建议您不要这样做。如果有人真的想从你编译的源代码中分离出每个字符串,这对他来说是可能的(除非你真的做要求很高的事情)。

      大多数用户根本不关心 ipa 文件中的内容。如果你能接受不到 1% 的人检查它,就不要太担心这个话题。

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

      【讨论】:

        猜你喜欢
        • 2012-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-01
        • 2016-04-16
        • 1970-01-01
        • 2023-03-29
        • 2011-10-29
        相关资源
        最近更新 更多