Skip to content

Commit 2d9cd9c

Browse files
committed
Added Version tests
1 parent 1c62157 commit 2d9cd9c

15 files changed

Lines changed: 272 additions & 226 deletions

CoreDataMigration-Example.xcodeproj/project.pbxproj

Lines changed: 47 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,17 @@
2929
43370DBE1F66F0DF006188EC /* CoreDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43370DBB1F66F0C0006188EC /* CoreDataManager.swift */; };
3030
4345D4EE1F67E0FE00027D11 /* UIColor+Hex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4345D4ED1F67E0FE00027D11 /* UIColor+Hex.swift */; };
3131
4345D4F01F67E10700027D11 /* UIColor+Random.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4345D4EF1F67E10700027D11 /* UIColor+Random.swift */; };
32+
43E924322F8FFB5500C932D2 /* CoreDataMigration_Example_1.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = 43E9242A2F8FFB5500C932D2 /* CoreDataMigration_Example_1.sqlite */; };
33+
43E924332F8FFB5500C932D2 /* CoreDataMigration_Example_3.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = 43E9242C2F8FFB5500C932D2 /* CoreDataMigration_Example_3.sqlite */; };
34+
43E924342F8FFB5500C932D2 /* CoreDataMigration_Example_2.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = 43E9242B2F8FFB5500C932D2 /* CoreDataMigration_Example_2.sqlite */; };
35+
43E924352F8FFB5500C932D2 /* CoreDataManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E9242F2F8FFB5500C932D2 /* CoreDataManagerTests.swift */; };
36+
43E924372F8FFB5500C932D2 /* CoreDataMigratorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E924302F8FFB5500C932D2 /* CoreDataMigratorTests.swift */; };
37+
43E924392F8FFBC800C932D2 /* StubCoreDataMigrator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E924382F8FFBC800C932D2 /* StubCoreDataMigrator.swift */; };
38+
43E9243B2F8FFEA700C932D2 /* CoreDataMigrationVersionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E9243A2F8FFEA700C932D2 /* CoreDataMigrationVersionTests.swift */; };
3239
C23BD45A21F08A350039A36B /* PostSectionViewerTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C23BD45921F08A350039A36B /* PostSectionViewerTableViewCell.swift */; };
3340
C28553DF21DCF5000004C7BA /* CoreDataMigrationVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = C28553DE21DCF5000004C7BA /* CoreDataMigrationVersion.swift */; };
3441
C28553E221DD14090004C7BA /* NSManagedObjectModel+Compatible.swift in Sources */ = {isa = PBXBuildFile; fileRef = C28553E121DD14090004C7BA /* NSManagedObjectModel+Compatible.swift */; };
3542
C28553E421DD1D7B0004C7BA /* NSManagedObjectModel+Resource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C28553E321DD1D7B0004C7BA /* NSManagedObjectModel+Resource.swift */; };
36-
C28553F821DD21C40004C7BA /* CoreDataManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C28553EE21DD21C30004C7BA /* CoreDataManagerTests.swift */; };
37-
C28553FB21DD21C40004C7BA /* CoreDataMigration_Example_2.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = C28553F321DD21C30004C7BA /* CoreDataMigration_Example_2.sqlite */; };
38-
C28553FD21DD21C40004C7BA /* CoreDataMigration_Example_1.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = C28553F521DD21C30004C7BA /* CoreDataMigration_Example_1.sqlite */; };
39-
C28553FE21DD21C40004C7BA /* CoreDataMigration_Example_3.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = C28553F621DD21C30004C7BA /* CoreDataMigration_Example_3.sqlite */; };
40-
C28553FF21DD21C40004C7BA /* CoreDataMigratorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C28553F721DD21C30004C7BA /* CoreDataMigratorTests.swift */; };
41-
C285540221DD22040004C7BA /* MockCoreDataMigrator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C285540121DD22040004C7BA /* MockCoreDataMigrator.swift */; };
4243
/* End PBXBuildFile section */
4344

