创建依赖于另一个 pod 的 pod
Creating a pod that relies on another pod
尝试构建一个 Cocoapod 库,该库依赖于我拥有的其他已发布的 Cocoapod 库,在 XCode 中获取项目以构建 OK,但是 运行 pod lib lint
命令用于检查 pod有效性失败
error: include of non-modular header inside framework module
在我所依赖的库 (pod) 的 header 文件上。所有来源都是 Obj-C 而不是 Swift.
我确实尝试了以下,根据发现的建议here
- 设置依赖库的header个文件为
public
而不是project
- 为每个目标设置
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES =
YES
- 验证构建阶段中的相关 headers 在
public
. 下
但问题依然存在,我无法发布 pod 也无法对其进行测试。
更新
当我注释掉
s.dependency 'OldPodIDependOn'
我的新 pod 的 podspec 文件中的行然后错误消失但找不到相关的 headers。如果我不在 ./Example
文件夹下的 Podfile
中包含我依赖的 pod,就像这样:
target 'NewPod', :exclusive => true do
pod "NewPod", :path => "../"
pod "OldPodIDependOn", :path => "../../OldPodIDependOn/"
end
那么项目将不会在 XCode 中构建,因为 OldPodIDependOn
文件不是项目的一部分。有点 chicken-or-the-egg 问题。
更新 2
还尝试删除 :path => "../../OldPodIDependOn/"
组件以引用已发布的 pod 而不是本地 pod - 没有帮助。
值得一提的是,这个 pod 将包含一个 UI,因此将包含并引用一个故事板,我在 podspec 文件中添加了 s.resources = 'Pod/Classes/UI/NewPod.storyboard'
行,并从中删除了故事板pod 目标编译源(否则 xcode 不会构建)。我不认为这与问题有关,但值得一提的是,也许我在那里做错了什么。
我做错了什么?
任何帮助将不胜感激!
一般来说,error: include of non-modular header inside framework module
意味着生成的框架中的头文件之一(CocoaPods 现在用于框架和库的 lints)没有存储在框架中,或者被归类为 public 头文件.
这通常可以解决将外部 imports
移动到实现文件中的问题,请参阅此 Modified to support using framework #353。
为了最终解决这个问题,我不得不放弃 pob lib create
创建的工作区 - 没有办法绕过它,我尝试了所有可能的组合/建议/代码修改来摆脱 "non-modular header inside framework" 错误,但似乎没有任何效果。 pod lib lint
总是失败。
我从头开始创建了我自己的静态库xcode项目,然后运行 pod update
在它上面添加了依赖的pod到Podfile
,然后创建了一个.podspec
文件,并将依赖的 Pod 头文件添加到静态库目标的 "Copy files" 构建阶段 + libPods.a
文件添加到 "Link Binary with libs" 构建阶段。噗! pod lib lint
不再有 "non modular header" 错误,即使我实际上在做完全相同的事情。吸取的教训是 pod lib create
不推荐用于所有 cocoapod 案例。
我遇到了同样的问题,我使用了
pod lib lint MyPod.podspec --allow-warnings --use-libraries
添加 --use-libraries 选项时,它起作用了。
尝试构建一个 Cocoapod 库,该库依赖于我拥有的其他已发布的 Cocoapod 库,在 XCode 中获取项目以构建 OK,但是 运行 pod lib lint
命令用于检查 pod有效性失败
error: include of non-modular header inside framework module
在我所依赖的库 (pod) 的 header 文件上。所有来源都是 Obj-C 而不是 Swift.
我确实尝试了以下,根据发现的建议here
- 设置依赖库的header个文件为
public
而不是project
- 为每个目标设置
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES
- 验证构建阶段中的相关 headers 在
public
. 下
但问题依然存在,我无法发布 pod 也无法对其进行测试。
更新
当我注释掉
s.dependency 'OldPodIDependOn'
我的新 pod 的 podspec 文件中的行然后错误消失但找不到相关的 headers。如果我不在 ./Example
文件夹下的 Podfile
中包含我依赖的 pod,就像这样:
target 'NewPod', :exclusive => true do
pod "NewPod", :path => "../"
pod "OldPodIDependOn", :path => "../../OldPodIDependOn/"
end
那么项目将不会在 XCode 中构建,因为 OldPodIDependOn
文件不是项目的一部分。有点 chicken-or-the-egg 问题。
更新 2
还尝试删除 :path => "../../OldPodIDependOn/"
组件以引用已发布的 pod 而不是本地 pod - 没有帮助。
值得一提的是,这个 pod 将包含一个 UI,因此将包含并引用一个故事板,我在 podspec 文件中添加了 s.resources = 'Pod/Classes/UI/NewPod.storyboard'
行,并从中删除了故事板pod 目标编译源(否则 xcode 不会构建)。我不认为这与问题有关,但值得一提的是,也许我在那里做错了什么。
我做错了什么? 任何帮助将不胜感激!
一般来说,error: include of non-modular header inside framework module
意味着生成的框架中的头文件之一(CocoaPods 现在用于框架和库的 lints)没有存储在框架中,或者被归类为 public 头文件.
这通常可以解决将外部 imports
移动到实现文件中的问题,请参阅此 Modified to support using framework #353。
为了最终解决这个问题,我不得不放弃 pob lib create
创建的工作区 - 没有办法绕过它,我尝试了所有可能的组合/建议/代码修改来摆脱 "non-modular header inside framework" 错误,但似乎没有任何效果。 pod lib lint
总是失败。
我从头开始创建了我自己的静态库xcode项目,然后运行 pod update
在它上面添加了依赖的pod到Podfile
,然后创建了一个.podspec
文件,并将依赖的 Pod 头文件添加到静态库目标的 "Copy files" 构建阶段 + libPods.a
文件添加到 "Link Binary with libs" 构建阶段。噗! pod lib lint
不再有 "non modular header" 错误,即使我实际上在做完全相同的事情。吸取的教训是 pod lib create
不推荐用于所有 cocoapod 案例。
我遇到了同样的问题,我使用了
pod lib lint MyPod.podspec --allow-warnings --use-libraries
添加 --use-libraries 选项时,它起作用了。