Skip to content
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
8a241fb
[변경] Dialog dismiss 방식 변경
hyeonsik971029 Dec 11, 2025
b7e9523
[변경] 카드 추가 권한 및 딥링크 상태 초기화 액션 변경
hyeonsik971029 Dec 11, 2025
a8224e2
[변경] 카드 추가 화면 전환 상태 초기화 액션 변경
hyeonsik971029 Dec 11, 2025
13c5959
[변경] 설정 화면 회원 탈퇴 시 재가입 가능 날짜 상태 초기화 액션 변경
hyeonsik971029 Dec 11, 2025
9b89c79
[변경] 홈 피드 상태 및 상세 전환 상태 액션 변경
hyeonsik971029 Dec 11, 2025
ceca633
[수정] API 호출 최소화를 위한 옵저버 패턴 사용
hyeonsik971029 Dec 12, 2025
4de7ebd
[변경] 메인 스레드 사용
hyeonsik971029 Dec 12, 2025
4a9f357
[추가] 상대방 프로필 일 경우, 하단 인셋 삭제
hyeonsik971029 Dec 13, 2025
d93832f
[변경] 피드카드 삭제 이벤트 명명
hyeonsik971029 Dec 13, 2025
0dd6c5f
[변경] GA 관련 파일 명명 및 주석처리
hyeonsik971029 Dec 13, 2025
5f672a5
[변경] Clarity 등록 및 사용자 앨범 녹화 막음
hyeonsik971029 Dec 14, 2025
4efa077
[변경] 타이머 아이콘 변경
hyeonsik971029 Dec 14, 2025
7a006d2
[변경] 변경해야 할 카드 정보만 순회
hyeonsik971029 Dec 14, 2025
1153a4f
[변경] 단일 파라미터인 경우에도 처리할 수 있도록 변경
hyeonsik971029 Dec 14, 2025
bc423a1
[수정] 펑 시간 공백 제거
hyeonsik971029 Dec 14, 2025
2b1976a
[수정] 삭제된 카드팝업 표시 로직 수정
hyeonsik971029 Dec 14, 2025
d669384
[수정] 상세 화면 댓글카드 삭제 시 업데이트 로직 수정
hyeonsik971029 Dec 14, 2025
6586f8d
[수정] 상세 화면에서 가로 크기에 맞춰 줄바꿈 하도록 수정
hyeonsik971029 Dec 16, 2025
1012ea4
[수정] nil 및 중복 확인 시점 수정
hyeonsik971029 Dec 16, 2025
b3f0a89
[수정] 상세 화면 진입 전 삭제된 카드인지 확인
hyeonsik971029 Dec 16, 2025
a0b89ba
[수정] 읽지 않은 알림이 없을 때, 홈 새로고침하던 것 수정
hyeonsik971029 Dec 16, 2025
f4674ad
[수정] 알림 화면 삭제된 카드 알림 읽음 요청 및 전환 로직 수정
hyeonsik971029 Dec 16, 2025
e1ab610
[수정] 카드 추가 시 중복 태그 삭제
hyeonsik971029 Dec 16, 2025
6fc1d7a
[수정] 홈 카드 뷰 보더 로직 수정
hyeonsik971029 Dec 17, 2025
3f0483a
[삭제] 불필요한 린트 룰 삭제
hyeonsik971029 Dec 17, 2025
a96f09c
[추가] 맞춤 이벤트를 위한 GA 연동
hyeonsik971029 Dec 17, 2025
7e36bb5
[버전] Develop 1.23.0(1023000) 버전 업데이트
hyeonsik971029 Dec 17, 2025
0a856ec
[수정] Gemini 제안
hyeonsik971029 Dec 17, 2025
9f8c7d5
[수정] SwiftLint 룰에 맞게 수정
hyeonsik971029 Dec 17, 2025
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
30 changes: 15 additions & 15 deletions SOOUM/SOOUM.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,8 @@
2A980B9E2D803E9D007DFA45 /* FirebaseLoggable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A980B9C2D803E9D007DFA45 /* FirebaseLoggable.swift */; };
2A980BA02D803EB1007DFA45 /* AnalyticsEventProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A980B9F2D803EB1007DFA45 /* AnalyticsEventProtocol.swift */; };
2A980BA12D803EB1007DFA45 /* AnalyticsEventProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A980B9F2D803EB1007DFA45 /* AnalyticsEventProtocol.swift */; };
2A980BA42D803EEA007DFA45 /* SOMEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A980BA32D803EE2007DFA45 /* SOMEvent.swift */; };
2A980BA52D803EEA007DFA45 /* SOMEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A980BA32D803EE2007DFA45 /* SOMEvent.swift */; };
2A980BA82D803F04007DFA45 /* GAManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A980BA72D803F04007DFA45 /* GAManager.swift */; };
2A980BA92D803F04007DFA45 /* GAManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A980BA72D803F04007DFA45 /* GAManager.swift */; };
2A980BA82D803F04007DFA45 /* GAHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A980BA72D803F04007DFA45 /* GAHelper.swift */; };
2A980BA92D803F04007DFA45 /* GAHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A980BA72D803F04007DFA45 /* GAHelper.swift */; };
2AE6B1492CBC15BF00FA5C3C /* ReportViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AE6B1482CBC15BF00FA5C3C /* ReportViewController.swift */; };
2AE6B14A2CBC15BF00FA5C3C /* ReportViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AE6B1482CBC15BF00FA5C3C /* ReportViewController.swift */; };
2AE6B14C2CBC160C00FA5C3C /* ReportViewReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AE6B14B2CBC160C00FA5C3C /* ReportViewReactor.swift */; };
Expand Down Expand Up @@ -296,6 +294,8 @@
3879B4B62EC5AD5E0070846B /* RejoinableDateInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3879B4B42EC5AD580070846B /* RejoinableDateInfo.swift */; };
3879B4B82EC5ADC50070846B /* RejoinableDateInfoResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3879B4B72EC5ADBF0070846B /* RejoinableDateInfoResponse.swift */; };
3879B4B92EC5ADC50070846B /* RejoinableDateInfoResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3879B4B72EC5ADBF0070846B /* RejoinableDateInfoResponse.swift */; };
387B73892EED71510055E384 /* GAEvent+SOOUM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 387B73882EED71470055E384 /* GAEvent+SOOUM.swift */; };
387B738A2EED71510055E384 /* GAEvent+SOOUM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 387B73882EED71470055E384 /* GAEvent+SOOUM.swift */; };
387FA11D2E88DDC1004DF7CE /* HomeViewReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 387FA11C2E88DDBD004DF7CE /* HomeViewReactor.swift */; };
387FA11E2E88DDC1004DF7CE /* HomeViewReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 387FA11C2E88DDBD004DF7CE /* HomeViewReactor.swift */; };
387FBAF02C8702C100A5E139 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 387FBAEF2C8702C100A5E139 /* AppDelegate.swift */; };
Expand Down Expand Up @@ -863,8 +863,7 @@
2A649ECE2CAE8970002D8284 /* SOMDialogViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SOMDialogViewController.swift; sourceTree = "<group>"; };
2A980B9C2D803E9D007DFA45 /* FirebaseLoggable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirebaseLoggable.swift; sourceTree = "<group>"; };
2A980B9F2D803EB1007DFA45 /* AnalyticsEventProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsEventProtocol.swift; sourceTree = "<group>"; };
2A980BA32D803EE2007DFA45 /* SOMEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SOMEvent.swift; sourceTree = "<group>"; };
2A980BA72D803F04007DFA45 /* GAManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GAManager.swift; sourceTree = "<group>"; };
2A980BA72D803F04007DFA45 /* GAHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GAHelper.swift; sourceTree = "<group>"; };
2AE6B1482CBC15BF00FA5C3C /* ReportViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportViewController.swift; sourceTree = "<group>"; };
2AE6B14B2CBC160C00FA5C3C /* ReportViewReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportViewReactor.swift; sourceTree = "<group>"; };
2AFD054B2CFF76CB007C84AD /* TagRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TagRequest.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1000,6 +999,7 @@
3878FE0C2D0365C800D8955C /* SOMNavigationBar+Rx.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SOMNavigationBar+Rx.swift"; sourceTree = "<group>"; };
3879B4B42EC5AD580070846B /* RejoinableDateInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RejoinableDateInfo.swift; sourceTree = "<group>"; };
3879B4B72EC5ADBF0070846B /* RejoinableDateInfoResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RejoinableDateInfoResponse.swift; sourceTree = "<group>"; };
387B73882EED71470055E384 /* GAEvent+SOOUM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GAEvent+SOOUM.swift"; sourceTree = "<group>"; };
387FA11C2E88DDBD004DF7CE /* HomeViewReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeViewReactor.swift; sourceTree = "<group>"; };
387FBAEC2C8702C100A5E139 /* SOOUM.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SOOUM.app; sourceTree = BUILT_PRODUCTS_DIR; };
387FBAEF2C8702C100A5E139 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1384,15 +1384,14 @@
path = Views;
sourceTree = "<group>";
};
2A980B9B2D803E8B007DFA45 /* GAManager */ = {
2A980B9B2D803E8B007DFA45 /* GAHelper */ = {
isa = PBXGroup;
children = (
2A980BA72D803F04007DFA45 /* GAManager.swift */,
2A980BA32D803EE2007DFA45 /* SOMEvent.swift */,
2A980BA72D803F04007DFA45 /* GAHelper.swift */,
2A980B9F2D803EB1007DFA45 /* AnalyticsEventProtocol.swift */,
2A980B9C2D803E9D007DFA45 /* FirebaseLoggable.swift */,
);
path = GAManager;
path = GAHelper;
sourceTree = "<group>";
};
2AE6B1472CBC157200FA5C3C /* Report */ = {
Expand Down Expand Up @@ -1615,6 +1614,7 @@
isa = PBXGroup;
children = (
385620F42CA19E8600E0AB5A /* Alamofire */,
2A980B9B2D803E8B007DFA45 /* GAHelper */,
388D8ADD2E73E60B0044BA79 /* SwiftEntryKit */,
3836ACB22C8F043500A3C566 /* Typography */,
38D5CE0A2CBCE8CA0054AB9A /* SimpleDefaults.swift */,
Expand Down Expand Up @@ -1717,7 +1717,6 @@
385620EC2CA19C0D00E0AB5A /* Managers */ = {
isa = PBXGroup;
children = (
2A980B9B2D803E8B007DFA45 /* GAManager */,
3893B6D02D36739500F2004C /* CompositeManager.swift */,
38B543ED2D46506300DDF2C5 /* ManagerType.swift */,
3893B6CD2D36728000F2004C /* ManagerProvider.swift */,
Expand Down Expand Up @@ -2068,6 +2067,7 @@
388DA1032C8F545E00A9DD56 /* Typography+SOOUM.swift */,
388371FB2C8C8F11004212EB /* UIColor+SOOUM.swift */,
38A5D1532C8CB11E00B68363 /* UIImage+SOOUM.swift */,
387B73882EED71470055E384 /* GAEvent+SOOUM.swift */,
);
path = Foundations;
sourceTree = "<group>";
Expand Down Expand Up @@ -3170,7 +3170,6 @@
38A721962E73E7140071E1D8 /* View+SwiftEntryKit.swift in Sources */,
380F422B2E884E9C009AC59E /* HomeCardInfoResponse.swift in Sources */,
388698632D1986B100008600 /* NotificationRequest.swift in Sources */,
2A980BA52D803EEA007DFA45 /* SOMEvent.swift in Sources */,
38E928DA2EB7727400B3F00B /* SOMBottomToastView.swift in Sources */,
3803B9232ECF52CE009D14B9 /* TagCollectCardViewCell.swift in Sources */,
38B65E7C2E72ADB900DF6919 /* TermsOfServiceAgreeButtonView+Rx.swift in Sources */,
Expand Down Expand Up @@ -3296,7 +3295,7 @@
381E7C1A2ECCB1A700E80249 /* TagViewController.swift in Sources */,
38FEBE5B2E8652DE002916A8 /* CompositeNotificationInfoResponse.swift in Sources */,
38D8F55E2EC4F38700DED428 /* SimpleReachability.swift in Sources */,
2A980BA92D803F04007DFA45 /* GAManager.swift in Sources */,
2A980BA92D803F04007DFA45 /* GAHelper.swift in Sources */,
38B21C082ECEF7D400990F49 /* PopularTagViewCell.swift in Sources */,
3880EF782EA0CF2F00D88608 /* RelatedTagsViewLayout.swift in Sources */,
381B83F32EBCEC2E00C84015 /* ProfileUserViewCell.swift in Sources */,
Expand Down Expand Up @@ -3454,6 +3453,7 @@
389E59E12EDEEFA500D0946D /* UpdateTagFavoriteUseCase.swift in Sources */,
383EC6152E7A50EB00EC2D1E /* AuthLocalDataSourceImpl.swift in Sources */,
38D8F5592EC4D89D00DED428 /* TagNofificationInfoResponse.swift in Sources */,
387B738A2EED71510055E384 /* GAEvent+SOOUM.swift in Sources */,
38C9AF302E96A49F00B401C0 /* WriteCardTag.swift in Sources */,
38AE85312EDFFA9500029E4C /* UpdateCardLikeUseCaseImpl.swift in Sources */,
389E59D52EDEEE6B00D0946D /* UpdateUserInfoUseCase.swift in Sources */,
Expand Down Expand Up @@ -3596,7 +3596,6 @@
380F422A2E884E9C009AC59E /* HomeCardInfoResponse.swift in Sources */,
38FDC2B62C9E746B00C094C2 /* BaseViewController.swift in Sources */,
3803B9242ECF52CE009D14B9 /* TagCollectCardViewCell.swift in Sources */,
2A980BA42D803EEA007DFA45 /* SOMEvent.swift in Sources */,
38B65E7D2E72ADB900DF6919 /* TermsOfServiceAgreeButtonView+Rx.swift in Sources */,
38E928D92EB7727400B3F00B /* SOMBottomToastView.swift in Sources */,
389E59A92EDEE6F600D0946D /* ValidateNicknameUseCase.swift in Sources */,
Expand Down Expand Up @@ -3722,7 +3721,7 @@
38C2A7DE2EC0704700B941A2 /* SettingsRemoteDataSource.swift in Sources */,
38B21C092ECEF7D400990F49 /* PopularTagViewCell.swift in Sources */,
38FEBE5C2E8652DE002916A8 /* CompositeNotificationInfoResponse.swift in Sources */,
2A980BA82D803F04007DFA45 /* GAManager.swift in Sources */,
2A980BA82D803F04007DFA45 /* GAHelper.swift in Sources */,
38E928DD2EB7921200B3F00B /* UIRefreshControl.swift in Sources */,
38FEBE652E8662A3002916A8 /* NoticeInfoResponse.swift in Sources */,
381B83DC2EBC707A00C84015 /* ProfileInfo.swift in Sources */,
Expand Down Expand Up @@ -3877,6 +3876,7 @@
389E59E22EDEEFA500D0946D /* UpdateTagFavoriteUseCase.swift in Sources */,
38B543EB2D461B1A00DDF2C5 /* LocationManagerConfigruation.swift in Sources */,
38026E3F2CA2B45A0045E1CE /* LocationManager.swift in Sources */,
387B73892EED71510055E384 /* GAEvent+SOOUM.swift in Sources */,
383EC6162E7A50EB00EC2D1E /* AuthLocalDataSourceImpl.swift in Sources */,
38AE85302EDFFA9500029E4C /* UpdateCardLikeUseCaseImpl.swift in Sources */,
389E59D62EDEEE6B00D0946D /* UpdateUserInfoUseCase.swift in Sources */,
Expand Down
51 changes: 0 additions & 51 deletions SOOUM/SOOUM/Data/Managers/GAManager/AnalyticsEventProtocol.swift

This file was deleted.

19 changes: 0 additions & 19 deletions SOOUM/SOOUM/Data/Managers/GAManager/GAManager.swift

This file was deleted.

43 changes: 0 additions & 43 deletions SOOUM/SOOUM/Data/Managers/GAManager/SOMEvent.swift

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ final class ErrorInterceptor: RequestInterceptor {
title: Text.confirmActionTitle,
style: .primary,
action: {
UIApplication.topViewController?.dismiss(animated: true)
SOMDialogViewController.dismiss()
}
)

Expand All @@ -147,15 +147,15 @@ final class ErrorInterceptor: RequestInterceptor {
title: Text.closeActionButtonTitle,
style: .gray,
action: {
UIApplication.topViewController?.dismiss(animated: true)
SOMDialogViewController.dismiss()
}
)

let inquireAction = SOMDialogAction(
title: Text.inquiryActionTitle,
style: .primary,
action: {
UIApplication.topViewController?.dismiss(animated: true) {
SOMDialogViewController.dismiss {
let subject = Text.inquiryMailTitle.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? ""
let guideMessage = """
\(Text.identificationInfo)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@

import UIKit


class SOMDialogAction {
final class SOMDialogAction {

enum Style {
case primary
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@
import UIKit


// MARK: Show

extension SOMDialogViewController {

private static weak var displayedDialogViewController: SOMDialogViewController?
fileprivate static weak var displayedDialogViewController: SOMDialogViewController?

@discardableResult
static func show(
Expand Down Expand Up @@ -116,3 +118,21 @@ extension SOMDialogViewController {
return dialogViewController
}
}


// MARK: Dismiss

extension SOMDialogViewController {

static func dismiss(animated: Bool = true, completion: (() -> Void)? = nil) {

guard let dialog = self.displayedDialogViewController else {
completion?()
return
}

self.displayedDialogViewController = nil

dialog.dismiss(animated: animated) { completion?() }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ import UIKit
import SnapKit
import Then


class SOMDialogViewController: UIViewController {
final class SOMDialogViewController: UIViewController {


// MARK: Views
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ class SOMTabBarController: UIViewController {

var hasFirstLaunchGuide: Bool = true {
didSet {
if hasFirstLaunchGuide == false {
if self.hasFirstLaunchGuide == false {
self.messageBubbleView.removeFromSuperview()
}
}
Expand Down
44 changes: 44 additions & 0 deletions SOOUM/SOOUM/DesignSystem/Foundations/GAEvent+SOOUM.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
//
// GAEvent+SOOUM.swift
// SOOUM
//
// Created by 오현식 on 12/13/25.
//

enum GAEvent {
// TODO: 숨 v1 예시
// enum WriteCard: AnalyticsEventProtocol {
// /// 글쓰기 화면에서 태그를 추가하고 글을 작성하지 않음
// case dismiss_with_tag(tag_count: Int, tag_texts: [String])
// /// 글쓰기 화면에서 태그를 추가하고 글을 작성
// case add_tag(tag_count: Int, tag_texts: [String])
// }

// enum Tag: AnalyticsEventProtocol {
// /// 태그를 클릭한 위치
// enum ClickPositionKey {
// /// 카드 상세화면에서 태그 클릭
// static let post = "post"
// /// 즐겨찾기 태그 목록에서 태그 클릭
// static let favorite = "favorite"
// /// 즐겨찾기 태그 목록의 미리보기 카드 클릭
// static let favorite_preview = "favorite_preview"
// /// 추천 태그 목록에서 태그 클릭
// static let recommendation = "recommendation"
// /// 태그 검색 결과에서 태그 클릭
// static let search_result = "search_result"
// }
// /// 태그를 클릭
// case tag_click(tag_text: String, click_position: String)
// }

// enum Comment: AnalyticsEventProtocol {
// /// 사용자가 댓글을 작성
// ///
// /// - Parameters:
// /// - comment_length: 댓글 길이
// /// - parent_post_id: 부모 글 ID
// /// - image_attached: 이미지 첨부 여부
// case add_comment(comment_length: Int, parent_post_id: String, image_attached: Bool)
// }
}
Loading
Loading