Skip to content

Commit c029032

Browse files
kittenmeta-codesync[bot]
authored andcommitted
Fix outputs when iOS artifacts generator is run from Xcode script phase (#54066)
Summary: An earlier change (0.79 and onwards, I believe?) runs the iOS artifacts code generator script in Xcode as well as from Cocoapods. This duplication runs it twice, but the second step isn't able to load the new `autolinking.json` correctly; See: #53503 This PR "double" fixes this by: - simply passing the "real" output directory to the artifacts generator in (`script_phases.sh`) where it's called by Xcode, rather than a temporary directory - preferring `$RCT_SCRIPT_OUTPUT_DIR` if it's set as an environment variable in the artifacts generator (which it is by `script_phases.sh`) While this is technically redundant, future changes here make this feel like a safer option, since both conventions overlap in these two places, and the double fix may prevent a regression here in the shortterm and convey what this path is supposed to be in both places. ## Changelog: [IOS] [FIXED] - Fix autolinking-generated react-native-config output not being used in ReactCodegen script phase due to temp output directory Pull Request resolved: #54066 Test Plan: - Prefer `$RCT_SCRIPT_OUTPUT_DIR` env var for finding `build/generated/autolinking/autolinking.json` - Always use real `$RCT_SCRIPT_OUTPUT_DIR` as output in `withCodegenDiscovery` in `react_native_pods_utils/script_phases.sh` (which is called by Xcode rather than Cocoapods to invoke the artifacts generator) since the temporary output directory isn't necessary Reviewed By: javache Differential Revision: D85673625 Pulled By: cipolleschi fbshipit-source-id: 9d297fb0ee24f52a0bb7c5a8f41bf770bf63b18f
1 parent 99273f4 commit c029032

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

packages/react-native/scripts/codegen/generate-artifacts-executor/index.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,15 @@ function execute(
9090

9191
const reactNativeConfig = readReactNativeConfig(
9292
projectRoot,
93-
baseOutputPath,
93+
// NOTE: Used to load `build/generated/autolinking/autolinking.json` generated by `scripts/cocoapods/autolinking.rb`
94+
// If we have RCT_SCRIPT_OUTPUT_DIR (set in `react_native_pods_utils/script_phases.sh`, it takes precedence, otherwise
95+
// we search for the `autolinking.json` output in the `baseOutputPath`
96+
process.env.RCT_SCRIPT_OUTPUT_DIR != null &&
97+
process.env.RCT_SCRIPT_OUTPUT_DIR.length > 0
98+
? process.env.RCT_SCRIPT_OUTPUT_DIR
99+
: baseOutputPath,
94100
);
101+
95102
const codegenEnabledLibraries = findCodegenEnabledLibraries(
96103
pkgJson,
97104
projectRoot,

packages/react-native/scripts/react_native_pods_utils/script_phases.sh

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ generateCodegenArtifactsFromSchema () {
9696
generateArtifacts () {
9797
describe "Generating codegen artifacts"
9898
pushd "$RCT_SCRIPT_RN_DIR" >/dev/null || exit 1
99-
"$NODE_BINARY" "scripts/generate-codegen-artifacts.js" --path "$RCT_SCRIPT_APP_PATH" --outputPath "$TEMP_OUTPUT_DIR" --targetPlatform "ios"
99+
"$NODE_BINARY" "scripts/generate-codegen-artifacts.js" --path "$RCT_SCRIPT_APP_PATH" --outputPath "$RCT_SCRIPT_OUTPUT_DIR" --targetPlatform "ios"
100100
popd >/dev/null || exit 1
101101
}
102102

@@ -110,11 +110,9 @@ moveOutputs () {
110110
}
111111

112112
withCodegenDiscovery () {
113-
setup_dirs
114113
find_node
115114
find_codegen
116115
generateArtifacts
117-
moveOutputs
118116
}
119117

120118
noCodegenDiscovery () {

0 commit comments

Comments
 (0)