仅 iOS 8.0 及更高版本(@rpath/libswift_stdlib_core.dylib)支持可重定位的 dylib(例如嵌入式框架)

Posted

技术标签:

【中文标题】仅 iOS 8.0 及更高版本(@rpath/libswift_stdlib_core.dylib)支持可重定位的 dylib(例如嵌入式框架)【英文标题】:relocatable dylibs (e.g. embedded frameworks) are only supported on iOS 8.0 and later (@rpath/libswift_stdlib_core.dylib) 【发布时间】:2014-07-08 01:45:22 【问题描述】:

我刚刚从 Xcode 6 Beta 2 升级到 Xcode Beta 3,现在在构建我的项目时收到以下警告:

ld: warning: relocatable dylibs (e.g. embedded frameworks) are only supported on ios 8.0 and later (@rpath/libswift_stdlib_core.dylib)

这是一个警告,但似乎意味着我当前的设置不适用于 iOS 7.1,这是我的部署目标。如何追踪嵌入了哪些框架,以及如何为 iOS

【问题讨论】:

检查 Klingers 的回答 [在这篇文章中][1] [1]:***.com/questions/24623831/… 我也收到了这个警告,但我仍然能够在我的 iOS 7.1 设备上测试应用程序。 【参考方案1】:

这似乎是 Beta 3 的错误。正如 Apple 工程师在 post 中指出的那样。

在 iOS 7.1 设备上运行应用程序时,我也遇到了这个警告。

【讨论】:

另请注意@Dennis Munsie 做了很好的断言。 Beta 4 中仍然存在该错误 很高兴这个错误已在 Beta 5 中得到修复。 如果使用 Xcode6 GM 版本,我认为您无法在 iOS7 上运行。 在 Xcode 6.1.1 预览版中遇到这个问题,在 6.1 中没有问题。【参考方案2】:

当您选择目标时,您会在项目页面上看到并添加它们:选项卡 General->Embedded Binaries(然后它们会出现在 Build Phases->Embed Frameworks )。

嵌入式框架用于 OSX 在 Xcode 5 中可用,但不适用于 iOS

关于 Xcode 6 中的新功能的 WWDC 会议特别承诺了适用于 iOS 8 的动态框架(开发者中心重新上线时请添加引用)。到目前为止,对于所有 Xcode 6 测试版,我在 iOS 7 上使用框架编译和调试应用程序都没有问题。

但由于没有承诺,iOS7 框架是您不能依赖的东西(例如,这可能会在以后的测试版中停止工作;嵌入 iOS 7 框架的应用程序可能会被拒绝,等等.)。这可以解释为什么他们添加了明确的警告。

如果这个功能确实不受支持,除了从目标中删除框架并使用静态库(就像我们在 Xcode 5 中所做的那样)之外,您无能为力。或者采用仅限 iOS8 的路线。

【讨论】:

我得到了同样的东西,但我没有捆绑任何东西, 我没有嵌入式二进制文件,但仍然看到警告。 我也没有任何嵌入式二进制文件,但我仍然收到与 masters3d 和 Pang 相同的警告。 错误信息中特别提到了libswift_stdlib_core.dylib。这似乎是由应用程序中包含的 Swift 运行时引起的。由于 Apple 已经表示 iOS 7 将成为 Swift 应用程序的支持目标,这可能只是测试版中的一个错误。错误报告可能会受到赞赏。 我的项目也给出了警告。但它在iOS7设备上运行良好。它会被iTunes应用程序加载器拒绝吗?如果是,如何在 iOS7 中实现嵌入式框架。【参考方案3】:

使用 XCode 6.1.1 后,我可以将代码放在 iOS 8+ iOS7.1.2 和 iOS 6.1.3 虽然警告仍然存在,但该应用程序在所有 3 个操作系统上都运行良好

======================= 幸运的家伙……我引用了 PushKit 框架后,我的项目一直无法编译。

该项目是 Xcode 创建的一个新项目,只有 3 个用于测试 Push Notification 的新功能。

解决方法是将 PushKit 框架设置为“嵌入式”,但这不是一个好的解决方案,因为我的工作 Xcode 项目将从 Unity3d 生成。手动进行更改会破坏自动构建过程。

【讨论】:

你应该发布 cmets 而不是作为问题的回答者。【参考方案4】:

在将 C++ 框架 (DeepBelief) 添加到项目后出现此错误。将一个空的 .cpp 文件添加到项目中修复了它。

我正在使用 Beta4,并在 DeepBelief github 站点上找到了答案:

XCode may be skipping the standard C++ library, and that's needed by the DeepBelief.framework code. One workaround I've found is to include an empty .mm or .cpp file in the project to trick XCode into treating it as a C++ project.

【讨论】:

【参考方案5】:

从ReactiveCocoa阅读这篇 github 帖子

该错误仍然存​​在于 XCode6 GM 中,因此 XCode6 最终版本:

好吧,无论我是否在 xcode6GM 中遇到完全相同的问题 为 swift OR objc 创建框架:-[[[[[[[[[[[[[[[]]

根据Apple Extension Programming Guide:

您可以为运行 iOS 7 或更早版本的用户提供包含应用程序,但随后必须采取预防措施以在 iOS 8 或更高版本中安全链接嵌入式框架。

谈论应用程序扩展,但如果您阅读它,您可以理解这通常适用于嵌入式框架。

【讨论】:

【参考方案6】:

发生这种情况是因为您的嵌入式二进制文件之一的部署目标低于您的应用程序目标。降低嵌入式二进制文件的构建目标并没问题。

这是 xcode 6.1.1 中的错误原因

我将 xcglogger 与部署目标 ios 8.0 和我的应用程序的部署目标 7.0 一起使用。设置 xcglogger 的部署目标 ios 7.0 并解决问题。

【讨论】:

【参考方案7】:

使用 XCode 6.1.1 后,我可以将代码放在 iOS 8+ iOS7.1.2 和 iOS 6.1.3 上 虽然警告仍然存在,但该应用程序在所有 3 个操作系统上都运行良好

是的,无法提交应用以供审核。 必须通过将现代框架更改为静态库来完成。

【讨论】:

但是您将无法提交应用程序进行审核!

以上是关于仅 iOS 8.0 及更高版本(@rpath/libswift_stdlib_core.dylib)支持可重定位的 dylib(例如嵌入式框架)的主要内容,如果未能解决你的问题,请参考以下文章

registerForRemoteNotificationTypes:iOS 8.0及更高版本不支持

如果 registerForRemoteNotificationTypes: 在 iOS 8.0 及更高版本中不支持,则为 iOS 构建

为啥在启动图像中选择“iOS 8.0 及更高版本”并为此新图像后,iOS 应用程序的屏幕尺寸会发生变化?

iPhone iOS8:从 iOS7.1 sdk 构建并在 8.0 及更高版本的设备上运行时,UIAlertView 倒置旋转无法正常工作

错误:Android Gradle 插件仅支持 Kotlin Gradle 插件版本 1.3.0 及更高版本

为啥我会收到错误消息:Android Gradle 插件仅支持 Kotlin Gradle 插件版本 1.3.10 及更高版本