【问题标题】:Why do I have to embed my libraries inside my applications binary for them to work?为什么我必须将我的库嵌入到我的应用程序二进制文件中才能正常工作?
【发布时间】:2015-07-24 23:12:13
【问题描述】:

所以我遵循了这个教程:

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

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

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

为了防止我的问题不清楚,我添加了以下图片。

这是产生错误的原因:

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

【问题讨论】:

    标签: xcode swift frameworks static-libraries dylib


    【解决方案1】:

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

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

    【讨论】:

    • 嗯,这是否意味着每个第 3 方库/框架都必须嵌入到二进制文件中?并且在二进制苹果的术语中嵌入静态链接?
    • 这与问题无关,这是关于 Apple 提供的框架。
    • 其实不是苹果提供的框架,这是自定义框架
    【解决方案2】:

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

    非 Apple 框架只能嵌入 iOS8 及更高版本。

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

    【讨论】:

    • 我必须用客观的 c 框架做同样的事情
    • 我想我遗漏了一些东西,将库作为​​二进制文件嵌入到底意味着什么?它与静态链接库有何不同?
    猜你喜欢
    • 2014-07-06
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多