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

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

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

这是一个警告,但似乎意味着我目前的设置将无法在iOS 7.1,这是我的部署目标。 我怎样才能找出embedded的框架,以及如何解决这个iOS的<8.0?

这似乎是一个Beta 3的错误。正如苹果工程师在这篇文章中指出的 。

在iOS 7.1设备上运行应用程序时,我也一直生活在这个警告。

当您select目标:选项卡“ 常规” – >“embedded式二进制文件” (然后显示在“ 构build阶段” – >“embedded框架”中 )时,您可以看到并将其添加到项目页面中。

嵌入式框架的例子

OS X的embedded式框架在Xcode 5中可用,但不适用于iOS

有关Xcode 6中新function的WWDC会议特别承诺iOS 8的dynamic框架(有人请在开发人员中心重新联机时添加引用)。 到目前为止,所有的Xcode 6testing版,我都没有问题编译和iOS 7的框架debugging应用程序。

但是,由于这是不承诺的, iOS7的框架是你不能依赖的东西 (例如,这可能会停止工作在后来的testing版; iOS 7embedded式框架的应用程序可能会被拒绝等)。 这也许可以解释为什么他们添加了明确的警告

如果这个function确实是不被支持的,那么你可以做的事情不多,除了从目标中移除框架,像使用Xcode 5一样使用静态库。或者去仅使用iOS8的路由。

使用XCode 6.1.1后,我可以把代码放在iOS 8+ iOS7.1.2和iOS 6.1.3上。虽然警告仍然存在,但是所有3个操作系统的应用程序绝对正常

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

该项目是一个由Xcode创build的新项目,只有3个新function用于testing推送通知。

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

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

我正在使用Beta4,并在DeepBelief github网站上find答案:

XCode可能会跳过标准的C ++库,这是DeepBelief.framework代码所需要的。 我find的一个解决方法是在项目中包含一个空的.mm或.cpp文件,以诱使XCode将其视为一个C ++项目。

从ReactiveCocoa阅读这篇github文章

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

那么,无论我是否为swift或objc创build框架,在xcode6GM中都会遇到完全相同的问题: – [[[[[[[[[

根据苹果扩展程序devise指南 :

您可以为运行iOS 7或更低版​​本的用户提供包含的应用程序,但是当在iOS 8或更高版本中运行时,必须采取预防措施以安全地链接embedded的框架。

谈论扩展应用程序,但是如果你阅读它,你可以理解这一般适用于embedded式框架。

发生这种情况是因为您的embedded式二进制文件的部署目标之一低于您的应用程序目标。 降低你的embedded式二进制文件的build设目标,并罚款。

这是xcode 6.1.1中的错误原因

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

使用XCode 6.1.1后,我可以把代码放在iOS 8+ iOS7.1.2和iOS 6.1.3上。虽然警告仍然存在,但是所有3个操作系统的应用程序绝对正常

是的,无法提交该应用程序进行审查。 必须通过将现代框架更改为静态库。