Skip to content

'NitroModules/JNICallable.hpp' file not found #1110

@athexweb3

Description

@athexweb3

What happened?

Nitrogen used #include <NitroModules/JNICallable.hpp> in /generated/android/c++/JFunc_void_std__string_std__shared_ptr_ArrayBuffer_.hpp

but this file is not found

Nitrogen CLI logs (with --logLevel="debug")

athexweb3@MacBook-Air react-native-quick-p2p % bunx nitrogen --logLevel="debug"
🔧  Loading nitro.json config...
🚀  Nitrogen 0.31.10 runs at ~/Developer/modules/react-native-quick-p2p/packages/react-native-quick-p2p
    🔍  Nitrogen found 1 spec in ./src/specs
  Parsing QuickP2P.nitro.ts...
    ⚙️   Generating specs for HybridObject "Peer"...
        shared: Generating C++ code...
          C++: Creating HybridPeerSpec.hpp...
          C++: Creating HybridPeerSpec.cpp...
        ios: Generating Swift code...
          Swift: Creating HybridPeerSpec.swift...
          Swift: Creating HybridPeerSpec_cxx.swift...
          C++: Creating HybridPeerSpecSwift.hpp...
          C++: Creating HybridPeerSpecSwift.cpp...
        android: Generating Kotlin code...
          Kotlin: Creating HybridPeerSpec.kt...
          C++: Creating JHybridPeerSpec.hpp...
          C++: Creating JHybridPeerSpec.cpp...
    ⚙️   Generating specs for HybridObject "P2PManager"...
        shared: Generating C++ code...
          C++: Creating HybridP2PManagerSpec.hpp...
          C++: Creating HybridP2PManagerSpec.cpp...
          C++: Creating PeerMetadata.hpp...
          C++: Creating IdentitySpec.hpp...
        ios: Generating Swift code...
          Swift: Creating HybridP2PManagerSpec.swift...
          Swift: Creating PeerMetadata.swift...
          Swift: Creating IdentitySpec.swift...
          Swift: Creating Func_void_std__string.swift...
          Swift: Creating Func_void_std__string_std__shared_ptr_ArrayBuffer_.swift...
          Swift: Creating HybridP2PManagerSpec_cxx.swift...
          C++: Creating HybridP2PManagerSpecSwift.hpp...
          C++: Creating HybridP2PManagerSpecSwift.cpp...
        android: Generating Kotlin code...
          Kotlin: Creating HybridP2PManagerSpec.kt...
          C++: Creating JHybridP2PManagerSpec.hpp...
          C++: Creating JHybridP2PManagerSpec.cpp...
          Kotlin: Creating PeerMetadata.kt...
          C++: Creating JPeerMetadata.hpp...
          Kotlin: Creating IdentitySpec.kt...
          C++: Creating JIdentitySpec.hpp...
          Kotlin: Creating Func_void_std__string.kt...
          C++: Creating JFunc_void_std__string.hpp...
          Kotlin: Creating Func_void_std__string_std__shared_ptr_ArrayBuffer_.kt...
          C++: Creating JFunc_void_std__string_std__shared_ptr_ArrayBuffer_.hpp...
⛓️   Setting up build configs for autolinking...
    Creating autolinking build setup for ios...
          Ruby: Creating QuickP2P+autolinking.rb...
          C++: Creating QuickP2P-Swift-Cxx-Bridge.hpp...
          C++: Creating QuickP2P-Swift-Cxx-Bridge.cpp...
          C++: Creating QuickP2P-Swift-Cxx-Umbrella.hpp...
          Objective-c++: Creating QuickP2PAutolinking.mm...
          Swift: Creating QuickP2PAutolinking.swift...
    Creating autolinking build setup for android...
          Cmake: Creating QuickP2P+autolinking.cmake...
          Gradle: Creating QuickP2P+autolinking.gradle...
          C++: Creating QuickP2POnLoad.hpp...
          C++: Creating QuickP2POnLoad.cpp...
          Kotlin: Creating QuickP2POnLoad.kt...
🎉  Generated 2/2 HybridObjects in 1.0s!
💡  Your code is in ./nitrogen/generated
athexweb3@MacBook-Air react-native-quick-p2p %

Nitro Specs (.nitro.ts)

import { type HybridObject } from 'react-native-nitro-modules'

type Platform = { ios: 'swift', android: 'kotlin' }

/**
 * Represents a remote device in the P2P Mesh.
 */
export interface Peer extends HybridObject<Platform> {
  readonly id: string
  readonly deviceName: string

  /**
   * Sends data explicitly to this peer.
   * Uses Transport-level routing (TCP/UDP).
   */
  send(data: ArrayBuffer): void

  /**
   * Disconnects this specific peer link.
   */
  disconnect(): void
}

/**
 * Represents the identity keys to be injected into the native engine.
 */
export interface IdentitySpec {
  privateKey: string; // PEM or Base64
  publicKey: string;  // PEM or Base64 (Cert/Public Key)
  peerId: string;     // The derived ID (Base58/Base64)
}

/**
 * Represents the metadata of a peer, typically its identity.
 */
export type PeerMetadata = {
  id: string;
  name: string;
  publicKey: string;
  topics: string[];
};

/**
 * The Central P2P Engine Facade.
 * Manages Discovery, Transport, Security, and Routing.
 */
export interface P2PManager extends HybridObject<Platform> {
  // Identity Management (Legacy/Internal)
  getIdentity(): PeerMetadata;
  generateNewIdentity(): PeerMetadata;

  // Lifecycle
  start(identity?: IdentitySpec): void
  stop(): void

  // Connectivity
  /**
   * Initiates a connection to a specific address (IP or BLE UUID).
   * Note: This is lower-level. Ideally use Discovery to find peers first.
   */
  connect(address: string): void

  /**
   * Broadcasts data to this Peer ID.
   * If Mesh is enabled, this might hop through other peers.
   */
  send(peerId: string, data: ArrayBuffer): void

  /**
   * Retrieves a handle to a connected peer.
   */
  getPeer(peerId: string): Peer

  // Events (Callback Registration)
  // Note: For High-Performance, Nitro allows passing JS function references directly.

  // Discovery Events
  onPeerFound(callback: (peerId: string) => void): void
  onPeerLost(callback: (peerId: string) => void): void

  // Transport Events
  onPeerConnected(callback: (peerId: string) => void): void
  onPeerDisconnected(callback: (peerId: string) => void): void
  onMessageReceived(callback: (peerId: string, data: ArrayBuffer) => void): void
}

Nitro Modules Version

^0.29.1

Nitrogen Version

^0.29.1

Operating system

MacOS

Additional information

Metadata

Metadata

Assignees

No one assigned

    Labels

    nitrogenIssue is related to the code-generator "Nitrogen"

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions