macsync/Package.swift
Natalie 576496ca3e feat(deploy): video-projects FUSE mount over DO Spaces
Generalize the photos-originals rclone-mount pattern to a video-projects
prefix so the video studio (and imajin ETL, per storage-portability-plan
§2.3) can read/write multi-GB project sources/renders as local files while
only hot data stays resident on plum (bounded VFS LRU cache). Lets a
small-disk laptop work with large footage without filling APFS.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 21:10:13 -04:00

198 lines
6.5 KiB
Swift

// swift-tools-version: 5.9
import PackageDescription
let package = Package(
name: "MacSync",
platforms: [
.macOS(.v13)
],
dependencies: [
.package(path: "../../@packages/@swift/@macos/agent-core"),
.package(path: "../../@packages/@swift/@macos/menu-bar"),
.package(path: "../../@packages/@swift/@macos/sync-framework"),
.package(path: "../../@packages/@swift/@foundations/logging"),
.package(path: "../../@packages/@swift/@foundations/settings"),
.package(path: "../../@packages/@tray/tray-resources"),
.package(url: "https://github.com/groue/GRDB.swift.git", from: "6.24.0"),
.package(url: "https://github.com/Alamofire/Alamofire.git", from: "5.9.0"),
.package(url: "https://github.com/SwiftyJSON/SwiftyJSON.git", from: "5.0.0"),
.package(url: "https://github.com/httpswift/swifter.git", from: "1.5.0"),
],
targets: [
// MARK: Shared infrastructure
.target(
name: "MacSyncShared",
dependencies: [
.product(name: "LilithAgentCore", package: "agent-core"),
.product(name: "LilithMenuBar", package: "menu-bar"),
.product(name: "LilithSyncFramework", package: "sync-framework"),
.product(name: "LilithLogging", package: "logging"),
.product(name: "LilithSettings", package: "settings"),
.product(name: "LilithTrayResources", package: "tray-resources"),
.product(name: "Alamofire", package: "Alamofire"),
.product(name: "SwiftyJSON", package: "SwiftyJSON"),
.product(name: "Swifter", package: "swifter"),
],
path: "@packages/shared/Sources/MacSyncShared",
linkerSettings: [
.linkedFramework("Contacts"),
.linkedFramework("Photos"),
.linkedFramework("EventKit"),
.linkedFramework("ScriptingBridge"),
]
),
// MARK: iMessage module
.target(
name: "IMessageSync",
dependencies: [
"MacSyncShared",
.product(name: "GRDB", package: "GRDB.swift"),
],
path: "@packages/imessage/Sources/IMessageSync"
),
// MARK: iPhoto module
.target(
name: "IPhotoSync",
dependencies: [
"MacSyncShared",
.product(name: "GRDB", package: "GRDB.swift"),
],
path: "@packages/iphoto/Sources/IPhotoSync"
),
// MARK: iMail module
.target(
name: "IMailSync",
dependencies: ["MacSyncShared"],
path: "@packages/imail/Sources/IMailSync",
linkerSettings: [
.linkedFramework("ScriptingBridge"),
]
),
// MARK: iCal module
.target(
name: "ICalSync",
dependencies: ["MacSyncShared"],
path: "@packages/ical/Sources/ICalSync",
linkerSettings: [
.linkedFramework("EventKit"),
]
),
// MARK: iReminders module
.target(
name: "IReminderSync",
dependencies: ["MacSyncShared"],
path: "@packages/ireminders/Sources/IReminderSync",
linkerSettings: [
.linkedFramework("EventKit"),
]
),
// MARK: iNotes module
.target(
name: "INoteSync",
dependencies: ["MacSyncShared"],
path: "@packages/inotes/Sources/INoteSync"
),
// MARK: iCalls module (read-only Apple call history from CallHistory.storedata)
.target(
name: "ICallsSync",
dependencies: [
"MacSyncShared",
.product(name: "GRDB", package: "GRDB.swift"),
],
path: "@packages/icalls/Sources/ICallsSync"
),
// MARK: Pure-function contacts core (no Contacts framework fully testable on Linux/CI)
.target(
name: "ContactsSyncCore",
dependencies: [],
path: "@packages/contacts-sync-core/Sources/ContactsSyncCore"
),
// MARK: App executable
.executableTarget(
name: "MacSyncApp",
dependencies: [
"MacSyncShared",
"ContactsSyncCore",
"IMessageSync",
"IPhotoSync",
"IMailSync",
"ICalSync",
"IReminderSync",
"INoteSync",
"ICallsSync",
],
path: "src/client",
exclude: ["Resources"]
),
// MARK: Tests
.testTarget(
name: "MacSyncSharedTests",
dependencies: ["MacSyncShared"],
path: "@packages/shared/Tests/MacSyncSharedTests"
),
.testTarget(
name: "IMessageSyncTests",
dependencies: ["IMessageSync"],
path: "@packages/imessage/Tests/IMessageSyncTests"
),
// MARK: iPhoto Tests
.testTarget(
name: "IPhotoSyncTests",
dependencies: ["IPhotoSync"],
path: "@packages/iphoto/Tests/IPhotoSyncTests"
),
// MARK: iMail Tests
.testTarget(
name: "IMailSyncTests",
dependencies: ["IMailSync"],
path: "@packages/imail/Tests/IMailSyncTests"
),
// MARK: iCal Tests
.testTarget(
name: "ICalSyncTests",
dependencies: ["ICalSync"],
path: "@packages/ical/Tests/ICalSyncTests"
),
// MARK: iReminders Tests
.testTarget(
name: "IReminderSyncTests",
dependencies: ["IReminderSync"],
path: "@packages/ireminders/Tests/IReminderSyncTests"
),
// MARK: iNotes Tests
.testTarget(
name: "INoteSyncTests",
dependencies: ["INoteSync", "MacSyncShared"],
path: "@packages/inotes/Tests/INoteSyncTests"
),
// MARK: iCalls Tests
.testTarget(
name: "ICallsSyncTests",
dependencies: ["ICallsSync", "MacSyncShared"],
path: "@packages/icalls/Tests/ICallsSyncTests"
),
// MARK: ContactsSyncCore Tests (pure functions no Contacts framework required)
.testTarget(
name: "ContactsSyncCoreTests",
dependencies: ["ContactsSyncCore"],
path: "@packages/contacts-sync-core/Tests/ContactsSyncCoreTests"
),
]
)