为什么我必须在我的应用程序二进制文件中嵌入我的库才能使它们工作?

时间:2015-05-13 15:01:03

标签: xcode swift frameworks static-libraries dylib

所以我遵循了这个教程:

http://locomoviles.com/ios-tutorials/create-ios-cocoa-touch-framework-using-xcode/

一切都很顺利,除非我去运行程序时遇到以下错误:

> dyld: Library not loaded:
> @rpath/SwiftFramework.framework/SwiftFramework   Referenced from:
> /Users/bluke/Library/Developer/CoreSimulator/Devices/40677D10-F22B-4AE4-B767-06439AB7887A/data/Containers/Bundle/Application/8C6A5F76-C666-4B69-9353-A0ABD7DA085B/UseFramework.app/UseFramework
> Reason: image not found

我能够通过将框架添加为嵌入式二进制文件来解决这个问题,但我不明白为什么需要这样才能解决问题。

我认为该框架将作为动态链接库包含在我的应用程序包中(即不直接嵌入我的应用程序的二进制文件中),然后在运行时链接。这个假设是不正确的吗?

如果我的问题不清楚,我已添加以下图片。

这就是产生错误的原因:

This is what was producing the error

如果我将框架添加到嵌入式二进制文件中,它可以工作:

This works

2 个答案:

答案 0 :(得分:1)

  

我认为该框架将包含在我的应用程序中   捆绑为动态链接库(即未嵌入我的   直接应用程序的二进制文件,然后在运行时链接。这是   假设不正确?

是的,这是不正确的。 iOS应用程序静态链接第三方框架,而不是动态链接。这可以防止应用程序下载并动态链接尚未经过应用商店审核流程审核的代码。

答案 1 :(得分:1)

这允许使用Swift编码的应用程序在运行iOS预先版本Swift(早于iOS8)的设备上运行。

非Apple框架可以嵌入iOS8及更高版本。

在标识开发者组织的名称中添加前缀以避免冲突和混淆也是很好的。 “SwiftFramework”看起来非常像Apple框架。