Skip to content

Commit f412f32

Browse files
committed
Merge tag '1.6.0'
2 parents 5ab311c + a9860e9 commit f412f32

File tree

102 files changed

+1202
-773
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

102 files changed

+1202
-773
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,3 +75,6 @@ Tuist/master.key
7575

7676
### info.plist
7777
Resources/InfoPlist/Info.plist
78+
79+
### Using tests
80+
Tests/**/*.plist

.package.resolved

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,15 @@
6262
"revision" : "eafdd3720a8cc750bdd38bf776082d2c8cf743fc",
6363
"version" : "10.46.0"
6464
}
65+
},
66+
{
67+
"identity" : "swift-collections",
68+
"kind" : "remoteSourceControl",
69+
"location" : "https://github.com/apple/swift-collections.git",
70+
"state" : {
71+
"revision" : "d029d9d39c87bed85b1c50adee7c41795261a192",
72+
"version" : "1.0.6"
73+
}
6574
}
6675
],
6776
"version" : 2

.swiftlint.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,5 @@ included:
2121
- Tuist/ProjectDescriptionHelpers/Extensions/*.swift
2222

2323
excluded:
24-
- Tests/DataDriverTests/UserDefaults/UserSettingsRepositoryTests.swift.plist
25-
- Tests/DataDriverTests/UserDefaults/WCUserDefaultsTests.swift.plist
24+
- Tests/InfrastructureTests/UserDefaults/UserSettingsRepositoryTests.swift.plist
25+
- Tests/InfrastructureTests/UserDefaults/WCUserDefaultsTests.swift.plist

Changelog/1.6.0.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
## Enhancements
2+
- Maked first view controller to WordCheckingViewController when received daily reminder.
3+
- Changed daily reminder message when no words to memorize.
4+
- Improved voice over.
5+
- Enhanced app stability.
6+
7+
## Fixed
8+
- Fixed memory leak for coordinator object.

Changelog/next.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
## Enhancements
2+
3+
## Fixed

Project.swift

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ func targets() -> [Target] {
2727
],
2828
hasTests: true,
2929
additionalTestDependencies: [
30-
.target(name: "DataDriverTesting"),
3130
.target(name: "TestsSupport"),
3231
.target(name: "DomainTesting"),
32+
.target(name: "InfrastructureTesting"),
3333
.external(name: ExternalDependencyName.rxBlocking),
3434
],
3535
appendSchemeTo: &schemes
@@ -38,7 +38,7 @@ func targets() -> [Target] {
3838
name: "DomainTesting",
3939
dependencies: [
4040
.target(name: "Domain"),
41-
.target(name: "DataDriverTesting"),
41+
.target(name: "InfrastructureTesting"),
4242
],
4343
appendSchemeTo: &disposedSchemes
4444
)
@@ -61,7 +61,7 @@ func targets() -> [Target] {
6161
appendSchemeTo: &schemes
6262
)
6363
+ Target.module(
64-
name: "DataDriver",
64+
name: "Infrastructure",
6565
dependencies: [
6666
.target(name: "Domain"),
6767
.target(name: "Utility"),
@@ -84,7 +84,7 @@ func targets() -> [Target] {
8484
appendSchemeTo: &schemes
8585
)
8686
+ Target.module(
87-
name: "DataDriverTesting",
87+
name: "InfrastructureTesting",
8888
dependencies: [
8989
.target(name: "Domain"),
9090
],
@@ -264,6 +264,7 @@ func targets() -> [Target] {
264264
dependencies: [
265265
.target(name: "Domain"),
266266
.target(name: "iOSSupport"),
267+
.target(name: "FoundationExtension"),
267268
.external(name: ExternalDependencyName.rxSwift),
268269
.external(name: ExternalDependencyName.rxCocoa),
269270
.external(name: ExternalDependencyName.rxUtilityDynamic),
@@ -273,6 +274,7 @@ func targets() -> [Target] {
273274
.external(name: ExternalDependencyName.toast),
274275
.external(name: ExternalDependencyName.swinject),
275276
.external(name: ExternalDependencyName.swinjectExtension),
277+
.package(product: ExternalDependencyName.swiftCollections),
276278
],
277279
hasTests: true,
278280
additionalTestDependencies: [
@@ -345,6 +347,7 @@ func targets() -> [Target] {
345347
.target(name: "LanguageSetting"),
346348
.target(name: "PushNotificationSettings"),
347349
.target(name: "GeneralSettings"),
350+
.target(name: "Infrastructure"),
348351
.external(name: ExternalDependencyName.swinject),
349352
.external(name: ExternalDependencyName.swinjectDIContainer),
350353
.external(name: ExternalDependencyName.sfSafeSymbols),
@@ -363,7 +366,6 @@ func targets() -> [Target] {
363366
.additional("Resources/InfoPlist/Product/**"),
364367
],
365368
dependencies: [
366-
.target(name: "DataDriver"),
367369
.target(name: "iPhoneDriver"),
368370
],
369371
settings: .settings(),
@@ -379,7 +381,6 @@ func targets() -> [Target] {
379381
.additional("Resources/InfoPlist/Dev/**"),
380382
],
381383
dependencies: [
382-
.target(name: "DataDriver"),
383384
.target(name: "iPhoneDriver"),
384385
],
385386
settings: .settings(),
@@ -426,25 +427,23 @@ let project: Project = .init(
426427
.package(url: "https://github.com/realm/realm-swift.git", from: "10.42.0"),
427428
.package(url: "https://github.com/google/GoogleSignIn-iOS", from: "6.0.0"),
428429
.package(url: "https://github.com/google/google-api-objectivec-client-for-rest.git", from: "3.0.0"),
430+
.package(url: "https://github.com/apple/swift-collections.git", from: "1.0.0"),
429431
],
430432
settings: .settings(),
431433
targets: targets(),
432434
schemes: schemes + [
433435
.init(
434436
name: PROJECT_NAME,
435437
buildAction: .buildAction(targets: ["\(PROJECT_NAME)"]),
436-
testAction: .testPlans([.relativeToRoot("TestPlans/WordChecker.xctestplan")]),
437438
runAction: .runAction(executable: "\(PROJECT_NAME)"),
438439
profileAction: .profileAction(executable: "\(PROJECT_NAME)")
439440
),
440441
.init(
441442
name: "\(PROJECT_NAME)Dev",
442-
testAction: .testPlans([.relativeToRoot("TestPlans/WordChecker.xctestplan")]),
443443
runAction: .runAction(executable: "\(PROJECT_NAME)Dev")
444444
),
445445
.init(
446446
name: "\(PROJECT_NAME)Dev_InMemoryDB",
447-
testAction: .testPlans([.relativeToRoot("TestPlans/WordChecker.xctestplan")]),
448447
runAction: .runAction(
449448
executable: "\(PROJECT_NAME)Dev",
450449
arguments: .init(launchArguments: [
@@ -454,7 +453,6 @@ let project: Project = .init(
454453
),
455454
.init(
456455
name: "\(PROJECT_NAME)Dev_SampleDB",
457-
testAction: .testPlans([.relativeToRoot("TestPlans/WordChecker.xctestplan")]),
458456
runAction: .runAction(
459457
executable: "\(PROJECT_NAME)Dev",
460458
arguments: .init(launchArguments: [
@@ -463,8 +461,8 @@ let project: Project = .init(
463461
)
464462
),
465463
.init(
466-
name: "\(PROJECT_NAME)IntergrationTests",
467-
testAction: .testPlans([.relativeToRoot("TestPlans/WordCheckerIntergrationTests.xctestplan")])
464+
name: "IntergrationTests",
465+
testAction: .testPlans([.relativeToRoot("TestPlans/IntergrationTests.xctestplan")])
468466
),
469467
],
470468
additionalFiles: [

QA.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
##Settings
2929

30-
- Source language / Translation language 변경 정상 적용
30+
- Source language / Translation language 변경시 번역 사이트에 정상 적용 확인
3131
- 구글 드라이브 로그인 여부에 따라 로그아웃 버튼 표시
3232
- 매일 알림 켜고 시간 설정한 뒤 홈화면에서 알림 제대로 오는지 확인
3333
- 매일 알림 설정 후 단어 추가/삭제/드라이브 다운로드 에 따라 알림 메세지에 단어 갯수 정상 표시 확인

Resources/Domain/Localization/en.lproj/Localizable.strings

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,4 @@ russian = "Russian";
1818

1919
daily_reminder = "Daily Reminder";
2020
"daily_reminder_body_message_%d" = "%d words were not memorized.";
21+
daily_reminder_body_message_when_no_words_to_memorize = "Memorized all the words. Please add more.";

Resources/Domain/Localization/ko.lproj/Localizable.strings

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,4 @@ russian = "러시아어";
1818

1919
daily_reminder = "매일 알림";
2020
"daily_reminder_body_message_%d" = "외우지 못한 단어가 %d개 있습니다.";
21+
daily_reminder_body_message_when_no_words_to_memorize = "모든 단어를 암기했습니다. 단어를 추가해주세요.";

Resources/iOSSupport/Localization/en.lproj/Localizable.strings

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,8 @@ general = "General";
6767
haptics = "Haptics";
6868
hapticsSettingsFooterTextWhenHapticsIsOn = "Enable haptics for interactions.";
6969
hapticsSettingsFooterTextWhenHapticsIsOff = "Disable haptics for interactions";
70+
71+
more_menu = "More menu";
72+
memorize_words = "Memorize words";
73+
next_word = "Next word";
74+
previous_word = "Previous word";

Resources/iOSSupport/Localization/ko.lproj/Localizable.strings

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,8 @@ general = "일반";
6767
haptics = "진동";
6868
hapticsSettingsFooterTextWhenHapticsIsOn = "상호 작용에 대한 진동을 사용합니다.";
6969
hapticsSettingsFooterTextWhenHapticsIsOff = "상호 작용에 대한 진동을 사용하지 않습니다.";
70+
71+
more_menu = "메뉴 더보기";
72+
memorize_words = "단어 암기";
73+
next_word = "다음 단어";
74+
previous_word = "이전 단어";

Sources/DataDriver/DI/DataDriverDevAssembly.swift

Lines changed: 0 additions & 28 deletions
This file was deleted.

Sources/DataDriver/DI/GoogleDriveRepositoryAssembly.swift

Lines changed: 0 additions & 21 deletions
This file was deleted.

Sources/Domain/DI/ExternalStoreUseCaseAssembly.swift

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,10 @@ final class ExternalStoreUseCaseAssembly: Assembly {
1313

1414
func assemble(container: Container) {
1515
container.register(ExternalStoreUseCaseProtocol.self) { resolver in
16-
let wordRepository: WordRepositoryProtocol = resolver.resolve()
17-
let googleDriveRepository: GoogleDriveRepositoryProtocol = resolver.resolve()
18-
let unmemorizedWordListRepository: UnmemorizedWordListRepositoryProtocol = resolver.resolve()
19-
20-
return GoogleDriveUseCase.init(
21-
wordRepository: wordRepository,
22-
googleDriveRepository: googleDriveRepository,
23-
unmemorizedWordListRepository: unmemorizedWordListRepository,
16+
return ExternalStoreUseCase.init(
17+
wordRepository: resolver.resolve(),
18+
unmemorizedWordListRepository: resolver.resolve(),
19+
googleDriveService: resolver.resolve(),
2420
notificationsUseCase: resolver.resolve()
2521
)
2622
}

Sources/Domain/DI/NotificationsUseCaseAssembly.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,13 @@
99
import Foundation
1010
import Swinject
1111
import SwinjectExtension
12-
import UserNotifications
1312

1413
final class NotificationsUseCaseAssembly: Assembly {
1514

1615
func assemble(container: Container) {
1716
container.register(NotificationsUseCaseProtocol.self) { resolver in
1817
return NotificationsUseCase.init(
19-
notificationRepository: UNUserNotificationCenter.current(),
18+
localNotificationService: resolver.resolve(),
2019
wordRepository: resolver.resolve(),
2120
userSettingsRepository: resolver.resolve()
2221
)

Sources/Domain/Interfaces/Repositories/GoogleDriveRepositoryProtocol.swift

Lines changed: 0 additions & 31 deletions
This file was deleted.

Sources/Domain/Interfaces/Repositories/UserSettingsRepositoryProtocol.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,4 @@ public protocol UserSettingsRepositoryProtocol {
1515

1616
func getUserSettings() -> Single<UserSettings>
1717

18-
func updateLatestDailyReminderTime(_ time: DateComponents) throws
19-
20-
func getLatestDailyReminderTime() throws -> DateComponents
21-
2218
}

Sources/Domain/Interfaces/Repositories/WordRepositoryProtocol.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,17 @@ public protocol WordRepositoryProtocol {
1313
/// - Parameter word: 저장할 단어
1414
func save(_ word: Word)
1515

16-
func getAll() -> [Word]
16+
func getAllWords() -> [Word]
1717

18-
func get(by uuid: UUID) -> Word?
18+
func getWord(by uuid: UUID) -> Word?
1919

20-
func delete(by uuid: UUID)
20+
func deleteWord(by uuid: UUID)
2121

2222
func getUnmemorizedList() -> [Word]
2323

2424
func getMemorizedList() -> [Word]
2525

26+
/// 모든 단어를 지우고 새로운 `wordList` 를 저장합니다.
2627
func reset(to wordList: [Word])
2728

2829
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
//
2+
// GoogleDriveService.swift
3+
// Domain
4+
//
5+
// Created by Jaewon Yun on 2/3/24.
6+
// Copyright © 2024 woin2ee. All rights reserved.
7+
//
8+
9+
import Foundation
10+
import RxSwift
11+
12+
public protocol GoogleDriveService {
13+
14+
/// App data scope 를 가지고 로그인을 합니다.
15+
func signInWithAppDataScope(presenting: PresentingConfiguration) -> Single<Void>
16+
17+
/// 로그아웃을 합니다.
18+
func signOut()
19+
20+
/// 로그인 여부를 반환합니다.
21+
var hasSigned: Bool { get }
22+
23+
/// 이전에 로그인했던 사용자를 복구합니다.
24+
func restorePreviousSignIn() -> Single<Void>
25+
26+
/// App data scope 에 대한 접근 권한을 요청합니다.
27+
func requestAppDataScopeAccess(presenting: PresentingConfiguration) -> Single<Void>
28+
29+
/// App data scope 에 접근 권한이 있는지 여부를 반환합니다.
30+
var isGrantedAppDataScope: Bool { get }
31+
32+
/// 단어 목록을 업로드 합니다.
33+
func uploadWordList(_ wordList: [Word]) -> Single<Void>
34+
35+
/// 단어 목록을 다운로드 합니다.
36+
func downloadWordList() -> Single<[Word]>
37+
38+
}

0 commit comments

Comments
 (0)