Skip to content

Commit 224c85a

Browse files
empyricalgrabbou
authored andcommittedFeb 1, 2021
Update iOS Fabric-related files to compile on OSS (#29810)
Summary: Original PR contents: This pull request updates the Podspecs and associated build scripts, and some source files so they build on OSS. RNTester now compiles with `fabric_enabled` again. The following changes have been made: * Various spots that were pointing to the old `ReactCommon/fabric` location have now been updated to `ReactCommon/react/renderer` * Files that were attempting to use internal FB header `FBRCTFabricComponentsPlugins.h` were changed to use `RCTFabricComponentsPlugins.h` * `RCTFabricComponentsPlugins` in OSS was updated to include the `Image` fabric component (thanks tsapeta) * Replaced old `generate-rncore.sh` build script with new `generate-rncore.js` script which does not require `flow-node` and uses the `react-native-codegen` API directly, so there is no longer any need for an interim `schema-rncore.json` file. * Updated Yoga podspec which wasn't fully synced with changes from the main Yoga repo * Updated Fabric podspec with additional needed subspecs Additions to PR by hramos: * Replaced use of generate-rncore scripts with the original generate-native-modules-specs.sh script, which is now generate-specs.sh and supports both codegen for Native Modules and Components now (TurboModules/Fabric). * Codegen now runs at build time as part of the Xcode build pipeline instead of as part of `pod install`. The build script is injected by the FBReactNativeSpec pod, as the pod is part of both Fabric and non-Fabric builds. [General] [Fixed] - RNTester compiles with `fabric_enabled` again Pull Request resolved: #29810 Test Plan: RNTester now compiles and runs in the simulator again when `fabric_enabled` is set to `true`. ``` cd xplat/js/react-native-github/packages/rn-tester USE_FABRIC=1 pod install open RNTesterPods.xcworkspace ``` Reviewed By: fkgozali Differential Revision: D24058507 Pulled By: hramos fbshipit-source-id: 8b2ea3694e6cb9aa23f83f087e2995fd4320e2bb
1 parent 7ec38b9 commit 224c85a

File tree

23 files changed

+209
-148
lines changed

23 files changed

+209
-148
lines changed
 

‎.gitignore

+1-2
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,7 @@ package-lock.json
102102
# react-native-codegen
103103
/Libraries/FBReactNativeSpec/FBReactNativeSpec
104104
/packages/react-native-codegen/lib
105-
/ReactCommon/fabric/components/rncore/
106-
/schema-rncore.json
105+
/ReactCommon/react/renderer/components/rncore/
107106

108107
# Visual studio
109108
.vscode

‎Libraries/FBReactNativeSpec/FBReactNativeSpec.podspec

+23-6
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,27 @@ end
2020

2121
react_native_path = File.join(__dir__, "..", "..")
2222
srcs_dir = File.join(__dir__, "..")
23-
codegen_script_path = File.join(react_native_path, "scripts", "generate-native-modules-specs.sh")
23+
codegen_script_path = File.join(react_native_path, "scripts", "generate-specs.sh")
2424
codegen_path = File.join(react_native_path, codegen_path_prefix, "react-native-codegen")
25-
output_dir = File.join(__dir__, "FBReactNativeSpec")
26-
generated_files = [File.join(output_dir, "FBReactNativeSpec.h"), File.join(output_dir, "FBReactNativeSpec-generated.mm")]
2725
codegen_command = "CODEGEN_PATH=#{codegen_path} sh '#{codegen_script_path}' | tee \"${SCRIPT_OUTPUT_FILE_0}\""
26+
modules_output_dir = File.join(__dir__, "FBReactNativeSpec")
27+
components_output_dir = File.join(react_native_path, "ReactCommon", "react", "renderer", "components", "rncore")
28+
generated_filenames = [ "FBReactNativeSpec.h", "FBReactNativeSpec-generated.mm" ]
29+
generated_files = generated_filenames.map { |filename| File.join(modules_output_dir, filename) }
30+
31+
if ENV['USE_FABRIC'] == '1'
32+
components_generated_filenames = [
33+
"ComponentDescriptors.h",
34+
"EventEmitters.cpp",
35+
"EventEmitters.h",
36+
"Props.cpp",
37+
"Props.h",
38+
"RCTComponentViewHelpers.h",
39+
"ShadowNodes.cpp",
40+
"ShadowNodes.h"
41+
]
42+
generated_files = generated_files.concat(components_generated_filenames.map { |filename| File.join(components_output_dir, filename) })
43+
end
2844

2945
folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32'
3046
folly_version = '2020.01.13.00'
@@ -40,6 +56,7 @@ Pod::Spec.new do |s|
4056
s.compiler_flags = folly_compiler_flags + ' -Wno-nullability-completeness'
4157
s.source = source
4258
s.source_files = "**/*.{c,h,m,mm,cpp}"
59+
s.exclude_files = "jni"
4360
s.header_dir = "FBReactNativeSpec"
4461

4562
s.pod_target_xcconfig = {
@@ -55,11 +72,11 @@ Pod::Spec.new do |s|
5572
s.dependency "React-jsi", version
5673
s.dependency "ReactCommon/turbomodule/core", version
5774

58-
s.prepare_command = "mkdir -p #{output_dir} && touch #{generated_files.reduce() { |str, file| str + " " + file }}"
75+
s.prepare_command = "mkdir -p #{modules_output_dir} #{components_output_dir} && touch #{generated_files.reduce() { |str, file| str + " " + file }}"
5976
s.script_phase = {
60-
:name => 'Generate Native Modules Code',
77+
:name => 'Generate Specs',
6178
:input_files => [srcs_dir],
62-
:output_files => ["$(DERIVED_FILE_DIR)/FBReactNativeSpec-codegen.log"],
79+
:output_files => ["$(DERIVED_FILE_DIR)/codegen.log"],
6380
:script => codegen_command,
6481
:execution_position => :before_compile
6582
}

‎React/Fabric/Mounting/ComponentViews/ActivityIndicator/RCTActivityIndicatorViewComponentView.mm

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
#import <react/renderer/components/rncore/EventEmitters.h>
1414
#import <react/renderer/components/rncore/Props.h>
1515

16-
#import "FBRCTFabricComponentsPlugins.h"
16+
#import "RCTFabricComponentsPlugins.h"
1717

1818
using namespace facebook::react;
1919

‎React/Fabric/Mounting/ComponentViews/Picker/RCTPickerComponentView.mm

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
#import <react/renderer/components/iospicker/PickerProps.h>
1616
#import <react/renderer/textlayoutmanager/RCTAttributedTextUtils.h>
1717

18-
#import "FBRCTFabricComponentsPlugins.h"
1918
#import "RCTConversions.h"
19+
#import "RCTFabricComponentsPlugins.h"
2020

2121
using namespace facebook::react;
2222

‎React/Fabric/Mounting/ComponentViews/RCTFabricComponentsPlugins.h

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ Class<RCTComponentViewProtocol> RCTParagraphCls(void) __attribute__((used));
4141
Class<RCTComponentViewProtocol> RCTTextInputCls(void) __attribute__((used));
4242
Class<RCTComponentViewProtocol> RCTInputAccessoryCls(void) __attribute__((used));
4343
Class<RCTComponentViewProtocol> RCTViewCls(void) __attribute__((used));
44+
Class<RCTComponentViewProtocol> RCTImageCls(void) __attribute__((used));
4445

4546
#ifdef __cplusplus
4647
}

‎React/Fabric/Mounting/ComponentViews/RCTFabricComponentsPlugins.mm

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
{"TextInput", RCTTextInputCls},
3131
{"InputAccessoryView", RCTInputAccessoryCls},
3232
{"View", RCTViewCls},
33+
{"Image", RCTImageCls},
3334
};
3435

3536
auto p = sFabricComponentsClassMap.find(name);

‎React/Fabric/Mounting/ComponentViews/SafeAreaView/RCTSafeAreaViewComponentView.mm

-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
#import <React/RCTUtils.h>
1111
#import <react/renderer/components/safeareaview/SafeAreaViewComponentDescriptor.h>
1212
#import <react/renderer/components/safeareaview/SafeAreaViewState.h>
13-
#import "FBRCTFabricComponentsPlugins.h"
1413
#import "RCTConversions.h"
1514
#import "RCTFabricComponentsPlugins.h"
1615

‎React/Fabric/Mounting/ComponentViews/ScrollView/RCTPullToRefreshViewComponentView.mm

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
#import <React/RCTRefreshableProtocol.h>
1717
#import <React/RCTScrollViewComponentView.h>
1818

19-
#import "FBRCTFabricComponentsPlugins.h"
19+
#import "RCTFabricComponentsPlugins.h"
2020

2121
using namespace facebook::react;
2222

‎React/Fabric/Mounting/ComponentViews/Slider/RCTSliderComponentView.mm

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
#import <react/renderer/components/rncore/Props.h>
1616
#import <react/renderer/components/slider/SliderComponentDescriptor.h>
1717

18-
#import "FBRCTFabricComponentsPlugins.h"
18+
#import "RCTFabricComponentsPlugins.h"
1919

