我有一个动态框架,它链接到谷歌地图(据我所知,它仍然是一种静态库,如果不是那样,只需要一个框架包装器).
问题是框架链接到静态库并且似乎也直接包含其代码,因为我不需要在使用框架的应用程序中链接或嵌入Google Maps,一切正常.除非我在应用内部使用Google地图.
要么在编译阶段我得到"架构XY的未定义符号",要么我将谷歌地图链接到它,然后我在app-launch期间在调试控制台中收到警告墙,如:
类GMSPolyline2D在/.../Build/Products/Debug-iphonesimulator/MyFramework.framework/MyFramework和/..../Bundle/Application/7C73324B-4A42-4063-98AA-879345997DE6/MyApp.app/MyApp中实现.将使用两者之一.哪一个未定义.
有没有办法只在框架中链接谷歌地图,但不包括框架产品中的符号?它适用于动态框架,但静态库似乎只是包含在内.我已经尝试使用-weak_framework和弱连接-weak_library,但它似乎不起作用.
实际上,我无法让Xcode -weak_library在其框架目录中找到GoogleMaps二进制文件,即使在.framework文件夹中直接链接为Library Search Path也是如此.
由于我是我框架的唯一用户,因此我可以强制执行使用框架DOES的每个应用程序都包含Google Maps框架.到目前为止,除了警告之外,应用程序工作正常(到目前为止,在运行时使用哪两个类无关紧要,因为两者都应该相同).但是,如果有更好的解决方案,我会睡得更好:)
编辑:我可以通过直接在linker-flag部分中移交绝对路径而不是使用Library Search Path设置来使-weak_library工作.但问题仍然存在,显然它仍然包含在框架中.
我试图创建结合ObjC和Swift代码的第一个podspec,但是我很快偶然发现了一个顽固的错误,我在上传时无法解决
将MyLibrary从复制
/Users/lukasschwoebel/Library/Caches/CocoaPods/Pods/External/MyLibrary/540307feb534d63ad9015f3f6452b3ad-be661到../../../../../../private/var/folders/2p/_pc_vts51b3_pfydgm7_2n200000gn/T/CocoaPods/Lint/Pods/MyLibrary-运行预安装挂钩-> MyLibrary(0.1.0)-错误|错误 [iOS]在验证期间遇到未知错误(用Swift编写的use_frameworks!Pod 只能集成为框架;此功能仍处于beta中。添加到您的Podfile或目标中以选择使用它。正在使用的Swift Pod是:MyLibrary)。
这是我使用的命令:
pod repo push test-podspecs MyLibrary/MyLibrary.podspec --use-libraries --allow-warnings --verbose
Run Code Online (Sandbox Code Playgroud)
如您所见,这是CocoaPods的最小不变示例项目,如下所述:https ://guides.cocoapods.org/making/using-pod-lib-create.html 由于我什至无法运行此示例,因此怀疑我的cocoapods配置有问题。
我确保没有要上载的pod中的任何Objective C行(尽管最后,我希望混合使用ObjC和Swift代码的podspec,但是目前我只想使用一个有效的podspec使用Swift)。
我什至不能用纯Swift上传这个简单的Pod。我首先尝试使用CocoaPods v0.39.0,然后降级为0.38.2,之后降为0.38.0,甚至0.36.0。即使完全卸载了CocoaPods。
看来我需要在CocoaPods中进行一些配置才能上传Swift Podspec?我显然收到的错误是在Podfile需要use_frameworks的pod的构建阶段!被包括。那么在podspec验证期间如何在编译Pod时使CocoaPods使用它呢?
另外,我安装了Xcode 7.0.1和OSX 10.10.5,它是Swift 2.0代码。
先感谢您!
这是完整的podspec,它是从原始创建的MyLibrary.podspec改编而成的(是的,它是本地的Podspec-Repo,但不会导致/更改错误)
Pod::Spec.new do |s|
s.name = "MyLibrary"
s.version = "0.1.0"
s.summary = "A short description of MyLibrary."
s.description = 'Sample Description'
s.license = 'MIT'
s.author = { "Luke A." => "ls@mymail.to" }
s.source = { :git => "file:///Users/.../test/MyLibrary/", :tag => s.version.to_s }
s.platform = …Run Code Online (Sandbox Code Playgroud)