【发布时间】:2015-08-18 16:11:26
【问题描述】:
我正在尝试将 MuPDF 放入 podspec。不过这并没有我想要的那么好......
error: could not build module 'UIKit'
这是我每次尝试pod lib lint 时遇到的错误。不过,我有两种口味,具体取决于 podspec 的确切内容。但在此之前,需要一些背景信息!
tl;dr:我的大脑无法处理 MuPDF 及其静态库依赖项来制作一个不错的 podspec。你能帮忙吗?
文件布局
所以库是 MuPDF (http://mupdf.com);我克隆了他们的 git 存储库。它带有一堆.m 文件,但主库是用C 编写的,并且有几个依赖项。所以我们最终得到了一些静态库(.a 文件)。文件布局如下所示:
mupdf/
# objc files
platform/ios/common.{h,m}
platform/ios/Classes/*.{h,m}
# headers and static libraries
include/**/*.h
platform/ios/thirdparty/*.a
include 文件夹包含 platform/ios/thirdparty 中的库所需的标头。 platform/ios/common.h 包含这些标头。
Pod 规范
我的 podspec 看起来像这样:
Pod::Spec.new do |s|
# <enter usual podspec yada yada here>
s.source_files = "platform/ios/Classes/**/*.{h,m}", "platform/ios/common.{h,m}", "include/**/*.h"
s.public_header_files = "platform/ios/Classes/**/*.h"
s.header_mappings_dir = "include"
s.libraries = "z"
s.vendored_libraries = "platform/ios/thirdparty/*"
end
基于此(以及 podspec 的变体),我得到两个不同的错误。
符号重定义错误
使用这个确切的 podspec 配置,我收到以下错误:
- ERROR | /<path>/mupdf/include/mupdf/fitz/math.h:97:8:
error: redefinition of 'fz_point_s'
- NOTE | /<path>/mupdf/include/mupdf/fitz/math.h:97:8:
note: previous definition is here
- ERROR | /<path>/mupdf/include/mupdf/fitz/math.h:121:8:
error: redefinition of 'fz_rect_s'
- NOTE | /<path>/mupdf/include/mupdf/fitz/math.h:121:8:
note: previous definition is here
# etc. etc.
- NOTE | Target Support Files/Pods-mupdf/Pods-mupdf-prefix.pch:2:9:
fatal error: could not build module 'UIKit'
循环依赖错误
如果我注释掉 s.public_header_files 行,我最终会出现循环依赖错误。好诡异!
- NOTE | /privateTarget Support Files/Pods-mupdf/Pods-mupdf-umbrella.h:1:9:
fatal error: cyclic dependency in module 'UIKit':
UIKit -> Foundation -> CoreFoundation -> MuPDF -> UIKit
结论
我的脑疼,求救!
【问题讨论】:
-
我可以在某处下载你的项目吗?由于您添加了 MuPDF 并且那个具有病毒式左复制许可证,因此您的也自动在 Affero GNU GPL v3 下(顺便说一句,与 App Store 不兼容,因此您在法律上不能提交您的应用程序)
标签: ios objective-c cocoapods mupdf podspec