diff --git a/ByeBoo-iOS/ByeBoo-iOS.xcodeproj/project.pbxproj b/ByeBoo-iOS/ByeBoo-iOS.xcodeproj/project.pbxproj index 23f8f4ef..4fcdf4cf 100644 --- a/ByeBoo-iOS/ByeBoo-iOS.xcodeproj/project.pbxproj +++ b/ByeBoo-iOS/ByeBoo-iOS.xcodeproj/project.pbxproj @@ -348,7 +348,8 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = "ByeBoo-iOS/ByeBoo-Prod.entitlements"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 6; DEVELOPMENT_TEAM = ""; @@ -371,7 +372,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.heartz.ByeBoo-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match Development com.heartz.ByeBoo-iOS"; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match AppStore com.heartz.ByeBoo-iOS"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; diff --git a/ByeBoo-iOS/ByeBoo-iOS/Presentation/Common/Modal/ConfirmModalView.swift b/ByeBoo-iOS/ByeBoo-iOS/Presentation/Common/Modal/ConfirmModalView.swift index 37528a85..b747f1c2 100644 --- a/ByeBoo-iOS/ByeBoo-iOS/Presentation/Common/Modal/ConfirmModalView.swift +++ b/ByeBoo-iOS/ByeBoo-iOS/Presentation/Common/Modal/ConfirmModalView.swift @@ -10,22 +10,25 @@ import UIKit enum ConfirmModalType { case logout case withdraw + case block var title: String { switch self { case .logout: - return "로그아웃하시겠어요?" + "로그아웃하시겠어요?" case .withdraw: - return "정말 탈퇴하시겠어요?" + "정말 탈퇴하시겠어요?" + case .block: + "차단을 해제하시겠어요?" } } var description: String? { switch self { - case .logout: - return nil + case .logout, .block: + nil case .withdraw: - return "탈퇴 시 모든 데이터가 삭제됩니다." + "탈퇴 시 모든 데이터가 삭제됩니다." } } } diff --git a/ByeBoo-iOS/ByeBoo-iOS/Presentation/Enum/ExternalLink.swift b/ByeBoo-iOS/ByeBoo-iOS/Presentation/Enum/ExternalLink.swift index 53d6a46f..ba51b345 100644 --- a/ByeBoo-iOS/ByeBoo-iOS/Presentation/Enum/ExternalLink.swift +++ b/ByeBoo-iOS/ByeBoo-iOS/Presentation/Enum/ExternalLink.swift @@ -14,6 +14,8 @@ enum ExternalLink: String { case makeService = "https://forms.gle/BA77gAgZ1NCatart5" case serviceTerm = "https://lively-mars-3b7.notion.site/24cab823e68d801aac95ec5d0389d192" case privacyPolicy = "https://lively-mars-3b7.notion.site/24cab823e68d80a19ab1fbf87d6cfbc3" + case openChattingRoom = "https://open.kakao.com/o/p74inNhi" + case instagram = "https://www.instagram.com/byeboo.official" func openURL(for rootViewController: UIViewController) { guard let url = URL(string: self.rawValue) else { diff --git a/ByeBoo-iOS/ByeBoo-iOS/Presentation/Enum/MyPageFeatureType.swift b/ByeBoo-iOS/ByeBoo-iOS/Presentation/Enum/MyPageFeatureType.swift index df16ab97..5f8f7933 100644 --- a/ByeBoo-iOS/ByeBoo-iOS/Presentation/Enum/MyPageFeatureType.swift +++ b/ByeBoo-iOS/ByeBoo-iOS/Presentation/Enum/MyPageFeatureType.swift @@ -11,6 +11,8 @@ enum MyPageFeatureType: String { case inquire = "문의하기" case notice = "알림" + case participant = "참여하기" + case manage = "관리" case termAndPolicy = "약관 및 정책" case account = "계정" @@ -20,6 +22,10 @@ enum MyPageFeatureType: String { return [.inquireByeBoo, .makeService] case .notice: return [.questOpenNotice] + case .participant: + return [.chattingRoom, .instagram] + case .manage: + return [.blockUserList] case .termAndPolicy: return [.privacyPolicy, .serviceTerm] case .account: @@ -33,6 +39,9 @@ enum MyPageDetailFeatureType: String { case inquireByeBoo = "바이부에 문의하기" case makeService = "바이부와 함께 서비스 만들기" case questOpenNotice = "퀘스트 오픈 알림" + case chattingRoom = "이별 극복 소통방" + case instagram = "공식 인스타그램" + case blockUserList = "차단 사용자 목록" case privacyPolicy = "개인정보 처리 방침" case serviceTerm = "서비스 이용 약관" case logout = "로그아웃" diff --git a/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/View/BlockedUserCell.swift b/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/View/BlockedUserCell.swift new file mode 100644 index 00000000..7b5e0b8b --- /dev/null +++ b/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/View/BlockedUserCell.swift @@ -0,0 +1,77 @@ +// +// BlockUserListView.swift +// ByeBoo-iOS +// +// Created by APPLE on 2/22/26. +// + +import UIKit + +final class BlockedUserCell: UITableViewCell { + + private let userNameLabel = UILabel() + private(set) var clearButton = UIButton() + + override init( + style: UITableViewCell.CellStyle, + reuseIdentifier: String? + ) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + + setStyle() + setUI() + setLayout() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setStyle() { + self.do { + $0.backgroundColor = .grayscale900 + $0.selectionStyle = .none + } + userNameLabel.applyByeBooFont( + style: .body2M16, + color: .grayscale100 + ) + clearButton.do { + $0.setTitle("해제", for: .normal) + $0.applyByeBooFont(style: .cap1M12, color: .grayscale100) + $0.backgroundColor = UIColor.white.withAlphaComponent(0.05) + $0.layer.borderWidth = 1 + $0.layer.borderColor = UIColor.grayscale800.cgColor + $0.layer.cornerRadius = 12 + } + } + + private func setUI() { + contentView.addSubviews( + userNameLabel, + clearButton + ) + } + + private func setLayout() { + userNameLabel.snp.makeConstraints { + $0.leading.equalToSuperview().inset(24.adjustedW) + $0.verticalEdges.equalToSuperview() + $0.centerY.equalToSuperview() + } + clearButton.snp.makeConstraints { + $0.trailing.equalToSuperview().inset(24.adjustedW) + $0.verticalEdges.equalToSuperview() + $0.centerY.equalTo(userNameLabel.snp.centerY) + $0.width.equalTo(56.adjustedW) + $0.height.equalTo(24.adjustedH) + } + } +} + +extension BlockedUserCell { + + func bind(userName: String) { + userNameLabel.text = userName + } +} diff --git a/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/View/BlockedUserListView.swift b/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/View/BlockedUserListView.swift new file mode 100644 index 00000000..b1a1f2f2 --- /dev/null +++ b/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/View/BlockedUserListView.swift @@ -0,0 +1,34 @@ +// +// BlockUserListView.swift +// ByeBoo-iOS +// +// Created by APPLE on 2/22/26. +// + +import UIKit + +final class BlockedUserListView: BaseView { + + private(set) var userTableView = UITableView() + + override func setStyle() { + self.do { + $0.backgroundColor = .grayscale900 + } + userTableView.do { + $0.backgroundColor = .grayscale900 + } + } + + override func setUI() { + addSubview(userTableView) + } + + override func setLayout() { + userTableView.snp.makeConstraints { + $0.top.equalToSuperview().inset(12.adjustedH) + $0.horizontalEdges.equalToSuperview() + $0.bottom.equalToSuperview().inset(24.adjustedH) + } + } +} diff --git a/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/View/MyPageFeatureView.swift b/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/View/MyPageFeatureView.swift index f1128399..6ccdab78 100644 --- a/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/View/MyPageFeatureView.swift +++ b/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/View/MyPageFeatureView.swift @@ -14,11 +14,11 @@ final class MyPageFeatureView: BaseView { private(set) var featureButtons: [UIButton] = [] private(set) var noticeSwitch = UISwitch() - init(title: String, features: [MyPageDetailFeatureType]) { - titleLabel.text = title + init(type: MyPageFeatureType) { + titleLabel.text = type.rawValue super.init(frame: .zero) - setFeatures(features) + setFeatures(type.features) } required init?(coder: NSCoder) { diff --git a/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/View/MyPageFeaturesView.swift b/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/View/MyPageFeaturesView.swift new file mode 100644 index 00000000..c3620704 --- /dev/null +++ b/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/View/MyPageFeaturesView.swift @@ -0,0 +1,57 @@ +// +// MyPageFeaturesView.swift +// ByeBoo-iOS +// +// Created by APPLE on 2/25/26. +// + +import UIKit + +final class MyPageFeaturesView: BaseView { + + private(set) var inquireView = MyPageFeatureView(type: .inquire) + private(set) var noticeView = MyPageFeatureView(type: .notice) + private(set) var participantView = MyPageFeatureView(type: .participant) + private(set) var manageView = MyPageFeatureView(type: .manage) + private(set) var termAndPolicyView = MyPageFeatureView(type: .termAndPolicy) + private(set) var accountView = MyPageFeatureView(type: .account) + + override func setUI() { + addSubviews( + inquireView, + noticeView, + participantView, + manageView, + termAndPolicyView, + accountView + ) + } + + override func setLayout() { + inquireView.snp.makeConstraints { + $0.top.equalToSuperview() + $0.horizontalEdges.equalToSuperview() + } + noticeView.snp.makeConstraints { + $0.top.equalTo(inquireView.snp.bottom) + $0.horizontalEdges.equalToSuperview() + } + participantView.snp.makeConstraints { + $0.top.equalTo(noticeView.snp.bottom) + $0.horizontalEdges.equalToSuperview() + } + manageView.snp.makeConstraints { + $0.top.equalTo(participantView.snp.bottom) + $0.horizontalEdges.equalToSuperview() + } + termAndPolicyView.snp.makeConstraints { + $0.top.equalTo(manageView.snp.bottom) + $0.horizontalEdges.equalToSuperview() + } + accountView.snp.makeConstraints { + $0.top.equalTo(termAndPolicyView.snp.bottom) + $0.horizontalEdges.equalToSuperview() + $0.bottom.equalToSuperview() + } + } +} diff --git a/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/View/MyPageView.swift b/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/View/MyPageView.swift index 5dc586fd..b1906b31 100644 --- a/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/View/MyPageView.swift +++ b/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/View/MyPageView.swift @@ -20,22 +20,7 @@ final class MyPageView: BaseView { private(set) var myRecordView = MyRecordView() private(set) var worldView = ByeBooUniverseView() private let divider2 = SectionDividerView() - private(set) var inquireView = MyPageFeatureView( - title: MyPageFeatureType.inquire.rawValue, - features: MyPageFeatureType.inquire.features - ) - private(set) var noticeView = MyPageFeatureView( - title: MyPageFeatureType.notice.rawValue, - features: MyPageFeatureType.notice.features - ) - private(set) var termAndPolicyView = MyPageFeatureView( - title: MyPageFeatureType.termAndPolicy.rawValue, - features: MyPageFeatureType.termAndPolicy.features - ) - private(set) var accountView = MyPageFeatureView( - title: MyPageFeatureType.account.rawValue, - features: MyPageFeatureType.account.features - ) + private(set) var featuresView = MyPageFeaturesView() override func setStyle() { backgroundColor = .grayscale900 @@ -53,10 +38,7 @@ final class MyPageView: BaseView { myRecordView, worldView, divider2, - inquireView, - noticeView, - termAndPolicyView, - accountView + featuresView ) nameView.addSubview(moveButton) } @@ -95,21 +77,9 @@ final class MyPageView: BaseView { $0.top.equalTo(worldView.snp.bottom).offset(8.adjustedH) $0.horizontalEdges.equalToSuperview().inset(24.adjustedW) } - inquireView.snp.makeConstraints { + featuresView.snp.makeConstraints { $0.top.equalTo(divider2.snp.bottom).offset(8.adjustedH) $0.horizontalEdges.equalToSuperview() - } - noticeView.snp.makeConstraints { - $0.top.equalTo(inquireView.snp.bottom) - $0.horizontalEdges.equalToSuperview() - } - termAndPolicyView.snp.makeConstraints { - $0.top.equalTo(noticeView.snp.bottom) - $0.horizontalEdges.equalToSuperview() - } - accountView.snp.makeConstraints { - $0.top.equalTo(termAndPolicyView.snp.bottom) - $0.horizontalEdges.equalToSuperview() $0.bottom.equalToSuperview().inset(24.5.adjustedH) } } diff --git a/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/ViewController/BlockedkUserListViewController.swift b/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/ViewController/BlockedkUserListViewController.swift new file mode 100644 index 00000000..d4213698 --- /dev/null +++ b/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/ViewController/BlockedkUserListViewController.swift @@ -0,0 +1,139 @@ +// +// BlockedkUserListViewController.swift +// ByeBoo-iOS +// +// Created by APPLE on 2/22/26. +// + +import UIKit + +final class BlockedkUserListViewController: BaseViewController { + + private let rootView = BlockedUserListView() + private let viewModel: BlockedUserListViewModel + + init(viewModel: BlockedUserListViewModel) { + self.viewModel = viewModel + super.init(nibName: nil, bundle: nil) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func loadView() { + view = rootView + } + + override func viewDidLoad() { + super.viewDidLoad() + + viewModel.getBlockedUsers() + ByeBooNavigationBar.makeNavigationBar( + navigationItem: self.navigationItem, + navigationController: self.navigationController, + type: .titleAndBack("차단 사용자 목록", header: .black), + action: #selector(back) + ) + } + + override func setDelegate() { + rootView.userTableView.do { + $0.delegate = self + $0.dataSource = self + $0.register( + BlockedUserCell.self, + forCellReuseIdentifier: BlockedUserCell.identifier + ) + } + } +} + +extension BlockedkUserListViewController: BackNavigable { + + func back() { + self.navigationController?.popViewController(animated: false) + } +} + +extension BlockedkUserListViewController: UITableViewDelegate { + + func tableView( + _ tableView: UITableView, + heightForHeaderInSection section: Int + ) -> CGFloat { + 0 + } + + func tableView( + _ tableView: UITableView, + viewForHeaderInSection section: Int + ) -> UIView? { + let headerView = UIView() + headerView.backgroundColor = .clear + return headerView + } +} + +extension BlockedkUserListViewController: UITableViewDataSource { + + func numberOfSections(in tableView: UITableView) -> Int { + viewModel.blockedUsersCount + } + + func tableView( + _ tableView: UITableView, + numberOfRowsInSection section: Int + ) -> Int { + 1 + } + + func tableView( + _ tableView: UITableView, + cellForRowAt indexPath: IndexPath + ) -> UITableViewCell { + // TO-DO : extension 메서드로 수정 + guard let cell = tableView.dequeueReusableCell( + withIdentifier: BlockedUserCell.identifier, + for: indexPath + ) as? BlockedUserCell else { + return UITableViewCell() + } + + guard let userName = viewModel.getBlockedUserName(at: indexPath.section) else { + return UITableViewCell() + } + + cell.bind(userName: userName) + cell.clearButton.addTarget( + self, + action: #selector(clearButtonDidTap), + for: .touchUpInside + ) + return cell + } + + @objc + private func clearButtonDidTap() { + let dismissButton = ByeBooButton( + titleText: "아니오", + type: .outline + ) + let actionButton = ByeBooButton( + titleText: "예", + type: .enabled + ) + let modal = ConfirmModalView( + modalType: .block, + dismissButton: dismissButton, + actionButton: actionButton + ) + let action: (() -> Void) = {} + + ModalBuilder( + modalView: modal, + action: action, + rootViewController: self + ).present() + } +} diff --git a/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/ViewController/MyPageViewController.swift b/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/ViewController/MyPageViewController.swift index df69c7e5..e888088e 100644 --- a/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/ViewController/MyPageViewController.swift +++ b/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/ViewController/MyPageViewController.swift @@ -17,7 +17,7 @@ final class MyPageViewController: BaseViewController { private var name: String? private let rootView = MyPageView() - private lazy var beforeNotificationStatus = rootView.noticeView.noticeSwitch.isOn + private lazy var beforeNotificationStatus = rootView.featuresView.noticeView.noticeSwitch.isOn private var didOpenSetting = false init(viewModel: MyPageViewModel) { @@ -38,7 +38,6 @@ final class MyPageViewController: BaseViewController { viewModel.action(.viewWillAppear) viewModel.action(.checkHasEnterMyPage) - rootView.scrollView.setContentOffset(CGPoint(x: 0, y: 0), animated: false) } override func viewDidLoad() { @@ -67,12 +66,22 @@ final class MyPageViewController: BaseViewController { action: #selector(moveButtonDidTap), for: .touchUpInside ) - [rootView.inquireView, rootView.termAndPolicyView, rootView.accountView].forEach { + + let featuresView = rootView.featuresView + + [ + featuresView.inquireView, + featuresView.termAndPolicyView, + featuresView.accountView, + featuresView.participantView, + featuresView.manageView + ].forEach { $0.featureButtons.forEach { $0.addTarget(self, action: #selector(featureButtonDidTap(_:)), for: .touchUpInside) } } - rootView.noticeView.noticeSwitch.addTarget( + + featuresView.noticeView.noticeSwitch.addTarget( self, action: #selector(noticeSwitchValueChanged(_:)), for: .valueChanged @@ -161,7 +170,7 @@ extension MyPageViewController { case .success(let alarmEnabled): self?.beforeNotificationStatus = alarmEnabled DispatchQueue.main.async { - self?.rootView.noticeView.noticeSwitch.setOn(alarmEnabled, animated: false) + self?.rootView.featuresView.noticeView.noticeSwitch.setOn(alarmEnabled, animated: false) } case .failure(let error): ByeBooLogger.error(error) @@ -176,7 +185,7 @@ extension MyPageViewController { switch result { case .success(let hasEnter): if !hasEnter { - self?.rootView.noticeView.noticeSwitch.setOn(false, animated: false) + self?.rootView.featuresView.noticeView.noticeSwitch.setOn(false, animated: false) return } self?.viewModel.action(.checkAlarmEnabled) @@ -192,7 +201,7 @@ extension MyPageViewController { .sink { [weak self] result in switch result { case .success(let alarmEnabled): - self?.rootView.noticeView.noticeSwitch.setOn(alarmEnabled, animated: true) + self?.rootView.featuresView.noticeView.noticeSwitch.setOn(alarmEnabled, animated: true) case .failure(let error) : ByeBooLogger.error(error) } @@ -222,7 +231,7 @@ extension MyPageViewController { viewModel.action(.notificationSwitchDidTap) } else if !isAuthorized { DispatchQueue.main.async { - self.rootView.noticeView.noticeSwitch.setOn(false, animated: false) + self.rootView.featuresView.noticeView.noticeSwitch.setOn(false, animated: false) } } @@ -298,6 +307,15 @@ extension MyPageViewController { ExternalLink.makeService.openURL(for: self) case .questOpenNotice: break + case .chattingRoom: + ExternalLink.openChattingRoom.openURL(for: self) + case .instagram: + ExternalLink.instagram.openURL(for: self) + case .blockUserList: + let viewController = ViewControllerFactory.shared.makeBlockedUserListViewController() + viewController.navigationItem.hidesBackButton = true + viewController.hidesBottomBarWhenPushed = true + self.navigationController?.pushViewController(viewController, animated: false) case .privacyPolicy: ExternalLink.privacyPolicy.openURL(for: self) case .serviceTerm: @@ -346,6 +364,8 @@ extension MyPageViewController { self.viewModel.action(.withdrawActionButtonDidTap) Mixpanel.mainInstance().track(event: MyPageEvents.Name.withdrawConfirmClick) + case .block: + break } } @@ -422,7 +442,7 @@ extension MyPageViewController { style: .cancel ) { [weak self] _ in DispatchQueue.main.async { - self?.rootView.noticeView.noticeSwitch.setOn(false, animated: true) + self?.rootView.featuresView.noticeView.noticeSwitch.setOn(false, animated: true) } } } diff --git a/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/ViewModel/BlockedUserListViewModel.swift b/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/ViewModel/BlockedUserListViewModel.swift new file mode 100644 index 00000000..c1c7dbaf --- /dev/null +++ b/ByeBoo-iOS/ByeBoo-iOS/Presentation/Feature/MyPage/ViewModel/BlockedUserListViewModel.swift @@ -0,0 +1,35 @@ +// +// BlockedUserListViewModel.swift +// ByeBoo-iOS +// +// Created by APPLE on 2/23/26. +// + +final class BlockedUserListViewModel { + + struct BlockedUserEntity { + let blockID: Int + let name: String + } + + private var blockedUsers: [BlockedUserEntity] = [] + + var blockedUsersCount: Int { + blockedUsers.count + } + + func getBlockedUsers() { + blockedUsers = [ + .init(blockID: 1, name: "승준"), + .init(blockID: 2, name: "주리"), + .init(blockID: 2, name: "나연") + ] + } + + func getBlockedUserName(at index: Int) -> String? { + guard index >= 0 && index < blockedUsers.count else { + return nil + } + return blockedUsers[index].name + } +} diff --git a/ByeBoo-iOS/ByeBoo-iOS/Presentation/ViewControllerFactory.swift b/ByeBoo-iOS/ByeBoo-iOS/Presentation/ViewControllerFactory.swift index d1e54e42..9eed1c97 100644 --- a/ByeBoo-iOS/ByeBoo-iOS/Presentation/ViewControllerFactory.swift +++ b/ByeBoo-iOS/ByeBoo-iOS/Presentation/ViewControllerFactory.swift @@ -202,6 +202,10 @@ final class ViewControllerFactory: ViewControllerFactoryProtocol { return .init(viewModel: viewModel) } + + func makeBlockedUserListViewController() -> BlockedkUserListViewController { + .init(viewModel: BlockedUserListViewModel()) + } } extension ViewControllerFactory { diff --git a/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/overcoming_back.imageset/Contents.json b/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/overcoming_back.imageset/Contents.json new file mode 100644 index 00000000..c77d4513 --- /dev/null +++ b/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/overcoming_back.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "overcoming_back.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/overcoming_back.imageset/overcoming_back.svg b/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/overcoming_back.imageset/overcoming_back.svg new file mode 100644 index 00000000..9c9cf97b --- /dev/null +++ b/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/overcoming_back.imageset/overcoming_back.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/overcoming_front.imageset/Contents.json b/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/overcoming_front.imageset/Contents.json new file mode 100644 index 00000000..3b8a4feb --- /dev/null +++ b/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/overcoming_front.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "overcoming_front.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/overcoming_front.imageset/overcoming_front.svg b/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/overcoming_front.imageset/overcoming_front.svg new file mode 100644 index 00000000..6487c263 --- /dev/null +++ b/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/overcoming_front.imageset/overcoming_front.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/reunion_back.imageset/Contents.json b/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/reunion_back.imageset/Contents.json new file mode 100644 index 00000000..32cc6309 --- /dev/null +++ b/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/reunion_back.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "reunion_back.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/reunion_back.imageset/reunion_back.svg b/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/reunion_back.imageset/reunion_back.svg new file mode 100644 index 00000000..009bc179 --- /dev/null +++ b/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/reunion_back.imageset/reunion_back.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/reunion_front.imageset/Contents.json b/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/reunion_front.imageset/Contents.json new file mode 100644 index 00000000..f62255df --- /dev/null +++ b/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/reunion_front.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "reunion_front.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/reunion_front.imageset/reunion_front.svg b/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/reunion_front.imageset/reunion_front.svg new file mode 100644 index 00000000..8b44c989 --- /dev/null +++ b/ByeBoo-iOS/ByeBoo-iOS/Resource/Assets.xcassets/Card/reunion_front.imageset/reunion_front.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +