根据React-Core(React / RCTBridge + Private.h)编写CocoaPod

我正在与人合着一个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!

据我所知:

  1. 无法“轻轻地”依赖框架(仅在框架存在的情况下使用)。
  2. 没有很好的方法来确定正在使用的podfile是否从podspec中调用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”如何为消费者提供支持!还是不?

zlzlyw 回答:根据React-Core(React / RCTBridge + Private.h)编写CocoaPod

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3167858.html

大家都在问