我一直在重构一些代码,并创建了一个静态库,我现在正在一个框架中使用这个库,这个框架在一些应用程序中使用。我正在使用cocoapods,并且很难将我的新静态库正确地集成到podspec中。
我发现构建失败了,因为构建中缺少了静态库。如果我手动将静态库添加到最终的应用程序中,框架和应用程序就能正常工作。构建团队生成应用程序的最终版本,因此我只负责更新框架的podspec。
我是否有可能修改pod规范,将静态库设置为显示在最终应用程序构建阶段下的链接库?
更新:
当将静态库添加到我的子规范的framework.library属性时,我得到了library not found for -lMyStaticLib
供参考:
s.subspec 'MyStaticLibrary' do |msl|
mss.source_files = 'FrameworkSource/My-Static-Library/*.{h,a}'
msl.library = 'MyStaticLib'
msl.xcconfig = { 'HEADER_SEARCH_PATHS' => '"$(SRCROOT)/Pods/My-Framework-Name/FrameworkSource/My-Static-Library"/**', 'LIBRARY_SEARCH_PATHS' => '"$(SRCROOT)/Pods/My-Framework-Name/FrameworkSource/My-Static-Library"/**' }
#msl.frameworks = 'MyStaticLib'
end更新2:我将属性更改为msl.vendored_libraries = 'MyStaticLib',还在podspec中验证了路径。所有的东西似乎都在检查。我还在搞构建错误。当我为设备构建时(当我为模拟器构建时,我得到了相同的错误,但是对于i386 ):
Undefined symbols for architecture armv7:
"_OBJC_CLASS_$_MyStaticLibrary", referenced from:
objc-class-ref in MyFramework(FileInFramework.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)我还再次验证了,如果我只是进入应用程序的构建阶段,遍历Pods文件夹,然后手动将MyStaticLibrary.a .一个文件添加到它构建的没有问题的项目中。
发布于 2013-10-04 20:01:02
您肯定可以在podspec中添加框架。查看关于Podspec格式的wiki条目。
编辑:啊,您要找的是vendored_frameworks或vendored_libraries,它们是在0.23.0中添加的。看起来这些还没有添加到wiki中。马上更新!
发布于 2013-10-16 14:28:14
尝试将您的MyStaticLib.a文件重命名为libMyStaticLib.a。我还得到了library not found for -lMyStaticLib错误,并通过在文件名中添加一个lib前缀来修正它。
发布于 2013-11-26 10:56:37
对于错误Library not found for -lxxxxxxx,如果静态库名为MyStaticLib.a,请尝试将其重命名为libMyStaticLib.a并将其放入perserve_paths属性,以便在下载后不会删除静态库:
msl.libraries = 'MyStaticLib'
msl.perserve_paths = 'libMyStaticLib.a'然后,转到项目的构建设置:确保在“其他链接器标志”中有参数-lMyStaticLib。
对于ARM和i386体系结构问题,ARM意味着iOS设备,i386意味着模拟器,更好地使静态库通用,然后它将在这两种架构上工作。
https://stackoverflow.com/questions/19189463
复制相似问题