Skip to content

Commit d202595

Browse files
authored
Merge pull request #3 from easydev991/develop
Данные приложения, резервная копия
2 parents 9cc93e7 + 1f6c782 commit d202595

File tree

14 files changed

+317
-52
lines changed

14 files changed

+317
-52
lines changed

Privacy policy.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@
2929
Вы полностью контролируете свои записи:
3030

3131
- Создавайте, редактируйте, удаляйте или сортируйте события вручную
32-
- Удаляйте все данные сразу через функцию «Удалить все записи».
32+
- Создавайте резервные копии данных / восстановливайте данные из ранее созданной резервной копии
33+
- Удаляйте все данные сразу
3334

3435
# 5. Безопасность данных
3536

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
1. Создавать/изменять/сортировать/удалять записи
77
2. Посмотреть, сколько дней назад произошло записанное событие
88
3. Отправить обратную связь о приложении
9-
4. Удалить все записи разом, если нужно
9+
4. Создать резервную копию/восстановить данные из резервной копии
10+
5. Удалить все записи разом, если нужно
1011

1112
## Скриншоты
1213
### iPhone

SwiftUI-Days.xcodeproj/project.pbxproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,7 @@
531531
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
532532
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
533533
MACOSX_DEPLOYMENT_TARGET = 14.0;
534-
MARKETING_VERSION = 1.1;
534+
MARKETING_VERSION = 1.2;
535535
PRODUCT_BUNDLE_IDENTIFIER = "com.oleg991.SwiftUI-Days";
536536
PRODUCT_NAME = "$(TARGET_NAME)";
537537
SDKROOT = auto;
@@ -576,7 +576,7 @@
576576
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
577577
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
578578
MACOSX_DEPLOYMENT_TARGET = 14.0;
579-
MARKETING_VERSION = 1.1;
579+
MARKETING_VERSION = 1.2;
580580
PRODUCT_BUNDLE_IDENTIFIER = "com.oleg991.SwiftUI-Days";
581581
PRODUCT_NAME = "$(TARGET_NAME)";
582582
SDKROOT = auto;
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
//
2+
// BackupFileDocument.swift
3+
// SwiftUI-Days
4+
//
5+
// Created by Oleg991 on 06.04.2025.
6+
//
7+
8+
import SwiftUI
9+
import UniformTypeIdentifiers
10+
11+
struct BackupFileDocument: FileDocument {
12+
static var readableContentTypes: [UTType] { [.json] }
13+
static var writableContentTypes: [UTType] { [.json] }
14+
static func makeBackupItem(with item: Item) -> BackupItem {
15+
.init(title: item.title, details: item.details, timestamp: item.timestamp)
16+
}
17+
18+
let items: [BackupItem]
19+
20+
init(items: [BackupItem]) {
21+
self.items = items
22+
}
23+
24+
init(configuration: ReadConfiguration) throws {
25+
guard let data = configuration.file.regularFileContents else {
26+
throw CocoaError(.fileReadCorruptFile)
27+
}
28+
items = try JSONDecoder().decode([BackupItem].self, from: data)
29+
}
30+
31+
func fileWrapper(configuration: WriteConfiguration) throws -> FileWrapper {
32+
let data = try JSONEncoder().encode(items)
33+
return FileWrapper(regularFileWithContents: data)
34+
}
35+
}
36+
37+
extension BackupFileDocument {
38+
struct BackupItem: Codable {
39+
let title: String
40+
let details: String
41+
let timestamp: Date
42+
43+
var realItem: Item {
44+
.init(title: title, details: details, timestamp: timestamp)
45+
}
46+
}
47+
}

SwiftUI-Days/Screens/Detail/EditItemScreen.swift renamed to SwiftUI-Days/Screens/Main/Detail/EditItemScreen.swift

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -97,19 +97,14 @@ struct EditItemScreen: View {
9797
}
9898

9999
private func save() {
100-
if let oldItem {
101-
oldItem.title = title
102-
oldItem.details = details
103-
oldItem.timestamp = timestamp
104-
} else {
105-
let item = Item(title: title, details: details, timestamp: timestamp)
106-
modelContext.insert(item)
107-
}
108-
do {
109-
try modelContext.save()
110-
} catch {
111-
assertionFailure(error.localizedDescription)
100+
guard let oldItem else {
101+
let newItem = Item(title: title, details: details, timestamp: timestamp)
102+
modelContext.insert(newItem)
103+
return
112104
}
105+
oldItem.title = title
106+
oldItem.details = details
107+
oldItem.timestamp = timestamp
113108
}
114109
}
115110

SwiftUI-Days/Screens/Main/MainScreen+ListView.swift

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,6 @@ extension MainScreen {
3636
.swipeActions {
3737
DaysDeleteButton {
3838
modelContext.delete(item)
39-
do {
40-
try modelContext.save()
41-
} catch {
42-
assertionFailure(error.localizedDescription)
43-
}
4439
}
4540
DaysEditButton { editItem = item }
4641
}

0 commit comments

Comments
 (0)