From 5e46f370ca04614f0fe804bb610d0a1264d5df1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikl=C3=B3s=20Fazekas?= Date: Sun, 4 Feb 2024 15:49:48 +0100 Subject: [PATCH] feat: add a dummy swift file to the example if the library uses swift --- .../src/add-dummy-swift-file.rb | 16 ++++++++++++++++ .../create-react-native-library/src/index.ts | 1 + .../src/utils/generateExampleApp.ts | 19 +++++++++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 packages/create-react-native-library/src/add-dummy-swift-file.rb diff --git a/packages/create-react-native-library/src/add-dummy-swift-file.rb b/packages/create-react-native-library/src/add-dummy-swift-file.rb new file mode 100644 index 000000000..81c9c4cbc --- /dev/null +++ b/packages/create-react-native-library/src/add-dummy-swift-file.rb @@ -0,0 +1,16 @@ +gem 'xcodeproj' +require 'xcodeproj' + +project_path = ARGV[0] +target_name = ARGV[1] +project = Xcodeproj::Project.open(project_path) + +project.targets.each do |target| + if target.name == target_name + swift_file = File.join(project.path, '..', 'File.swift') + group = project.groups.select {|i| i.name == target_name }.first + file = group&.new_file(swift_file) + target.add_file_references([file]) + end +end +project.save \ No newline at end of file diff --git a/packages/create-react-native-library/src/index.ts b/packages/create-react-native-library/src/index.ts index 18350a22e..dcb419b27 100644 --- a/packages/create-react-native-library/src/index.ts +++ b/packages/create-react-native-library/src/index.ts @@ -682,6 +682,7 @@ async function create(argv: yargs.Arguments) { projectName: options.project.name, arch, reactNativeVersion, + swift: options.project.swift, }); } diff --git a/packages/create-react-native-library/src/utils/generateExampleApp.ts b/packages/create-react-native-library/src/utils/generateExampleApp.ts index 91588b2fd..98a8555e6 100644 --- a/packages/create-react-native-library/src/utils/generateExampleApp.ts +++ b/packages/create-react-native-library/src/utils/generateExampleApp.ts @@ -33,6 +33,11 @@ const PACKAGES_TO_REMOVE = [ 'typescript', ]; +const ADD_DUMMY_SWIFT_FILE = path.resolve( + __dirname, + '../../src/add-dummy-swift-file.rb' +); + const PACKAGES_TO_ADD_DEV = { 'babel-plugin-module-resolver': '^5.0.0', }; @@ -54,6 +59,7 @@ export default async function generateExampleApp({ projectName, arch, reactNativeVersion = 'latest', + swift = false, }: { type: 'expo' | 'native'; dest: string; @@ -61,6 +67,7 @@ export default async function generateExampleApp({ projectName: string; arch: 'new' | 'mixed' | 'legacy'; reactNativeVersion?: string; + swift?: boolean; }) { const directory = path.join(dest, 'example'); const args = @@ -85,6 +92,18 @@ export default async function generateExampleApp({ env: { ...process.env, npm_config_yes: 'true' }, }); + if (swift && process.platform === 'darwin') { + await spawn( + 'ruby', + [ + ADD_DUMMY_SWIFT_FILE, + path.join(directory, 'ios', `${projectName}Example.xcodeproj`), + `${projectName}Example`, + ], + {} + ); + } + // Remove unnecessary files and folders for (const file of FILES_TO_DELETE) { await fs.remove(path.join(directory, file));