Skip to content

Commit 0ef6d13

Browse files
Merge pull request #560 from Iterable/tapash/mob-4458-core-data
[MOB-4458] - More coredata fixes
2 parents eb9acb8 + d9e6d6c commit 0ef6d13

18 files changed

+774
-544
lines changed

.github/workflows/build-and-test.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,18 @@ on: pull_request
44

55
jobs:
66
run-tests-job:
7-
runs-on: macos-latest
7+
runs-on: macos-12
88

99
steps:
1010
- uses: actions/checkout@v2
1111

1212
- uses: maxim-lobanov/[email protected]
1313
with:
14-
xcode-version: 13.0
14+
xcode-version: latest
1515

1616
- name: Build and test
1717
run: |
18-
xcodebuild test -project swift-sdk.xcodeproj -scheme swift-sdk -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 13' -enableCodeCoverage YES CODE_SIGNING_REQUIRED=NO | xcpretty && exit ${PIPESTATUS[0]}
18+
xcodebuild test -project swift-sdk.xcodeproj -scheme swift-sdk -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 13 Pro Max' -enableCodeCoverage YES CODE_SIGNING_REQUIRED=NO | xcpretty && exit ${PIPESTATUS[0]}
1919
2020
- name: CocoaPods lint
2121
run: pod lib lint

