feat(swift-app): rebuild share/cxai-mac as native CxAI ADE 1.2.0
Some checks are pending
build-and-push / image (push) Waiting to run
Some checks are pending
build-and-push / image (push) Waiting to run
- Package.swift: add CxARA (via CxLLM-SDK) and CxDrive (via new CxLLM-Drive package dep) so the native shell links every mac-app-shaped module exported by the CxLLM-SDK and CxLLM-Drive families. - Sidebar: surface .repair (CxARA) and .drive (CxDrive) alongside the existing Web/Chat/Agent/MCP/Models/Code/AWS/Git/LangBridge/Telemetry tabs, with matching SF Symbols. - scripts/build-mac-bundle.sh: end-to-end pipeline (release build, .app bundle with rebranded Info.plist studio.cxai.ade 1.2.0, ad-hoc codesign, tar.gz, hdiutil UDZO dmg, publish to share/cxai-mac, write build-info.json with sha256/sizes/modules/git sha). - Makefile targets: swift-app 'make rebuild-mac', CxWebApp root 'make rebuild-mac'. - share/cxai-mac: replace Tauri 0- share/cxai-mac: replace Tauri 0- share/cxai-mac: replace Tauri 0- share/cxai-mac: replace Tauri 0- share/cxai-mac: replace Tauri 0- share/cxai-mac: replace Tauri 0- share/cxai-mac: replace Tauri 0- share/cxai-mac: replace Tauri 0- share/cxai-mac: replace Tauri 0- dge- share/cxai-mac: replace Tauri 0- share/cxai-mac: replace Tauri 0- share/AR- share/cxai-mac: replace Tauri 0- share/cxai-mac: replace Ter refere- share/cxai-mac: replace Tauri 0- origin main 2>&1 | tail -5
This commit is contained in:
parent
75153b7fe9
commit
b55680ffbf
7
Makefile
Normal file
7
Makefile
Normal file
@ -0,0 +1,7 @@
|
||||
.PHONY: help rebuild-mac
|
||||
|
||||
help:
|
||||
@echo "make rebuild-mac # build swift-app, repackage share/cxai-mac/ (VERSION=1.2.0)"
|
||||
|
||||
rebuild-mac:
|
||||
$(MAKE) -C swift-app rebuild-mac $(if $(VERSION),VERSION=$(VERSION),)
|
||||
@ -1,38 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>CxAI ADE</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>cx-ai</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.cxai.cxai</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>CxAI ADE</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.6.1</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>0.6.1</string>
|
||||
<key>CSResourcesFileMapped</key>
|
||||
<true/>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.developer-tools</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.15</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>icon.icns</string>
|
||||
<key>LSRequiresCarbon</key>
|
||||
<true/>
|
||||
<key>NSHighResolutionCapable</key>
|
||||
<true/>
|
||||
<key>NSMicrophoneUsageDescription</key>
|
||||
<string>CxAI ADE uses your microphone for AI voice input.</string>
|
||||
</dict>
|
||||
</plist>
|
||||
Binary file not shown.
Binary file not shown.
@ -1,38 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>CxAI ADE</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>cx-ai</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.cxai.cxai</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>CxAI ADE</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.6.1</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>0.6.1</string>
|
||||
<key>CSResourcesFileMapped</key>
|
||||
<true/>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.developer-tools</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.15</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>icon.icns</string>
|
||||
<key>LSRequiresCarbon</key>
|
||||
<true/>
|
||||
<key>NSHighResolutionCapable</key>
|
||||
<true/>
|
||||
<key>NSMicrophoneUsageDescription</key>
|
||||
<string>CxAI ADE uses your microphone for AI voice input.</string>
|
||||
</dict>
|
||||
</plist>
|
||||
<plist version="1.0"><dict>
|
||||
<key>CFBundleIdentifier</key> <string>studio.cxai.ade</string>
|
||||
<key>CFBundleName</key> <string>CxAI ADE</string>
|
||||
<key>CFBundleDisplayName</key> <string>CxAI ADE</string>
|
||||
<key>CFBundleExecutable</key> <string>CxWebAppMac</string>
|
||||
<key>CFBundlePackageType</key> <string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key> <string>1.2.0</string>
|
||||
<key>CFBundleVersion</key> <string>1.2.0</string>
|
||||
<key>LSMinimumSystemVersion</key> <string>13.0</string>
|
||||
<key>NSHighResolutionCapable</key> <true/>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict><key>NSAllowsLocalNetworking</key><true/></dict>
|
||||
<key>LSApplicationCategoryType</key> <string>public.app-category.developer-tools</string>
|
||||
</dict></plist>
|
||||
|
||||
BIN
share/cxai-mac/CxAI ADE.app/Contents/MacOS/CxWebAppMac
Executable file
BIN
share/cxai-mac/CxAI ADE.app/Contents/MacOS/CxWebAppMac
Executable file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
share/cxai-mac/CxAI-ADE-1.2.0-aarch64.app.tar.gz
Normal file
BIN
share/cxai-mac/CxAI-ADE-1.2.0-aarch64.app.tar.gz
Normal file
Binary file not shown.
BIN
share/cxai-mac/CxAI-ADE-1.2.0-aarch64.dmg
Normal file
BIN
share/cxai-mac/CxAI-ADE-1.2.0-aarch64.dmg
Normal file
Binary file not shown.
@ -1,17 +1,24 @@
|
||||
{
|
||||
"name": "CxAI ADE",
|
||||
"version": "0.6.1",
|
||||
"identifier": "com.cxai.cxai",
|
||||
"version": "1.2.0",
|
||||
"identifier": "studio.cxai.ade",
|
||||
"channel": "stable",
|
||||
"sha": "104717b92c07",
|
||||
"built_at": "2026-05-16T18:26:57Z",
|
||||
"description": "Tauri 2 desktop shell for CxAI Studio. Built from CxAI Base/cargo.",
|
||||
"sha": "f5b6c3203f4c",
|
||||
"built_at": "2026-05-17T21:23:28Z",
|
||||
"description": "Native AppKit/SwiftUI shell for CxAI Studio. Built from CxWebApp/swift-app (CxLLM-SDK + CxLLM-Drive).",
|
||||
"platform": "macOS 13+ aarch64",
|
||||
"modules": [
|
||||
"CxCode", "CxAWS", "CxGit", "CxAgent", "CxMCP",
|
||||
"CxModels", "CxChat", "CxSPARenderer", "CxInstrument",
|
||||
"CxLangBridge", "CxARA", "CxDrive"
|
||||
],
|
||||
"artifacts": {
|
||||
"app_tar_gz": "CxAI-ADE-0.6.1-aarch64.app.tar.gz",
|
||||
"app_tar_gz_sha256": "b991db236a83328464bc3c0f5b0560d44f888a401faa153db975f4652a2ee160",
|
||||
"dmg": "CxAI-ADE-0.6.1-aarch64.dmg",
|
||||
"dmg_size_bytes": 4539552,
|
||||
"dmg_sha256": "1a1d2e7cc85a24179e89447790c1c47df194c34945fb672be8ff57902bdd966e"
|
||||
"app_tar_gz": "CxAI-ADE-1.2.0-aarch64.app.tar.gz",
|
||||
"app_tar_gz_sha256": "6ada3b2a1156666e7ae2d517a6579c241a37434b84daa71ad0e5e827cfb6c85d",
|
||||
"app_tar_gz_size": 121127,
|
||||
"dmg": "CxAI-ADE-1.2.0-aarch64.dmg",
|
||||
"dmg_sha256": "5d7c9428148c505580d91aeeef731ed51146b1f162c54d1e4eb39ff9037a7131",
|
||||
"dmg_size_bytes": 153833
|
||||
},
|
||||
"download_url": "/static/cxai-mac/CxAI-ADE-0.6.1-aarch64.dmg"
|
||||
"download_url": "/static/cxai-mac/CxAI-ADE-1.2.0-aarch64.dmg"
|
||||
}
|
||||
|
||||
@ -1,12 +1,14 @@
|
||||
.PHONY: help build run test app clean
|
||||
.PHONY: help build run test app rebuild-mac clean
|
||||
|
||||
CONFIG ?= release
|
||||
CONFIG ?= release
|
||||
VERSION ?= 1.2.0
|
||||
|
||||
help:
|
||||
@echo "make build # swift build -c $(CONFIG)"
|
||||
@echo "make run # swift run -c $(CONFIG) CxWebAppMac"
|
||||
@echo "make test # swift test"
|
||||
@echo "make app # bundle into build/CxWebAppMac.app"
|
||||
@echo "make build # swift build -c $(CONFIG)"
|
||||
@echo "make run # swift run -c $(CONFIG) CxWebAppMac"
|
||||
@echo "make test # swift test"
|
||||
@echo "make app # bundle into build/CxWebAppMac.app"
|
||||
@echo "make rebuild-mac # build + .app + .tar.gz + .dmg + share/cxai-mac/build-info.json (VERSION=$(VERSION))"
|
||||
@echo "make clean"
|
||||
|
||||
build:
|
||||
@ -21,5 +23,8 @@ test:
|
||||
app:
|
||||
bash scripts/build-app.sh
|
||||
|
||||
rebuild-mac:
|
||||
VERSION=$(VERSION) bash scripts/build-mac-bundle.sh
|
||||
|
||||
clean:
|
||||
rm -rf .build build
|
||||
|
||||
@ -16,7 +16,8 @@ let package = Package(
|
||||
.executable(name: "CxWebAppMac", targets: ["CxWebAppMac"]),
|
||||
],
|
||||
dependencies: [
|
||||
.package(url: "https://cxai-studio.com/git/CxAI-Project/CxLLM-SDK.git", branch: "main"),
|
||||
.package(url: "https://cxai-studio.com/git/CxAI-Project/CxLLM-SDK.git", branch: "main"),
|
||||
.package(url: "https://cxai-studio.com/git/CxAI-Project/CxLLM-Drive.git", branch: "main"),
|
||||
],
|
||||
targets: [
|
||||
.executableTarget(
|
||||
@ -32,6 +33,8 @@ let package = Package(
|
||||
.product(name: "CxSPARenderer", package: "CxLLM-SDK"),
|
||||
.product(name: "CxInstrument", package: "CxLLM-SDK"),
|
||||
.product(name: "CxLangBridge", package: "CxLLM-SDK"),
|
||||
.product(name: "CxARA", package: "CxLLM-SDK"),
|
||||
.product(name: "CxDrive", package: "CxLLM-Drive"),
|
||||
],
|
||||
path: "Sources/CxWebAppMac",
|
||||
linkerSettings: [
|
||||
|
||||
@ -12,6 +12,8 @@ import CxModels
|
||||
import CxChat
|
||||
import CxInstrument
|
||||
import CxLangBridge
|
||||
import CxARA
|
||||
import CxDrive
|
||||
|
||||
enum SidebarItem: String, Identifiable, CaseIterable, Hashable {
|
||||
case web = "Web"
|
||||
@ -21,8 +23,10 @@ enum SidebarItem: String, Identifiable, CaseIterable, Hashable {
|
||||
case models = "Models"
|
||||
case code = "Code"
|
||||
case aws = "AWS"
|
||||
case drive = "Drive"
|
||||
case git = "Git"
|
||||
case bridge = "LangBridge"
|
||||
case repair = "Repair"
|
||||
case telemetry = "Telemetry"
|
||||
|
||||
var id: String { rawValue }
|
||||
@ -36,8 +40,10 @@ enum SidebarItem: String, Identifiable, CaseIterable, Hashable {
|
||||
case .models: return "cube.transparent"
|
||||
case .code: return "chevron.left.forwardslash.chevron.right"
|
||||
case .aws: return "cloud"
|
||||
case .drive: return "externaldrive"
|
||||
case .git: return "arrow.triangle.branch"
|
||||
case .bridge: return "link"
|
||||
case .repair: return "wrench.and.screwdriver"
|
||||
case .telemetry: return "waveform.path.ecg"
|
||||
}
|
||||
}
|
||||
@ -58,8 +64,10 @@ struct CxLLMSectionView: View {
|
||||
case .models: moduleCard(name: "CxModels", version: "seed")
|
||||
case .code: moduleCard(name: "CxCode", version: "seed")
|
||||
case .aws: moduleCard(name: "CxAWS", version: "seed")
|
||||
case .drive: moduleCard(name: "CxDrive", version: "seed")
|
||||
case .git: moduleCard(name: "CxGit", version: "seed")
|
||||
case .bridge: moduleCard(name: "CxLangBridge", version: "seed")
|
||||
case .repair: moduleCard(name: "CxARA", version: "seed")
|
||||
case .telemetry: moduleCard(name: "CxInstrument", version: "seed")
|
||||
case .web: EmptyView()
|
||||
}
|
||||
|
||||
117
swift-app/scripts/build-mac-bundle.sh
Executable file
117
swift-app/scripts/build-mac-bundle.sh
Executable file
@ -0,0 +1,117 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build, bundle, and publish CxAI ADE (CxWebAppMac) into ../share/cxai-mac/.
|
||||
#
|
||||
# Produces:
|
||||
# share/cxai-mac/CxAI ADE.app
|
||||
# share/cxai-mac/CxAI-ADE-<VERSION>-aarch64.app.tar.gz
|
||||
# share/cxai-mac/CxAI-ADE-<VERSION>-aarch64.dmg
|
||||
# share/cxai-mac/build-info.json
|
||||
set -euo pipefail
|
||||
|
||||
cd "$(dirname "$0")/.."
|
||||
SWIFT_APP_ROOT="$PWD"
|
||||
REPO_ROOT="$(cd ../.. && pwd)"
|
||||
SHARE_DIR="$REPO_ROOT/CxWebApp/share/cxai-mac"
|
||||
|
||||
VERSION="${VERSION:-1.2.0}"
|
||||
ARCH="${ARCH:-aarch64}"
|
||||
PRODUCT_NAME="CxAI ADE"
|
||||
BUNDLE_ID="${BUNDLE_ID:-studio.cxai.ade}"
|
||||
CHANNEL="${CHANNEL:-stable}"
|
||||
|
||||
STAGE="$SWIFT_APP_ROOT/build/stage"
|
||||
APP_PATH="$STAGE/${PRODUCT_NAME}.app"
|
||||
TGZ_NAME="CxAI-ADE-${VERSION}-${ARCH}.app.tar.gz"
|
||||
DMG_NAME="CxAI-ADE-${VERSION}-${ARCH}.dmg"
|
||||
|
||||
echo "[1/6] swift build -c release"
|
||||
swift build -c release
|
||||
|
||||
BIN="$(swift build -c release --show-bin-path)/CxWebAppMac"
|
||||
[[ -x "$BIN" ]] || { echo "FATAL: $BIN not found" >&2; exit 1; }
|
||||
|
||||
echo "[2/6] assemble bundle $APP_PATH"
|
||||
rm -rf "$STAGE"
|
||||
mkdir -p "$APP_PATH/Contents/MacOS" "$APP_PATH/Contents/Resources"
|
||||
cp "$BIN" "$APP_PATH/Contents/MacOS/CxWebAppMac"
|
||||
cat > "$APP_PATH/Contents/Info.plist" <<PLIST
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0"><dict>
|
||||
<key>CFBundleIdentifier</key> <string>${BUNDLE_ID}</string>
|
||||
<key>CFBundleName</key> <string>${PRODUCT_NAME}</string>
|
||||
<key>CFBundleDisplayName</key> <string>${PRODUCT_NAME}</string>
|
||||
<key>CFBundleExecutable</key> <string>CxWebAppMac</string>
|
||||
<key>CFBundlePackageType</key> <string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key> <string>${VERSION}</string>
|
||||
<key>CFBundleVersion</key> <string>${VERSION}</string>
|
||||
<key>LSMinimumSystemVersion</key> <string>13.0</string>
|
||||
<key>NSHighResolutionCapable</key> <true/>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict><key>NSAllowsLocalNetworking</key><true/></dict>
|
||||
<key>LSApplicationCategoryType</key> <string>public.app-category.developer-tools</string>
|
||||
</dict></plist>
|
||||
PLIST
|
||||
|
||||
echo "[3/6] codesign (ad-hoc)"
|
||||
codesign --force --deep --sign - "$APP_PATH" >/dev/null 2>&1 || true
|
||||
|
||||
echo "[4/6] tar.gz"
|
||||
( cd "$STAGE" && tar -czf "$TGZ_NAME" "${PRODUCT_NAME}.app" )
|
||||
|
||||
echo "[5/6] dmg"
|
||||
DMG_TMP="$STAGE/$DMG_NAME"
|
||||
rm -f "$DMG_TMP"
|
||||
hdiutil create -volname "${PRODUCT_NAME} ${VERSION}" \
|
||||
-srcfolder "$APP_PATH" -ov -format UDZO -quiet \
|
||||
"$DMG_TMP"
|
||||
|
||||
echo "[6/6] publish -> $SHARE_DIR"
|
||||
mkdir -p "$SHARE_DIR"
|
||||
# Wipe any prior CxAI-ADE-* / CxAI ADE*.app set; keep folder, replace contents.
|
||||
find "$SHARE_DIR" -maxdepth 1 \( -name "CxAI-ADE-*" -o -name "CxAI ADE*.app" -o -name "build-info.json" \) -exec rm -rf {} +
|
||||
# Re-stage fresh artifacts.
|
||||
ditto "$APP_PATH" "$SHARE_DIR/${PRODUCT_NAME}.app"
|
||||
cp "$STAGE/$TGZ_NAME" "$SHARE_DIR/$TGZ_NAME"
|
||||
cp "$DMG_TMP" "$SHARE_DIR/$DMG_NAME"
|
||||
|
||||
# Compute hashes & sizes.
|
||||
sha_tgz=$(shasum -a 256 "$SHARE_DIR/$TGZ_NAME" | awk '{print $1}')
|
||||
sha_dmg=$(shasum -a 256 "$SHARE_DIR/$DMG_NAME" | awk '{print $1}')
|
||||
size_dmg=$(stat -f%z "$SHARE_DIR/$DMG_NAME")
|
||||
size_tgz=$(stat -f%z "$SHARE_DIR/$TGZ_NAME")
|
||||
built_at=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
# Best-effort git sha (outer iCloud repo).
|
||||
git_sha=$( ( cd "$REPO_ROOT" && git rev-parse --short=12 HEAD 2>/dev/null ) || echo "unknown" )
|
||||
|
||||
cat > "$SHARE_DIR/build-info.json" <<JSON
|
||||
{
|
||||
"name": "${PRODUCT_NAME}",
|
||||
"version": "${VERSION}",
|
||||
"identifier": "${BUNDLE_ID}",
|
||||
"channel": "${CHANNEL}",
|
||||
"sha": "${git_sha}",
|
||||
"built_at": "${built_at}",
|
||||
"description": "Native AppKit/SwiftUI shell for CxAI Studio. Built from CxWebApp/swift-app (CxLLM-SDK + CxLLM-Drive).",
|
||||
"platform": "macOS 13+ ${ARCH}",
|
||||
"modules": [
|
||||
"CxCode", "CxAWS", "CxGit", "CxAgent", "CxMCP",
|
||||
"CxModels", "CxChat", "CxSPARenderer", "CxInstrument",
|
||||
"CxLangBridge", "CxARA", "CxDrive"
|
||||
],
|
||||
"artifacts": {
|
||||
"app_tar_gz": "${TGZ_NAME}",
|
||||
"app_tar_gz_sha256": "${sha_tgz}",
|
||||
"app_tar_gz_size": ${size_tgz},
|
||||
"dmg": "${DMG_NAME}",
|
||||
"dmg_sha256": "${sha_dmg}",
|
||||
"dmg_size_bytes": ${size_dmg}
|
||||
},
|
||||
"download_url": "/static/cxai-mac/${DMG_NAME}"
|
||||
}
|
||||
JSON
|
||||
|
||||
echo
|
||||
echo "Published to $SHARE_DIR"
|
||||
ls -la "$SHARE_DIR"
|
||||
Loading…
Reference in New Issue
Block a user