【问题标题】:iOS - is it possible to download bundles from the internet with updated xibs?iOS - 是否可以使用更新的 xib 从互联网下载捆绑包?
【发布时间】:2011-06-23 21:25:45
【问题描述】:

我希望能够在应用发布后通过更改 xib、捆绑它们、下载该捆绑包并将客户端配置为在这些新捆绑包中查找新 xib 来自定义我的应用程序中的 xib。

到目前为止,我已将一个 xib 添加到我创建的包中并尝试下载它:

   // bundle URL is NSURL to uploaded resource for bundle
   NSBundle *myBundle = [[NSBundle bundleWithURL:bundleURL] retain];

我收到此错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSBundle initWithURL:]: non-file URL argument'

我的问题:有可能做我打算做的事情吗?此错误表明这是不可能的。

如果无法下载捆绑包,是否可以只下载一个 xib 并使用它?

谢谢!

【问题讨论】:

    标签: ios bundle updates


    【解决方案1】:

    您收到此错误是因为捆绑包作为文件夹存储在文件系统中。您可以轻松下载文件,但不能下载文件夹。 NSBundle 知道这一点,因此它只允许本地文件 URL 进行初始化。您可以通过三种方式下载捆绑包:

    1. accepted answer here 中所述,您可以将捆绑包下载为 zip 存档并解压缩。

    2. 您可以在服务器上存储一个额外的文件,其中列出了包中每个文件的文件名,并通过下载每个文件在本地创建它。

    3. 您可以指定将由所有捆绑包使用的格式,并从捆绑包中下载这些文件。这与 2 类似,但具有内置而不是服务器上的文件名列表。

    【讨论】:

    • 知道了!我正在跟踪该链接。谢谢!
    【解决方案2】:

    Yes,您可以加载仅包含 XIB、图像和其他资产的包。不要尝试加载包含代码的包,如果您尝试加载代码,Apple 会对其数字签名进行显式检查,这会导致加载失败。

    【讨论】:

    • @RyanR 您如何确定 Apple 对尝试加载代码的应用程序进行了显式检查?您是说“负载将失败”。这是否意味着 Apple 会批准该应用程序,但当它尝试加载 NSBundle 时会失败?
    • @Roberto 这就是 iOS 围墙花园的全部目的。 Apple 设计了该系统以确保没有人可以运行未签名的代码(这就是为什么我们都喜欢讨厌的批准过程是必要的)。 documented 你也不能为 iOS 创建框架包。我在几个版本前尝试过这样做,结果导致异常。我很确定他们也会在批准期间进行扫描。
    • @JoelTeply 也许如果您详细说明评论会更具建设性?
    • 好的。如果你正确地调整你的代码,你可以绕过苹果检查
    • @JoelTeply 请解释方法调配如何规避代码签名检查
    猜你喜欢
    • 1970-01-01
    • 2019-09-30
    • 2019-02-07
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多