prole/prole-app/Package.swift
chrisfu 64455fa886 ### Milestone: Remove IRCKit, migrate to swift-nio IRC, enable RoyalVNC via SwiftPM, and fix runtime embedding
- Replaced all IRCKit (0.16) usage with NozeIO `swift-nio-irc-client` (SwiftPM).
- Enabled IRC window with new client: connects and joins `#prole` (plain TCP for now; SSL checkbox displays a notice).
- Enabled RoyalVNC and removed all optional/flag-based handling. Integrated RoyalVNC via SwiftPM (`royalvnc` on `main`).
- Updated VNC UI to current RoyalVNC API: `VNCConnection` + `VNCCAFramebufferView` with a strong delegate reference.
- Simplified build to use SwiftPM for both IRC and RoyalVNC.
- Fixed runtime embedding and loader issues:
  - Copy SwiftPM-built `.dylib` products (e.g., `libRoyalVNCKit.dylib`) into `Contents/Frameworks` and codesign them.
  - Added `@executable_path/../Frameworks` to app rpaths with `install_name_tool`.
- Removed manual RoyalVNCKit `.xcframework` building/embedding and any IRCKit traces.

#### Key changes
- `prole-app/build.sh`:
  - Build app via SwiftPM; removed IRCKit and manual RoyalVNC build logic.
  - Embed SwiftPM `.dylib` outputs into `Contents/Frameworks` and set app rpath.
  - Cleaned usage text; dependencies now handled by SwiftPM.
- `prole-app/Package.swift`:
  - Add `swift-nio-irc-client` (NozeIO) dependency.
  - Add RoyalVNC via SwiftPM: `https://github.com/royalapplications/royalvnc` on `main`.
- `prole-app/Sources/IRCWindowController.swift`:
  - Migrate to NozeIO `IRC` package API; re-enable Connect; join `#prole`.
  - Import AppKit; provide convenience init for transcript view.
- `prole-app/Sources/WorkstationWindowController.swift`:
  - Import `RoyalVNCKit`; use `VNCConnection` + `VNCCAFramebufferView`.
  - Implement `VNCConnectionDelegate` and keep a strong reference to the delegate.
- `prole-app/debug.sh`:
  - Removed IRCKit logs section; kept RoyalVNC logs earlier; then removed manual RoyalVNC altogether.

This build now launches successfully (no dyld errors), opens the Workstation window (RoyalVNC), and the IRC window connects via the new client.

### Suggested follow-ups
- If TLS is required for IRC, add `NIOSSL` integration and wire SSL checkbox to TLS connection.
- Optionally remove leftover Vendor references if any local cache remains.
2025-12-05 23:37:54 -08:00

37 lines
1.1 KiB
Swift

// swift-tools-version: 5.9
import PackageDescription
let package = Package(
name: "ProleApp",
platforms: [
.macOS(.v12)
],
products: [
.executable(name: "Prole", targets: ["Prole"]) // App binary name
],
dependencies: [
// NozeIO SwiftNIO IRC Client
.package(url: "https://github.com/NozeIO/swift-nio-irc-client", branch: "main"),
// RoyalVNCKit via SwiftPM instead of local xcframework
.package(url: "https://github.com/royalapplications/royalvnc", branch: "main")
],
targets: [
.executableTarget(
name: "Prole",
dependencies: [
.product(name: "IRC", package: "swift-nio-irc-client"),
.product(name: "RoyalVNCKit", package: "royalvnc")
],
path: "Sources",
resources: [
// The build script separately copies resources into the app bundle; no SPM resources here.
],
linkerSettings: [
.linkedFramework("AppKit"),
.linkedFramework("Carbon"),
.linkedFramework("Network")
]
)
]
)