4445
/* Begin PBXContainerItemProxy section */
@@ -81,17 +82,18 @@
8182
4345D4EF1F67E10700027D11 /* UIColor+Random.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIColor+Random.swift"; sourceTree = "<group>"; };
8283
43AB8AE51F66E6A5003153B3 /* CoreDataMigration-Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "CoreDataMigration-Example.app"; sourceTree = BUILT_PRODUCTS_DIR; };
8384
43AB8AFC1F66E6A5003153B3 /* CoreDataMigration-ExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "CoreDataMigration-ExampleTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
85+
43E9242A2F8FFB5500C932D2 /* CoreDataMigration_Example_1.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; path = CoreDataMigration_Example_1.sqlite; sourceTree = "<group>"; };
86+
43E9242B2F8FFB5500C932D2 /* CoreDataMigration_Example_2.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; path = CoreDataMigration_Example_2.sqlite; sourceTree = "<group>"; };
87+
43E9242C2F8FFB5500C932D2 /* CoreDataMigration_Example_3.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; path = CoreDataMigration_Example_3.sqlite; sourceTree = "<group>"; };
88+
43E9242F2F8FFB5500C932D2 /* CoreDataManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreDataManagerTests.swift; sourceTree = "<group>"; };
89+
43E924302F8FFB5500C932D2 /* CoreDataMigratorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreDataMigratorTests.swift; sourceTree = "<group>"; };
90+
43E924382F8FFBC800C932D2 /* StubCoreDataMigrator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StubCoreDataMigrator.swift; sourceTree = "<group>"; };
91+
43E9243A2F8FFEA700C932D2 /* CoreDataMigrationVersionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreDataMigrationVersionTests.swift; sourceTree = "<group>"; };
8492
C23BD45921F08A350039A36B /* PostSectionViewerTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostSectionViewerTableViewCell.swift; sourceTree = "<group>"; };
8593
C28553DE21DCF5000004C7BA /* CoreDataMigrationVersion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreDataMigrationVersion.swift; sourceTree = "<group>"; };
8694
C28553E121DD14090004C7BA /* NSManagedObjectModel+Compatible.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSManagedObjectModel+Compatible.swift"; sourceTree = "<group>"; };
8795
C28553E321DD1D7B0004C7BA /* NSManagedObjectModel+Resource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSManagedObjectModel+Resource.swift"; sourceTree = "<group>"; };
8896
C28553E821DD21950004C7BA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
89-
C28553EE21DD21C30004C7BA /* CoreDataManagerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreDataManagerTests.swift; sourceTree = "<group>"; };
90-
C28553F321DD21C30004C7BA /* CoreDataMigration_Example_2.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; path = CoreDataMigration_Example_2.sqlite; sourceTree = "<group>"; };
91-
C28553F521DD21C30004C7BA /* CoreDataMigration_Example_1.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; path = CoreDataMigration_Example_1.sqlite; sourceTree = "<group>"; };
92-
C28553F621DD21C30004C7BA /* CoreDataMigration_Example_3.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; path = CoreDataMigration_Example_3.sqlite; sourceTree = "<group>"; };
93-
C28553F721DD21C30004C7BA /* CoreDataMigratorTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreDataMigratorTests.swift; sourceTree = "<group>"; };
94-
C285540121DD22040004C7BA /* MockCoreDataMigrator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCoreDataMigrator.swift; sourceTree = "<group>"; };
9597
/* End PBXFileReference section */
9698

