Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

프로젝트 매니저 [STEP 2] Jusbug #314

Open
wants to merge 39 commits into
base: ic_9_jusbug2
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
d06f237
feat: 스토리보드 가로 전환, CollectionView UI 생성 및 연동
JusBug Sep 23, 2023
c292142
feat: CollectionView 커스텀셀 생성 및 연동
JusBug Sep 23, 2023
dbe8e6f
style: 파일 정리
JusBug Sep 23, 2023
d6ed629
feat: VC Navigation 등록 및 제목을 설정하는 configureTitle() 구현
JusBug Sep 23, 2023
d163f0d
feat: SecondVC로 popover 하는 didTapAddButton() 구현
JusBug Sep 25, 2023
5387839
feat: 커스텀 셀을 CollectionView에 등록하는 registerNib() 구현
JusBug Sep 25, 2023
9ebebcf
feat: UICollectionViewDelegateFlowLayout 프로토콜 채택하여, 셀의 너비와 높이 그리고 셀 간…
JusBug Sep 25, 2023
a1bd7de
feat: CollectionReusableView를 커스텀 생성하여 CollectionView 헤더에 재사용 되도록 등록
JusBug Sep 25, 2023
12bea3c
refactor: CollectionView AutoLayout 설정
JusBug Sep 25, 2023
8de0d3f
refactor: 오류 수정
JusBug Sep 26, 2023
d1e5e0d
feat: Segue를 통해 present modally 스타일로 화면전환 되도록 구현
JusBug Sep 26, 2023
d9a29df
feat: TextField, DatePicker, TextView UI 생성 및 연동
JusBug Sep 26, 2023
abaa70c
feat: titleTextField의 placeHolder 기능 구현
JusBug Sep 26, 2023
2eae03c
feat: descriptionTextView의 placeHolder 기능 구현
JusBug Sep 26, 2023
849b576
feat: datePicker AutoLayout 설정
JusBug Sep 26, 2023
58b53b0
refactor: titleTextField placeHolder 기능 수정
JusBug Sep 26, 2023
6a43d5d
feat: 다른 뷰의 영역을 터치하면 텍스트의 편집이 끝나도록 구현
JusBug Sep 26, 2023
c00e826
feat: titleTextField, descriptionTextView의 layer shadow 구현
JusBug Sep 26, 2023
2713a6d
feat: cell 클릭 시 셀의 가운데에서 up 방향으로 ActionSheet가 popover 되도록 구현
JusBug Sep 26, 2023
4c739ff
refactor: ActionSheet Title, Message를 nil로 수정
JusBug Sep 26, 2023
7a02687
feat: CoreData Model 및 Entity 생성
JusBug Sep 26, 2023
fa75868
feat: CoreDataManager 생성 및 CRUD 구현
JusBug Sep 27, 2023
add6a32
feat: SecondVC 화면에서 벗어날 때 create되고 todoCollectionView에 업데이트 되도록 구현
JusBug Oct 1, 2023
ba6f227
refactor: NotificationCenter 포스트 및 옵저버 생성
JusBug Oct 2, 2023
9d39089
feat: delete AlertAction 기능 추가
JusBug Oct 2, 2023
f41e504
feat: DateFormatManager 생성 및 datePicker 값을 가져와 durationLabel에 출력
JusBug Oct 2, 2023
8ac0065
refactor: 각 collectionView의 헤더 타이틀을 분기 처리하여 표시
JusBug Oct 2, 2023
b1665e7
refactor: 마지막 셀의 ActionSheet은 화면에 가려져서 화살표 방향을 down으로 지정
JusBug Oct 3, 2023
5893e1d
feat: todo, doing, done을 따로 관리할 배열을 생성하여 아이템을 관리할 수 있도록 구현
JusBug Oct 3, 2023
0a8e680
refactor: CollecitonView에 따른 AlertAction 메서드 구현 및 분기처리
JusBug Oct 3, 2023
94bda6b
refactor: 줄 개행 수정
JusBug Oct 3, 2023
566db1f
refactor: alertActionForMove()와 alertActionForDelete() 일부 수정
JusBug Oct 3, 2023
afe3a9c
feat: DateFormatter의 Locale 설정
JusBug Oct 3, 2023
9971743
refactor: todo, doingCollectionView에서 지난 날짜일 경우에만 durationLabel.textC…
JusBug Oct 3, 2023
841a7fa
feat: 각 셀의 개수만큼 헤더 레이블에 수량 표시
JusBug Oct 3, 2023
7b5ea52
refactor: status에 따른 팝오버 메뉴 수정
JusBug Oct 3, 2023
87ed7c5
feat: 셀을 길게 눌렀을 때를 감지하는 UILongPressGestureRecoginzer를 이용한 메서드 구현
JusBug Oct 4, 2023
d54ad48
feat: 셀을 길게 눌렀을 때 컬렉션 뷰에 따라 다른 메뉴의 AlertSheet popover되는 handleLongPre…
JusBug Oct 4, 2023
6bc8449
refactor: 중복된 if 조건문 수정
JusBug Oct 5, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions ProjectManager/CoreDataManager.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
//
// CoreDataManager.swift
// ProjectManager
//
// Created by Jusbug on 2023/09/27.
//

