Skip to content

Commit

Permalink
1.0.1/merge release into master (#112)
Browse files Browse the repository at this point in the history
* 빌드버전 수정

* 내 정보에서 위치정보 바로가기 버튼 추가

* 위치 권한 관련 수정

* 지도 및 온보딩 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]>
  • Loading branch information
3 people authored Jul 5, 2022
1 parent 220ae25 commit 501b75c
Show file tree
Hide file tree
Showing 10 changed files with 251 additions and 263 deletions.
11 changes: 4 additions & 7 deletions Podfile
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,16 @@ target 'TiquiTaca_iOS' do
pod 'ExytePopupView', '= 1.1.4'

# Firebase
pod 'Firebase/Analytics', '= 8.15.0'
pod 'Firebase/Messaging', '= 8.15.0'
pod 'FirebaseAnalytics', '= 9.1.0'
pod 'FirebaseCrashlytics', '= 9.1.0'
pod 'FirebaseMessaging', '= 9.1.0'
pod 'FirebasePerformance', '= 9.2.0'

# DB
pod 'RealmSwift', '= 10.25.1'

# Security
pod 'KeychainAccess', '= 4.2.2'
pod 'CryptoSwift', '= 1.4.3'

# Util
pod 'SwiftLint', '= 0.47.0'
pod 'R.swift', '= 6.1.0'
pod 'LicensePlist', '= 3.22.0'

# Socket
Expand Down
31 changes: 22 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@

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

<div align="center">
<a href="https://apps.apple.com/kr/app/%ED%8B%B0%ED%82%A4%ED%83%80%EC%B9%B4-tikitaka/id1617831823">
<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;">
</a>
</div>

---

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

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

<div align="center">⚡️ 같이 티키타카할 준비가 됐다면 망설이지 말고 놀러오세요:)⚡️</div>

<br>
<div align="center">
⚡️ 같이 티키타카할 준비가 됐다면 망설이지 말고 놀러오세요:)⚡️
<br/><br/>
</div>

---

## **🛠 Tech Stack**

### Project
- SwiftUI
- Combine
- TCA(The Composable Architecture)
|Based|
|:---|
|SwiftUI|
|Combine|
|TCA (The Composable Architecture)|

