Skip to content

Commit e6a757b

Browse files
authored
Merge branch 'main' into xcode-26-4
2 parents 45295b2 + 7e2da6a commit e6a757b

6 files changed

Lines changed: 51 additions & 11 deletions

File tree

Sources/SQLiteData/CloudKit/Internal/DataManager.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@
7777
}
7878

7979
package var temporaryDirectory: URL {
80-
URL(fileURLWithPath: "/")
80+
URL(fileURLWithPath: "/tmp")
8181
}
8282
}
8383

@@ -86,6 +86,9 @@
8686
static var liveValue: any DataManager {
8787
LiveDataManager()
8888
}
89+
static var previewValue: any DataManager {
90+
InMemoryDataManager()
91+
}
8992
static var testValue: any DataManager {
9093
InMemoryDataManager()
9194
}

Sources/SQLiteData/CloudKit/Internal/MockCloudDatabase.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
for key in record.allKeys() {
6161
guard let assetData = state.assets[AssetID(recordID: record.recordID, key: key)]
6262
else { continue }
63-
let url = URL(filePath: UUID().uuidString.lowercased())
63+
let url = dataManager.wrappedValue.temporaryDirectory.appending(path: UUID().uuidString)
6464
try dataManager.wrappedValue.save(assetData, to: url)
6565
record[key] = CKAsset(fileURL: url)
6666
}

