Skip to content

Commit

Permalink
Merge tag '1.6.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
woin2ee committed Feb 9, 2024
2 parents 5ab311c + a9860e9 commit f412f32
Show file tree
Hide file tree
Showing 102 changed files with 1,202 additions and 773 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -75,3 +75,6 @@ Tuist/master.key

### info.plist
Resources/InfoPlist/Info.plist

### Using tests
Tests/**/*.plist
9 changes: 9 additions & 0 deletions .package.resolved
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,15 @@
"revision" : "eafdd3720a8cc750bdd38bf776082d2c8cf743fc",
"version" : "10.46.0"
}
},
{
"identity" : "swift-collections",
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-collections.git",
"state" : {
"revision" : "d029d9d39c87bed85b1c50adee7c41795261a192",
"version" : "1.0.6"
}
}
],
"version" : 2
Expand Down
4 changes: 2 additions & 2 deletions .swiftlint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,5 @@ included:
- Tuist/ProjectDescriptionHelpers/Extensions/*.swift

excluded:
- Tests/DataDriverTests/UserDefaults/UserSettingsRepositoryTests.swift.plist
- Tests/DataDriverTests/UserDefaults/WCUserDefaultsTests.swift.plist
- Tests/InfrastructureTests/UserDefaults/UserSettingsRepositoryTests.swift.plist
- Tests/InfrastructureTests/UserDefaults/WCUserDefaultsTests.swift.plist
8 changes: 8 additions & 0 deletions Changelog/1.6.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
## Enhancements
- Maked first view controller to WordCheckingViewController when received daily reminder.
- Changed daily reminder message when no words to memorize.
- Improved voice over.
- Enhanced app stability.

## Fixed
- Fixed memory leak for coordinator object.
3 changes: 3 additions & 0 deletions Changelog/next.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
## Enhancements

## Fixed
22 changes: 10 additions & 12 deletions Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ func targets() -> [Target] {
],
hasTests: true,
additionalTestDependencies: [
.target(name: "DataDriverTesting"),
.target(name: "TestsSupport"),
.target(name: "DomainTesting"),
.target(name: "InfrastructureTesting"),
.external(name: ExternalDependencyName.rxBlocking),
],
appendSchemeTo: &schemes
Expand All @@ -38,7 +38,7 @@ func targets() -> [Target] {
name: "DomainTesting",
dependencies: [
.target(name: "Domain"),
.target(name: "DataDriverTesting"),
.target(name: "InfrastructureTesting"),
],
appendSchemeTo: &disposedSchemes
)
Expand All @@ -61,7 +61,7 @@ func targets() -> [Target] {
appendSchemeTo: &schemes
)
+ Target.module(
name: "DataDriver",
name: "Infrastructure",
dependencies: [
.target(name: "Domain"),
.target(name: "Utility"),
Expand All @@ -84,7 +84,7 @@ func targets() -> [Target] {
appendSchemeTo: &schemes
)
+ Target.module(
name: "DataDriverTesting",
name: "InfrastructureTesting",
dependencies: [
.target(name: "Domain"),
],
Expand Down Expand Up @@ -264,6 +264,7 @@ func targets() -> [Target] {
dependencies: [
.target(name: "Domain"),
.target(name: "iOSSupport"),
.target(name: "FoundationExtension"),
.external(name: ExternalDependencyName.rxSwift),
.external(name: ExternalDependencyName.rxCocoa),
.external(name: ExternalDependencyName.rxUtilityDynamic),
Expand All @@ -273,6 +274,7 @@ func targets() -> [Target] {
.external(name: ExternalDependencyName.toast),
.external(name: ExternalDependencyName.swinject),
.external(name: ExternalDependencyName.swinjectExtension),
.package(product: ExternalDependencyName.swiftCollections),
],
hasTests: true,
additionalTestDependencies: [
Expand Down Expand Up @@ -345,6 +347,7 @@ func targets() -> [Target] {
.target(name: "LanguageSetting"),
.target(name: "PushNotificationSettings"),
.target(name: "GeneralSettings"),
.target(name: "Infrastructure"),
.external(name: ExternalDependencyName.swinject),
.external(name: ExternalDependencyName.swinjectDIContainer),
.external(name: ExternalDependencyName.sfSafeSymbols),
Expand All @@ -363,7 +366,6 @@ func targets() -> [Target] {
.additional("Resources/InfoPlist/Product/**"),
],
dependencies: [
.target(name: "DataDriver"),
.target(name: "iPhoneDriver"),
],
settings: .settings(),
Expand All @@ -379,7 +381,6 @@ func targets() -> [Target] {
.additional("Resources/InfoPlist/Dev/**"),
],
dependencies: [
.target(name: "DataDriver"),
.target(name: "iPhoneDriver"),
],
settings: .settings(),
Expand Down Expand Up @@ -426,25 +427,23 @@ let project: Project = .init(
.package(url: "https://github.com/realm/realm-swift.git", from: "10.42.0"),
.package(url: "https://github.com/google/GoogleSignIn-iOS", from: "6.0.0"),
.package(url: "https://github.com/google/google-api-objectivec-client-for-rest.git", from: "3.0.0"),
.package(url: "https://github.com/apple/swift-collections.git", from: "1.0.0"),
],
settings: .settings(),
targets: targets(),
schemes: schemes + [
.init(
name: PROJECT_NAME,
buildAction: .buildAction(targets: ["\(PROJECT_NAME)"]),
testAction: .testPlans([.relativeToRoot("TestPlans/WordChecker.xctestplan")]),
runAction: .runAction(executable: "\(PROJECT_NAME)"),
profileAction: .profileAction(executable: "\(PROJECT_NAME)")
),
.init(
name: "\(PROJECT_NAME)Dev",
testAction: .testPlans([.relativeToRoot("TestPlans/WordChecker.xctestplan")]),
runAction: .runAction(executable: "\(PROJECT_NAME)Dev")
),
.init(
name: "\(PROJECT_NAME)Dev_InMemoryDB",
testAction: .testPlans([.relativeToRoot("TestPlans/WordChecker.xctestplan")]),
runAction: .runAction(
executable: "\(PROJECT_NAME)Dev",
arguments: .init(launchArguments: [
Expand All @@ -454,7 +453,6 @@ let project: Project = .init(
),
.init(
name: "\(PROJECT_NAME)Dev_SampleDB",
testAction: .testPlans([.relativeToRoot("TestPlans/WordChecker.xctestplan")]),
runAction: .runAction(
executable: "\(PROJECT_NAME)Dev",
arguments: .init(launchArguments: [
Expand All @@ -463,8 +461,8 @@ let project: Project = .init(
)
),
.init(
name: "\(PROJECT_NAME)IntergrationTests",
testAction: .testPlans([.relativeToRoot("TestPlans/WordCheckerIntergrationTests.xctestplan")])
name: "IntergrationTests",
testAction: .testPlans([.relativeToRoot("TestPlans/IntergrationTests.xctestplan")])
),
],
additionalFiles: [
Expand Down
2 changes: 1 addition & 1 deletion QA.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@

##Settings

- Source language / Translation language 변경 정상 적용
- Source language / Translation language 변경시 번역 사이트에 정상 적용 확인
- 구글 드라이브 로그인 여부에 따라 로그아웃 버튼 표시
- 매일 알림 켜고 시간 설정한 뒤 홈화면에서 알림 제대로 오는지 확인
- 매일 알림 설정 후 단어 추가/삭제/드라이브 다운로드 에 따라 알림 메세지에 단어 갯수 정상 표시 확인
Expand Down
1 change: 1 addition & 0 deletions Resources/Domain/Localization/en.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,4 @@ russian = "Russian";

daily_reminder = "Daily Reminder";
"daily_reminder_body_message_%d" = "%d words were not memorized.";
daily_reminder_body_message_when_no_words_to_memorize = "Memorized all the words. Please add more.";
1 change: 1 addition & 0 deletions Resources/Domain/Localization/ko.lproj/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,4 @@ russian = "러시아어";

daily_reminder = "매일 알림";
"daily_reminder_body_message_%d" = "외우지 못한 단어가 %d개 있습니다.";
daily_reminder_body_message_when_no_words_to_memorize = "모든 단어를 암기했습니다. 단어를 추가해주세요.";
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,8 @@ general = "General";
haptics = "Haptics";
hapticsSettingsFooterTextWhenHapticsIsOn = "Enable haptics for interactions.";
hapticsSettingsFooterTextWhenHapticsIsOff = "Disable haptics for interactions";

more_menu = "More menu";
memorize_words = "Memorize words";
next_word = "Next word";
previous_word = "Previous word";
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,8 @@ general = "일반";
haptics = "진동";
hapticsSettingsFooterTextWhenHapticsIsOn = "상호 작용에 대한 진동을 사용합니다.";
hapticsSettingsFooterTextWhenHapticsIsOff = "상호 작용에 대한 진동을 사용하지 않습니다.";

more_menu = "메뉴 더보기";
memorize_words = "단어 암기";
next_word = "다음 단어";
previous_word = "이전 단어";
28 changes: 0 additions & 28 deletions Sources/DataDriver/DI/DataDriverDevAssembly.swift

This file was deleted.

21 changes: 0 additions & 21 deletions Sources/DataDriver/DI/GoogleDriveRepositoryAssembly.swift

This file was deleted.

12 changes: 4 additions & 8 deletions Sources/Domain/DI/ExternalStoreUseCaseAssembly.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,10 @@ final class ExternalStoreUseCaseAssembly: Assembly {

func assemble(container: Container) {
container.register(ExternalStoreUseCaseProtocol.self) { resolver in
let wordRepository: WordRepositoryProtocol = resolver.resolve()
let googleDriveRepository: GoogleDriveRepositoryProtocol = resolver.resolve()
let unmemorizedWordListRepository: UnmemorizedWordListRepositoryProtocol = resolver.resolve()

return GoogleDriveUseCase.init(
wordRepository: wordRepository,
googleDriveRepository: googleDriveRepository,
unmemorizedWordListRepository: unmemorizedWordListRepository,
return ExternalStoreUseCase.init(
wordRepository: resolver.resolve(),
unmemorizedWordListRepository: resolver.resolve(),
googleDriveService: resolver.resolve(),
notificationsUseCase: resolver.resolve()
)
}
Expand Down
3 changes: 1 addition & 2 deletions Sources/Domain/DI/NotificationsUseCaseAssembly.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,13 @@
import Foundation
import Swinject
import SwinjectExtension
import UserNotifications

final class NotificationsUseCaseAssembly: Assembly {

func assemble(container: Container) {
container.register(NotificationsUseCaseProtocol.self) { resolver in
return NotificationsUseCase.init(
notificationRepository: UNUserNotificationCenter.current(),
localNotificationService: resolver.resolve(),
wordRepository: resolver.resolve(),
userSettingsRepository: resolver.resolve()
)
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,4 @@ public protocol UserSettingsRepositoryProtocol {

func getUserSettings() -> Single<UserSettings>

func updateLatestDailyReminderTime(_ time: DateComponents) throws

func getLatestDailyReminderTime() throws -> DateComponents

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,17 @@ public protocol WordRepositoryProtocol {
/// - Parameter word: 저장할 단어
func save(_ word: Word)

func getAll() -> [Word]
func getAllWords() -> [Word]

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

func delete(by uuid: UUID)
func deleteWord(by uuid: UUID)

func getUnmemorizedList() -> [Word]

func getMemorizedList() -> [Word]

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

}
38 changes: 38 additions & 0 deletions Sources/Domain/Interfaces/Services/GoogleDriveService.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
//
// GoogleDriveService.swift
// Domain
//
// Created by Jaewon Yun on 2/3/24.
// Copyright © 2024 woin2ee. All rights reserved.
//

import Foundation
import RxSwift

public protocol GoogleDriveService {

/// App data scope 를 가지고 로그인을 합니다.
func signInWithAppDataScope(presenting: PresentingConfiguration) -> Single<Void>

/// 로그아웃을 합니다.
func signOut()

/// 로그인 여부를 반환합니다.
var hasSigned: Bool { get }

/// 이전에 로그인했던 사용자를 복구합니다.
func restorePreviousSignIn() -> Single<Void>

/// App data scope 에 대한 접근 권한을 요청합니다.
func requestAppDataScopeAccess(presenting: PresentingConfiguration) -> Single<Void>

/// App data scope 에 접근 권한이 있는지 여부를 반환합니다.
var isGrantedAppDataScope: Bool { get }

/// 단어 목록을 업로드 합니다.
func uploadWordList(_ wordList: [Word]) -> Single<Void>

/// 단어 목록을 다운로드 합니다.
func downloadWordList() -> Single<[Word]>

}
Loading

0 comments on commit f412f32

Please sign in to comment.