基于这个问题
我读了选定的答案但仍然不明白所以我做了一个示例项目
在测试项目中,我从主要项目和静态库(包括Foundation.framework和UIKit.framework)中删除Link Binary With Libraries和File导航的所有框架,基本上,两个项目链接到0框架.
问题是
感谢您的评论.
PS通过工作,我的意思是我可以在模拟器上运行,我可以存档主项目,没有任何错误.
编辑25/07/2014
我尝试使用我正在处理的真实应用程序,它是一样的.
我的应用程序的每个功能仍然按预期工作.我不懂.
我正在尝试找到打包静态库的最佳方法(让我们称之为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的备用版本
我正在构建我自己的框架,建议将其分发给其他开发人员以包括他们的项目.该框架可选地链接某些框架(例如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包含在他们的项目中?实际上,我知道这是可能的,但我该怎么做呢?