react-native-acoustic-connect-beta
Version:
BETA: React native plugin for Acoustic Connect
88 lines • 4.69 kB
TypeScript
import { type ConfigPlugin } from '@expo/config-plugins';
import type { ExpoConfig } from '@expo/config-types';
import { type ConnectPluginProps } from './withConnectNSE';
/**
* Generates the Info.plist content for the ConnectNCE target.
*
* The NSExtensionAttributes mirror the canonical bare-workflow reference
* (Examples/bare-workflow/ios/ConnectNCE/Info.plist), which itself mirrors the
* iOS-SDK NCE 1:1:
* - UNNotificationExtensionCategory: the category identifiers the Connect
* APNs payload routes rich-media notifications through. Must match the
* category the SDK/Collector sets — keep in sync with the iOS-SDK NCE.
* - UNNotificationExtensionDefaultContentHidden=false: keep the default
* system body alongside the custom content view.
* - UNNotificationExtensionInitialContentSizeRatio=1.0: start full-height;
* the SDK content controller resizes to fit the rendered media.
*
* RCTNewArchEnabled is intentionally omitted: the NCE links the Connect SDK
* only — no React Native runtime is present in the extension process. (The
* bare-workflow reference carries it as an Xcode-template leftover; the
* plugin-generated target drops it, consistent with the NSE template.)
*/
export declare function buildNCEInfoPlist(): string;
/** Generates the entitlements plist content for the ConnectNCE target. */
export declare function buildNCEEntitlements(appGroupIdentifier: string): string;
/**
* Returns the Ruby snippet to inject into the Expo-generated Podfile for the
* ConnectNCE target. Thin wrapper over the shared
* {@link buildConnectPodTargetBlock} (single source of truth for the
* AcousticConnect pod-resolution helper), parameterised with the NCE marker,
* helper name, and target name.
*/
export declare function buildPodfileBlock(): string;
/**
* Injects the ConnectNCE Podfile block into `podfileContent` if not already
* present (idempotent, guarded by PODFILE_MARKER).
*/
export declare function injectPodfileBlock(podfileContent: string): string;
/**
* Adds the ConnectNCE Xcode target (app_extension) to the project.
*
* Sibling to withNSEXcodeProject; the only differences are the target name,
* the Swift source file (NotificationViewController.swift), the NCE Info.plist
* (content-extension NSExtension keys), and skipping BOTH extension targets'
* configs when mirroring host build settings.
*
* Idempotent: if a target named ConnectNCE already exists, skips target
* creation but still (re)writes the source files.
*/
export declare function withNCEXcodeProject(config: ExpoConfig, appGroupIdentifier: string, swiftContent: string): ExpoConfig;
/**
* Injects the ConnectNCE Podfile target block via withDangerousMod.
* Guarded by a marker comment — re-runs are no-ops.
*
* Throws a clear, actionable error when the Podfile does not exist at
* mod-execution time, instead of silently returning — a silent skip would
* ship an NCE whose `import Connect` cannot resolve.
*/
export declare function withNCEPodfile(config: ExpoConfig): ExpoConfig;
/**
* Expo Config Plugin mod that provisions a Notification Content Extension
* (NCE) Xcode target named `ConnectNCE`.
*
* Applies three mutations — all idempotent:
* 1. Host app entitlements: merges App Group into
* `com.apple.security.application-groups` (reuses the NSE host-entitlements
* mod — the host shares one App Group across app + NSE + NCE; the merge is
* a no-op when the NSE mod already added it).
* 2. Xcode project: adds ConnectNCE target + files (skips if already present).
* 3. Podfile: injects `target 'ConnectNCE'` block (guarded by marker comment).
*
* `config._internal.projectRoot` is required (injected by Expo CLI during
* `expo prebuild`); an actionable error is thrown if absent rather than
* silently falling back to `process.cwd()`.
*
* NSE coupling (intentional, tracked for refactor): this mod deliberately
* reuses three pieces of withConnectNSE — `withNSEEntitlements` (the host App
* Group is shared across app + NSE + NCE), `buildConnectPodTargetBlock` (one
* source for the pod-resolution helper), and `getHostBuildSettingForConfig`
* (the per-config mirroring logic). The composition always runs withConnectNSE
* before withConnectNCE, so the shared host entitlement and the
* PBXTargetDependency/PBXContainerItemProxy sections already exist when this
* runs. Extracting a shared `withConnectExtension` base for NSE + NCE is
* tracked as a follow-up refactor (see PR description) rather than done here,
* to keep the already-landed NSE mod stable.
*/
export declare const withConnectNCE: ConfigPlugin<ConnectPluginProps>;
//# sourceMappingURL=withConnectNCE.d.ts.map