mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
1bc9ddbce3
Summary: Fixed Flipper not recognizing app when using custom Xcode configuration names. This fixes the problem that renaming the "Debug" Xcode configuration causes Flipper to not work. Despite using the recommended `:configurations` parameters and instructing Cocoapods that it was a debug build (see https://github.com/facebook/react-native/issues/34332), it still wouldn't recognize the app due to missing C preprocessor flags, specifically it was missing `-DFB_SONARKIT_ENABLED=1`. ## Changelog <!-- Help reviewers and the release process by writing your own changelog entry. For an example, see: https://github.com/facebook/react-native/wiki/Changelog --> [General] [Fixed] - Flipper now supports custom Xcode build configuration names Pull Request resolved: https://github.com/facebook/react-native/pull/34333 Test Plan: I applied the PR change to 0.68.2 (which work similarly but code was refactored since then). I then used `patch-package` to test the change and the fix worked on 2 separate projects. Patch-package change equivalent: ```diff diff --git a/node_modules/react-native/scripts/react_native_pods.rb b/node_modules/react-native/scripts/react_native_pods.rb index f2ceeda..2ea57d6 100644 --- a/node_modules/react-native/scripts/react_native_pods.rb +++ b/node_modules/react-native/scripts/react_native_pods.rb @@ -180,7 +180,7 @@ def flipper_post_install(installer) # Enable flipper for React-Core Debug configuration if target.name == 'React-Core' target.build_configurations.each do |config| - if config.name == 'Debug' + if config.debug? config.build_settings['OTHER_CFLAGS'] = "$(inherited) -DFB_SONARKIT_ENABLED=1" end end ``` **Screen shot of Xcode after the patch has been applied, for RN v0.68.2:**  Reviewed By: dmitryrykun Differential Revision: D38373812 Pulled By: cipolleschi fbshipit-source-id: d2949927084160bf0c6f8af37a7966dd22fea9a6
156 lines
6.3 KiB
Ruby
156 lines
6.3 KiB
Ruby
# Copyright (c) Meta Platforms, Inc. and affiliates.
|
||
#
|
||
# This source code is licensed under the MIT license found in the
|
||
# LICENSE file in the root directory of this source tree.
|
||
|
||
require "test/unit"
|
||
require_relative "../flipper.rb"
|
||
require_relative "./test_utils/podSpy.rb"
|
||
require_relative "./test_utils/InstallerMock.rb"
|
||
|
||
class FlipperTests < Test::Unit::TestCase
|
||
def setup
|
||
podSpy_cleanUp()
|
||
end
|
||
|
||
# =========================== #
|
||
# TEST - Install Dependencies #
|
||
# =========================== #
|
||
def test_installFlipperDependencies_installDependencies
|
||
# Act
|
||
install_flipper_dependencies('../..')
|
||
|
||
# Assert
|
||
assert_equal($podInvocationCount, 1)
|
||
assert_equal($podInvocation['React-Core/DevSupport'][:path], "../../" )
|
||
end
|
||
|
||
# ======================= #
|
||
# TEST - Use Flipper Pods #
|
||
# ======================= #
|
||
|
||
def test_UseFlipperPods_WithDefaultValues_InstallsPods
|
||
# Arrange
|
||
configurations = ['Debug']
|
||
|
||
# Act
|
||
use_flipper_pods()
|
||
|
||
# Assert
|
||
check_all_flipper_pods($flipper_default_versions, configurations)
|
||
# the number of times the `pod` function has been invoked to install a dependency
|
||
assert_equal($podInvocationCount, 22)
|
||
end
|
||
|
||
def test_UseFlipperPods_WithCustomValues_InstallsPods
|
||
# Arrange
|
||
versions = {
|
||
"Flipper" => "1.0.0",
|
||
"Flipper-Boost-iOSX" => "1.1.0",
|
||
"Flipper-DoubleConversion" => "1.1.1",
|
||
"Flipper-Fmt" => "1.2.1",
|
||
"Flipper-Folly" => "2.1.1",
|
||
"Flipper-Glog" => "0.1.2",
|
||
"Flipper-PeerTalk" => "0.0.1",
|
||
"Flipper-RSocket" => "0.1.4",
|
||
"OpenSSL-Universal" => "2.2.2200",
|
||
}
|
||
configurations = ['Debug', 'CI']
|
||
|
||
# Act
|
||
use_flipper_pods(versions, :configurations => configurations)
|
||
|
||
# Assert
|
||
check_all_flipper_pods(versions, configurations)
|
||
# the number of times the `pod` function has been invoked to install a dependency
|
||
assert_equal($podInvocationCount, 22)
|
||
end
|
||
|
||
# ================= #
|
||
# Test Post Install #
|
||
# ================= #
|
||
|
||
def test_postInstall_updatesThePodCorrectly
|
||
# Arrange
|
||
installer = prepare_mocked_installer
|
||
|
||
# Act
|
||
flipper_post_install(installer)
|
||
|
||
# Assert
|
||
yoga_target = installer.target_with_name("YogaKit")
|
||
yoga_target.build_configurations.each do |config|
|
||
assert_equal(config.build_settings['SWIFT_VERSION'], '4.1')
|
||
end
|
||
|
||
reactCore_target = installer.target_with_name("React-Core")
|
||
reactCore_target.build_configurations.each do |config|
|
||
if config.name == 'Debug' || config.name == 'CustomConfig' then
|
||
assert_equal(config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'], ['$(inherited)', 'FB_SONARKIT_ENABLED=1'])
|
||
else
|
||
assert_true(config.build_settings.empty?)
|
||
end
|
||
end
|
||
end
|
||
|
||
# ======= #
|
||
# HELPERS #
|
||
# ======= #
|
||
|
||
def check_all_flipper_pods(versions, configurations)
|
||
check_flipper_pod('Flipper', versions['Flipper'], configurations)
|
||
check_flipper_pod('FlipperKit', versions['Flipper'], configurations)
|
||
check_flipper_pod('FlipperKit/FlipperKitLayoutPlugin', versions['Flipper'], configurations)
|
||
check_flipper_pod('FlipperKit/SKIOSNetworkPlugin', versions['Flipper'], configurations)
|
||
check_flipper_pod('FlipperKit/FlipperKitUserDefaultsPlugin', versions['Flipper'], configurations)
|
||
check_flipper_pod('FlipperKit/FlipperKitReactPlugin', versions['Flipper'], configurations)
|
||
check_flipper_pod('FlipperKit/Core', versions['Flipper'], configurations)
|
||
check_flipper_pod('FlipperKit/CppBridge', versions['Flipper'], configurations)
|
||
check_flipper_pod('FlipperKit/FBCxxFollyDynamicConvert', versions['Flipper'], configurations)
|
||
check_flipper_pod('FlipperKit/FBDefines', versions['Flipper'], configurations)
|
||
check_flipper_pod('FlipperKit/FKPortForwarding', versions['Flipper'], configurations)
|
||
check_flipper_pod('FlipperKit/FlipperKitHighlightOverlay', versions['Flipper'], configurations)
|
||
check_flipper_pod('FlipperKit/FlipperKitLayoutTextSearchable', versions['Flipper'], configurations)
|
||
check_flipper_pod('FlipperKit/FlipperKitNetworkPlugin', versions['Flipper'], configurations)
|
||
check_flipper_pod('Flipper-Boost-iOSX', versions['Flipper-Boost-iOSX'], configurations)
|
||
check_flipper_pod('Flipper-DoubleConversion', versions['Flipper-DoubleConversion'], configurations)
|
||
check_flipper_pod('Flipper-Fmt', versions['Flipper-Fmt'], configurations)
|
||
check_flipper_pod('Flipper-Folly', versions['Flipper-Folly'], configurations)
|
||
check_flipper_pod('Flipper-Glog', versions['Flipper-Glog'], configurations)
|
||
check_flipper_pod('Flipper-PeerTalk', versions['Flipper-PeerTalk'], configurations)
|
||
check_flipper_pod('Flipper-RSocket', versions['Flipper-RSocket'], configurations)
|
||
check_flipper_pod('OpenSSL-Universal', versions['OpenSSL-Universal'], configurations)
|
||
end
|
||
|
||
def check_flipper_pod(name, expectedVersion, expectedConfigurations)
|
||
params = $podInvocation[name]
|
||
assert_equal(params[:version], expectedVersion)
|
||
assert_equal(params[:configurations], expectedConfigurations)
|
||
end
|
||
|
||
def prepare_mocked_installer
|
||
return InstallerMock.new(
|
||
PodsProjectMock.new([
|
||
TargetMock.new(
|
||
"YogaKit",
|
||
[
|
||
BuildConfigurationMock.new("Debug", is_debug: true),
|
||
BuildConfigurationMock.new("Release", is_debug: false),
|
||
BuildConfigurationMock.new("CustomConfig", is_debug: true),
|
||
]
|
||
),
|
||
TargetMock.new(
|
||
"React-Core",
|
||
[
|
||
BuildConfigurationMock.new("Debug", is_debug: true),
|
||
BuildConfigurationMock.new("Release", is_debug: false),
|
||
BuildConfigurationMock.new("CustomConfig", is_debug: true),
|
||
]
|
||
)
|
||
]
|
||
)
|
||
)
|
||
end
|
||
|
||
end
|