swift-sdk.xcodeproj/project.pbxproj

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,13 @@
4040
55E02D39253F8D86009DB8BC /* WebViewProtocolTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E02D38253F8D86009DB8BC /* WebViewProtocolTests.swift */; };
4141
55E6F462238E066400808BCE /* DeepLinkTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E6F45E238E066400808BCE /* DeepLinkTests.swift */; };
4242
5B49BB3E27CFB71500E6F00C /* PopupInboxSessionUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B49BB3D27CFB71500E6F00C /* PopupInboxSessionUITests.swift */; };
43+
5B5AA711284F1A6D0093FED4 /* MockNetworkSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B5AA710284F1A6D0093FED4 /* MockNetworkSession.swift */; };
44+
5B5AA712284F1A6D0093FED4 /* MockNetworkSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B5AA710284F1A6D0093FED4 /* MockNetworkSession.swift */; };
45+
5B5AA713284F1A6D0093FED4 /* MockNetworkSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B5AA710284F1A6D0093FED4 /* MockNetworkSession.swift */; };
46+
5B5AA714284F1A6D0093FED4 /* MockNetworkSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B5AA710284F1A6D0093FED4 /* MockNetworkSession.swift */; };
47+
5B5AA715284F1A6D0093FED4 /* MockNetworkSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B5AA710284F1A6D0093FED4 /* MockNetworkSession.swift */; };
48+
5B5AA716284F1A6D0093FED4 /* MockNetworkSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B5AA710284F1A6D0093FED4 /* MockNetworkSession.swift */; };
49+
5B5AA717284F1A6D0093FED4 /* MockNetworkSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B5AA710284F1A6D0093FED4 /* MockNetworkSession.swift */; };
4350
5B6C3C1127CE871F00B9A753 /* NavInboxSessionUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6C3C1027CE871F00B9A753 /* NavInboxSessionUITests.swift */; };
4451
5B88BC482805D09D004016E5 /* NetworkSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B88BC472805D09D004016E5 /* NetworkSession.swift */; };
4552
AC02480822791E2100495FB9 /* IterableInboxNavigationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC02480722791E2100495FB9 /* IterableInboxNavigationViewController.swift */; };
@@ -414,6 +421,7 @@
414421
55E02D38253F8D86009DB8BC /* WebViewProtocolTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewProtocolTests.swift; sourceTree = "<group>"; };
415422
55E6F45E238E066400808BCE /* DeepLinkTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeepLinkTests.swift; sourceTree = "<group>"; };
416423
5B49BB3D27CFB71500E6F00C /* PopupInboxSessionUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopupInboxSessionUITests.swift; sourceTree = "<group>"; };
424+
5B5AA710284F1A6D0093FED4 /* MockNetworkSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockNetworkSession.swift; sourceTree = "<group>"; };
417425
5B6C3C1027CE871F00B9A753 /* NavInboxSessionUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavInboxSessionUITests.swift; sourceTree = "<group>"; };
418426
5B88BC472805D09D004016E5 /* NetworkSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkSession.swift; sourceTree = "<group>"; };
419427
5BFC7CED27FC9AF300E77479 /* inbox-ui-tests-app.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "inbox-ui-tests-app.entitlements"; sourceTree = "<group>"; };
@@ -1188,6 +1196,7 @@
11881196
children = (
11891197
AC995F9C2167E9FD0099A184 /* CommonExtensions.swift */,
11901198
AC995F942166EC880099A184 /* CommonMocks.swift */,
1199+
5B5AA710284F1A6D0093FED4 /* MockNetworkSession.swift */,
11911200
ACA8D1A42196309C001B1332 /* Common.swift */,
11921201
);
11931202
path = common;
@@ -1893,6 +1902,7 @@
18931902
ACD2B86325B18259005D7A90 /* OfflineModeE2ETests.swift in Sources */,
18941903
ACA2A91E24ABB426001DFD17 /* IterableAPISupport.swift in Sources */,
18951904
ACA2A91824AB25E3001DFD17 /* CommonMocks.swift in Sources */,
1905+
5B5AA716284F1A6D0093FED4 /* MockNetworkSession.swift in Sources */,
18961906
ACA2A91924AB25E8001DFD17 /* Common.swift in Sources */,
18971907
AC8A058924AB1FE1002C1103 /* Environment.swift in Sources */,
18981908
ACA2A91A24AB266F001DFD17 /* Mocks.swift in Sources */,
@@ -1919,6 +1929,7 @@
19191929
ACED4C01213F50B30055A497 /* LoggingTests.swift in Sources */,
19201930
AC52C5B8272A8B32000DCDCF /* KeychainWrapperTests.swift in Sources */,
19211931
ACC3FD9E2536D7A30004A2E0 /* InAppFilePersistenceTests.swift in Sources */,
1932+
5B5AA714284F1A6D0093FED4 /* MockNetworkSession.swift in Sources */,
19221933
55B37FC42297135F0042F13A /* NotificationMetadataTests.swift in Sources */,
19231934
55CC257B2462064F00A77FD5 /* InAppPresenterTests.swift in Sources */,
19241935
AC4BA00224163D8F007359F1 /* IterableHtmlMessageViewControllerTests.swift in Sources */,
@@ -1992,6 +2003,7 @@
19922003
AC2A2988231CFAC40070A9C3 /* NetworkTableViewController.swift in Sources */,
19932004
ACDA975C23159C37004C412E /* AppDelegate.swift in Sources */,
19942005
AC2A2986231A7CFF0070A9C3 /* TestInAppPayloadGenerator.swift in Sources */,
2006+
5B5AA713284F1A6D0093FED4 /* MockNetworkSession.swift in Sources */,
19952007
AC738CE82315A5B600B96B2D /* CommonExtensions.swift in Sources */,
19962008
AC738CE72315A54100B96B2D /* CommonMocks.swift in Sources */,
19972009
AC738CEA2315A8B200B96B2D /* MainViewController.swift in Sources */,
@@ -2009,6 +2021,7 @@
20092021
ACFF428824656A2000FDF10D /* CommonMocks.swift in Sources */,
20102022
AC19520D231D9AC600CD5B61 /* Common.swift in Sources */,
20112023
AC195210231DAD6B00CD5B61 /* TestUtils.swift in Sources */,
2024+
5B5AA715284F1A6D0093FED4 /* MockNetworkSession.swift in Sources */,
20122025
5B6C3C1127CE871F00B9A753 /* NavInboxSessionUITests.swift in Sources */,
20132026
ACDA977123159C39004C412E /* InboxUITests.swift in Sources */,
20142027
ACC6A8502323910D003CC4BE /* UITestsHelper.swift in Sources */,
@@ -2022,6 +2035,7 @@
20222035
files = (
20232036
ACF560D620E443BF000AAC23 /* AppDelegate.swift in Sources */,
20242037
AC995F9D2167E9FD0099A184 /* CommonExtensions.swift in Sources */,
2038+
5B5AA711284F1A6D0093FED4 /* MockNetworkSession.swift in Sources */,
20252039
ACA8D1A52196309C001B1332 /* Common.swift in Sources */,
20262040
AC995F992166EE490099A184 /* CommonMocks.swift in Sources */,
20272041
);
@@ -2038,6 +2052,7 @@
20382052
ACC362C624D2C334002C67BA /* CommonExtensions.swift in Sources */,
20392053
ACF406252507F90F005FD775 /* NetworkConnectivityManagerTests.swift in Sources */,
20402054
AC05644B26387B54001FB810 /* MockPersistence.swift in Sources */,
2055+
5B5AA717284F1A6D0093FED4 /* MockNetworkSession.swift in Sources */,
20412056
ACCF274C24F40C85004862D5 /* RequestHandlerTests.swift in Sources */,
20422057
ACC362C724D2C647002C67BA /* CommonMocks.swift in Sources */,
20432058
ACC362C824D2C7C9002C67BA /* TestUtils.swift in Sources */,
@@ -2053,6 +2068,7 @@
20532068
buildActionMask = 2147483647;
20542069
files = (
20552070
ACFF42B02465B4AE00FDF10D /* AppDelegate.swift in Sources */,
2071+
5B5AA712284F1A6D0093FED4 /* MockNetworkSession.swift in Sources */,
20562072
ACFF42A424656CCE00FDF10D /* ViewController.swift in Sources */,
20572073
ACFF428F24656BDF00FDF10D /* CommonExtensions.swift in Sources */,
20582074
ACFF429024656BDF00FDF10D /* Common.swift in Sources */,

swift-sdk/Internal/HealthMonitor.swift

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import Foundation
66

77
protocol HealthMonitorDataProviderProtocol {
88
var maxTasks: Int { get }
9-
func countTasks() throws -> Int
9+
func countTasks() throws -> Pending<Int, IterableTaskError>
1010
}
1111

1212
struct HealthMonitorDataProvider: HealthMonitorDataProviderProtocol {
@@ -18,11 +18,18 @@ struct HealthMonitorDataProvider: HealthMonitorDataProviderProtocol {
1818

1919
let maxTasks: Int
2020

21-
func countTasks() throws -> Int {
21+
func countTasks() throws -> Pending<Int, IterableTaskError> {
22+
let result = Fulfill<Int, IterableTaskError>()
2223
let context = persistenceContextProvider.newBackgroundContext()
23-
return try context.performAndWait {
24-
try context.countTasks()
24+
context.perform {
25+
do {
26+
let count = try context.countTasks()
27+
result.resolve(with: count)
28+
} catch let error {
29+
result.reject(with: IterableTaskError.general(error.localizedDescription))
30+
}
2531
}
32+
return result
2633
}
2734

2835
private let persistenceContextProvider: IterablePersistenceContextProvider
@@ -48,23 +55,35 @@ class HealthMonitor {
4855

4956
weak var delegate: HealthMonitorDelegate?
5057

51-
func canSchedule() -> Bool {
58+
func canSchedule() -> Pending<Bool, Never> {
5259
ITBInfo()
5360
// do not schedule further on error
5461
guard errored == false else {
55-
return false
62+
return Fulfill<Bool, Never>(value: false)
5663
}
5764

65+
let fulfill = Fulfill<Bool, Never>()
5866
do {
59-
let count = try dataProvider.countTasks()
60-
return count < dataProvider.maxTasks
67+
try dataProvider.countTasks().onCompletion { count in
68+
if count < self.dataProvider.maxTasks {
69+
fulfill.resolve(with: true)
70+
} else {
71+
fulfill.resolve(with: false)
72+
}
73+
} receiveError: { error in
74+
ITBError("DBError: " + error.localizedDescription)
75+
self.onError()
76+
fulfill.resolve(with: false)
77+
}
6178
} catch let error {
6279
ITBError("DBError: " + error.localizedDescription)
6380
onError()
64-
return false
81+
fulfill.resolve(with: false)
6582
}
83+
84+
return fulfill
6685
}
67-
86+
6887
func canProcess() -> Bool {
6988
ITBInfo()
7089
return !errored

swift-sdk/Internal/IterableCoreDataPersistence.swift

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -130,16 +130,14 @@ struct CoreDataPersistenceContext: IterablePersistenceContext {
130130
}
131131

132132
func nextTask() throws -> IterableTask? {
133-
try performAndWait {
134-
let taskManagedObjects: [IterableTaskManagedObject] = try CoreDataUtil.findSortedEntities(context: managedObjectContext,
135-
entity: PersistenceConst.Entity.Task.name,
136-
column: PersistenceConst.Entity.Task.Column.scheduledAt,
137-
ascending: true,
138-
limit: 1)
139-
return taskManagedObjects.first.map(PersistenceHelper.task(from:))
140-
}
133+
let taskManagedObjects: [IterableTaskManagedObject] = try CoreDataUtil.findSortedEntities(context: managedObjectContext,
134+
entity: PersistenceConst.Entity.Task.name,
135+
column: PersistenceConst.Entity.Task.Column.scheduledAt,
136+
ascending: true,
137+
limit: 1)
138+
return taskManagedObjects.first.map(PersistenceHelper.task(from:))
141139
}
142-
140+
143141
func findTask(withId id: String) throws -> IterableTask? {
144142
guard let taskManagedObject = try findTaskManagedObject(id: id) else {
145143
return nil

0 commit comments

Comments
 (0)