Skip to content

Commit

Permalink
Release/1.0.9 -> main (#322)
Browse files Browse the repository at this point in the history
* feat: 화살표 클릭시 action 실행하도록 수정

* Revert "feat: 화살표 클릭시 action 실행하도록 수정"

This reverts commit 19a5277.

* feat: 알림 설정 진입 시 서버로부터 받아온 값으로 화면 표시

* feat: 각 토글 변경 시 API 호출 및 디바운스 설정

* feat: 계정 관리 클릭 시 화면 전환

* [Feature/#251] 연락처 차단 기능 구현 (#256)

* feat: 연락처 차단 기능 구현

* refactor: BlockContactRequestDTO의 blockContacts 프로퍼티 접근제한자 수정

* fix: 누락된 의존성 주입

* refactor: 연락처 trim 로직 개선

* [Feature/#257] 마이페이지 앱 버전 업데이트 기능 구현 (#258)

* feat: 마이페이지 버전 체크 및 업데이트 기능 구현

* feat: 연락처 차단 로직 수정

---------

Co-authored-by: leemhyungyu <[email protected]>

* [feature/#264] 마이페이지 프로필 수정 웹뷰 연결 (#270)

* [Feature/#263] 연락처 접근 권한 허용안함 시 설정 이동 (#265)

* feat: BottleURLType 설정 URLScheme 추가

* feat: 연락처 접근 권한 미허용시 설정으로 이동

* [Feature/#268] 연락처 차단 완료 시 Toast 띄우기 (#269)

* feat: 연락처 차단 업데이트 시 Toast 띄우기

* feat: 연락처 차단 업데이트 클릭 시 Alert 추가

* Release/1.0.8 -> develop (#285)

* chore: 빌드 넘버 1.0.8 (29)

* chore: DomainAuth 의존성 추가

* feat: ProfileEditView bottom ignoreSafeArea 추가

* [Feature/#277] 웹뷰 os type, 버전 파라미터 추가 (#279)

* [Feature/#278] 웹뷰 상단 safe area 무시하도록 수정 (#284)

* [Fix/#280] 로그인화면 백그라운드 이미지 비율 수정 (#281)

* [Fix/#282] 로그인 화면 로그인 버튼 vstack 하단 마진 수정 (#283)

* [Feature/#232] 커스텀 alert 적용 (#272)

* feat: SplashView bottleAlert 적용

* feat: PingPongDetailView bottleAlert 적용

* feat: ReportUserView bottleAlert 적용

* feat: SandBeachView bottleAlert 적용

* feat: 탈퇴하기 Alert  message 수정 (#274)

* [Feature/#275] 알림 권한 미허용 시 alert 추가 (#276)

* feat: AppDelegate 푸시 수신 상태 Notification 등록

* feat: UserClient 푸시 알림 허용 상태 로직 추가

* feat: 푸시 알림 허용 상태에 따른 알림설정 화면 로직 구현

* feat: UserClient 푸쉬알림허용상태 Publisher 구현

* feat: 푸쉬알림허용상태에 따른 로직 변경

* feat: 토글 버튼 binding 코드 개선

- 코드리뷰 반영

* feat: UserClient UserDefaultKeys enum 추가

* feat: 오탈자 수정

- pushNotificationSubject -> pushNotificationAllowStatusSubject

* chore: 빌드 넘버 1.0.8 (30)

---------

Co-authored-by: JongHoon <[email protected]>

* setting: Create pull-request.yml

* Update pull-request.yml

* Update pull-request.yml

* Update pull-request.yml

* Update pull-request.yml

* [Setting/#303] assertion error 슬랙 로깅 연결 #304

* feat: 호감 탭 추가 및 호감 웹뷰 연결 (#307)

* [Fix/#308] onboarding 4 디자인 qa 반영 #309

* fix: image 마진 값 수정

* fix: CTA 문구 완료 -> 확인 으로 수정

* [refactor/#310] 마이페이지 중복된 setTabBar 모디파이어 제거 #311

* [Refactor/#296] 웹뷰 프로필 생성 변경된 URL 적용 #312

* [Feature/#306] 호감 tab 웹뷰 action 핸들링 #313

* [Fix/#314] 보틀 보관함 하단에 탭 높이만큼 패딩값 추가 필요 #315

* [Feature/#316] 추천 보틀 웹뷰 액션 핸들링 #317

* feat: 호감 탭 추가 및 호감 웹뷰 연결

* feat: 호감 탭 웹뷰 액션 핸들링

* feat: 추천 보틀(랜덤 보틀, 떠내려온 보틀) 웹뷰 이벤트 핸들링

* [Refactor/#319] 프로필 이미지 블러 처리 로직 제거 #320

* chore: 버전, 빌드 넘버 업데이트 v1.0.9(31)

---------

Co-authored-by: JongHoon <[email protected]>
Co-authored-by: JongHoon <[email protected]>
  • Loading branch information
3 people authored Oct 16, 2024
1 parent 1c1a1f5 commit 3a0ff75
Show file tree
Hide file tree
Showing 61 changed files with 962 additions and 85 deletions.
58 changes: 58 additions & 0 deletions .github/workflows/pull-request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: Bottles Pull Request Workflow

on:
pull_request:
branches:
- develop
types: [ opened, reopened, synchronize ]

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Send Slack Notification
if: github.event.action == 'opened' || github.event.action == 'reopened'
env:
DATA: |
{
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*iOS PR* :bell: <@U07LESGBQEP> <@U07LHEEU2BW>"
}
},
{
"type": "section",
"fields": [
{
"type": "mrkdwn",
"text": "*Author:*\n<https://github.com/${{ github.event.sender.login }}|${{ github.event.sender.login }}>"
},
{
"type": "mrkdwn",
"text": "*Title:*\n${{ github.event.pull_request.title }}"
}
]
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*Description:*\n${{ github.event.pull_request.body }}"
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*Pull Request URL:*\n<${{ github.event.pull_request.html_url }}|View PR>"
}
}
]
}
run: |
curl -X POST -H 'Content-type: application/json' \
-d "$DATA" \
${{ secrets.SLACK_WEBHOOK_URL }}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ public extension ModulePath {
// MARK: - FeatureModule
public extension ModulePath {
enum Feature: String, CaseIterable {
case GoodFeeling
case Guide
case TabBar
case Report
Expand Down
75 changes: 74 additions & 1 deletion Projects/Core/Logger/Interface/Sources/Log.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
// Created by 임현규 on 7/23/24.
//

import Foundation
import UIKit
import OSLog

public enum Log {
Expand Down Expand Up @@ -132,6 +132,79 @@ public extension Log {
let logMessage = "\(message ?? "")"
log(message: logMessage, level: level, fileName: fileName, line: line, funcName: funcName)
assertionFailure(logMessage)
#if !DEBUG
Task {
guard let url = URL(string: Bundle.main.infoDictionary?["SLACK_WEBHOOK_URL"] as? String ?? "")
else {
return
}
guard let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String,
let buildNumber = Bundle.main.infoDictionary?["CFBundleVersion"] as? String
else {
return
}
async let device = UIDevice.current
let systemVersion = await device.systemVersion
let deviceName = await UIDevice.current.name

let errorLogJsonObject: [String: Any] = [
"pretext": "iOS Error Occured🔥",
"color": "#36a64f",
"fields": [
[
"title": "Message",
"value": "\(message ?? "no message")",
"short": true
],
[
"title": "File Name",
"value": "\(fileName)",
"short": true
],
[
"title": "Function Name",
"value": "\(funcName)",
"short": true
],
[
"title": "Line",
"value": "\(line)",
"short": true
],
[
"title": "Version",
"value": "\(appVersion)",
"short": true
],
[
"title": "Build Number",
"value": "\(buildNumber)",
"short": true
],
[
"title": "Device Name",
"value": "\(deviceName)",
"short": true
],
[
"title": "iOS Version",
"value": "\(systemVersion)",
"short": true
]
]
]
do {
let errorLogJsonData = try JSONSerialization.data(withJSONObject: errorLogJsonObject)
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = errorLogJsonData
_ = try await URLSession.shared.data(for: request)
} catch {
Log.debug(error)
}
}
#endif
}

static func fatal(message: Any?, level: Level = .fault, fileName: String = #fileID, line: Int = #line, funcName: StaticString = #function) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public enum BottleWebViewAction: Equatable {
/// 회원가입 성공 콜백
case signUpDidComplted(accessToken: String, refreshToken: String)
/// 외부 링크 이동
case openLink(href: String)
case openLink(url: String)

// MARK: - LogIn

Expand Down Expand Up @@ -53,7 +53,7 @@ public enum BottleWebViewAction: Equatable {
message: String? = nil,
accessToken: String? = nil,
refreshToken: String? = nil,
href: String? = nil,
url: String? = nil,
isCompletedOnboardingIntroduction: Bool? = nil
) {
switch type {
Expand Down Expand Up @@ -94,14 +94,14 @@ public enum BottleWebViewAction: Equatable {
refreshToken: refreshToken
)
case "openLink":
guard let href
guard let url
else {
Log.assertion(
message: "openLink: \(String(describing: href))"
message: "openLink: \(String(describing: url))"
)
return nil
}
self = .openLink(href: href)
self = .openLink(url: url)



Expand Down
4 changes: 4 additions & 0 deletions Projects/Domain/User/Sources/UserClient.swift
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,10 @@ extension UserClient: DependencyKey {
return UserDefaults.standard.bool(forKey: UserDefaultsKeys.alertAllowState.rawValue)
},

fetchPushNotificationAllowStatus: {
return UserDefaults.standard.bool(forKey: UserDefaultsKeys.alertAllowState.rawValue)
},

updateAlertState: { alertState in
let requestData = AlertStateRequestDTO(alertType: alertState.alertType, enabled: alertState.enabled)
try await networkManager.reqeust(api: .apiType(UserAPI.updateAlertState(reqeustData: requestData)))
Expand Down
2 changes: 1 addition & 1 deletion Projects/Domain/WebView/Sources/WebViewClient.swift
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ extension WebViewClient: DependencyKey {
message: dict["message"] as? String ?? "",
accessToken: dict["accessToken"] as? String ?? "",
refreshToken: dict["refreshToken"] as? String ?? "",
href: dict["href"] as? String ?? "",
url: dict["url"] as? String ?? "",
isCompletedOnboardingIntroduction: dict["hasCompleteIntroduction"] as? Bool ?? false
)
else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import DomainApplication
import CoreWebViewInterface
import CoreKeyChainStoreInterface
import CoreKeyChainStore
import CoreLoggerInterface

import Dependencies

Expand All @@ -24,21 +25,27 @@ public enum BottleWebViewType {
case createProfile
case signUp
case login
case bottles
case bottleArrival
case editProfile
case goodFeeling
case openURL(url: String)

var path: String {
switch self {
case .createProfile:
return "create-profile"
return "profile/create"
case .signUp:
return "signup"
case .login:
return "login"
case .bottles:
return "bottles"
case .bottleArrival:
return "bottles/recommendations"
case .editProfile:
return "profile/edit"
case .goodFeeling:
return "bottles/sents"
case .openURL:
return ""
}
}

Expand All @@ -53,11 +60,17 @@ public enum BottleWebViewType {
case .login:
return URL(string: baseURL + "/" + path)!

case .bottles:
case .bottleArrival:
return makeUrlWithToken(path)

case .editProfile:
return makeUrlWithToken(path)

case .goodFeeling:
return makeUrlWithToken(path)

case let .openURL(url):
return URL(string: url)!
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ extension BottleArrivalFeature {
state.isLoading = false
return .none

case .bottelDidAccepted:
return .send(.delegate(.bottelDidAccepted))
case let .arrivalBottleTapped(url):
return .send(.delegate(.arrivalBottleTapped(url: url)))

case .closeWebView:
return .send(.delegate(.closeWebView))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public struct BottleArrivalFeature {
// View Life Cycle
case onAppear
case webViewLoadingDidCompleted
case bottelDidAccepted
case arrivalBottleTapped(url: String)
case closeWebView
case presentToastDidRequired(message: String)
// Delegate
Expand All @@ -38,6 +38,7 @@ public struct BottleArrivalFeature {
public enum Delegate {
case bottelDidAccepted
case closeWebView
case arrivalBottleTapped(url: String)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,12 @@ public struct BottleArrivalView: View {
public var body: some View {

WithPerceptionTracking {
BaseWebView(
type: .bottles) { action in
BaseWebView(type: .bottleArrival) { action in
switch action {
case .webViewLoadingDidCompleted:
store.send(.webViewLoadingDidCompleted)
case .bottelDidAccepted:
store.send(.bottelDidAccepted)
case let .openLink(url):
store.send(.arrivalBottleTapped(url: url))
case .closeWebView:
store.send(.closeWebView)
case let .showTaost(message):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
//
// BottleArrivalDetailFeature.swift
// FeatureBottleArrival
//
// Created by JongHoon on 10/9/24.
//

import Foundation

import ComposableArchitecture

@Reducer
public struct BottleArrivalDetailFeature {
private let reducer: Reduce<State, Action>

public init(reducer: Reduce<State, Action>) {
self.reducer = reducer
}

@ObservableState
public struct State: Equatable {
let bottleArrivalURL: String

public init(bottleArrivalURL: String) {
self.bottleArrivalURL = bottleArrivalURL
}
}

public enum Action: BindableAction {
case backButtonDidTapped
case bottelDidAccepted
case showToast(message: String)

case delegate(Delegate)
public enum Delegate {
case backButtonDidTapped
}

case binding(BindingAction<State>)
}

public var body: some ReducerOf<Self> {
BindingReducer()

reducer
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
//
// BottleArrivalDetailFeatureInterface.swift
// FeatureBottleArrival
//
// Created by JongHoon on 10/9/24.
//

import Foundation

import CoreToastInterface

import ComposableArchitecture

extension BottleArrivalDetailFeature {
public init() {
@Dependency(\.toastClient) var toastClient

let reducer = Reduce<State, Action> { state, action in
switch action {
case .backButtonDidTapped:
return .send(.delegate(.backButtonDidTapped))

case let .showToast(message):
toastClient.presentToast(message: message)
return .none

default:
return .none
}
}

self.init(reducer: reducer)
}
}

Loading

0 comments on commit 3a0ff75

Please sign in to comment.