Files
react-native/scripts/cocoapods/__tests__/flipper-test.rb
T
Seph Soliman 1bc9ddbce3 Enable Flipper for custom Xcode configurations (#34333)
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:**
![Screen Shot 2022-08-02 at 14 31 49](https://user-images.githubusercontent.com/895369/182477178-387df1b2-d86c-4d82-859c-a2d1e6e6d1d0.jpg)

Reviewed By: dmitryrykun

Differential Revision: D38373812

Pulled By: cipolleschi

fbshipit-source-id: d2949927084160bf0c6f8af37a7966dd22fea9a6
2022-08-09 10:14:23 -07:00

156 lines
6.3 KiB
Ruby
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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