【问题标题】:Cocoapods podspec issueCocoapods podspec 问题
【发布时间】:2013-10-11 22:31:09
【问题描述】:

我一直在重构一些代码并创建了一个静态库,我现在在一个框架中使用它,该框架用于一些应用程序中。我正在使用 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 文件添加到它构建的项目中,则不会出现问题。

【问题讨论】:

  • 仍然无法解决这个问题?我遇到了类似的问题,如果你设法解决它,我会很感激你的智慧。

标签: static-libraries xcode5 cocoapods


【解决方案1】:

您绝对可以在您的 podspec 中添加框架。查看wiki entry on the Podspec format.


编辑:啊,你要找的是vendored_frameworksvendored_libraries,它们是在0.23.0 中添加的。看起来那些还没有被添加到维基。马上更新!

【讨论】:

  • 我认为你的意思是github.com/CocoaPods/CocoaPods/wiki/The-podspec-format 你的 Steelcase 链接 ;-) 我更新了我的帖子,提供了更多信息。
  • 我已经用更多信息更新了我的帖子。现在我得到了未定义的架构错误。就好像项目看到了库但无法访问其中的任何内容。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    对于错误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代表模拟器,最好让你的静态库通用,那么两种架构都可以工作。

    【讨论】:

    • 为什么我需要Other Linker Flags?放在LIBRARY_SEARCH_PATHS里还不够吗?
    【解决方案4】:

    改变:

    msl.vendored_libraries = 'MyStaticLib'

    到:

    msl.vendored_libraries = 'FrameworkSource/My-Static-Library/libMyStaticLib.a'

    cocoapods 会添加搜索路径。

    【讨论】:

      猜你喜欢
      • 2012-12-15
      • 1970-01-01
      • 2014-11-01
      • 2017-04-10
      • 2015-05-15
      • 2015-05-28
      • 1970-01-01
      • 2017-01-18
      • 2013-09-16
      相关资源
      最近更新 更多