首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cocoapods podspec问题

Cocoapods podspec问题
EN

Stack Overflow用户
提问于 2013-10-04 19:40:02
回答 4查看 7.3K关注 0票数 6

我一直在重构一些代码,并创建了一个静态库,我现在正在一个框架中使用这个库,这个框架在一些应用程序中使用。我正在使用cocoapods,并且很难将我的新静态库正确地集成到podspec中。

我发现构建失败了,因为构建中缺少了静态库。如果我手动将静态库添加到最终的应用程序中,框架和应用程序就能正常工作。构建团队生成应用程序的最终版本,因此我只负责更新框架的podspec。

我是否有可能修改pod规范,将静态库设置为显示在最终应用程序构建阶段下的链接库?

更新:

当将静态库添加到我的子规范的framework.library属性时,我得到了library not found for -lMyStaticLib

供参考:

代码语言:javascript
复制
  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 ):

代码语言:javascript
复制
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 .一个文件添加到它构建的没有问题的项目中。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-04 20:01:02

您肯定可以在podspec中添加框架。查看关于Podspec格式的wiki条目。

编辑:啊,您要找的是vendored_frameworksvendored_libraries,它们是在0.23.0中添加的。看起来这些还没有添加到wiki中。马上更新!

票数 3
EN

Stack Overflow用户

发布于 2013-10-16 14:28:14

尝试将您的MyStaticLib.a文件重命名为libMyStaticLib.a。我还得到了library not found for -lMyStaticLib错误,并通过在文件名中添加一个lib前缀来修正它。

票数 4
EN

Stack Overflow用户

发布于 2013-11-26 10:56:37

对于错误Library not found for -lxxxxxxx,如果静态库名为MyStaticLib.a,请尝试将其重命名为libMyStaticLib.a并将其放入perserve_paths属性,以便在下载后不会删除静态库:

代码语言:javascript
复制
msl.libraries = 'MyStaticLib'
msl.perserve_paths = 'libMyStaticLib.a'

然后,转到项目的构建设置:确保在“其他链接器标志”中有参数-lMyStaticLib

对于ARM和i386体系结构问题,ARM意味着iOS设备,i386意味着模拟器,更好地使静态库通用,然后它将在这两种架构上工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19189463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档