import UIKit

final class CoreDataManager {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

프로토콜로 지금 하는 crud역할을 나눈다면 어떤 모양이 될까요 ?


static var shared: CoreDataManager = CoreDataManager()
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

추후에 변경될 여지가 있나요 ?

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
var entities: [Entity] = []

func saveToContext() {
do {
try context.save()
} catch {
print(error.localizedDescription)
}
}

func createEntity(title: String, body: String, duration: Date, status: Status) {
let newEntity = Entity(context: context)
newEntity.title = title
newEntity.body = body
newEntity.duration = duration
newEntity.status = status.rawValue

saveToContext()
getAllEntity()
}

func getAllEntity() {
do {
entities = try context.fetch(Entity.fetchRequest())
} catch {
print(error.localizedDescription)
}
}

func updateEntity(entity: Entity, newTitle: String, newBody: String, newDuration: Date) {
entity.title = newTitle
entity.body = newBody
entity.duration = newDuration

saveToContext()
}

func deleteEntity(entity: Entity) {
context.delete(entity)

saveToContext()
}
}
15 changes: 15 additions & 0 deletions ProjectManager/Entity+CoreDataClass.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//
// Entity+CoreDataClass.swift
// ProjectManager
//
// Created by Jusbug on 2023/09/26.
//
//

import Foundation
import CoreData

@objc(Entity)
public class Entity: NSManagedObject {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Entity라는 이름을 모델이름으로 사용하실건가요 ?


}
28 changes: 28 additions & 0 deletions ProjectManager/Entity+CoreDataProperties.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
//
// Entity+CoreDataProperties.swift
// ProjectManager
//
// Created by Jusbug on 2023/09/26.
//
//

import Foundation
import CoreData


extension Entity {

@nonobjc public class func fetchRequest() -> NSFetchRequest<Entity> {
return NSFetchRequest<Entity>(entityName: "Entity")
}

@NSManaged public var duration: Date?
@NSManaged public var title: String?
@NSManaged public var body: String?
@NSManaged public var status: String?

}

