6

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

4

4 回答 4

4

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

于 2013-10-16T14:28:14.487 回答
4

您绝对可以在您的 podspec 中添加框架。查看有关 Podspec 格式的 wiki 条目。


编辑:啊,你要找的是vendored_frameworks或者vendored_libraries是在0.23.0中添加的。看起来那些还没有被添加到维基。现在将更新!

于 2013-10-04T20:01:02.337 回答
2

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

于 2013-11-26T10:56:37.093 回答
2

更改:

msl.vendored_libraries = 'MyStaticLib'

至:

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

并且 cocoapods 会添加一个搜索路径。

于 2015-07-02T04:38:39.023 回答