2020
using namespace facebook::react;
2121

‎React/Fabric/Mounting/ComponentViews/Switch/RCTSwitchComponentView.mm

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#import <react/renderer/components/rncore/Props.h>
1515
#import <react/renderer/components/rncore/RCTComponentViewHelpers.h>
1616

17-
#import "FBRCTFabricComponentsPlugins.h"
17+
#import "RCTFabricComponentsPlugins.h"
1818

1919
using namespace facebook::react;
2020

‎React/Fabric/Mounting/ComponentViews/UnimplementedView/RCTUnimplementedViewComponentView.mm

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
#import <React/RCTConversions.h>
1818

19-
#import "FBRCTFabricComponentsPlugins.h"
19+
#import "RCTFabricComponentsPlugins.h"
2020

2121
using namespace facebook::react;
2222

‎React/React-RCTFabric.podspec

+7-3
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ Pod::Spec.new do |s|
3030
s.author = "Facebook, Inc. and its affiliates"
3131
s.platforms = { :ios => "10.0" }
3232
s.source = source
33-
s.source_files = "Fabric/**/*.{c,h,m,mm,S,cpp}",
34-
"Tests/**/*.{mm}"
33+
s.source_files = "Fabric/**/*.{c,h,m,mm,S,cpp}"
3534
s.exclude_files = "**/tests/*",
3635
"**/android/*",
3736
s.compiler_flags = folly_compiler_flags + ' ' + boost_compiler_flags
@@ -45,5 +44,10 @@ Pod::Spec.new do |s|
4544
s.dependency "React-Core", version
4645
s.dependency "React-Fabric", version
4746
s.dependency "React-RCTImage", version
48-
s.dependency "Folly/Fabric", folly_version
47+
s.dependency "RCT-Folly/Fabric", folly_version
48+
49+
s.test_spec 'Tests' do |test_spec|
50+
test_spec.source_files = "Tests/**/*.{mm}"
51+
test_spec.framework = "XCTest"
52+
end
4953
end

‎ReactCommon/React-Fabric.podspec

+123-72
Large diffs are not rendered by default.

‎ReactCommon/react/renderer/graphics/React-graphics.podspec

+7-7
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
require "json"
77

8-
package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "package.json")))
8+
package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "..", "package.json")))
99
version = package['version']
1010

