如何添加第三方 SDK(多个 .framework 文件)来响应原生库模块?
How to add a thirdparty SDK (multiple .framework files) to react native library module?
我构建了一个 React Native 库模块(使用 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 识别框架 files/headers。
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 集成到库模块中的文章似乎并不多。我探索过类似的问题,例如 this 一个尚未解决且信息不足的问题。
经过几天的研究和试验,我已经能够解决这个问题。这很简单,由于缺乏有关该主题的资源而变得困难。
首先,我在我的 React Native 库(ios 文件夹)中使用 podspec 文件来添加对第 3 方框架的依赖,如下所示。
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 中添加 pods)。但是,我遇到了 'enable bitcode' 错误,编译器要求我在启用位码的情况下重新编译第 3 方库。我在应用程序(不是库)podfile(从 here 获得)中使用以下 post 安装脚本解决了这个问题。
Example/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。希望这可以节省您研究、实验和调试的时间。
我构建了一个 React Native 库模块(使用 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 识别框架 files/headers。 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 集成到库模块中的文章似乎并不多。我探索过类似的问题,例如 this 一个尚未解决且信息不足的问题。
经过几天的研究和试验,我已经能够解决这个问题。这很简单,由于缺乏有关该主题的资源而变得困难。
首先,我在我的 React Native 库(ios 文件夹)中使用 podspec 文件来添加对第 3 方框架的依赖,如下所示。
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 中添加 pods)。但是,我遇到了 'enable bitcode' 错误,编译器要求我在启用位码的情况下重新编译第 3 方库。我在应用程序(不是库)podfile(从 here 获得)中使用以下 post 安装脚本解决了这个问题。
Example/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。希望这可以节省您研究、实验和调试的时间。