iOS - 是不是可以使用更新的 xib 从互联网下载捆绑包?

Posted

技术标签:

【中文标题】iOS - 是不是可以使用更新的 xib 从互联网下载捆绑包?【英文标题】: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 并使用它?

谢谢!

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

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

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

【讨论】:

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

以上是关于iOS - 是不是可以使用更新的 xib 从互联网下载捆绑包?的主要内容,如果未能解决你的问题,请参考以下文章

从情节提要中提取 nibs/xibs (iOS)

如何为 iOS 应用程序的不同设备设置不同的启动文件(xib,而不是启动图像)

iOS:从 UIView 创建 XIB

iOS:从辅助 XIB 返回主 XIB

使用 xib 而不是情节提要的 iOS 应用程序扩展

iOS - 从 Documents 目录中的 bundle 加载 xib