extension Entity : Identifiable {

}
131 changes: 122 additions & 9 deletions ProjectManager/ProjectManager.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,43 @@
/* Begin PBXBuildFile section */
C7431F0625F51E1D0094C4CF /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7431F0525F51E1D0094C4CF /* AppDelegate.swift */; };
C7431F0825F51E1D0094C4CF /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7431F0725F51E1D0094C4CF /* SceneDelegate.swift */; };
C7431F0A25F51E1D0094C4CF /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7431F0925F51E1D0094C4CF /* ViewController.swift */; };
C7431F0A25F51E1D0094C4CF /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7431F0925F51E1D0094C4CF /* MainViewController.swift */; };
C7431F0D25F51E1D0094C4CF /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C7431F0B25F51E1D0094C4CF /* Main.storyboard */; };
C7431F0F25F51E1E0094C4CF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C7431F0E25F51E1E0094C4CF /* Assets.xcassets */; };
C7431F1225F51E1E0094C4CF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C7431F1025F51E1E0094C4CF /* LaunchScreen.storyboard */; };
D0293F532ACAB3CE00505749 /* DateFormatManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0293F522ACAB3CE00505749 /* DateFormatManager.swift */; };
D0293F5A2ACBAA2B00505749 /* Status.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0293F592ACBAA2B00505749 /* Status.swift */; };
D06DA8E52AC2BA9F00314499 /* Todo.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = D06DA8E32AC2BA9F00314499 /* Todo.xcdatamodeld */; };
D06DA8E82AC2BB0D00314499 /* Entity+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06DA8E62AC2BB0D00314499 /* Entity+CoreDataClass.swift */; };
D06DA8E92AC2BB0D00314499 /* Entity+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06DA8E72AC2BB0D00314499 /* Entity+CoreDataProperties.swift */; };
D06DA8EB2AC3B87200314499 /* CoreDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06DA8EA2AC3B87200314499 /* CoreDataManager.swift */; };
D09389A92AC20FC5008A8304 /* CollectionReusableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D09389A72AC20FC5008A8304 /* CollectionReusableView.swift */; };
D09389AA2AC20FC5008A8304 /* CollectionReusableView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D09389A82AC20FC5008A8304 /* CollectionReusableView.xib */; };
D0CED7782ABEAB570081ABE2 /* CollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CED7762ABEAB570081ABE2 /* CollectionViewCell.swift */; };
D0CED7792ABEAB570081ABE2 /* CollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D0CED7772ABEAB570081ABE2 /* CollectionViewCell.xib */; };
D0CED7812ABEB18D0081ABE2 /* SecondViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CED7802ABEB18D0081ABE2 /* SecondViewController.swift */; };
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
C7431F0225F51E1D0094C4CF /* ProjectManager.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ProjectManager.app; sourceTree = BUILT_PRODUCTS_DIR; };
C7431F0525F51E1D0094C4CF /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
C7431F0725F51E1D0094C4CF /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
C7431F0925F51E1D0094C4CF /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
C7431F0925F51E1D0094C4CF /* MainViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = "<group>"; };
C7431F0C25F51E1D0094C4CF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
C7431F0E25F51E1E0094C4CF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
C7431F1125F51E1E0094C4CF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
C7431F1325F51E1E0094C4CF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
D0293F522ACAB3CE00505749 /* DateFormatManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateFormatManager.swift; sourceTree = "<group>"; };
D0293F592ACBAA2B00505749 /* Status.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Status.swift; sourceTree = "<group>"; };
D06DA8E42AC2BA9F00314499 /* Todo.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Todo.xcdatamodel; sourceTree = "<group>"; };
D06DA8E62AC2BB0D00314499 /* Entity+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Entity+CoreDataClass.swift"; sourceTree = "<group>"; };
D06DA8E72AC2BB0D00314499 /* Entity+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Entity+CoreDataProperties.swift"; sourceTree = "<group>"; };
D06DA8EA2AC3B87200314499 /* CoreDataManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreDataManager.swift; sourceTree = SOURCE_ROOT; };
D09389A72AC20FC5008A8304 /* CollectionReusableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CollectionReusableView.swift; sourceTree = "<group>"; };
D09389A82AC20FC5008A8304 /* CollectionReusableView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CollectionReusableView.xib; sourceTree = "<group>"; };
D0CED7762ABEAB570081ABE2 /* CollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CollectionViewCell.swift; sourceTree = "<group>"; };
D0CED7772ABEAB570081ABE2 /* CollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CollectionViewCell.xib; sourceTree = "<group>"; };
D0CED7802ABEB18D0081ABE2 /* SecondViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecondViewController.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand All @@ -40,6 +62,8 @@
C7431EF925F51E1D0094C4CF = {
isa = PBXGroup;
children = (
D06DA8E62AC2BB0D00314499 /* Entity+CoreDataClass.swift */,
D06DA8E72AC2BB0D00314499 /* Entity+CoreDataProperties.swift */,
C7431F0425F51E1D0094C4CF /* ProjectManager */,
C7431F0325F51E1D0094C4CF /* Products */,
);
Expand All @@ -54,17 +78,82 @@
sourceTree = "<group>";
};
C7431F0425F51E1D0094C4CF /* ProjectManager */ = {
isa = PBXGroup;
children = (
D0293F582ACBAA1D00505749 /* Enum */,
D0CED77F2ABEAEAC0081ABE2 /* Resources */,
D0CED77E2ABEAE800081ABE2 /* Application */,
D0CED77D2ABEAE600081ABE2 /* Controllers */,
D0CED77C2ABEAE520081ABE2 /* ViewModels */,
D0CED77B2ABEAE400081ABE2 /* Views */,
D0CED77A2ABEAE3A0081ABE2 /* Models */,
);
path = ProjectManager;
sourceTree = "<group>";
};
D0293F582ACBAA1D00505749 /* Enum */ = {
isa = PBXGroup;
children = (
D0293F592ACBAA2B00505749 /* Status.swift */,
);
path = Enum;
sourceTree = "<group>";
};
D0CED77A2ABEAE3A0081ABE2 /* Models */ = {
isa = PBXGroup;
children = (
D06DA8EA2AC3B87200314499 /* CoreDataManager.swift */,
);
path = Models;
sourceTree = "<group>";
};
D0CED77B2ABEAE400081ABE2 /* Views */ = {
isa = PBXGroup;
children = (
C7431F0B25F51E1D0094C4CF /* Main.storyboard */,
C7431F1025F51E1E0094C4CF /* LaunchScreen.storyboard */,
D0CED7772ABEAB570081ABE2 /* CollectionViewCell.xib */,
D09389A82AC20FC5008A8304 /* CollectionReusableView.xib */,
);
path = Views;
sourceTree = "<group>";
};
D0CED77C2ABEAE520081ABE2 /* ViewModels */ = {
isa = PBXGroup;
children = (
D0CED7762ABEAB570081ABE2 /* CollectionViewCell.swift */,
D09389A72AC20FC5008A8304 /* CollectionReusableView.swift */,
D0293F522ACAB3CE00505749 /* DateFormatManager.swift */,
);
path = ViewModels;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

뷰모델이 CollectionViewCell,CollectionReusableView,DateFormatManager가 맞나요 ?

sourceTree = "<group>";
};
D0CED77D2ABEAE600081ABE2 /* Controllers */ = {
isa = PBXGroup;
children = (
C7431F0925F51E1D0094C4CF /* MainViewController.swift */,
D0CED7802ABEB18D0081ABE2 /* SecondViewController.swift */,
);
path = Controllers;
sourceTree = "<group>";
};
D0CED77E2ABEAE800081ABE2 /* Application */ = {
isa = PBXGroup;
children = (
C7431F0525F51E1D0094C4CF /* AppDelegate.swift */,
C7431F0725F51E1D0094C4CF /* SceneDelegate.swift */,
C7431F0925F51E1D0094C4CF /* ViewController.swift */,
C7431F0B25F51E1D0094C4CF /* Main.storyboard */,
);
path = Application;
sourceTree = "<group>";
};
D0CED77F2ABEAEAC0081ABE2 /* Resources */ = {
isa = PBXGroup;
children = (
C7431F0E25F51E1E0094C4CF /* Assets.xcassets */,
C7431F1025F51E1E0094C4CF /* LaunchScreen.storyboard */,
C7431F1325F51E1E0094C4CF /* Info.plist */,
D06DA8E32AC2BA9F00314499 /* Todo.xcdatamodeld */,
);
path = ProjectManager;
path = Resources;
sourceTree = "<group>";
};
/* End PBXGroup section */
Expand Down Expand Up @@ -124,8 +213,10 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
D09389AA2AC20FC5008A8304 /* CollectionReusableView.xib in Resources */,
C7431F1225F51E1E0094C4CF /* LaunchScreen.storyboard in Resources */,
C7431F0F25F51E1E0094C4CF /* Assets.xcassets in Resources */,
D0CED7792ABEAB570081ABE2 /* CollectionViewCell.xib in Resources */,
C7431F0D25F51E1D0094C4CF /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand All @@ -137,9 +228,18 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
C7431F0A25F51E1D0094C4CF /* ViewController.swift in Sources */,
C7431F0A25F51E1D0094C4CF /* MainViewController.swift in Sources */,
D06DA8E52AC2BA9F00314499 /* Todo.xcdatamodeld in Sources */,
C7431F0625F51E1D0094C4CF /* AppDelegate.swift in Sources */,
D06DA8E92AC2BB0D00314499 /* Entity+CoreDataProperties.swift in Sources */,
D0CED7782ABEAB570081ABE2 /* CollectionViewCell.swift in Sources */,
D0293F532ACAB3CE00505749 /* DateFormatManager.swift in Sources */,
D09389A92AC20FC5008A8304 /* CollectionReusableView.swift in Sources */,
D0CED7812ABEB18D0081ABE2 /* SecondViewController.swift in Sources */,
D06DA8E82AC2BB0D00314499 /* Entity+CoreDataClass.swift in Sources */,
D06DA8EB2AC3B87200314499 /* CoreDataManager.swift in Sources */,
C7431F0825F51E1D0094C4CF /* SceneDelegate.swift in Sources */,
D0293F5A2ACBAA2B00505749 /* Status.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -287,7 +387,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
INFOPLIST_FILE = ProjectManager/Info.plist;
INFOPLIST_FILE = ProjectManager/Resources/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 14.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
Expand All @@ -306,7 +406,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
INFOPLIST_FILE = ProjectManager/Info.plist;
INFOPLIST_FILE = ProjectManager/Resources/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 14.1;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
Expand Down Expand Up @@ -341,6 +441,19 @@
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */

/* Begin XCVersionGroup section */
D06DA8E32AC2BA9F00314499 /* Todo.xcdatamodeld */ = {
isa = XCVersionGroup;
children = (
D06DA8E42AC2BA9F00314499 /* Todo.xcdatamodel */,
);
currentVersion = D06DA8E42AC2BA9F00314499 /* Todo.xcdatamodel */;
path = Todo.xcdatamodeld;
sourceTree = "<group>";
versionGroupType = wrapper.xcdatamodel;
};
/* End XCVersionGroup section */
};
rootObject = C7431EFA25F51E1D0094C4CF /* Project object */;
}
35 changes: 0 additions & 35 deletions ProjectManager/ProjectManager/AppDelegate.swift

This file was deleted.

Loading