Sources/SQLiteData/CloudKit/SyncEngine.swift

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@
106106
let containerIdentifier =
107107
containerIdentifier
108108
?? ModelConfiguration(groupContainer: .automatic).cloudKitContainerIdentifier
109-
?? (context == .preview ? "preview" : nil)
109+
?? (context != .live ? "container" : nil)
110110
var allTables: [any SynchronizableTable] = []
111111
var allPrivateTables: [any SynchronizableTable] = []
112112
for table in repeat each tables {
@@ -2169,15 +2169,19 @@
21692169
package var `private`: (any SyncEngineProtocol)? {
21702170
guard let `private` = rawValue?.private
21712171
else {
2172-
reportIssue("Private sync engine has not been set.")
2172+
if isRunning {
2173+
reportIssue("Private sync engine has not been set.")
2174+
}
21732175
return nil
21742176
}
21752177
return `private`
21762178
}
21772179
package var `shared`: (any SyncEngineProtocol)? {
21782180
guard let `shared` = rawValue?.shared
21792181
else {
2180-
reportIssue("Shared sync engine has not been set.")
2182+
if isRunning {
2183+
reportIssue("Shared sync engine has not been set.")
2184+
}
21812185
return nil
21822186
}
21832187
return `shared`
@@ -2214,7 +2218,7 @@
22142218
let containerIdentifier =
22152219
containerIdentifier
22162220
?? ModelConfiguration(groupContainer: .automatic).cloudKitContainerIdentifier
2217-
?? (context == .preview ? "preview" : nil)
2221+
?? (context != .live ? "container" : nil)
22182222

22192223
guard let containerIdentifier else {
22202224
throw SyncEngine.SchemaError.noCloudKitContainer
@@ -2243,7 +2247,7 @@
22432247
url.isInMemory
22442248
? try DatabaseQueue(path: path)
22452249
: try DatabasePool(path: path)
2246-
_ = try database.write { db in
2250+
_ = try database.read { db in
22472251
try #sql("SELECT 1").execute(db)
22482252
}
22492253
try #sql(

Tests/SQLiteDataTests/CloudKitTests/AppLifecycleTests.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,15 @@
5151
}
5252
}
5353

54+
@available(iOS 17, macOS 14, tvOS 17, watchOS 10, *)
55+
@Test(.startImmediately(false))
56+
func background_whileNotRunning() async throws {
57+
defaultNotificationCenter.post(
58+
name: UIApplication.willResignActiveNotification, object: nil)
59+
try await Task.sleep(for: .seconds(1))
60+
// NB: Not runtime warnings emitted.
61+
}
62+
5463
@available(iOS 17, macOS 14, tvOS 17, watchOS 10, *)
5564
@Test func sendSharedChanges() async throws {
5665
let externalZone = CKRecordZone(

Tests/SQLiteDataTests/CloudKitTests/AssetsTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
coverImage_hash: Data(32 bytes),
3838
remindersListID: 1,
3939
coverImage: CKAsset(
40-
fileURL: URL(file:///6105d6cc76af400325e94d588ce511be5bfdbb73b437dc51eca43917d7a43e3d),
40+
fileURL: URL(file:///tmp/6105d6cc76af400325e94d588ce511be5bfdbb73b437dc51eca43917d7a43e3d),
4141
dataString: "image"
4242
)
4343
),
@@ -61,7 +61,7 @@
6161

6262
inMemoryDataManager.storage.withValue { storage in
6363
let url = URL(
64-
string: "file:///6105d6cc76af400325e94d588ce511be5bfdbb73b437dc51eca43917d7a43e3d"
64+
string: "file:///tmp/6105d6cc76af400325e94d588ce511be5bfdbb73b437dc51eca43917d7a43e3d"
6565
)!
6666
#expect(storage[url] == Data("image".utf8))
6767
}
@@ -93,7 +93,7 @@
9393
coverImage_hash: Data(32 bytes),
9494
remindersListID: 1,
9595
coverImage: CKAsset(
96-
fileURL: URL(file:///97e67a5645969953f1a4cfe2ea75649864ff99789189cdd3f6db03e59f8a8ebf),
96+
fileURL: URL(file:///tmp/97e67a5645969953f1a4cfe2ea75649864ff99789189cdd3f6db03e59f8a8ebf),
9797
dataString: "new-image"
9898
)
9999
),
@@ -117,7 +117,7 @@
117117

118118
inMemoryDataManager.storage.withValue { storage in
119119
let url = URL(
120-
string: "file:///97e67a5645969953f1a4cfe2ea75649864ff99789189cdd3f6db03e59f8a8ebf"
120+
string: "file:///tmp/97e67a5645969953f1a4cfe2ea75649864ff99789189cdd3f6db03e59f8a8ebf"
121121
)!
122122
#expect(storage[url] == Data("new-image".utf8))
123123
}

Tests/SQLiteDataTests/CloudKitTests/MockCloudDatabaseTests.swift

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,30 @@
4646
#expect(error == CKError(.unknownItem))
4747
}
4848

49+
@available(iOS 17, macOS 14, tvOS 17, watchOS 10, *)
50+
@Test func assetsUseTemporaryDirectory() async throws {
51+
let recordID = CKRecord.ID(recordName: "record")
52+
let record = CKRecord(recordType: "Record", recordID: recordID)
53+
let sourceURL = URL(fileURLWithPath: "/sqlite-data-test-assets/asset.jpg")
54+
try inMemoryDataManager.save(Data("image".utf8), to: sourceURL)
55+
record["asset"] = CKAsset(fileURL: sourceURL)
56+
57+
let database = syncEngine.private.database
58+
let (saveResults, _) = try database.modifyRecords(
59+
saving: [record],
60+
deleting: []
61+
)
62+
_ = try saveResults[recordID]?.get()
63+
64+
let fetched = try database.record(for: recordID)
65+
let asset = fetched["asset"] as? CKAsset
66+
let assetDirectory = try #require(asset?.fileURL?.path())
67+
#expect(
68+
assetDirectory
69+
.hasPrefix(inMemoryDataManager.temporaryDirectory.path())
70+
)
71+
}
72+
4973
@available(iOS 17, macOS 14, tvOS 17, watchOS 10, *)
5074
@Test func saveTransaction_ChildBeforeParent() async throws {
5175
let parent = CKRecord(recordType: "A", recordID: CKRecord.ID(recordName: "A"))

0 commit comments

Comments
 (0)