field_ios

In-the-field app for Radroots on iOS
git clone https://radroots.dev/git/field_ios.git
Log | Files | Refs | README | LICENSE

TeraBackupRuntimeStartup.swift (1864B)


      1 import Foundation
      2 import RadrootsKit
      3 import TeraKitBindings
      4 
      5 extension TeraGeneratedRuntimeBackend {
      6   /// Call instead of ordinary startup, after the session has closed its prior
      7   /// runtime. The existing single database owner and file paths remain intact.
      8   static func startWithLocalBackups(configuration: TeraRuntimeLaunchConfiguration) async throws -> TeraRuntimeBackendStart {
      9     guard configuration.protectedData == .available else { throw TeraLocalBackupHost.failure("backup_unavailable") }
     10     let use = try TeraMediaProcessUse.admit(applicationSupportDirectory: configuration.applicationSupportDirectory)
     11     defer { withExtendedLifetime(use) {} }
     12     let root = URL(fileURLWithPath: configuration.applicationSupportDirectory, isDirectory: true)
     13     let roots = try RadrootsAppleFileRoots(appIdentifier: configuration.app.bundleIdentifier,
     14                                            dataRoot: root, cacheRoot: root, temporaryRoot: root)
     15     let host = try TeraLocalBackupHost(roots: roots, publicKey: configuration.publicKeyHex,
     16                                        generation: configuration.sourceGenerationHex)
     17     // Structural binding validation for directory preparation; this creates no
     18     // backup candidate and no publication or retained request identity.
     19     try await host.prepare(request: FfiBackupRequest(schemaVersion: applicationBackupLimits().schemaVersion,
     20                                                      backupId: String(repeating: "01", count: 16), publicKey: configuration.publicKeyHex,
     21                                                      sourceGeneration: configuration.sourceGenerationHex, requestedAtUnixMs: configuration.sourceGenerationCreatedAtUnixMilliseconds,
     22                                                      maximumBytes: 1))
     23     return try await start(configuration: configuration, localBackups: true)
     24   }
     25 }