Skip to content

Commit 501b75c

Browse files
devMinseokRokwonK
andauthored
1.0.1/merge release into master (#112)
* 빌드버전 수정 * 내 정보에서 위치정보 바로가기 버튼 추가 * 위치 권한 관련 수정 * 지도 및 온보딩 QA 작업 2 (#106) * 🐛 바탐시트가 활성화된 경우에 지도 클릭시 hidden처리 되도록 수정 * 전체 카테고리 선택시 인기채팅방 리스트가 표시되지 않게 수정 * 리스트 펼쳐보기 조건 수정 * 인기있는 채팅방 선택시 '전체' 카테고리로 이동 * 카테고리 선택시 어노테이션 제거 * 폰트 수정 * 인증번호 입력 ui 수정 * 전화번호 입력 textfield 디자인 수정 * 기타 디자인 수정 * 빌드버전 수정 * readme 파일 업데이트 (#107) * 위치 권한 문제 해결 * 위치 권한 문구 수정 * 앱스토어 바로가기 추가 (#109) * 불필요한 라이브러리 제거 (#110) * Feature/fix chat detail bug (#111) * 🎨 ChatView, ChatCore 코드 개선 및 ChatDetailView로 와리가리 버그 수정 * 🐛 모든 유저 메가스피커로 뜨는 버그 수정 * 🐛 마이페이지 레벨정보 - 내 번개갯수 UI버그 수정 * 🎨 version up 및 README에 앱스토어 링크 추가 * Update README.md * Firebase 라이브러리 추가 * 버전 수정 * readme 업데이트 Co-authored-by: RokwonK <[email protected]> Co-authored-by: RokwonK <[email protected]>
1 parent 220ae25 commit 501b75c

File tree

10 files changed

+251
-263
lines changed

10 files changed

+251
-263
lines changed

Podfile

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,16 @@ target 'TiquiTaca_iOS' do
1313
pod 'ExytePopupView', '= 1.1.4'
1414

1515
# Firebase
16-
pod 'Firebase/Analytics', '= 8.15.0'
17-
pod 'Firebase/Messaging', '= 8.15.0'
16+
pod 'FirebaseAnalytics', '= 9.1.0'
17+
pod 'FirebaseCrashlytics', '= 9.1.0'
18+
pod 'FirebaseMessaging', '= 9.1.0'
19+
pod 'FirebasePerformance', '= 9.2.0'
1820

1921
# DB
2022
pod 'RealmSwift', '= 10.25.1'
2123

22-
# Security
23-
pod 'KeychainAccess', '= 4.2.2'
24-
pod 'CryptoSwift', '= 1.4.3'
25-
2624
# Util
2725
pod 'SwiftLint', '= 0.47.0'
28-
pod 'R.swift', '= 6.1.0'
2926
pod 'LicensePlist', '= 3.22.0'
3027

3128
# Socket

README.md

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33

44
<div align="center"> 실시간으로 궁금한 장소에 대해 정보를 공유하는 만남의 광장, 티키타카⚡️ </div>
55

6+
<div align="center">
7+
<a href="https://apps.apple.com/kr/app/%ED%8B%B0%ED%82%A4%ED%83%80%EC%B9%B4-tikitaka/id1617831823">
8+
<img src="https://tools.applemediaservices.com/api/badges/download-on-the-app-store/black/ko-kr?size=250x83&amp;releaseDate=1654300800&h=dd4ccd7fb22c609cf9132f37bf23c390" alt="Download on the App Store" style="border-radius: 13px; width: 180px; height: 83px;">
9+
</a>
10+
</div>
11+
612
---
713

814
![github_img2](https://user-images.githubusercontent.com/13329304/176240116-90cccb5f-e0b4-4437-94d2-523e6ac2150b.png)
@@ -35,34 +41,41 @@
3541

3642
![github_img7](https://user-images.githubusercontent.com/13329304/176240464-0d1abadc-5563-4358-8244-18bb7277491f.png)
3743

38-
<div align="center">⚡️ 같이 티키타카할 준비가 됐다면 망설이지 말고 놀러오세요:)⚡️</div>
39-
40-
<br>
44+
<div align="center">
45+
⚡️ 같이 티키타카할 준비가 됐다면 망설이지 말고 놀러오세요:)⚡️
46+
<br/><br/>
47+
</div>
4148

4249
---
4350

4451
## **🛠 Tech Stack**
4552

4653
### Project
47-
- SwiftUI
48-
- Combine
49-
- TCA(The Composable Architecture)
54+
|Based|
55+
|:---|
56+
|SwiftUI|
57+
|Combine|
58+
|TCA (The Composable Architecture)|
59+
60+
![github_img2](https://user-images.githubusercontent.com/13329304/176240116-90cccb5f-e0b4-4437-94d2-523e6ac2150b.png)
5061

51-
<br/>
5262

5363
### Dependency
5464
|Core|
5565
|:---|
5666
|[ComposableArchitecture](https://github.com/pointfreeco/swift-composable-architecture)|
5767
|[ComposableCoreLocation](https://github.com/pointfreeco/composable-core-location)|
58-
|[Firebase/Messaging](https://github.com/firebase/firebase-ios-sdk)|
59-
|[Firebase/Analytics](https://github.com/firebase/firebase-ios-sdk)|
68+
|[Firebase](https://github.com/firebase/firebase-ios-sdk)|
6069
|[Socket.IO-Client-Swift](https://github.com/socketio/socket.io-client-swift)|
6170

6271
|Security|
6372
|:---|
6473
|[KeyChainAccess](https://github.com/kishikawakatsumi/KeychainAccess)|
6574

75+
|DB|
76+
|:---|
77+
|[RealmSwift](https://github.com/realm/realm-swift)|
78+
6679
|UI|
6780
|:---|
6881
|[Map](https://github.com/pauljohanneskraft/Map)|

TiquiTaca_iOS.xcodeproj/project.pbxproj

Lines changed: 4 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,6 @@
128128
F2F1EDA828258E0E00AC4FDD /* AppService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2F1EDA728258E0E00AC4FDD /* AppService.swift */; };
129129
F2F1EDAF2829335A00AC4FDD /* AppView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2F1EDAE2829335A00AC4FDD /* AppView.swift */; };
130130
F2F1EDB12829336200AC4FDD /* AppCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2F1EDB02829336200AC4FDD /* AppCore.swift */; };
131-
F2FA365C2808897C00A24789 /* R.generated.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2FA365B2808897C00A24789 /* R.generated.swift */; };
132131
F2FDA216280BBDAC00B2ED75 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F2FDA215280BBDAC00B2ED75 /* LaunchScreen.storyboard */; };
133132
F2FDA21A280BBF8300B2ED75 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2FDA219280BBF8300B2ED75 /* AppDelegate.swift */; };
134133
F2FDA228280C0EE300B2ED75 /* TermsOfServiceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2FDA227280C0EE300B2ED75 /* TermsOfServiceView.swift */; };
@@ -341,7 +340,6 @@
341340
F2F1EDAE2829335A00AC4FDD /* AppView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppView.swift; sourceTree = "<group>"; };
342341
F2F1EDB02829336200AC4FDD /* AppCore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppCore.swift; sourceTree = "<group>"; };
343342
F2F1FFBE28049D7E00F3A8E4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = TiquiTaca_iOS/SupportingFile/Info.plist; sourceTree = SOURCE_ROOT; };
344-
F2FA365B2808897C00A24789 /* R.generated.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = R.generated.swift; sourceTree = SOURCE_ROOT; };
345343
F2FDA215280BBDAC00B2ED75 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
346344
F2FDA219280BBF8300B2ED75 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
347345
F2FDA227280C0EE300B2ED75 /* TermsOfServiceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TermsOfServiceView.swift; sourceTree = "<group>"; };
@@ -550,7 +548,6 @@
550548
F2F1FFBE28049D7E00F3A8E4 /* Info.plist */,
551549
F2F1ED6E2817ABE900AC4FDD /* GoogleService-Info.plist */,
552550
F24B1EEE28086CA0003D4E1D /* .swiftlint.yml */,
553-
F2FA365B2808897C00A24789 /* R.generated.swift */,
554551
);
555552
path = SupportingFile;
556553
sourceTree = "<group>";
@@ -1034,7 +1031,6 @@
10341031
buildPhases = (
10351032
BD3CF7E3E7E022E0969F7A18 /* [CP] Check Pods Manifest.lock */,
10361033
F2F1FFBF2804A2AA00F3A8E4 /* Run Swiftlint */,
1037-
F24B1EF12808728F003D4E1D /* R.swift */,
10381034
F2C02C6527F8824A004C4235 /* Sources */,
10391035
F2C02C6627F8824A004C4235 /* Frameworks */,
10401036
F2C02C6727F8824A004C4235 /* Resources */,
@@ -1196,26 +1192,6 @@
11961192
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-TiquiTaca_iOS/Pods-TiquiTaca_iOS-frameworks.sh\"\n";
11971193
showEnvVarsInLog = 0;
11981194
};
1199-
F24B1EF12808728F003D4E1D /* R.swift */ = {
1200-
isa = PBXShellScriptBuildPhase;
1201-
alwaysOutOfDate = 1;
1202-
buildActionMask = 2147483647;
1203-
files = (
1204-
);
1205-
inputFileListPaths = (
1206-
);
1207-
inputPaths = (
1208-
);
1209-
name = R.swift;
1210-
outputFileListPaths = (
1211-
);
1212-
outputPaths = (
1213-
$SRCROOT/R.generated.swift,
1214-
);
1215-
runOnlyForDeploymentPostprocessing = 0;
1216-
shellPath = /bin/sh;
1217-
shellScript = "\"$PODS_ROOT/R.swift/rswift\" generate \"$SRCROOT/R.generated.swift\"\n";
1218-
};
12191195
F2F1FFBF2804A2AA00F3A8E4 /* Run Swiftlint */ = {
12201196
isa = PBXShellScriptBuildPhase;
12211197
buildActionMask = 2147483647;
@@ -1335,7 +1311,6 @@
13351311
F96CDE772824EF9B002DEB90 /* MyInfoCore.swift in Sources */,
13361312
F25C79B8282CB5F2009C60EE /* CheckNicknameEntity.swift in Sources */,
13371313
F21276462811C6D500FB568D /* TOSFieldListViewCore.swift in Sources */,
1338-
F2FA365C2808897C00A24789 /* R.generated.swift in Sources */,
13391314
F22184FD284C9EED005CE6C3 /* ChatRoomListSortType.swift in Sources */,
13401315
8601F65C281309B10085F692 /* SplashView.swift in Sources */,
13411316
F25C79BA282D7524009C60EE /* String+Extensions.swift in Sources */,
@@ -1548,7 +1523,7 @@
15481523
CODE_SIGN_ENTITLEMENTS = TiquiTaca_iOS/TiquiTaca_iOSDebug.entitlements;
15491524
CODE_SIGN_IDENTITY = "iPhone Developer";
15501525
CODE_SIGN_STYLE = Manual;
1551-
CURRENT_PROJECT_VERSION = 19;
1526+
CURRENT_PROJECT_VERSION = 24;
15521527
DEVELOPMENT_ASSET_PATHS = "\"TiquiTaca_iOS/Resource/Preview Content\"";
15531528
DEVELOPMENT_TEAM = 75FNRKTJ9S;
15541529
ENABLE_PREVIEWS = YES;
@@ -1564,7 +1539,7 @@
15641539
"$(inherited)",
15651540
"@executable_path/Frameworks",
15661541
);
1567-
MARKETING_VERSION = 1.0;
1542+
MARKETING_VERSION = 1.0.1;
15681543
PRODUCT_BUNDLE_IDENTIFIER = "com.tiquitaca.TiquiTaca-iOS";
15691544
PRODUCT_NAME = TiquiTaca;
15701545
PROVISIONING_PROFILE_SPECIFIER = dev_tiquiTaca;
@@ -1583,7 +1558,7 @@
15831558
CODE_SIGN_ENTITLEMENTS = TiquiTaca_iOS/TiquiTaca_iOS.entitlements;
15841559
CODE_SIGN_IDENTITY = "iPhone Distribution: Minseok Kang (75FNRKTJ9S)";
15851560
CODE_SIGN_STYLE = Manual;
1586-
CURRENT_PROJECT_VERSION = 19;
1561+
CURRENT_PROJECT_VERSION = 24;
15871562
DEVELOPMENT_ASSET_PATHS = "\"TiquiTaca_iOS/Resource/Preview Content\"";
15881563
DEVELOPMENT_TEAM = 75FNRKTJ9S;
15891564
ENABLE_PREVIEWS = YES;
@@ -1599,7 +1574,7 @@
15991574
"$(inherited)",
16001575
"@executable_path/Frameworks",
16011576
);
1602-
MARKETING_VERSION = 1.0;
1577+
MARKETING_VERSION = 1.0.1;
16031578
PRODUCT_BUNDLE_IDENTIFIER = "com.tiquitaca.TiquiTaca-iOS";
16041579
PRODUCT_NAME = TiquiTaca;
16051580
PROVISIONING_PROFILE_SPECIFIER = appStore_tiquiTaca;

TiquiTaca_iOS/AppDelegate.swift

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,21 @@
77
//
88

99
import UIKit
10-
import Firebase
1110
import UserNotifications
11+
import FirebaseCore
12+
import FirebaseAnalytics
13+
import FirebaseMessaging
14+
import FirebasePerformance
15+
import FirebaseCrashlytics
1216

1317
@main
1418
final class AppDelegate: NSObject, UIApplicationDelegate {
1519
func application(
1620
_ application: UIApplication,
1721
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
1822
) -> Bool {
19-
UIApplication.shared.applicationIconBadgeNumber = 0
20-
2123
FirebaseApp.configure()
24+
UIApplication.shared.applicationIconBadgeNumber = 0
2225
Messaging.messaging().delegate = self
2326
UNUserNotificationCenter.current().delegate = self
2427

@@ -65,7 +68,7 @@ extension AppDelegate: UNUserNotificationCenterDelegate {
6568

6669
completionHandler([.sound, .banner, .list])
6770
}
68-
71+
6972
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
7073
let userInfo = response.notification.request.content.userInfo
7174
Messaging.messaging().appDidReceiveMessage(userInfo)

TiquiTaca_iOS/SupportingFile/Info.plist

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@
4747
<true/>
4848
</dict>
4949
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
50-
<string>회원님의 위치정보가 지도에 표시됩니다. 위치 정보는 근처 채팅방 정보를 불러올때 그리고 채팅시 장소 반경 내부에 있는지 표기할 때 활용됩니다. 다른사람들에게 해당 반경 내부에 있는지에 대한 정보가 노출 될 수 있습니다. 언제든지 해당 위치 정보 공유를 중지할 수 있습니다.</string>
50+
<string>위치 서비스를 켜면 내 주변 채팅가능 장소를 볼 수 있습니다.</string>
5151
<key>NSLocationAlwaysUsageDescription</key>
52-
<string>회원님의 위치정보가 지도에 표시됩니다. 위치 정보는 근처 채팅방 정보를 불러올때 그리고 채팅시 장소 반경 내부에 있는지 표기할 때 활용됩니다. 다른사람들에게 해당 반경 내부에 있는지에 대한 정보가 노출 될 수 있습니다. 언제든지 해당 위치 정보 공유를 중지할 수 있습니다.</string>
52+
<string>위치 서비스를 켜면 내 주변 채팅가능 장소를 볼 수 있습니다.</string>
5353
<key>NSLocationWhenInUseUsageDescription</key>
54-
<string>회원님의 위치정보가 지도에 표시됩니다. 위치 정보는 근처 채팅방 정보를 불러올때 그리고 채팅시 장소 반경 내부에 있는지 표기할 때 활용됩니다. 다른사람들에게 해당 반경 내부에 있는지에 대한 정보가 노출 될 수 있습니다. 언제든지 해당 위치 정보 공유를 중지할 수 있습니다.</string>
54+
<string>위치 서비스를 켜면 내 주변 채팅가능 장소를 볼 수 있습니다.</string>
5555
<key>UIAppFonts</key>
5656
<array>
5757
<string>Pretendard-Bold.otf</string>

TiquiTaca_iOS/Views/Chat/ChatCore.swift

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,50 +14,53 @@ import SwiftUI
1414
struct ChatState: Equatable {
1515
enum Route {
1616
case chatDetail
17+
case none
1718
}
18-
var route: Route?
1919

20-
var isFirstLoad = true
21-
var currentTab: RoomListType = .like
20+
var route: Route?
2221

23-
var unReadChatCount: Int = 0
22+
var enteredRoom: RoomInfoEntity.Response?
2423
var lastChatLog: ChatLogEntity.Response?
25-
2624
var lastLoadTime: String = Date.current(type: .HHmm)
27-
var enteredRoom: RoomInfoEntity.Response?
25+
var unReadChatCount: Int = 0
26+
27+
var currentTab: RoomListType = .like
2828
var likeRoomList: [RoomInfoEntity.Response] = []
2929
var popularRoomList: [RoomInfoEntity.Response] = []
30+
31+
var showRoomEnterPopup: Bool = false
3032
var moveToChatDetail: Bool = false
3133

3234
var willEnterRoom: RoomInfoEntity.Response?
3335
var chatDetailState: ChatDetailState = .init(roomId: "")
3436
}
3537

3638
enum ChatAction: Equatable {
37-
3839
case onAppear
40+
// MARK: Request Action
3941
case fetchEnteredRoomInfo
4042
case fetchLikeRoomList
4143
case fetchPopularRoomList
42-
44+
// MARK: Socket Action
4345
case socketConnected(String)
4446
case socketDisconnected(String)
4547
case socketResponse(SocketBannerService.Action)
46-
48+
// MARK: Response Action
4749
case responsePopularRoomList(Result<[RoomInfoEntity.Response]?, HTTPError>)
4850
case responseLikeRoomList(Result<[RoomInfoEntity.Response]?, HTTPError>)
4951
case responseEnteredRoom(Result<RoomInfoEntity.Response?, HTTPError>)
5052
case responseRoomFavorite(Result<RoomLikeEntity.Response?, HTTPError>)
51-
53+
// MARK: User Action
5254
case tabChange(RoomListType)
5355
case removeFavoriteRoom(RoomInfoEntity.Response)
5456
case willEnterRoom(RoomInfoEntity.Response)
5557
case refresh
56-
57-
58-
case chatDetailAction(ChatDetailAction)
58+
// MARK: Router Action
5959
case setRoute(ChatState.Route?)
60+
case setShowRoomEnterPopup(Bool)
6061
case setMoveToChatDetail(Bool)
62+
// MARK: Child Action
63+
case chatDetailAction(ChatDetailAction)
6164
}
6265

6366
struct ChatEnvironment {
@@ -96,10 +99,7 @@ let chatCore = Reducer<
9699
> { state, action, environment in
97100
switch action {
98101
case .onAppear:
99-
guard state.isFirstLoad else { return .none }
100-
101102
state.lastLoadTime = Date.current(type: .HHmm)
102-
state.isFirstLoad = true
103103
return .merge(
104104
Effect(value: .fetchEnteredRoomInfo)
105105
.eraseToEffect(),
@@ -108,7 +108,7 @@ let chatCore = Reducer<
108108
Effect(value: .fetchPopularRoomList)
109109
.eraseToEffect()
110110
)
111-
// MARK: Requeset
111+
// MARK: Requeset
112112
case .fetchEnteredRoomInfo:
113113
return environment.appService.roomService
114114
.getEnteredRoom()
@@ -133,7 +133,7 @@ let chatCore = Reducer<
133133
.receive(on: environment.mainQueue)
134134
.catchToEffect()
135135
.map(ChatAction.responseRoomFavorite)
136-
// MARK: Response
136+
// MARK: Response
137137
case let .responseRoomFavorite(.success(res)):
138138
return Effect(value: .fetchLikeRoomList)
139139
.eraseToEffect()
@@ -188,7 +188,7 @@ let chatCore = Reducer<
188188
.responsePopularRoomList(.failure),
189189
.responseRoomFavorite(.failure):
190190
return .none
191-
// MARK: View Action
191+
// MARK: View Action
192192
case .tabChange(let type):
193193
guard state.currentTab != type else { return .none }
194194
state.currentTab = type
@@ -200,10 +200,16 @@ let chatCore = Reducer<
200200
return .none
201201
case let .setRoute(route):
202202
state.route = route
203+
if route == .chatDetail {
204+
state.moveToChatDetail = true
205+
}
206+
return .none
207+
case let .setShowRoomEnterPopup(isPresented):
208+
state.showRoomEnterPopup = isPresented
203209
return .none
204210
case let .setMoveToChatDetail(isMoveToChatDetail):
211+
state.route = isMoveToChatDetail ? .chatDetail : ChatState.Route.none
205212
state.moveToChatDetail = isMoveToChatDetail
206-
state.route = isMoveToChatDetail ? .chatDetail : nil
207213
return .none
208214
case .refresh:
209215
state.lastLoadTime = Date.current(type: .HHmm)
@@ -215,6 +221,5 @@ let chatCore = Reducer<
215221
)
216222
case .chatDetailAction:
217223
return .none
218-
219224
}
220225
}

0 commit comments

Comments
 (0)