在Xcode中找不到框架依赖的模块

时间:2018-03-20 11:33:12

标签: objective-c xcode frameworks dependencies cocoapods

我有一个包含多个框架目标的项目,它也有pod依赖项。

我有:

  • 目标之间没有循环依赖关系
  • 所有东西,包括豆荚,都在Objective-C中,根本没有Swift。
  • Podfile中的
  • use_frameworks!,因此所有pod都是框架,而不是库。

这是我的结构:

  • TUSystemKit取决于TUModels(这是一个框架)。
  • TUModels取决于Pods_TUModels(由pod生成)。
  • Pods_TUModels取决于JSONModel
  • TUModels会自动与其自己的pod框架(包含JSONModel)相关联。
  • TUSystemKitTUModels作为目标依赖项。
  • TUSystemKitTUModels
  • 相关联

从视觉上看,依赖关系是这样的:

TUSystemKitTUModelsPods_TUModelsJSONModel

当我在Xcode中选择MyModels作为构建目标时,构建成功。但是,当我选择TUSystemKit时,构建失败,表示在构建模块时找不到模块JSONModel <{em> TUSystemKitTUUser在屏幕截图中属于到TUModels):

enter image description here

我做错了什么?显然,我不应该明确地链接依赖树中的所有框架。为什么TUModels能够完美地构建,而TUSystemKit错误地在链接框架的代码中导入模块?我是否需要使用pod更改内容?

2 个答案:

答案 0 :(得分:1)

经过数小时的重构,我已经成功构建了我的项目。我不知道到底出了什么问题,因为我花了一天的时间来组织所有的依赖关系和框架,并且它在不同的时间点上失败了100多次,但这里有一些观察结果可以导致成功的构建:

  • 所有面向公众的类都作为公共标题添加到目标,而不是任何其他目标。
  • 所有代码(.m文件)都在目标的“编译源”部分中,而不在任何其他目标中。
  • 所有面向公众的类头都包含在伞形标题中(与框架名称完全相同的标题)
  • 应用程序嵌入了所有自定义框架(而不是pod)。
  • 框架内的所有文件仅针对同一目标中的#import个必需文件或框架依赖的任何目标伞头上列出的文件。
  • 明显,多余,但值得注意:框架之间没有类应该具有循环依赖(例如,FrameworkA中的ClassA依赖于FrameworkB中的ClassB,而FrameworkB中的某些类依赖于FrameworkA上的某些类) 。我有一些,并创建了代表。做任何适合您设计的模式:物联网/依赖注入,通知/发布者 - 订阅者等。但要这样做:明确区分问题。
  • 尽量避免在多个目标中使用相同的类。相反,将它放在一个目标中,并使另一个目标依赖于包含目标,从而创建一个依赖链。

在重构了许多文件并使用项目设置后,我设法再次构建并运行所有内容。我以前的设置有上面提到的问题的各种组合,弄乱了一切。清理完所有位并将代码分组为功能性模块化框架后,我可以构建它。

答案 1 :(得分:0)

如果由于解析错误->找不到模块而来到这里, 在某些情况下,您可能不得不手动添加路径。 这是...

  • 转到顶部的您的项目
  • 选择您的项目目标
  • 选择构建设置
  • 在标题搜索路径
  • 搜索参数框架搜索路径
  • 添加您的所在地。示例:(使用可可豆荚) $(SRCROOT)/豆荚
  • 指示/将其设置为递归(通过双击您先前添加的路径来访问该选项)

第3erd方库应该已使用 install / update / build 之类的命令解决了该问题,但是如果失败并被卡住,则可以选择继续。 / p>

同样,如果您从广告连播中收到错误消息,则表示 沙箱与Podfile不同步,因为构建器无法找到 Podfile.lock 之类的文件,因此您可以考虑朝同一方向添加一些用户-定义的设置:

  • 选择构建设置
  • 按“ +”号,“添加用户定义的设置”。
  • 添加此对:
    • param = PODS_PODFILE_DIR_PATH 值= $ {SRCROOT} /。
    • param = PODS_ROOT 值= $ {SRCROOT} / Pods

欢呼