1111
source = { :git => 'https://github.com/facebook/react-native.git' }
@@ -32,11 +32,11 @@ Pod::Spec.new do |s|
3232
s.library = "stdc++"
3333
s.compiler_flags = folly_compiler_flags + ' ' + boost_compiler_flags
3434
s.source_files = "**/*.{m,mm,cpp,h}"
35-
s.exclude_files = "**/tests/*",
36-
"**/android/*",
37-
"**/cxx/*"
38-
s.header_dir = "react/graphics"
39-
s.pod_target_xcconfig = { "USE_HEADERMAP" => "NO", "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost-for-react-native\" \"$(PODS_TARGET_SRCROOT)/ReactCommon\" \"$(PODS_ROOT)/RCT-Folly\"" }
35+
s.exclude_files = "tests",
36+
"platform/android",
37+
"platform/cxx"
38+
s.header_dir = "react/renderer/graphics"
39+
s.pod_target_xcconfig = { "USE_HEADERMAP" => "NO", "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost-for-react-native\" \"$(PODS_TARGET_SRCROOT)/../../../\" \"$(PODS_ROOT)/RCT-Folly\"" }
4040

41-
s.dependency "Folly/Fabric", folly_version
41+
s.dependency "RCT-Folly/Fabric", folly_version
4242
end

‎ReactCommon/yoga/Yoga.podspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ Pod::Spec.new do |spec|
5151
source_files = File.join('ReactCommon/yoga', source_files) if ENV['INSTALL_YOGA_WITHOUT_PATH_OPTION']
5252
spec.source_files = source_files
5353

54-
header_files = 'yoga/{Yoga,YGEnums,YGMacros,YGValue}.h'
54+
header_files = 'yoga/{Yoga,YGEnums,YGMacros,YGNode,YGStyle,YGValue}.h'
5555
header_files = File.join('ReactCommon/yoga', header_files) if ENV['INSTALL_YOGA_WITHOUT_PATH_OPTION']
5656
spec.public_header_files = header_files
5757
end

‎package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@
3737
"README.md",
3838
"rn-get-polyfills.js",
3939
"scripts/compose-source-maps.js",
40-
"scripts/generate-native-modules-specs.sh",
41-
"scripts/generate-native-modules-specs-cli.js",
40+
"scripts/generate-specs.sh",
41+
"scripts/generate-specs-cli.js",
4242
"scripts/ios-configure-glog.sh",
4343
"scripts/launchPackager.bat",
4444
"scripts/launchPackager.command",

‎packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/plugin/CodegenPluginExtension.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public File codegenGenerateSchemaCLI() {
3434
}
3535

3636
public File codegenGenerateNativeModuleSpecsCLI() {
37-
return new File(this.reactNativeRootDir, "scripts/generate-native-modules-specs-cli.js");
37+
return new File(this.reactNativeRootDir, "scripts/generate-specs-cli.js");
3838
}
3939

