diff --git a/.github/workflows/ecosystem-ios.yml b/.github/workflows/ecosystem-ios.yml index 71a6384e..bc9e2a54 100644 --- a/.github/workflows/ecosystem-ios.yml +++ b/.github/workflows/ecosystem-ios.yml @@ -36,10 +36,10 @@ jobs: pam-native-auth pam-native-background-transfer pam-native-bluetooth pam-native-feature-flags pam-native-firebase pam-native-health pam-native-intents pam-native-live-activities pam-native-maps - pam-native-media pam-native-nfc pam-native-payments + pam-native-media pam-native-media-editor pam-native-nfc pam-native-payments pam-native-realtime pam-native-scanner pam-native-share-extension pam-native-subscriptions pam-native-video pam-native-widgets - pam-native-camera + pam-native-camera pam-native-canvas pam-native-gpu pam-native-3d ) for repo in "${repos[@]}"; do git clone --depth 1 --branch main \ @@ -54,10 +54,10 @@ jobs: pam-native-auth pam-native-background-transfer pam-native-bluetooth pam-native-feature-flags pam-native-firebase pam-native-health pam-native-intents pam-native-live-activities pam-native-maps - pam-native-media pam-native-nfc pam-native-payments + pam-native-media pam-native-media-editor pam-native-nfc pam-native-payments pam-native-realtime pam-native-scanner pam-native-share-extension pam-native-subscriptions pam-native-video pam-native-widgets - pam-native-camera + pam-native-camera pam-native-canvas pam-native-gpu pam-native-3d ) targets=( PamPlugin0PushinbrPamNativeAuth @@ -70,15 +70,19 @@ jobs: PamPlugin7PushinbrPamNativeLiveActivities PamPlugin8PushinbrPamNativeMaps PamPlugin9PushinbrPamNativeMedia - PamPlugin10PushinbrPamNativeNfc - PamPlugin11PushinbrPamNativePayments - PamPlugin12PushinbrPamNativeRealtime - PamPlugin13PushinbrPamNativeScanner - PamPlugin14PushinbrPamNativeShareExtension - PamPlugin15PushinbrPamNativeSubscriptions - PamPlugin16PushinbrPamNativeVideo - PamPlugin17PushinbrPamNativeWidgets - PamPlugin18PushinbrPamNativeCamera + PamPlugin10PushinbrPamNativeMediaEditor + PamPlugin11PushinbrPamNativeNfc + PamPlugin12PushinbrPamNativePayments + PamPlugin13PushinbrPamNativeRealtime + PamPlugin14PushinbrPamNativeScanner + PamPlugin15PushinbrPamNativeShareExtension + PamPlugin16PushinbrPamNativeSubscriptions + PamPlugin17PushinbrPamNativeVideo + PamPlugin18PushinbrPamNativeWidgets + PamPlugin19PushinbrPamNativeCamera + PamPlugin20PushinbrPamNativeCanvas + PamPlugin21PushinbrPamNativeGpu + PamPlugin22PushinbrPamNative3d ) for index in "${!repos[@]}"; do source="${RUNNER_TEMP}/${repos[$index]}/ios/Sources" diff --git a/.github/workflows/publish-ecosystem.yml b/.github/workflows/publish-ecosystem.yml index 2a4ba884..ac10104f 100644 --- a/.github/workflows/publish-ecosystem.yml +++ b/.github/workflows/publish-ecosystem.yml @@ -37,7 +37,8 @@ jobs: pam-native-share-extension pam-native-subscriptions pam-native-video pam-native-widgets pam-native-firebase pam-native-laravel-sync pam-native-sync-laravel - pam-native-camera + pam-native-camera pam-native-media-editor pam-native-canvas + pam-native-gpu pam-native-3d ) if [[ "${SELECTED_PACKAGE}" != all ]]; then valid=false diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7d064273..94b168ba 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -273,7 +273,9 @@ jobs: fail-fast: false matrix: include: - - runner: ubuntu-24.04 + # Build on the oldest supported glibc baseline so the published CLI + # runs on Ubuntu 22.04/Pop!_OS-era distributions as well as newer ones. + - runner: ubuntu-22.04 target: x86_64-unknown-linux-gnu platform: linux-x86_64 extension: '' diff --git a/CHANGELOG.md b/CHANGELOG.md index 125cd064..2fb8d1bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 0.8.1 - 2026-08-23 + +- Added production-grade camera, media editing, retained canvas, GPU shader and + 3D scene plugins to the independently installable official ecosystem. +- Certified every public plugin together in aggregate Android and iOS hosts. +- Build the Linux Native CLI on the Ubuntu 22.04 glibc baseline so published + binaries run on supported LTS and Pop!_OS-era distributions. + ## 0.8.0 - 2026-08-23 - Added opt-in PAM Native UI Language 2 with a stable, integer-capability UI IR. diff --git a/Cargo.lock b/Cargo.lock index d1a24e3e..ef51165d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -76,7 +76,7 @@ checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "pam-native-cli" -version = "0.8.0" +version = "0.8.1" dependencies = [ "serde", "serde_json", @@ -85,7 +85,7 @@ dependencies = [ [[package]] name = "pam-native-engine" -version = "0.8.0" +version = "0.8.1" dependencies = [ "pam-native-protocol", "ttf-parser", @@ -93,7 +93,7 @@ dependencies = [ [[package]] name = "pam-native-protocol" -version = "0.8.0" +version = "0.8.1" [[package]] name = "proc-macro2" diff --git a/Cargo.toml b/Cargo.toml index 8ea1d694..43551daf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ members = [ ] [workspace.package] -version = "0.8.0" +version = "0.8.1" edition = "2024" rust-version = "1.88" license = "Apache-2.0" diff --git a/certification/android-ecosystem/composer.json b/certification/android-ecosystem/composer.json index ba6cff4e..e8596b50 100644 --- a/certification/android-ecosystem/composer.json +++ b/certification/android-ecosystem/composer.json @@ -10,6 +10,9 @@ "pushinbr/pam-native-background-transfer": ">=0.1.0 <1.0.0", "pushinbr/pam-native-bluetooth": ">=0.1.0 <1.0.0", "pushinbr/pam-native-camera": "^0.1.0", + "pushinbr/pam-native-canvas": "^0.1.0", + "pushinbr/pam-native-gpu": "^0.1.0", + "pushinbr/pam-native-3d": "^0.1.0", "pushinbr/pam-native-feature-flags": ">=0.1.0 <1.0.0", "pushinbr/pam-native-firebase": ">=0.1.0 <1.0.0", "pushinbr/pam-native-health": ">=0.1.0 <1.0.0", @@ -17,13 +20,14 @@ "pushinbr/pam-native-live-activities": ">=0.1.0 <1.0.0", "pushinbr/pam-native-maps": ">=0.1.0 <1.0.0", "pushinbr/pam-native-media": ">=0.1.0 <1.0.0", + "pushinbr/pam-native-media-editor": "^0.1.0", "pushinbr/pam-native-nfc": ">=0.1.0 <1.0.0", "pushinbr/pam-native-payments": ">=0.1.0 <1.0.0", "pushinbr/pam-native-realtime": ">=0.1.0 <1.0.0", "pushinbr/pam-native-scanner": ">=0.1.0 <1.0.0", "pushinbr/pam-native-share-extension": ">=0.1.0 <1.0.0", "pushinbr/pam-native-subscriptions": ">=0.1.0 <1.0.0", - "pushinbr/pam-native-video": ">=0.1.0 <1.0.0", + "pushinbr/pam-native-video": "^0.3.0", "pushinbr/pam-native-widgets": ">=0.1.0 <1.0.0" }, "config": { diff --git a/certification/android-ecosystem/composer.lock b/certification/android-ecosystem/composer.lock index b0cf5c1a..6bb70d15 100644 --- a/certification/android-ecosystem/composer.lock +++ b/certification/android-ecosystem/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c63d56470094715f1cff952d36b118b7", + "content-hash": "f00002c32ae1585d26e9ee067bf758b9", "packages": [ { "name": "pushinbr/pam-native", @@ -380,6 +380,50 @@ }, "time": "2026-08-23T16:32:04+00:00" }, + { + "name": "pushinbr/pam-native-3d", + "version": "v0.1.0", + "source": { + "type": "git", + "url": "https://github.com/push-in/pam-native-3d.git", + "reference": "b55d3cf5abdea571c56cd2e33c04823315e922ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/push-in/pam-native-3d/zipball/b55d3cf5abdea571c56cd2e33c04823315e922ab", + "reference": "b55d3cf5abdea571c56cd2e33c04823315e922ab", + "shasum": "" + }, + "require": { + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" + }, + "require-dev": { + "phpstan/phpstan": "^2.1", + "pushinbr/pam-native-plugin-kit": "^0.2.0" + }, + "type": "pam-native-plugin", + "extra": { + "pam-native": { + "plugin": "pam-native.plugin.json" + } + }, + "autoload": { + "psr-4": { + "Pam\\Native\\ThreeD\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Native Filament and RealityKit real-time 3D scenes for PAM Native.", + "support": { + "issues": "https://github.com/push-in/pam-native-3d/issues", + "source": "https://github.com/push-in/pam-native-3d/tree/v0.1.0" + }, + "time": "2026-08-23T19:28:23+00:00" + }, { "name": "pushinbr/pam-native-auth", "version": "v0.2.0", @@ -505,16 +549,16 @@ }, { "name": "pushinbr/pam-native-camera", - "version": "v0.1.0", + "version": "v0.1.1", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-camera.git", - "reference": "71600689ac1057387d2c16900f859291a7e6c1ba" + "reference": "3a3da84c994457895164049798458374aaf49de6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-camera/zipball/71600689ac1057387d2c16900f859291a7e6c1ba", - "reference": "71600689ac1057387d2c16900f859291a7e6c1ba", + "url": "https://api.github.com/repos/push-in/pam-native-camera/zipball/3a3da84c994457895164049798458374aaf49de6", + "reference": "3a3da84c994457895164049798458374aaf49de6", "shasum": "" }, "require": { @@ -543,9 +587,53 @@ "description": "Professional zero-copy camera, capture and native frame processors for PAM Native.", "support": { "issues": "https://github.com/push-in/pam-native-camera/issues", - "source": "https://github.com/push-in/pam-native-camera/tree/v0.1.0" + "source": "https://github.com/push-in/pam-native-camera/tree/v0.1.1" + }, + "time": "2026-08-23T18:46:12+00:00" + }, + { + "name": "pushinbr/pam-native-canvas", + "version": "v0.1.0", + "source": { + "type": "git", + "url": "https://github.com/push-in/pam-native-canvas.git", + "reference": "b6dea0a4c35f941fb2345382d9df0bf916f93c94" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/push-in/pam-native-canvas/zipball/b6dea0a4c35f941fb2345382d9df0bf916f93c94", + "reference": "b6dea0a4c35f941fb2345382d9df0bf916f93c94", + "shasum": "" + }, + "require": { + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" + }, + "require-dev": { + "phpstan/phpstan": "^2.1", + "pushinbr/pam-native-plugin-kit": "^0.2.0" + }, + "type": "pam-native-plugin", + "extra": { + "pam-native": { + "plugin": "pam-native.plugin.json" + } + }, + "autoload": { + "psr-4": { + "Pam\\Native\\Canvas\\": "src/" + } }, - "time": "2026-08-23T17:41:22+00:00" + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Retained-mode native 2D canvas for PAM Native.", + "support": { + "issues": "https://github.com/push-in/pam-native-canvas/issues", + "source": "https://github.com/push-in/pam-native-canvas/tree/v0.1.0" + }, + "time": "2026-08-23T19:08:37+00:00" }, { "name": "pushinbr/pam-native-feature-flags", @@ -634,6 +722,50 @@ }, "time": "2026-08-23T18:12:46+00:00" }, + { + "name": "pushinbr/pam-native-gpu", + "version": "v0.1.0", + "source": { + "type": "git", + "url": "https://github.com/push-in/pam-native-gpu.git", + "reference": "0ef89c17ed125ccf7335751322450d9a90ca6410" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/push-in/pam-native-gpu/zipball/0ef89c17ed125ccf7335751322450d9a90ca6410", + "reference": "0ef89c17ed125ccf7335751322450d9a90ca6410", + "shasum": "" + }, + "require": { + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" + }, + "require-dev": { + "phpstan/phpstan": "^2.1", + "pushinbr/pam-native-plugin-kit": "^0.2.0" + }, + "type": "pam-native-plugin", + "extra": { + "pam-native": { + "plugin": "pam-native.plugin.json" + } + }, + "autoload": { + "psr-4": { + "Pam\\Native\\Gpu\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Native Metal and OpenGL ES GPU surfaces for PAM Native.", + "support": { + "issues": "https://github.com/push-in/pam-native-gpu/issues", + "source": "https://github.com/push-in/pam-native-gpu/tree/v0.1.0" + }, + "time": "2026-08-23T19:02:18+00:00" + }, { "name": "pushinbr/pam-native-health", "version": "v0.2.0", @@ -837,6 +969,50 @@ }, "time": "2026-08-23T18:12:48+00:00" }, + { + "name": "pushinbr/pam-native-media-editor", + "version": "v0.1.0", + "source": { + "type": "git", + "url": "https://github.com/push-in/pam-native-media-editor.git", + "reference": "b978afc7cedfb9ea3587ca69112c08e6f81c0273" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/push-in/pam-native-media-editor/zipball/b978afc7cedfb9ea3587ca69112c08e6f81c0273", + "reference": "b978afc7cedfb9ea3587ca69112c08e6f81c0273", + "shasum": "" + }, + "require": { + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" + }, + "require-dev": { + "phpstan/phpstan": "^2.1", + "pushinbr/pam-native-plugin-kit": "^0.2.0" + }, + "type": "pam-native-plugin", + "extra": { + "pam-native": { + "plugin": "pam-native.plugin.json" + } + }, + "autoload": { + "psr-4": { + "Pam\\Native\\MediaEditor\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Non-destructive native media timelines, effects and export for PAM Native.", + "support": { + "issues": "https://github.com/push-in/pam-native-media-editor/issues", + "source": "https://github.com/push-in/pam-native-media-editor/tree/v0.1.0" + }, + "time": "2026-08-23T18:56:08+00:00" + }, { "name": "pushinbr/pam-native-nfc", "version": "v0.2.0", @@ -1082,22 +1258,26 @@ }, { "name": "pushinbr/pam-native-video", - "version": "v0.2.0", + "version": "v0.3.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-video.git", - "reference": "589f934215b15ba4be175192964fc73f9d68b734" + "reference": "2ef0ef111dc5bada87c96b83cf9b3b40d7d6ed42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-video/zipball/589f934215b15ba4be175192964fc73f9d68b734", - "reference": "589f934215b15ba4be175192964fc73f9d68b734", + "url": "https://api.github.com/repos/push-in/pam-native-video/zipball/2ef0ef111dc5bada87c96b83cf9b3b40d7d6ed42", + "reference": "2ef0ef111dc5bada87c96b83cf9b3b40d7d6ed42", "shasum": "" }, "require": { "php": "^8.5", "pushinbr/pam-native": "^0.8.0" }, + "require-dev": { + "phpstan/phpstan": "^2.1", + "pushinbr/pam-native-plugin-kit": "^0.2.0" + }, "type": "pam-native-plugin", "extra": { "pam-native": { @@ -1116,9 +1296,9 @@ "description": "Adaptive streaming, subtitles and native Media3/AVPlayer playback for PAM Native.", "support": { "issues": "https://github.com/push-in/pam-native-video/issues", - "source": "https://github.com/push-in/pam-native-video/tree/v0.2.0" + "source": "https://github.com/push-in/pam-native-video/tree/v0.3.0" }, - "time": "2026-08-23T18:04:21+00:00" + "time": "2026-08-23T18:52:35+00:00" }, { "name": "pushinbr/pam-native-widgets", diff --git a/certification/ios-ecosystem/Package.swift b/certification/ios-ecosystem/Package.swift index 8d40575e..d8510510 100644 --- a/certification/ios-ecosystem/Package.swift +++ b/certification/ios-ecosystem/Package.swift @@ -71,57 +71,81 @@ let package = Package( linkerSettings: [.linkedFramework("AVFoundation"), .linkedFramework("ImageIO"), .linkedFramework("UniformTypeIdentifiers")], ), .target( - name: "PamPlugin10PushinbrPamNativeNfc", + name: "PamPlugin10PushinbrPamNativeMediaEditor", dependencies: [.product(name: "PamNative", package: "ios")], - path: "Sources/PamPlugin10PushinbrPamNativeNfc", + path: "Sources/PamPlugin10PushinbrPamNativeMediaEditor", + linkerSettings: [.linkedFramework("AVFoundation"), .linkedFramework("CoreImage"), .linkedFramework("CoreMedia"), .linkedFramework("CoreVideo")], + ), + .target( + name: "PamPlugin11PushinbrPamNativeNfc", + dependencies: [.product(name: "PamNative", package: "ios")], + path: "Sources/PamPlugin11PushinbrPamNativeNfc", linkerSettings: [.linkedFramework("CoreNFC")], ), .target( - name: "PamPlugin11PushinbrPamNativePayments", + name: "PamPlugin12PushinbrPamNativePayments", dependencies: [.product(name: "PamNative", package: "ios"), .product(name: "StripePaymentSheet", package: "stripe-ios")], - path: "Sources/PamPlugin11PushinbrPamNativePayments", + path: "Sources/PamPlugin12PushinbrPamNativePayments", ), .target( - name: "PamPlugin12PushinbrPamNativeRealtime", + name: "PamPlugin13PushinbrPamNativeRealtime", dependencies: [.product(name: "PamNative", package: "ios")], - path: "Sources/PamPlugin12PushinbrPamNativeRealtime", + path: "Sources/PamPlugin13PushinbrPamNativeRealtime", ), .target( - name: "PamPlugin13PushinbrPamNativeScanner", + name: "PamPlugin14PushinbrPamNativeScanner", dependencies: [.product(name: "PamNative", package: "ios")], - path: "Sources/PamPlugin13PushinbrPamNativeScanner", + path: "Sources/PamPlugin14PushinbrPamNativeScanner", linkerSettings: [.linkedFramework("AVFoundation"), .linkedFramework("Vision")], ), .target( - name: "PamPlugin14PushinbrPamNativeShareExtension", + name: "PamPlugin15PushinbrPamNativeShareExtension", dependencies: [.product(name: "PamNative", package: "ios")], - path: "Sources/PamPlugin14PushinbrPamNativeShareExtension", + path: "Sources/PamPlugin15PushinbrPamNativeShareExtension", linkerSettings: [.linkedFramework("UniformTypeIdentifiers")], ), .target( - name: "PamPlugin15PushinbrPamNativeSubscriptions", + name: "PamPlugin16PushinbrPamNativeSubscriptions", dependencies: [.product(name: "PamNative", package: "ios")], - path: "Sources/PamPlugin15PushinbrPamNativeSubscriptions", + path: "Sources/PamPlugin16PushinbrPamNativeSubscriptions", linkerSettings: [.linkedFramework("StoreKit")], ), .target( - name: "PamPlugin16PushinbrPamNativeVideo", + name: "PamPlugin17PushinbrPamNativeVideo", dependencies: [.product(name: "PamNative", package: "ios")], - path: "Sources/PamPlugin16PushinbrPamNativeVideo", + path: "Sources/PamPlugin17PushinbrPamNativeVideo", linkerSettings: [.linkedFramework("AVFoundation"), .linkedFramework("AVKit")], ), .target( - name: "PamPlugin17PushinbrPamNativeWidgets", + name: "PamPlugin18PushinbrPamNativeWidgets", dependencies: [.product(name: "PamNative", package: "ios")], - path: "Sources/PamPlugin17PushinbrPamNativeWidgets", + path: "Sources/PamPlugin18PushinbrPamNativeWidgets", linkerSettings: [.linkedFramework("WidgetKit"), .linkedFramework("SwiftUI")], ), .target( - name: "PamPlugin18PushinbrPamNativeCamera", + name: "PamPlugin19PushinbrPamNativeCamera", dependencies: [.product(name: "PamNative", package: "ios")], - path: "Sources/PamPlugin18PushinbrPamNativeCamera", + path: "Sources/PamPlugin19PushinbrPamNativeCamera", linkerSettings: [.linkedFramework("AVFoundation"), .linkedFramework("CoreImage"), .linkedFramework("CoreMedia"), .linkedFramework("CoreVideo"), .linkedFramework("Metal"), .linkedFramework("Vision")], ), + .target( + name: "PamPlugin20PushinbrPamNativeCanvas", + dependencies: [.product(name: "PamNative", package: "ios")], + path: "Sources/PamPlugin20PushinbrPamNativeCanvas", + linkerSettings: [.linkedFramework("CoreGraphics"), .linkedFramework("UIKit")], + ), + .target( + name: "PamPlugin21PushinbrPamNativeGpu", + dependencies: [.product(name: "PamNative", package: "ios")], + path: "Sources/PamPlugin21PushinbrPamNativeGpu", + linkerSettings: [.linkedFramework("Metal"), .linkedFramework("MetalKit"), .linkedFramework("QuartzCore")], + ), + .target( + name: "PamPlugin22PushinbrPamNative3d", + dependencies: [.product(name: "PamNative", package: "ios")], + path: "Sources/PamPlugin22PushinbrPamNative3d", + linkerSettings: [.linkedFramework("RealityKit"), .linkedFramework("Metal"), .linkedFramework("QuartzCore")], + ), .target( name: "PamExtensionIntents", path: "Sources/PamExtensionIntents", @@ -144,7 +168,7 @@ let package = Package( ), .target( name: "PamNativePlugins", - dependencies: ["PamPlugin0PushinbrPamNativeAuth", "PamPlugin1PushinbrPamNativeBackgroundTransfer", "PamPlugin2PushinbrPamNativeBluetooth", "PamPlugin3PushinbrPamNativeFeatureFlags", "PamPlugin4PushinbrPamNativeFirebase", "PamPlugin5PushinbrPamNativeHealth", "PamPlugin6PushinbrPamNativeIntents", "PamPlugin7PushinbrPamNativeLiveActivities", "PamPlugin8PushinbrPamNativeMaps", "PamPlugin9PushinbrPamNativeMedia", "PamPlugin10PushinbrPamNativeNfc", "PamPlugin11PushinbrPamNativePayments", "PamPlugin12PushinbrPamNativeRealtime", "PamPlugin13PushinbrPamNativeScanner", "PamPlugin14PushinbrPamNativeShareExtension", "PamPlugin15PushinbrPamNativeSubscriptions", "PamPlugin16PushinbrPamNativeVideo", "PamPlugin17PushinbrPamNativeWidgets", "PamPlugin18PushinbrPamNativeCamera", "PamExtensionIntents", "PamExtensionLiveActivities", "PamExtensionShare", "PamExtensionWidgets"], + dependencies: ["PamPlugin0PushinbrPamNativeAuth", "PamPlugin1PushinbrPamNativeBackgroundTransfer", "PamPlugin2PushinbrPamNativeBluetooth", "PamPlugin3PushinbrPamNativeFeatureFlags", "PamPlugin4PushinbrPamNativeFirebase", "PamPlugin5PushinbrPamNativeHealth", "PamPlugin6PushinbrPamNativeIntents", "PamPlugin7PushinbrPamNativeLiveActivities", "PamPlugin8PushinbrPamNativeMaps", "PamPlugin9PushinbrPamNativeMedia", "PamPlugin10PushinbrPamNativeMediaEditor", "PamPlugin11PushinbrPamNativeNfc", "PamPlugin12PushinbrPamNativePayments", "PamPlugin13PushinbrPamNativeRealtime", "PamPlugin14PushinbrPamNativeScanner", "PamPlugin15PushinbrPamNativeShareExtension", "PamPlugin16PushinbrPamNativeSubscriptions", "PamPlugin17PushinbrPamNativeVideo", "PamPlugin18PushinbrPamNativeWidgets", "PamPlugin19PushinbrPamNativeCamera", "PamPlugin20PushinbrPamNativeCanvas", "PamPlugin21PushinbrPamNativeGpu", "PamPlugin22PushinbrPamNative3d", "PamExtensionIntents", "PamExtensionLiveActivities", "PamExtensionShare", "PamExtensionWidgets"], path: "Sources/PamNativePlugins" ), ] diff --git a/certification/ios-ecosystem/Sources/PamNativePlugins/PamNativePlugins.swift b/certification/ios-ecosystem/Sources/PamNativePlugins/PamNativePlugins.swift index a183559b..30ee4619 100644 --- a/certification/ios-ecosystem/Sources/PamNativePlugins/PamNativePlugins.swift +++ b/certification/ios-ecosystem/Sources/PamNativePlugins/PamNativePlugins.swift @@ -9,14 +9,19 @@ import PamPlugin6PushinbrPamNativeIntents import PamPlugin7PushinbrPamNativeLiveActivities import PamPlugin8PushinbrPamNativeMaps import PamPlugin9PushinbrPamNativeMedia -import PamPlugin10PushinbrPamNativeNfc -import PamPlugin11PushinbrPamNativePayments -import PamPlugin12PushinbrPamNativeRealtime -import PamPlugin13PushinbrPamNativeScanner -import PamPlugin14PushinbrPamNativeShareExtension -import PamPlugin15PushinbrPamNativeSubscriptions -import PamPlugin16PushinbrPamNativeVideo -import PamPlugin17PushinbrPamNativeWidgets +import PamPlugin10PushinbrPamNativeMediaEditor +import PamPlugin11PushinbrPamNativeNfc +import PamPlugin12PushinbrPamNativePayments +import PamPlugin13PushinbrPamNativeRealtime +import PamPlugin14PushinbrPamNativeScanner +import PamPlugin15PushinbrPamNativeShareExtension +import PamPlugin16PushinbrPamNativeSubscriptions +import PamPlugin17PushinbrPamNativeVideo +import PamPlugin18PushinbrPamNativeWidgets +import PamPlugin19PushinbrPamNativeCamera +import PamPlugin20PushinbrPamNativeCanvas +import PamPlugin21PushinbrPamNativeGpu +import PamPlugin22PushinbrPamNative3d public enum PamNativePluginRegistry { public static func modules() -> [String: NativeModule] { @@ -30,11 +35,13 @@ public enum PamNativePluginRegistry { "intents": IntentsModule(), "live-activities": LiveActivitiesModule(), "media": MediaModule(), + "media-editor": MediaEditorModule(), "nfc": NfcModule(), "realtime": RealtimeModule(), "share-extension": ShareExtensionModule(), "subscriptions": SubscriptionsModule(), "widgets": WidgetsModule(), + "camera": CameraModule(), ] } @@ -44,6 +51,10 @@ public enum PamNativePluginRegistry { "payments.sheet": PamPaymentSheetFactory(), "scanner.camera": ScannerViewFactory(), "video.player": VideoPlayerFactory(), + "camera.preview": PamPlugin19PushinbrPamNativeCamera.CameraViewFactory(), + "canvas.view": PamPlugin20PushinbrPamNativeCanvas.CanvasViewFactory(), + "gpu.surface": PamPlugin21PushinbrPamNativeGpu.GpuViewFactory(), + "three-d.scene": PamPlugin22PushinbrPamNative3d.SceneViewFactory(), ] } } diff --git a/docs/ecosystem-architecture.md b/docs/ecosystem-architecture.md index 68a8f7cb..33cd9f79 100644 --- a/docs/ecosystem-architecture.md +++ b/docs/ecosystem-architecture.md @@ -34,6 +34,11 @@ matrix, changelog, CI, and signed release evidence. | 22 | `pushinbr/pam-native-devtools` | Event timeline, state snapshots, network diagnostics, performance marks, redaction and JSON export | PHP | None; entirely certifiable in CI | | 23 | `pushinbr/pam-native-plugin-kit` | Scaffolding, manifest validation, IDL codegen and compatibility certification | PHP + CLI templates | None; entirely certifiable in CI | | 24 | `pushinbr/pam-native-sync-laravel` | Laravel delta API, mutation ingestion, auth, conflicts and retention | Laravel package | Supported Laravel/database matrix | +| 25 | `pushinbr/pam-native-camera` | Low-latency photo/video capture, device/format selection, focus, zoom, torch and frame processors | PHP + Kotlin + Swift | Camera, thermal and interruption matrix on physical devices | +| 26 | `pushinbr/pam-native-media-editor` | Immutable media timelines, trim, composition, filters, audio mix, HDR and export | PHP + Kotlin + Swift | Codec/export matrix and long-running device jobs | +| 27 | `pushinbr/pam-native-canvas` | Retained 2D paths, text, images, transforms and pointer input | PHP + Kotlin + Swift views | Golden images and touch latency on devices | +| 28 | `pushinbr/pam-native-gpu` | Bounded programmable OpenGL ES 3 and Metal fragment rendering | PHP + Kotlin + Swift views | GPU/thermal matrix and shader golden images | +| 29 | `pushinbr/pam-native-3d` | Sandboxed GLB/USDZ scenes, animation, transforms and orbit controls | PHP + Filament + RealityKit views | Asset, memory, GPU and thermal matrix on devices | ## Mandatory release gates diff --git a/packages/native/src/Protocol.php b/packages/native/src/Protocol.php index 14434f87..715603d3 100644 --- a/packages/native/src/Protocol.php +++ b/packages/native/src/Protocol.php @@ -6,7 +6,7 @@ final class Protocol { - public const string SDK_VERSION = '0.8.0'; + public const string SDK_VERSION = '0.8.1'; public const int VERSION = 1; public const string TREE_MAGIC = 'PNT1'; public const string PATCH_MAGIC = 'PNP1'; diff --git a/packages/native/tests/run.php b/packages/native/tests/run.php index f4ef0f48..e136a368 100644 --- a/packages/native/tests/run.php +++ b/packages/native/tests/run.php @@ -6215,8 +6215,8 @@ static function () use (&$nestedStateEvents): void { 'Grouped drawer state must restore selection and expanded sections.', ); $assert( - \Pam\Native\Protocol::SDK_VERSION === '0.8.0', - 'The runtime SDK contract must match the 0.8.0 package release.', + \Pam\Native\Protocol::SDK_VERSION === '0.8.1', + 'The runtime SDK contract must match the 0.8.1 package release.', ); $imageEditorParameters = (new ReflectionMethod( \Pam\Native\System\ImageEditor::class,