将自定义iOS框架导入两个不同的Xcode项目不会得到相同的结果

时间:2018-04-18 10:39:44

标签: ios swift xcode frameworks

我在过去两天遇到了一些问题,我在互联网上找不到任何可以帮助我解决的问题。

问题在于:

  • 我有自己的自定义iOS框架
  • 我有两个使用此自定义框架的不同Xcode项目
  • 在第一个项目中,没有问题,一切都运作良好
  • 在第二个项目中,由于未捕获的异常'NSInvalidArgumentException',我得到终止应用程序,原因:' - [** **:]:无法识别的选择器发送到实例0x101b02f90'当我是调用在第一个项目中调用的方法,该方法在第一个项目中完美运行
  • 两个项目都使用相同的自定义iOS框架版本并构建

在过去的两天里,我尝试了以下方法:

  • 清洁项目>清洁构建项目>重建项目 - 不起作用
  • 重建框架并添加到两个项目中 - 问题仍然存在

有一点非常奇怪的是,我已根据此Stack Overflow打印了我的框架中可用的方法,在第一个项目中我有 130 方法,第二个我只有 72 方法。

有人知道发生了什么吗?

此致

杰里米

2 个答案:

答案 0 :(得分:1)

先生,我刚看到你的第一个问题/答案。

您需要这样做的主要原因是静态库中的类别或其他动态元素。 Objective C的Categories与Swift中的扩展大致相同,因此您可以使用其他方法扩展类/对象。

在Objective C中,您可以创建一个静态库以链接到您的项目。但是,如果没有此标志(特定库的-force_load的-ObjC),则不会在库外部加载类别的符号。我想最初的动机是使用类别作为内部资源,所以默认情况下不加载它们。这也使二进制文件变得更小。然而,许多库实际上添加了他们想要公开的类别(==扩展名),因此通常需要使用标志。

希望有所帮助^ _ ^。

答案 1 :(得分:0)

我终于找出导致问题的原因。我需要在第二个项目的Build Settings中的“Other Linker Flags”中添加 -ObjC 标志。

我不明白为什么没有这个标志,框架只有72个方法,并且使用标志所有方法都可用。有人有想法吗?