问题是,框架与静态库链接,并且似乎直接包含其代码,因为我不需要在使用框架的应用程序中链接或嵌入Google地图,并且一切正常.
除非我在应用程式内使用Google地图.
无论是在编译阶段获得“架构XY的未定义符号”,还是将Google Maps与之链接起来,然后在应用启动期间在调试控制台中收到警告墙,如:
Class GMSPolyline2D is implemented in both
/…/Build/Products/Debug-iphonesimulator/MyFramework.framework/MyFramework
and
/…./Bundle/Application/7C73324B-4A42-4063-98AA-879345997DE6/MyApp.app/MyApp.
One of the two will be used. Which one is undefined.
是否有任何方式只能在框架中与Google地图进行链接,但不包括框架产品中的符号?它适用于动态框架,但静态库似乎只包含在内.我已经尝试使用-weak_framework和-weak_library进行弱连接,但似乎不起作用.
实际上,我无法使Xcode在其框架目录中找到-weak_library的GoogleMaps二进制文件,即使将.framework文件夹直接链接到库搜索路径.
由于我是我框架的唯一用户,我可以强制执行使用框架的所有应用程序都包括Google Maps框架.到目前为止,应用程序工作正常,除了警告(到目前为止,在运行时使用两个类都不重要,因为两者都应该是相同的).但是,如果有更好的解决方案,我会睡得更好:)
编辑:我可以通过在链接器标志部分直接传递绝对路径而不是使用库搜索路径设置来获取-weak_library来工作.然而,问题仍然存在,显然它仍然包含在框架中.
解决方法
最佳做法是将所有与Google Maps相关的代码放在一个单独的库中,链接到您的图书馆和Google Maps静态库.
(信:罗伯特·纳皮尔对How to compile static library that includes optional classes that depend on a third party library的回答