2

我已经构建了一个反应原生库模块(使用 RN 0.63)。该模块依赖于一些第三方 SDK。当与 Android 集成时(使用 .aar 文件),它工作得很好。在 iOS 的情况下,我已经能够让库模块在没有 SDK 的情况下工作(使用 swift,因此使用桥接头)。在添加 SDK 时,我收到诸如 .h is not avaialble 之类的错误。

这是我的目录 我的目录结构:

react-native-lib
--android
--ios
----MyCls.swift
----MyCls.m
----react-native-lib-Bridging-Header.h
----SDKS
------DEBUG
--------A.framework
--------B.framework
--------A-Debug.podspec
--------B-Debug.podspec
------THIRDPARTY
--------JSONModel.framework
--------CocoaLumberjack.framework
--------... other frameworks
--react-native-lib.podspec
--Example
--index.js
--Logger.swift
--package.json

我在 Swift 中有一个使用 SDKS 文件夹的示例应用程序,但我似乎无法让 RN 识别框架文件/头文件。react-native-lib的Podspec文件最后几行如下:

  ...
  s.dependency "React"
  s.dependency 'JSONModel', '~> 1.8.0'
  s.dependency 'CocoaLumberjack', '~> 3.6.1'

我的示例应用程序 Podfile:

require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'

platform :ios, '11.0'
use_frameworks!

project 'example', {
    'Debug' => :debug,
    'Release' => :release,
}
#
def applibs
 pod 'A-Debug', :configuration => ['Debug'], :path  => '../node_modules/react-native-lib/ios/SDKS/DEBUG/A-Debug.podspec'
# ... A-Release, B-Debug, B-Release
# The release folders not shown in structure above.
end



target 'example' do
 config = use_native_modules!

 use_react_native!(:path => config["reactNativePath"])
  
   applibs
  
  # Disabled Flipper because of use_frameworks!
  
end

我不确定我做错了什么以及如何克服这个问题。关于如何将此类 3rd 方 sdk 集成到库模块中的文章似乎并不多。我已经探索过类似的问题,例如这个仍未解决且信息不足的问题。

4

1 回答 1

3

经过几天的研究和实验,我已经能够解决这个问题。这很简单,由于缺乏有关该主题的资源而变得困难。

首先,我使用我的 react native lib(ios 文件夹)中的 podspec 文件来添加对 3rd 方框架的依赖,如下所示。

react-native-lib.podspec

  s.dependency 'A-Debug', '~> 1.2.3', :configurations => :debug
  s.dependency 'B-Debug', '~> 2.3.4', :configurations => :debug
  s.dependency 'A-Release', '~> 1.2.3', :configurations => :release
  s.dependency 'B-Release', '~> 2.3.4', :configurations => :release

在我的示例应用程序中,podfile 的工作方式如上所示(通过在 applibs 中添加 pod)。但是,我遇到了“启用位码”错误,编译器要求我重新编译启用位码的第 3 方库。我在应用程序(不是库)podfile(从这里获得)中使用以下安装后脚本解决了这个问题。

示例/ios/Podfile

  post_install do |installer|
    installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
        config.build_settings['ENABLE_BITCODE'] = 'NO'
      end
    end
  end

做一个缓存清理,并作为一个额外的措施,清理节点模块。然后只需在您的应用程序目录中运行以下命令:

yarn install && cd ios && pod install && cd .. && yarn react-native start

在 Xcode 中打开您的项目并根据其文档导入您的 SDK。希望这可以为您节省数小时的研究、实验和调试时间。

于 2020-10-13T09:29:42.067 回答