From 55dfbf991c4305ddfb7b9e12fb4fbd6b80d1d6c7 Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Tue, 19 Aug 2025 12:59:20 +0300 Subject: [PATCH 1/2] Use package name from `package.json` --- src/copyProjectTemplateAndReplace.ts | 8 +++++--- src/eject.ts | 6 ++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/copyProjectTemplateAndReplace.ts b/src/copyProjectTemplateAndReplace.ts index 8034bb8..2618607 100644 --- a/src/copyProjectTemplateAndReplace.ts +++ b/src/copyProjectTemplateAndReplace.ts @@ -20,10 +20,11 @@ const prompt = promptInitializer(); type ContentChangedCallbackOption = 'identical' | 'changed' | 'new' | null; -type Options = { +export type Options = { upgrade?: boolean; force?: boolean; displayName?: string; + packageName?: string; ignorePaths?: string[]; }; @@ -79,7 +80,7 @@ function copyProjectTemplateAndReplace( const relativeFilePath = translateFilePath(path.relative(srcPath, absoluteSrcFilePath)) .replace(/HelloWorld/g, newProjectName) - .replace(/helloworld/g, newProjectName.toLowerCase()); + .replace(/com\/helloworld/g, options.packageName || newProjectName.toLowerCase()); // Templates may contain files that we don't want to copy. // Examples: @@ -106,7 +107,8 @@ function copyProjectTemplateAndReplace( { 'Hello App Display Name': options.displayName || newProjectName, HelloWorld: newProjectName, - helloworld: newProjectName.toLowerCase(), + 'com.helloworld': options.packageName || `com.${newProjectName.toLowerCase()}`, + 'PRODUCT_BUNDLE_IDENTIFIER = "(.*)"': `PRODUCT_BUNDLE_IDENTIFIER = "${options.packageName || newProjectName}"` }, contentChangedCallback, ); diff --git a/src/eject.ts b/src/eject.ts index f817ba3..ae99d91 100644 --- a/src/eject.ts +++ b/src/eject.ts @@ -14,7 +14,7 @@ import fs from 'fs'; import semver from 'semver'; import { logger } from '@react-native-community/cli-tools'; -import copyProjectTemplateAndReplace from './copyProjectTemplateAndReplace'; +import copyProjectTemplateAndReplace, { Options } from './copyProjectTemplateAndReplace'; /** * The eject command re-creates the `android` and `ios` native folders. Because native code can be @@ -25,6 +25,8 @@ import copyProjectTemplateAndReplace from './copyProjectTemplateAndReplace'; * * - `name` - The short name used for the project, should be TitleCase * - `displayName` - The app's name on the home screen + * + * This command will use `name` from `package.json` as a package name for Android and iOS apps. */ const pkgJson = require(path.resolve('package.json')); @@ -105,7 +107,7 @@ function eject() { process.exit(1); } - const templateOptions = { displayName }; + const templateOptions: Options = { displayName, packageName: pkgJson.name }; if (!doesIOSExist) { logger.info('Generating the iOS folder.'); From 449a755d832a6123c1ab964e3a42787a8a59e0dd Mon Sep 17 00:00:00 2001 From: vitalyster Date: Wed, 20 Aug 2025 17:02:15 +0300 Subject: [PATCH 2/2] Fix fallback to projectName --- src/copyProjectTemplateAndReplace.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/copyProjectTemplateAndReplace.ts b/src/copyProjectTemplateAndReplace.ts index 2618607..724ea93 100644 --- a/src/copyProjectTemplateAndReplace.ts +++ b/src/copyProjectTemplateAndReplace.ts @@ -80,7 +80,7 @@ function copyProjectTemplateAndReplace( const relativeFilePath = translateFilePath(path.relative(srcPath, absoluteSrcFilePath)) .replace(/HelloWorld/g, newProjectName) - .replace(/com\/helloworld/g, options.packageName || newProjectName.toLowerCase()); + .replace(/com\/helloworld/g, options.packageName || `com/${newProjectName.toLowerCase()}`); // Templates may contain files that we don't want to copy. // Examples: