首页 文章

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

提问于
浏览
17

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

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

我尝试通过从应用程序项目的嵌入式二进制文件中删除我的2个库来解决它 - 我无法将它们添加回去 . 单击项目设置中嵌入式二进制文件下的按钮可正确显示工作区项目,但选择和添加库项目不会将它们添加到嵌入式二进制文件列表中 . 我通过创建新工作区解决了链接器错误 . 应用程序编译,但它如何链接库对我来说是一个谜:它们不在列出的嵌入式二进制文件或链接框架和不在框架搜索路径中的库中 . 应用程序和它需要的库之间似乎没有任何关联(显然有编译时),除了库项目在同一个工作区 .

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

enter image description here

6 回答

  • 13

    清理您的项目并首先构建您的框架 . 此后你可以嵌入它 .

  • 0

    我有一个非常类似的问题,并在昨晚修复它 . 决定回到这个主题并提供我的解决方法,因为上面的rjstelling的解决方案对我的情况没有帮助 .

    我有一个包含两个框架和一个应用程序的工作区 . 该应用程序正在愉快地使用这两个框架,直到我被一个神秘的编译错误所击中,它决定在一个框架中找到一个名为“cube”的类型的实例变量添加一个属性访问权限 . “_cube”不可能(抱怨它没有被声明,虽然它以前在setter方法中实际上有效) .

    长话短说,干净后,工作区/应用程序项目不知何故失去了我的iOS 8项目的嵌入式框架 . 删除嵌入式框架是该系列失败的最后一根,导致我的项目不再允许选择任何嵌入框架 .

    将项目和工作空间恢复到早期版本并没有摆脱伏都教 .

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

    然后我能够重新嵌入框架和链接 .

    至于_cube的事情,我必须为属性指定一个getter,并将该属性@synthesize为另一个名称 . 我对这个没有解释 .

  • 1

    这是我对问题 Xcode won't add “Embedded binary” after deleting “DerivedData”see the original question and answer for more context and information的回答摘要:

    • 从工作区中删除所有框架项目

    • 执行 "clean build" 和/或删除"DerivedData"

    • 将项目添加回工作区

    • 构建项目(可能是可选的)

    • 在应用目标的常规选项卡中,单击下 "Linked Frameworks and Libraries" ,选择框架 .

    • 在模拟器中构建并运行(应该没有问题构建或运行)

    • 构建并运行设备(由于框架未正确链接,可能会导致崩溃,忽略此崩溃)

    • 单击 "Embedded Binaries" 下,选择框架 . 这应该将它添加到项目中(可能在"Linked Frameworks and Libraries"下重复)

    • 重复所有必需的框架

    • 确认构建和运行(在设备上)后,您可以删除Project Navigator中的任何重复(和/或红色)框架或目标常规选项卡

  • 1

    这是我解决问题的方法:

    • Build 框架 .

    • 打开构建文件夹并将构建的框架拖到应用程序项目中(因此它使用DerivedData的路径) .

    • 将框架添加到嵌入式框架列表中 .

    • 在Finder中,在应用程序的xcodeproj文件上显示内容,然后在您喜欢的文本编辑器中打开project.pbxproj .

    • 查找具有长DerivedData路径的行 . 更改它以便没有名称,路径是框架名称,源树是BUILT_PRODUCTS_DIR

    Xcode应该注意到更改,应用程序项目中的库将是黑色而不是红色,现在将构建并正常运行 .

  • 5

    这可能是因为您的框架是一个单独的项目,而不是一个单独的目标 . 请在34-36分钟左右仔细观察Session 416: Building a Modern Framework . 它将向您展示如何正确设置它 .

    如果您希望顺便在多个项目之间共享框架,这会让您感到有些困惑

  • -3

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

    我要解决的是选择我的框架作为我的构建目标 . 构建它之后,Framework目标从红色变为黑色 . 我在你的截图中看到它是红色的,这意味着它还没有编译成二进制文件并写在磁盘上 .

    一旦我这样做,我就能够将Framework重新链接到我的Project,因为它在磁盘上有一个引用 . 希望这可以帮助!

相关问题