4040
private String projectPathToLibraryName(final String projectPath) {

‎packages/rn-tester/Podfile

+13-5
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,26 @@ end
1515
def pods()
1616
project 'RNTesterPods.xcodeproj'
1717

18-
# Enable TurboModule
18+
fabric_enabled = false
19+
20+
# To use fabric: set the environment variable `USE_FABRIC` to 1, like below
21+
# $ USE_FABRIC=1 bundle exec pod install
22+
# or
23+
# $ export USE_FABRIC=1
24+
# $ bundle exec pod install
25+
if ENV['USE_FABRIC'] == '1'
26+
puts "Building RNTester with Fabric enabled."
27+
fabric_enabled = true
28+
end
29+
1930
prefix_path = "../.."
20-
use_react_native!(path: prefix_path, hermes_enabled: ENV['USE_HERMES'] == '1')
31+
use_react_native!(path: prefix_path, fabric_enabled: fabric_enabled, hermes_enabled: ENV['USE_HERMES'] == '1')
2132
pod 'ReactCommon/turbomodule/samples', :path => "#{prefix_path}/ReactCommon"
2233

2334
# Additional Pods which aren't included in the default Podfile
2435
pod 'React-RCTPushNotification', :path => "#{prefix_path}/Libraries/PushNotificationIOS"
2536
pod 'Yoga', :path => "#{prefix_path}/ReactCommon/yoga", :modular_headers => true
2637
# Additional Pods which are classed as unstable
27-
#
28-
# To use fabric: add `fabric_enabled` option to the use_react_native method above, like below
29-
# use_react_native!(path: "..", fabric_enabled: true)
3038
end
3139

3240
target 'RNTester' do

‎packages/rn-tester/Podfile.lock

+3-3
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@ SPEC CHECKSUMS:
490490
CocoaLibEvent: 2fab71b8bd46dd33ddb959f7928ec5909f838e3f
491491
DoubleConversion: cde416483dac037923206447da6e1454df403714
492492
FBLazyVector: fe973c09b2299b5e8154186ecf1f6554b4f70987
493-
FBReactNativeSpec: 77f376d6af8c6348f0cc6de9a96c7a288f4e03ab
493+
FBReactNativeSpec: 8e8b4f540947580f2a9ef54a443453c562d439cd
494494
Flipper: be611d4b742d8c87fbae2ca5f44603a02539e365
495495
Flipper-DoubleConversion: 38631e41ef4f9b12861c67d17cb5518d06badc41
496496
Flipper-Folly: e4493b013c02d9347d5e0cb4d128680239f6c78a
@@ -525,9 +525,9 @@ SPEC CHECKSUMS:
525525
React-RCTVibration: a1cce36dd452eb88296d99d80d66f2c5bd50aad4
526526
React-runtimeexecutor: 53867815d0a01e53a2c901cb7f01076216c5c799
527527
ReactCommon: d101410fc55088c91dc24595715c7b26ec760adf
528-
Yoga: 69ef0b2bba5387523f793957a9f80dbd61e89631
528+
Yoga: e37ade282f73232191786671781d052c84d0faa8
529529
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
530530

531-
PODFILE CHECKSUM: 3adfe268d800503789170d1862bde422ee204fe8
531+
PODFILE CHECKSUM: 486f12ff39a0c690fe414d7ffbbdaa371d51590b
532532

533533
COCOAPODS: 1.10.0

‎scripts/generate-rncore.sh

-14
This file was deleted.

‎scripts/generate-native-modules-specs-cli.js ‎scripts/generate-specs-cli.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ const path = require('path');
2525

2626
const GENERATORS = {
2727
android: ['modulesAndroid'],
28-
ios: ['modulesIOS'],
28+
ios: ['componentsIOS', 'modulesIOS'],
2929
};
3030

3131
function generateSpec(

‎scripts/generate-native-modules-specs.sh ‎scripts/generate-specs.sh

+18-23
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,18 @@
55
# LICENSE file in the root directory of this source tree.
66

77
# This script collects the JavaScript spec definitions for core
8-
# native modules, then uses react-native-codegen to generate
9-
# native code.
8+
# native modules and components, then uses react-native-codegen
9+
# to generate native code.
1010
# The script will use the local react-native-codegen package by
1111
# default. Optionally, set the CODEGEN_PATH to point to the
1212
# desired codegen library (e.g. when using react-native-codegen
1313
# from npm).
1414
#
1515
# Usage:
16-
# ./scripts/generate-native-modules-specs.sh
16+
# ./scripts/generate-specs.sh
1717
#
18-
# Example:
19-
# CODEGEN_PATH=.. ./scripts/generate-native-modules-specs.sh
18+
# Examples:
19+
# CODEGEN_PATH=.. ./scripts/generate-specs.sh
2020

2121
# shellcheck disable=SC2038
2222

@@ -27,6 +27,7 @@ TEMP_DIR=$(mktemp -d /tmp/react-native-codegen-XXXXXXXX)
2727
RN_DIR=$(cd "$THIS_DIR/.." && pwd)
2828
CODEGEN_PATH="${CODEGEN_PATH:-$(cd "$RN_DIR/packages/react-native-codegen" && pwd)}"
2929
YARN_BINARY="${YARN_BINARY:-$(command -v yarn)}"
30+
USE_FABRIC="${USE_FABRIC:-0}"
3031

3132
cleanup () {
3233
set +e
@@ -38,12 +39,14 @@ describe () {
3839
printf "\\n\\n>>>>> %s\\n\\n\\n" "$1"
3940
}
4041

41-
run_codegen () {
42-
SRCS_DIR=$1
43-
LIBRARY_NAME=$2
44-
OUTPUT_DIR=$3
42+
main() {
43+
SRCS_DIR=$(cd "$RN_DIR/Libraries" && pwd)
44+
45+
OUTPUT_DIR="$TEMP_DIR/out"
46+
COMPONENTS_DIR="$RN_DIR/ReactCommon/react/renderer/components/rncore"
47+
MODULES_DIR="$RN_DIR/Libraries/FBReactNativeSpec/FBReactNativeSpec"
4548

46-
SCHEMA_FILE="$TEMP_DIR/schema-$LIBRARY_NAME.json"
49+
SCHEMA_FILE="$TEMP_DIR/schema.json"
4750

4851
if [ ! -d "$CODEGEN_PATH/lib" ]; then
4952
describe "Building react-native-codegen package"
@@ -58,21 +61,13 @@ run_codegen () {
5861

5962
describe "Generating native code from schema (iOS)"
6063
pushd "$RN_DIR" >/dev/null || exit
61-
"$YARN_BINARY" --silent node scripts/generate-native-modules-specs-cli.js ios "$SCHEMA_FILE" "$OUTPUT_DIR"
64+
USE_FABRIC="$USE_FABRIC" "$YARN_BINARY" --silent node scripts/generate-specs-cli.js ios "$SCHEMA_FILE" "$OUTPUT_DIR"
6265
popd >/dev/null || exit
63-
}
6466

65-
# Handle Core Modules
66-
run_codegen_core_modules () {
67-
LIBRARY_NAME="FBReactNativeSpec"
68-
SRCS_DIR=$(cd "$RN_DIR/Libraries" && pwd)
69-
OUTPUT_DIR="$SRCS_DIR/$LIBRARY_NAME/$LIBRARY_NAME"
70-
71-
run_codegen "$SRCS_DIR" "$LIBRARY_NAME" "$OUTPUT_DIR"
72-
}
73-
74-
main() {
75-
run_codegen_core_modules
67+
mkdir -p "$COMPONENTS_DIR" "$MODULES_DIR"
68+
mv "$OUTPUT_DIR/FBReactNativeSpec.h" "$OUTPUT_DIR/FBReactNativeSpec-generated.mm" "$MODULES_DIR"
69+
find "$OUTPUT_DIR" -type f | xargs sed -i '' 's/FBReactNativeSpec/rncore/g'
70+
cp -R "$OUTPUT_DIR/." "$COMPONENTS_DIR"
7671
}
7772

7873
trap cleanup EXIT

‎scripts/react_native_pods.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def use_react_native! (options={})
5555

5656
if fabric_enabled
5757
pod 'React-Fabric', :path => "#{prefix}/ReactCommon"
58-
pod 'React-graphics', :path => "#{prefix}/ReactCommon/fabric/graphics"
58+
pod 'React-graphics', :path => "#{prefix}/ReactCommon/react/renderer/graphics"
5959
pod 'React-jsi/Fabric', :path => "#{prefix}/ReactCommon/jsi"
6060
pod 'React-RCTFabric', :path => "#{prefix}/React"
6161
pod 'RCT-Folly/Fabric', :podspec => "#{prefix}/third-party-podspecs/RCT-Folly.podspec"

0 commit comments

Comments
 (0)
Please sign in to comment.