无法将embedded式二进制文件(其他项目)添加到XCode中的项目依赖项

我有一个用XCode 6.0.1创build的XCode工作区。 它约束了2个(Swift)库和一个依赖于这2个库的iOS应用(Swift)。 我有稳定的设置,允许我在iPhone和模拟器上运行iOS应用程序:2个库项目被添加为应用程序的embedded式二进制文件 (见图片)。

现在,我有XCode 6.1。 最近,我在XCode运行时删除了~/Library/Developer/Xcode文件夹中的DerivedData文件夹。 之后,我的工作空间不工作 – iOS应用程序将无法编译,我有链接器错误,说它找不到库项目。

我试图通过从应用程序项目的embedded式二进制文件中删除我的2个库来解决这个问题 – 我无法将其添加回去。 单击项目设置中的embedded式二进制文件下的+button可以正确显示工作区项目,但是select和添加我的库项目不会将它们添加到embedded式二进制文件列表中。 我已经通过创build新的工作区解决了链接器错误。 该应用程序编译,但它是如何链接图书馆是我的一个谜:它们不在列出embedded式二进制文件链接框架和库不在框架searchpath 。 应用程序和它需要的库之间似乎没有任何联系(除了库项目在同一个工作空间中,显然在编译时)。

为什么我不能将库项目添加到embedded式二进制文件 ? 在XCode 6.1中,依赖项目只是编译并embedded到应用程序中而不被列出或链接到任何地方,这是正常的吗?

在这里输入图像说明

这是对我的答案的总结Xcode不会在删除“DerivedData”后添加“embedded式二进制” , 请参阅原始问题和答案以获取更多的上下文和信息 :

  1. 从工作区中删除所有框架项目
  2. 执行“清理版本”和/或删除“DerivedData”
  3. 将项目添加回工作区
  4. build立项目(可能是可选的)
  5. 在应用程序目标的常规选项卡中,单击“链接的框架和库”下的+,select框架。
  6. 在模拟器中构build和运行(应该没有问题的构build或运行)
  7. 构build并运行设备(这可能会导致崩溃,因为框架未正确链接,请忽略此崩溃)
  8. 单击“embedded式二进制文件”下的+,select框架。 这应该将其添加到项目(可能重复“链接的框架和库”下)
  9. 重复所有必需的框架
  10. 一旦build立和运行(在设备上)被确认,你可以在Project Navigator中删除任何重复的(和/或红色)框架或目标General标签

好吧,我碰到了和你一样的问题。 删除派生的数据后,我无法再重新链接我的二进制文件。 我认为原因是因为派生数据是在你的项目中写入和链接到二进制文件的地方。

我所要解决的是select我的框架作为我的构build目标。 构build完成后,Framework目标由红色变为黑色。 我可以在你的屏幕截图中看到它是红色的,这意味着它没有被编译成二进制文件并写在磁盘上。

一旦我这样做,我就能够重新链接框架到我的项目,因为有一个在磁盘上的引用。 希望这可以帮助!

清理您的项目并首先构build您的框架。 之后你可以embedded它。

这是我解决问题的方法:

  1. 构build框架。

  2. 打开构build文件夹,并将构build的框架拖到应用程序项目(所以它使用DerivedData的path)。

  3. 将该框架添加到embedded式框架列表中。

  4. 在Finder中,对应用程序的xcodeproj文件执行Show Contents,然后在您最喜欢的文本编辑器中打开project.pbxproj。

  5. find具有长DerivedDatapath的行。 将其更改为没有名称,path是框架名称,源树是BUILT_PRODUCTS_DIR

Xcode应该注意到变化,应用程序项目中的库将是黑色,而不是红色,现在将build立并正常运行。

我有一个非常类似的问题,昨天晚上修好了。 决定回到这个线程,并提供我的解决方法,因为上述rjstelling的解决scheme没有帮助我的情况。

我有一个包含两个框架和一个应用程序的工作区。 该应用程序正在愉快地使用这两个框架一段时间,直到我遇到了一个神秘的编译错误,在那里它决定添加一个属性访问一个实例variables称为“立方体”在类框架中find的类types,使访问到“立方体”是不可能的(抱怨它没有被宣布,而实际上它曾经在一个setter方法中起作用)。

长话短说,干净的后,工作区/应用程序项目失去了我的iOS 8 +项目的embedded式框架的轨道。 移除embedded式框架是这一失败的最后一根稻草,导致我的项目不再允许select任何embedded框架。

将项目和工作区恢复到早期版本并没有摆脱巫术的束缚。

我最终在主应用程序项目(作为文件)中添加了要embedded的框架项目,并在框架中引入了目标依赖项。

然后,我可以重新embedded框架和链接。

至于_cube的东西,我不得不为属性指定一个getter和@synthesize属性到一个不同的名称。 我没有这个解释。

这可能是因为你的框架是一个单独的项目,而不是一个单独的目标。 请仔细观看会议416:在34-36分钟左右build立一个现代框架 。 它会告诉你如何正确设置它。

如果你想在多个项目中共享一个框架,这会让你感到有些困惑