相关疑难解决方法(0)

我们不需要再将框架链接到XCode项目了吗?

基于这个问题

为什么iOS框架依赖项不需要显式链接到静态库

我读了选定的答案但仍然不明白所以我做了一个示例项目

Github上的测试项目

在测试项目中,我从主要项目和静态库(包括Foundation.framework和UIKit.framework)中删除Link Binary With LibrariesFile导航的所有框架,基本上,两个项目链接到0框架.

问题是

  • 在静态库中,它包括MapKit/MapKit.h而没有将Mapkit.framework引用到项目中,为什么它仍在工作?
  • 在主项目中,我从项目中删除UIKit.framework和Foundation.framework,为什么它仍然有效?
  • 既然它现在有效,以后会有什么问题吗?

感谢您的评论.

PS通过工作,我的意思是我可以在模拟器上运行,我可以存档主项目,没有任何错误.

编辑25/07/2014

我尝试使用我正在处理的真实应用程序,它是一样的.

  • 我在文件导航中突出显示了Foundation,UIKit,CoreData和另外10个框架,以及所有这些框架.
  • 取消选中Utilities Panel中的目标 - > Target Membership
  • 建立:通过,运行:通过

我的应用程序的每个功能仍然按预期工作.我不懂.

xcode ios

11
推荐指数
1
解决办法
6133
查看次数

ObjC:如何编译包含依赖于第三方库的可选类的静态库

我正在尝试找到打包静态库的最佳方法(让我们称之为Lib1),其中包含一个可选类(比如ClassA),它本身需要第二个静态库(Lib2).换句话说,只有在项目代码中引用ClassA时才需要Lib2.事情似乎工作正常,除非Lib1用于不使用ClassA的项目(因此不包括Lib2),但需要-ObjC链接器标志(因为其他项目依赖项,而不是我的).

我正在尝试为以下三种情况提出一个简单的解决方案:
1)项目包括我的静态lib,不使用可选类,不指定-ObjC标志
2)项目包括我的静态库,不是使用可选类,但需要-ObjC标志
3)项目包括我的静态lib +第二个静态库,而DOES使用可选类(此时我们不关心-ObjC标志)

是否有一个链接器标志从最终项目应用程序中删除我的可选类,以便它不需要第二个静态库?我想我的其他选择是发布我的静态库的多个版本,一个包含选项类(标准选项),一个不包含(替代,对于具有-ObjC要求的项目),或者可能提供存根文件,提供第二个静态库所需的所有类的空实现?这似乎可能是静态库世界中的常见问题...这种情况是否有最佳实践?

谢谢!


解:

1)建议我的-ObjC用户使用-force_load.(感谢Rob!)
2)对于不能做1的用户,我将使用不包含ClassA的备用版本

linker objective-c static-libraries static-linking

7
推荐指数
1
解决办法
3602
查看次数

iOS Framework弱链接:未定义符号错误

我正在构建我自己的框架,建议将其分发给其他开发人员以包括他们的项目.该框架可选地链接某些框架(例如CoreLocation).问题是,当我将我的框架链接到在Build Phases中不包含CoreLocation的真实独立项目时,我在尝试构建此主机项目时遇到链接器错误,如"未定义的架构符号"

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_CLLocationManager", referenced from:
      objc-class-ref in MySDK(MyServerConnection.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

是否有可能避免这种情况,因为我不想强迫开发人员将CoreLocation包含在他们的项目中?实际上,我知道这是可能的,但我该怎么做呢?

frameworks objective-c weak-linking ios

6
推荐指数
1
解决办法
3058
查看次数