UNPKG

nitro-codegen

Version:

The code-generator for react-native-nitro-modules.

77 lines (66 loc) 2.42 kB
import { NitroConfig } from '../../config/NitroConfig.js' import { createFileMetadataString } from '../../syntax/helpers.js' import type { SourceFile } from '../../syntax/SourceFile.js' export interface RubyFile extends Omit<SourceFile, 'language'> { language: 'ruby' } export function createPodspecRubyExtension(): RubyFile { const name = NitroConfig.getIosModuleName() const code = ` ${createFileMetadataString(`${name}+autolinking.rb`, '#')} # This is a Ruby script that adds all files generated by Nitrogen # to the given podspec. # # To use it, add this to your .podspec: # \`\`\`ruby # Pod::Spec.new do |spec| # # ... # # # Add all files generated by Nitrogen # load 'nitrogen/generated/ios/${name}+autolinking.rb' # add_nitrogen_files(spec) # end # \`\`\` def add_nitrogen_files(spec) Pod::UI.puts "[NitroModules] 🔥 ${name} is boosted by nitro!" spec.dependency "NitroModules" current_source_files = Array(spec.attributes_hash['source_files']) spec.source_files = current_source_files + [ # Generated cross-platform specs "nitrogen/generated/shared/**/*.{h,hpp,c,cpp,swift}", # Generated bridges for the cross-platform specs "nitrogen/generated/ios/**/*.{h,hpp,c,cpp,mm,swift}", ] current_public_header_files = Array(spec.attributes_hash['public_header_files']) spec.public_header_files = current_public_header_files + [ # Generated specs "nitrogen/generated/shared/**/*.{h,hpp}", # Swift to C++ bridging helpers "nitrogen/generated/ios/${name}-Swift-Cxx-Bridge.hpp" ] current_private_header_files = Array(spec.attributes_hash['private_header_files']) spec.private_header_files = current_private_header_files + [ # iOS specific specs "nitrogen/generated/ios/c++/**/*.{h,hpp}", # Views are framework-specific and should be private "nitrogen/generated/shared/**/views/**/*" ] current_pod_target_xcconfig = spec.attributes_hash['pod_target_xcconfig'] || {} spec.pod_target_xcconfig = current_pod_target_xcconfig.merge({ # Use C++ 20 "CLANG_CXX_LANGUAGE_STANDARD" => "c++20", # Enables C++ <-> Swift interop (by default it's only C) "SWIFT_OBJC_INTEROP_MODE" => "objcxx", # Enables stricter modular headers "DEFINES_MODULE" => "YES", }) end `.trim() return { content: code, language: 'ruby', name: `${name}+autolinking.rb`, platform: 'ios', subdirectory: [], } }