9799
/* Begin PBXFrameworksBuildPhase section */
@@ -310,81 +312,66 @@
310312
43AB8AFF1F66E6A5003153B3 /* CoreDataMigration-ExampleTests */ = {
311313
isa = PBXGroup;
312314
children = (
315+
43E924292F8FFB5500C932D2 /* Doubles */,
316+
43E9242E2F8FFB5500C932D2 /* Resources */,
317+
43E924312F8FFB5500C932D2 /* Tests */,
313318
3D2C746521DFFE5600514491 /* Helpers */,
314319
C28553E521DD21950004C7BA /* Supporting Files */,
315-
C28553EB21DD21C30004C7BA /* Tests */,
316320
);
317321
path = "CoreDataMigration-ExampleTests";
318322
sourceTree = "<group>";
319323
};
320-
C28553E021DD13EF0004C7BA /* NSManagedObjectModel */ = {
324+
43E924292F8FFB5500C932D2 /* Doubles */ = {
321325
isa = PBXGroup;
322326
children = (
323-
C28553E121DD14090004C7BA /* NSManagedObjectModel+Compatible.swift */,
324-
C28553E321DD1D7B0004C7BA /* NSManagedObjectModel+Resource.swift */,
327+
43E924382F8FFBC800C932D2 /* StubCoreDataMigrator.swift */,
325328
);
326-
path = NSManagedObjectModel;
329+
path = Doubles;
327330
sourceTree = "<group>";
328331
};
329-
C28553E521DD21950004C7BA /* Supporting Files */ = {
332+
43E9242D2F8FFB5500C932D2 /* SQLite */ = {
330333
isa = PBXGroup;
331334
children = (
332-
C28553E821DD21950004C7BA /* Info.plist */,
335+
43E9242A2F8FFB5500C932D2 /* CoreDataMigration_Example_1.sqlite */,
336+
43E9242B2F8FFB5500C932D2 /* CoreDataMigration_Example_2.sqlite */,
337+
43E9242C2F8FFB5500C932D2 /* CoreDataMigration_Example_3.sqlite */,
333338
);
334-
path = "Supporting Files";
339+
path = SQLite;
335340
sourceTree = "<group>";
336341
};
337-
C28553EB21DD21C30004C7BA /* Tests */ = {
342+
43E9242E2F8FFB5500C932D2 /* Resources */ = {
338343
isa = PBXGroup;
339344
children = (
340-
C285540021DD21F50004C7BA /* Mocks */,
341-
C28553EC21DD21C30004C7BA /* CoreData */,
345+
43E9242D2F8FFB5500C932D2 /* SQLite */,
342346
);
343-
path = Tests;
344-
sourceTree = "<group>";
345-
};
346-
C28553EC21DD21C30004C7BA /* CoreData */ = {
347-
isa = PBXGroup;
348-
children = (
349-
C28553ED21DD21C30004C7BA /* Manager */,
350-
C28553EF21DD21C30004C7BA /* Migration */,
351-
);
352-
path = CoreData;
353-
sourceTree = "<group>";
354-
};
355-
C28553ED21DD21C30004C7BA /* Manager */ = {
356-
isa = PBXGroup;
357-
children = (
358-
C28553EE21DD21C30004C7BA /* CoreDataManagerTests.swift */,
359-
);
360-
path = Manager;
347+
path = Resources;
361348
sourceTree = "<group>";
362349
};
363-
C28553EF21DD21C30004C7BA /* Migration */ = {
350+
43E924312F8FFB5500C932D2 /* Tests */ = {
364351
isa = PBXGroup;
365352
children = (
366-
C28553F721DD21C30004C7BA /* CoreDataMigratorTests.swift */,
367-
C28553F121DD21C30004C7BA /* Models */,
353+
43E9242F2F8FFB5500C932D2 /* CoreDataManagerTests.swift */,
354+
43E924302F8FFB5500C932D2 /* CoreDataMigratorTests.swift */,
355+
43E9243A2F8FFEA700C932D2 /* CoreDataMigrationVersionTests.swift */,
368356
);
369-
path = Migration;
357+
path = Tests;
370358
sourceTree = "<group>";
371359
};
372-
C28553F121DD21C30004C7BA /* Models */ = {
360+
C28553E021DD13EF0004C7BA /* NSManagedObjectModel */ = {
373361
isa = PBXGroup;
374362
children = (
375-
C28553F521DD21C30004C7BA /* CoreDataMigration_Example_1.sqlite */,
376-
C28553F321DD21C30004C7BA /* CoreDataMigration_Example_2.sqlite */,
377-
C28553F621DD21C30004C7BA /* CoreDataMigration_Example_3.sqlite */,
363+
C28553E121DD14090004C7BA /* NSManagedObjectModel+Compatible.swift */,
364+
C28553E321DD1D7B0004C7BA /* NSManagedObjectModel+Resource.swift */,
378365
);
379-
path = Models;
366+
path = NSManagedObjectModel;
380367
sourceTree = "<group>";
381368
};
382-
C285540021DD21F50004C7BA /* Mocks */ = {
369+
C28553E521DD21950004C7BA /* Supporting Files */ = {
383370
isa = PBXGroup;
384371
children = (
385-
C285540121DD22040004C7BA /* MockCoreDataMigrator.swift */,
372+
C28553E821DD21950004C7BA /* Info.plist */,
386373
);
387-
path = Mocks;
374+
path = "Supporting Files";
388375
sourceTree = "<group>";
389376
};
390377
/* End PBXGroup section */
@@ -483,9 +470,9 @@
483470
isa = PBXResourcesBuildPhase;
484471
buildActionMask = 2147483647;
485472
files = (
486-
C28553FE21DD21C40004C7BA /* CoreDataMigration_Example_3.sqlite in Resources */,
487-
C28553FB21DD21C40004C7BA /* CoreDataMigration_Example_2.sqlite in Resources */,
488-
C28553FD21DD21C40004C7BA /* CoreDataMigration_Example_1.sqlite in Resources */,
473+
43E924322F8FFB5500C932D2 /* CoreDataMigration_Example_1.sqlite in Resources */,
474+
43E924332F8FFB5500C932D2 /* CoreDataMigration_Example_3.sqlite in Resources */,
475+
43E924342F8FFB5500C932D2 /* CoreDataMigration_Example_2.sqlite in Resources */,
489476
);
490477
runOnlyForDeploymentPostprocessing = 0;
491478
};
@@ -524,11 +511,12 @@
524511
isa = PBXSourcesBuildPhase;
525512
buildActionMask = 2147483647;
526513
files = (
527-
C285540221DD22040004C7BA /* MockCoreDataMigrator.swift in Sources */,
528514
3D8E52F721E0F98500FE1D35 /* NSManagedObjectContext+Helper.swift in Sources */,
529-
C28553F821DD21C40004C7BA /* CoreDataManagerTests.swift in Sources */,
530-
C28553FF21DD21C40004C7BA /* CoreDataMigratorTests.swift in Sources */,
515+
43E924392F8FFBC800C932D2 /* StubCoreDataMigrator.swift in Sources */,
516+
43E9243B2F8FFEA700C932D2 /* CoreDataMigrationVersionTests.swift in Sources */,
531517
3D8E52F521E0EF2800FE1D35 /* FileManager+Helper.swift in Sources */,
518+
43E924352F8FFB5500C932D2 /* CoreDataManagerTests.swift in Sources */,
519+
43E924372F8FFB5500C932D2 /* CoreDataMigratorTests.swift in Sources */,
532520
);
533521
runOnlyForDeploymentPostprocessing = 0;
534522
};

CoreDataMigration-Example/CoreData/CoreDataManager.swift

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ import Foundation
1010
import CoreData
1111

1212
class CoreDataManager {
13-
14-
let migrator: CoreDataMigratorProtocol
13+
let migrator: CoreDataMigrating
1514
private let storeType: String
1615

1716
lazy var persistentContainer: NSPersistentContainer = {
@@ -44,7 +43,8 @@ class CoreDataManager {
4443

4544
// MARK: - Init
4645

47-
init(storeType: String = NSSQLiteStoreType, migrator: CoreDataMigratorProtocol = CoreDataMigrator()) {
46+
init(storeType: String = NSSQLiteStoreType,
47+
migrator: CoreDataMigrating = CoreDataMigrator()) {
4848
self.storeType = storeType
4949
self.migrator = migrator
5050
}
@@ -63,7 +63,7 @@ class CoreDataManager {
6363
migrateStoreIfNeeded {
6464
self.persistentContainer.loadPersistentStores { description, error in
6565
guard error == nil else {
66-
fatalError("was unable to load store \(error!)")
66+
fatalError("Unable to load store \(error!)")
6767
}
6868

6969
completion()
@@ -73,12 +73,14 @@ class CoreDataManager {
7373

7474
private func migrateStoreIfNeeded(completion: @escaping () -> Void) {
7575
guard let storeURL = persistentContainer.persistentStoreDescriptions.first?.url else {
76-
fatalError("persistentContainer was not set up properly")
76+
fatalError("PersistentContainer was not set up properly")
7777
}
7878

79-
if migrator.requiresMigration(at: storeURL, toVersion: CoreDataMigrationVersion.current) {
79+
if migrator.requiresMigration(at: storeURL,
80+
toVersion: CoreDataMigrationVersion.current) {
8081
DispatchQueue.global(qos: .userInitiated).async {
81-
self.migrator.migrateStore(at: storeURL, toVersion: CoreDataMigrationVersion.current)
82+
self.migrator.migrateStore(at: storeURL,
83+
toVersion: CoreDataMigrationVersion.current)
8284

8385
DispatchQueue.main.async {
8486
completion()

CoreDataMigration-Example/CoreData/Migration/CoreDataMigrationStep.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import CoreData
1010

1111
struct CoreDataMigrationStep {
12-
1312
let sourceModel: NSManagedObjectModel
1413
let destinationModel: NSManagedObjectModel
1514
let mappingModel: NSMappingModel

CoreDataMigration-Example/CoreData/Migration/CoreDataMigrator.swift

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,12 @@
88

99
import CoreData
1010

11-
protocol CoreDataMigratorProtocol {
11+
protocol CoreDataMigrating {
1212
func requiresMigration(at storeURL: URL, toVersion version: CoreDataMigrationVersion) -> Bool
1313
func migrateStore(at storeURL: URL, toVersion version: CoreDataMigrationVersion)
1414
}
1515

16-
/**
17-
Responsible for handling Core Data model migrations.
18-
19-
The default Core Data model migration approach is to go from earlier version to all possible future versions.
20-
21-
So, if we have 4 model versions (1, 2, 3, 4), you would need to create the following mappings 1 to 4, 2 to 4 and 3 to 4.
22-
Then when we create model version 5, we would create mappings 1 to 5, 2 to 5, 3 to 5 and 4 to 5. You can see that for each
23-
new version we must create new mappings from all previous versions to the current version. This does not scale well, in the
24-
above example 4 new mappings have been created. For each new version you must add n-1 new mappings.
25-
26-
Instead the solution below uses an iterative approach where we migrate mutliple times through a chain of model versions.
27-
28-
So, if we have 4 model versions (1, 2, 3, 4), you would need to create the following mappings 1 to 2, 2 to 3 and 3 to 4.
29-
Then when we create model version 5, we only need to create one additional mapping 4 to 5. This greatly reduces the work
30-
required when adding a new version.
31-
*/
32-
class CoreDataMigrator: CoreDataMigratorProtocol {
16+
class CoreDataMigrator: CoreDataMigrating {
3317

3418
// MARK: - Check
3519

@@ -55,9 +39,9 @@ class CoreDataMigrator: CoreDataMigratorProtocol {
5539
for migrationStep in migrationSteps {
5640
let manager = NSMigrationManager(sourceModel: migrationStep.sourceModel,
5741
destinationModel: migrationStep.destinationModel)
58-
let temporaryDirectory = URL(fileURLWithPath: NSTemporaryDirectory(),
59-
isDirectory: true)
60-
let destinationURL = temporaryDirectory.appendingPathComponent(UUID().uuidString)
42+
let tmpDirectory = URL(fileURLWithPath: NSTemporaryDirectory(),
43+
isDirectory: true)
44+
let destinationURL = tmpDirectory.appendingPathComponent(UUID().uuidString)
6145

6246
do {
6347
try manager.migrateStore(from: currentURL,
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
//
2+
// StubCoreDataMigrator.swift
3+
// CoreDataMigration-ExampleTests
4+
//
5+
// Created by William Boles on 15/04/2026.
6+
// Copyright © 2026 William Boles. All rights reserved.
7+
//
8+
9+
import Foundation
10+
import CoreData
11+
12+
@testable import CoreDataMigration_Example
13+
14+
class StubCoreDataMigrator: CoreDataMigrating {
15+
enum Event {
16+
case requiresMigration(URL, CoreDataMigrationVersion)
17+
case migrateStore(URL, CoreDataMigrationVersion)
18+
}
19+
20+
private(set) var events: [Event] = []
21+
22+
var requiresMigrationToBeReturned: Bool!
23+
24+
func requiresMigration(at storeURL: URL,
25+
toVersion version: CoreDataMigrationVersion) -> Bool {
26+
events.append(.requiresMigration(storeURL, version))
27+
28+
return requiresMigrationToBeReturned
29+
}
30+
31+
func migrateStore(at storeURL: URL,
32+
toVersion version: CoreDataMigrationVersion) {
33+
events.append(.migrateStore(storeURL, version))
34+
}
35+
}
36+

CoreDataMigration-ExampleTests/Helpers/FileManager+Helper.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,17 @@ extension FileManager {
1515
static func clearTempDirectoryContents() {
1616
let tmpDirectoryContents = try! FileManager.default.contentsOfDirectory(atPath: NSTemporaryDirectory())
1717
tmpDirectoryContents.forEach {
18-
let temporaryDirectory = URL(fileURLWithPath: NSTemporaryDirectory(),
19-
isDirectory: true)
20-
let fileURL = temporaryDirectory.appendingPathComponent($0)
18+
let tmpDirectory = URL(fileURLWithPath: NSTemporaryDirectory(),
19+
isDirectory: true)
20+
let fileURL = tmpDirectory.appendingPathComponent($0)
2121
try? FileManager.default.removeItem(atPath: fileURL.path)
2222
}
2323
}
2424

2525
static func moveFileFromBundleToTempDirectory(filename: String) -> URL {
26-
let temporaryDirectory = URL(fileURLWithPath: NSTemporaryDirectory(),
27-
isDirectory: true)
28-
let destinationURL = temporaryDirectory.appendingPathComponent(filename)
26+
let tmpDirectory = URL(fileURLWithPath: NSTemporaryDirectory(),
27+
isDirectory: true)
28+
let destinationURL = tmpDirectory.appendingPathComponent(filename)
2929
try? FileManager.default.removeItem(at: destinationURL)
3030
let bundleURL = Bundle(for: CoreDataMigratorTests.self).resourceURL!.appendingPathComponent(filename)
3131
try? FileManager.default.copyItem(at: bundleURL,

0 commit comments

Comments
 (0)