create-nitro-lib
Version:
CLI tool to generate React Native Nitro Modules templates
67 lines (56 loc) • 2.1 kB
JavaScript
import path from 'node:path';
import fs from 'fs-extra';
import { toPascalCase } from '../utils/string.js';
export async function createIosStructure(packageDir, config) {
const iosDir = path.join(packageDir, 'ios');
await fs.ensureDir(iosDir);
const pascalName = toPascalCase(config.name);
const podspecContent = `require "json"
package = JSON.parse(File.read(File.join(__dir__, "package.json")))
Pod::Spec.new do |s|
s.name = "${pascalName}"
s.version = package["version"]
s.summary = package["description"]
s.homepage = package["homepage"]
s.license = package["license"]
s.authors = package["author"]
s.platforms = { :ios => min_ios_version_supported, :visionos => 1.0 }
s.source = { :git => "https://github.com/Developer/${config.packageName}.git", :tag => "#{s.version}" }
s.source_files = [
# Implementation (Swift)
"ios/**/*.{swift}",
# Autolinking/Registration (Objective-C++)
"ios/**/*.{m,mm}",
# Implementation (C++ objects)
"cpp/**/*.{hpp,cpp}",
]
s.pod_target_xcconfig = {
# C++ compiler flags, mainly for folly.
"GCC_PREPROCESSOR_DEFINITIONS" => "$(inherited) FOLLY_NO_CONFIG FOLLY_CFG_NO_COROUTINES"
}
load 'nitrogen/generated/ios/${pascalName}+autolinking.rb'
add_nitrogen_files(s)
s.dependency 'React-jsi'
s.dependency 'React-callinvoker'
install_modules_dependencies(s)
end
`;
await fs.writeFile(path.join(packageDir, `${pascalName}.podspec`), podspecContent);
}
export async function createIosSwiftImplementation(packageDir, config) {
const iosDir = path.join(packageDir, 'ios');
await fs.ensureDir(iosDir);
const pascalName = toPascalCase(config.name);
const swiftContent = `import Foundation
import NitroModules
class Hybrid${pascalName}: Hybrid${pascalName}Spec {
func hello(name: String) -> String {
return "Hello \\(name) from ${pascalName}!"
}
func add(a: Double, b: Double) -> Double {
return a + b
}
}
`;
await fs.writeFile(path.join(iosDir, `Hybrid${pascalName}.swift`), swiftContent);
}