在React Native应用程序库中找不到嵌入式框架的头文件

时间:2019-05-08 04:01:16

标签: swift xcode react-native

我目前正在从事一项合同工作,要求我帮助将第3方SDK与现有的React Native应用程序集成。该SDK仅具有Android和iOS特定的风格,这意味着必须将其添加到特定于平台的方面(在我的情况下,是使用Xcode的iOS方面)。

对于该应用程序,客户端已经创建了一个react native模块,该模块已内置到Xcode的Library中,该模块由与基础Xcode工作区项目根目录不同的Libraries/MyLibrary.xcodeproj中的嵌套Xcode项目表示。该库具有在React Native中定义的几个方法存根,这些存根需要在Swift中实现(同样在Android中实现),因为在这些方法中都利用了第三方平台特定的SDK。

我所遇到的问题与访问库的现有桥接头文件中的第三方SDK框架有关。我遵循了所有有关如何将外部框架与现有Xcode项目集成的教程。这包括以下步骤:将框架添加到项目中,将其添加到项目目标的Embedded BinariesLinked Frameworks and Libraries部分下,将其添加到项目目标和库的Build Phases/Link Binary With Libraries部分下目标,并在Project Settings/Framework Search Paths下添加框架路径。从这里,我使用#import <MyFramework/MyFramework.h>将适当的import语句添加到库的Library-Bridging-Header.h文件中,以便随后可以在Swift中访问该框架。 (此导入语句直接从SDK随附的示例项目的桥接头文件中复制,因此我知道它是正确的,不应以其他格式(例如引号而不是尖括号)给出。)

无论是否以各种组合方式多次重复执行所有这些步骤,我仍然在构建时遇到此错误:MyFramework/MyFramework.h file not found

为澄清起见,MyFramework只是我尝试集成的实际第3方框架的别名,​​而MyLibrary是现有库的别名,除了通过提供给我的方法存根之外,什么也没有客户端在Swift中实施。

同样,我读过所有在阳光下的教程和论坛,但是似乎没有一个人解决这个非常具体的问题,即在React Native应用的iOS版本中将第3方框架集成到xcodeproj库中。我将不胜感激任何人可能提供的任何新见解或建议!而且,请不要仅仅发布链接或复制现有论坛中有关相似问题的步骤,因为我可能已经阅读过。请理解,我认为我的具体情况有些微妙的独特之处,导致Google第一页上的10多篇文章中的这些步骤相同,而StackOverflow却无法正常工作。

1 个答案:

答案 0 :(得分:0)

想通了!如果有任何人遇到与我相同的问题,我将在此处发布我的解决方案。

TLDR-您必须在xcodeproj库的根目录中添加第3方框架(不是顶级项目),并确保文件实际上已复制到该目录中,而不仅仅是从(请务必在Finder中再次检查,因为选中“如果需要复制”框由于某些原因并不总是有效)。然后,必须将$(PROJECT_DIR)添加到xcodeproj库的Build Settings/Framework Search Paths中,并将框架从xcodeproj库的根目录拖放到库的Build Phases/Link Binary With Libraries面板中。

我将与我发现的其他教程/论坛一起解决一些问题,希望它可以帮助其他发现自己像我在这个职位上感到沮丧的人。

  1. 大多数仅解决将框架添加到基础级项目的问题,而不涉及项目在项目中的晦涩情况。因此,当您开始执行这些步骤时,知道应该更改顶级项目还是子项目的设置可能会造成混淆。再次,正如我发现的那样,所有更改都应该仅对子项目进行。

  2. 有一些教程似乎确实解决了有关项目中项目的这种情况,但是步骤描述了将框架添加到Embedded BinariesLinked Frameworks and Libraries下的顶级项目中,但是我相信这些教程中描述的情况与这里的情况有些微妙的不同。再次,只弄混子项目。

  3. 关于“伞形框架”有很多讨论,但这并不真正适用于这种情况,而且术语的相似性可能使它看起来像是一个类似的问题。据我了解,苹果不鼓励“伞形框架”,但这种情况也不尽相同。

对冗长的解释很抱歉,但是我希望提供我在寻找这个奇怪的晦涩问题的解决方案时希望发现的细节。

干杯!