我正在与人合着一个React RC库,它依赖于rctbridge。在实现对autolinking的支持的过程中,我正在编写Podspec,并想知道什么是声明对React的依赖关系的最佳方法。
关注#1
我当前的方法是对(不建议使用的)React pod拥有podSpec依赖关系(我相信它将解析为使用方应用的podfile指定的dev pod),并将React头文件的路径添加到xcconfig的{{1 }},基本上是:
app_path = File.expand_path('../..',__dir__)
pod::Spec.new do |s|
# ... here goes a lot of other stuff
s.dependency 'React'
s.pod_target_xcconfig = { "'#{app_path}/ios/pods/Headers/Public/React-Core'" }
end
这可行,但是我不喜欢它相对于消耗应用程序ios和pods文件夹的节点模块路径的位置进行假设。
在实践中,我们可以改用'"$(podS_ROOT)/Headers/Public/React-Core/"'
,但这会中断lint库的运行(运行pod lib lint
),因为在此lint期间生成的测试应用程序没有podfile,该podfile依赖于本地dev pod。常规的React Native应用的podfile就可以了。
关注点2
我们希望我们的库支持消费者通过use_frameworks!
使用框架的场景,该框架将React捆绑到框架目录中。这意味着标头将不再位于ios/pods/Headers
文件夹中,并且我们的pod需要依赖于React
框架:
pod::Spec.new do |s|
# ... here goes a lot of other stuff
s.framework 'React'
s.dependency 'React'
end
但是添加时,使用者podfile必须调用use_frameworks!
。
据我所知:
这是真的吗?
我目前(也是超级hacky)的解决方法是假设使用者podfile的位置并检查是否存在“ use_framework!”:
app_path = File.expand_path('../..',__dir__)
podfile_path = File.expand_path('ios/podfile',app_path)
begin
podfile = File.read(podfile_path)
uses_frameworks = podfile.scan(/\n\s*use_frameworks!\n/).any?
rescue
uses_frameworks = false
end
pod::Spec.new do |s|
# ... here goes a lot of other stuff
# Conditionally depend on the React framework
if uses_frameworks
s.framework 'React'
end
# Depending on the React pod is still needed for some reason ...
s.dependency 'React'
end
我对你的问题
您是否对实现导入“ React / rctbridge + Private.h”标头的目标的更优雅方法有任何想法,并且不管使用“ use_frameworks”如何为消费者提供支持!还是不?