![github_img2](https://user-images.githubusercontent.com/13329304/176240116-90cccb5f-e0b4-4437-94d2-523e6ac2150b.png)

<br/>

### Dependency
|Core|
|:---|
|[ComposableArchitecture](https://github.com/pointfreeco/swift-composable-architecture)|
|[ComposableCoreLocation](https://github.com/pointfreeco/composable-core-location)|
|[Firebase/Messaging](https://github.com/firebase/firebase-ios-sdk)|
|[Firebase/Analytics](https://github.com/firebase/firebase-ios-sdk)|
|[Firebase](https://github.com/firebase/firebase-ios-sdk)|
|[Socket.IO-Client-Swift](https://github.com/socketio/socket.io-client-swift)|

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

|DB|
|:---|
|[RealmSwift](https://github.com/realm/realm-swift)|

|UI|
|:---|
|[Map](https://github.com/pauljohanneskraft/Map)|
Expand Down
33 changes: 4 additions & 29 deletions TiquiTaca_iOS.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,6 @@
F2F1EDA828258E0E00AC4FDD /* AppService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2F1EDA728258E0E00AC4FDD /* AppService.swift */; };
F2F1EDAF2829335A00AC4FDD /* AppView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2F1EDAE2829335A00AC4FDD /* AppView.swift */; };
F2F1EDB12829336200AC4FDD /* AppCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2F1EDB02829336200AC4FDD /* AppCore.swift */; };
F2FA365C2808897C00A24789 /* R.generated.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2FA365B2808897C00A24789 /* R.generated.swift */; };
F2FDA216280BBDAC00B2ED75 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F2FDA215280BBDAC00B2ED75 /* LaunchScreen.storyboard */; };
F2FDA21A280BBF8300B2ED75 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2FDA219280BBF8300B2ED75 /* AppDelegate.swift */; };
F2FDA228280C0EE300B2ED75 /* TermsOfServiceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2FDA227280C0EE300B2ED75 /* TermsOfServiceView.swift */; };
Expand Down Expand Up @@ -341,7 +340,6 @@
F2F1EDAE2829335A00AC4FDD /* AppView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppView.swift; sourceTree = "<group>"; };
F2F1EDB02829336200AC4FDD /* AppCore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppCore.swift; sourceTree = "<group>"; };
F2F1FFBE28049D7E00F3A8E4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = TiquiTaca_iOS/SupportingFile/Info.plist; sourceTree = SOURCE_ROOT; };
F2FA365B2808897C00A24789 /* R.generated.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = R.generated.swift; sourceTree = SOURCE_ROOT; };
F2FDA215280BBDAC00B2ED75 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
F2FDA219280BBF8300B2ED75 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
F2FDA227280C0EE300B2ED75 /* TermsOfServiceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TermsOfServiceView.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -550,7 +548,6 @@
F2F1FFBE28049D7E00F3A8E4 /* Info.plist */,
F2F1ED6E2817ABE900AC4FDD /* GoogleService-Info.plist */,
F24B1EEE28086CA0003D4E1D /* .swiftlint.yml */,
F2FA365B2808897C00A24789 /* R.generated.swift */,
);
path = SupportingFile;
sourceTree = "<group>";
Expand Down Expand Up @@ -1034,7 +1031,6 @@
buildPhases = (
BD3CF7E3E7E022E0969F7A18 /* [CP] Check Pods Manifest.lock */,
F2F1FFBF2804A2AA00F3A8E4 /* Run Swiftlint */,
F24B1EF12808728F003D4E1D /* R.swift */,
F2C02C6527F8824A004C4235 /* Sources */,
F2C02C6627F8824A004C4235 /* Frameworks */,
F2C02C6727F8824A004C4235 /* Resources */,
Expand Down Expand Up @@ -1196,26 +1192,6 @@
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-TiquiTaca_iOS/Pods-TiquiTaca_iOS-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
F24B1EF12808728F003D4E1D /* R.swift */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
);
name = R.swift;
outputFileListPaths = (
);
outputPaths = (
$SRCROOT/R.generated.swift,
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"$PODS_ROOT/R.swift/rswift\" generate \"$SRCROOT/R.generated.swift\"\n";
};
F2F1FFBF2804A2AA00F3A8E4 /* Run Swiftlint */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
Expand Down Expand Up @@ -1335,7 +1311,6 @@
F96CDE772824EF9B002DEB90 /* MyInfoCore.swift in Sources */,
F25C79B8282CB5F2009C60EE /* CheckNicknameEntity.swift in Sources */,
F21276462811C6D500FB568D /* TOSFieldListViewCore.swift in Sources */,
F2FA365C2808897C00A24789 /* R.generated.swift in Sources */,
F22184FD284C9EED005CE6C3 /* ChatRoomListSortType.swift in Sources */,
8601F65C281309B10085F692 /* SplashView.swift in Sources */,
F25C79BA282D7524009C60EE /* String+Extensions.swift in Sources */,
Expand Down Expand Up @@ -1548,7 +1523,7 @@
CODE_SIGN_ENTITLEMENTS = TiquiTaca_iOS/TiquiTaca_iOSDebug.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 19;
CURRENT_PROJECT_VERSION = 24;
DEVELOPMENT_ASSET_PATHS = "\"TiquiTaca_iOS/Resource/Preview Content\"";
DEVELOPMENT_TEAM = 75FNRKTJ9S;
ENABLE_PREVIEWS = YES;
Expand All @@ -1564,7 +1539,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
MARKETING_VERSION = 1.0.1;
PRODUCT_BUNDLE_IDENTIFIER = "com.tiquitaca.TiquiTaca-iOS";
PRODUCT_NAME = TiquiTaca;
PROVISIONING_PROFILE_SPECIFIER = dev_tiquiTaca;
Expand All @@ -1583,7 +1558,7 @@
CODE_SIGN_ENTITLEMENTS = TiquiTaca_iOS/TiquiTaca_iOS.entitlements;
CODE_SIGN_IDENTITY = "iPhone Distribution: Minseok Kang (75FNRKTJ9S)";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 19;
CURRENT_PROJECT_VERSION = 24;
DEVELOPMENT_ASSET_PATHS = "\"TiquiTaca_iOS/Resource/Preview Content\"";
DEVELOPMENT_TEAM = 75FNRKTJ9S;
ENABLE_PREVIEWS = YES;
Expand All @@ -1599,7 +1574,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
MARKETING_VERSION = 1.0.1;
PRODUCT_BUNDLE_IDENTIFIER = "com.tiquitaca.TiquiTaca-iOS";
PRODUCT_NAME = TiquiTaca;
PROVISIONING_PROFILE_SPECIFIER = appStore_tiquiTaca;
Expand Down
11 changes: 7 additions & 4 deletions TiquiTaca_iOS/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,21 @@
//

import UIKit
import Firebase
import UserNotifications
import FirebaseCore
import FirebaseAnalytics
import FirebaseMessaging
import FirebasePerformance
import FirebaseCrashlytics

@main
final class AppDelegate: NSObject, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
) -> Bool {
UIApplication.shared.applicationIconBadgeNumber = 0

FirebaseApp.configure()
UIApplication.shared.applicationIconBadgeNumber = 0
Messaging.messaging().delegate = self
UNUserNotificationCenter.current().delegate = self

Expand Down Expand Up @@ -65,7 +68,7 @@ extension AppDelegate: UNUserNotificationCenterDelegate {

completionHandler([.sound, .banner, .list])
}

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
Messaging.messaging().appDidReceiveMessage(userInfo)
Expand Down
6 changes: 3 additions & 3 deletions TiquiTaca_iOS/SupportingFile/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,11 @@
<true/>
</dict>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>회원님의 위치정보가 지도에 표시됩니다. 위치 정보는 근처 채팅방 정보를 불러올때 그리고 채팅시 장소 반경 내부에 있는지 표기할 때 활용됩니다. 다른사람들에게 해당 반경 내부에 있는지에 대한 정보가 노출 될 수 있습니다. 언제든지 해당 위치 정보 공유를 중지할 수 있습니다.</string>
<string>위치 서비스를 켜면 내 주변 채팅가능 장소를 볼 수 있습니다.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>회원님의 위치정보가 지도에 표시됩니다. 위치 정보는 근처 채팅방 정보를 불러올때 그리고 채팅시 장소 반경 내부에 있는지 표기할 때 활용됩니다. 다른사람들에게 해당 반경 내부에 있는지에 대한 정보가 노출 될 수 있습니다. 언제든지 해당 위치 정보 공유를 중지할 수 있습니다.</string>
<string>위치 서비스를 켜면 내 주변 채팅가능 장소를 볼 수 있습니다.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>회원님의 위치정보가 지도에 표시됩니다. 위치 정보는 근처 채팅방 정보를 불러올때 그리고 채팅시 장소 반경 내부에 있는지 표기할 때 활용됩니다. 다른사람들에게 해당 반경 내부에 있는지에 대한 정보가 노출 될 수 있습니다. 언제든지 해당 위치 정보 공유를 중지할 수 있습니다.</string>
<string>위치 서비스를 켜면 내 주변 채팅가능 장소를 볼 수 있습니다.</string>
<key>UIAppFonts</key>
<array>
<string>Pretendard-Bold.otf</string>
Expand Down
47 changes: 26 additions & 21 deletions TiquiTaca_iOS/Views/Chat/ChatCore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,50 +14,53 @@ import SwiftUI
struct ChatState: Equatable {
enum Route {
case chatDetail
case none
}
var route: Route?

var isFirstLoad = true
var currentTab: RoomListType = .like
var route: Route?

var unReadChatCount: Int = 0
var enteredRoom: RoomInfoEntity.Response?
var lastChatLog: ChatLogEntity.Response?

var lastLoadTime: String = Date.current(type: .HHmm)
var enteredRoom: RoomInfoEntity.Response?
var unReadChatCount: Int = 0

var currentTab: RoomListType = .like
var likeRoomList: [RoomInfoEntity.Response] = []
var popularRoomList: [RoomInfoEntity.Response] = []

var showRoomEnterPopup: Bool = false
var moveToChatDetail: Bool = false

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

enum ChatAction: Equatable {

case onAppear
// MARK: Request Action
case fetchEnteredRoomInfo
case fetchLikeRoomList
case fetchPopularRoomList

// MARK: Socket Action
case socketConnected(String)
case socketDisconnected(String)
case socketResponse(SocketBannerService.Action)

// MARK: Response Action
case responsePopularRoomList(Result<[RoomInfoEntity.Response]?, HTTPError>)
case responseLikeRoomList(Result<[RoomInfoEntity.Response]?, HTTPError>)
case responseEnteredRoom(Result<RoomInfoEntity.Response?, HTTPError>)
case responseRoomFavorite(Result<RoomLikeEntity.Response?, HTTPError>)

// MARK: User Action
case tabChange(RoomListType)
case removeFavoriteRoom(RoomInfoEntity.Response)
case willEnterRoom(RoomInfoEntity.Response)
case refresh


case chatDetailAction(ChatDetailAction)
// MARK: Router Action
case setRoute(ChatState.Route?)
case setShowRoomEnterPopup(Bool)
case setMoveToChatDetail(Bool)
// MARK: Child Action
case chatDetailAction(ChatDetailAction)
}

struct ChatEnvironment {
Expand Down Expand Up @@ -96,10 +99,7 @@ let chatCore = Reducer<
> { state, action, environment in
switch action {
case .onAppear:
guard state.isFirstLoad else { return .none }

state.lastLoadTime = Date.current(type: .HHmm)
state.isFirstLoad = true
return .merge(
Effect(value: .fetchEnteredRoomInfo)
.eraseToEffect(),
Expand All @@ -108,7 +108,7 @@ let chatCore = Reducer<
Effect(value: .fetchPopularRoomList)
.eraseToEffect()
)
// MARK: Requeset
// MARK: Requeset
case .fetchEnteredRoomInfo:
return environment.appService.roomService
.getEnteredRoom()
Expand All @@ -133,7 +133,7 @@ let chatCore = Reducer<
.receive(on: environment.mainQueue)
.catchToEffect()
.map(ChatAction.responseRoomFavorite)
// MARK: Response
// MARK: Response
case let .responseRoomFavorite(.success(res)):
return Effect(value: .fetchLikeRoomList)
.eraseToEffect()
Expand Down Expand Up @@ -188,7 +188,7 @@ let chatCore = Reducer<
.responsePopularRoomList(.failure),
.responseRoomFavorite(.failure):
return .none
// MARK: View Action
// MARK: View Action
case .tabChange(let type):
guard state.currentTab != type else { return .none }
state.currentTab = type
Expand All @@ -200,10 +200,16 @@ let chatCore = Reducer<
return .none
case let .setRoute(route):
state.route = route
if route == .chatDetail {
state.moveToChatDetail = true
}
return .none
case let .setShowRoomEnterPopup(isPresented):
state.showRoomEnterPopup = isPresented
return .none
case let .setMoveToChatDetail(isMoveToChatDetail):
state.route = isMoveToChatDetail ? .chatDetail : ChatState.Route.none
state.moveToChatDetail = isMoveToChatDetail
state.route = isMoveToChatDetail ? .chatDetail : nil
return .none
case .refresh:
state.lastLoadTime = Date.current(type: .HHmm)
Expand All @@ -215,6 +221,5 @@ let chatCore = Reducer<
)
case .chatDetailAction:
return .none

}
}
Loading

0 comments on commit 501b75c

Please sign in to comment.