From d50a52f206fbecfe3677929fdf29c6ec4d2b14bd Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Tue, 13 May 2025 21:31:31 +0900 Subject: [PATCH 1/4] =?UTF-8?q?[Fix]=20#272=20-=20escaping=20=ED=82=A4?= =?UTF-8?q?=EC=9B=8C=EB=93=9C=20=EC=97=90=EB=9F=AC=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Runnect-iOS/Global/Extension/UIKit+/UIButton+.swift | 4 ++-- .../Runnect-iOS/Global/Utils/RNUtils/UserManager.swift | 4 ++-- Runnect-iOS/Runnect-iOS/Network/Service/NetworkProvider.swift | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Runnect-iOS/Runnect-iOS/Global/Extension/UIKit+/UIButton+.swift b/Runnect-iOS/Runnect-iOS/Global/Extension/UIKit+/UIButton+.swift index 70dcfdce..947b2097 100644 --- a/Runnect-iOS/Runnect-iOS/Global/Extension/UIKit+/UIButton+.swift +++ b/Runnect-iOS/Runnect-iOS/Global/Extension/UIKit+/UIButton+.swift @@ -56,7 +56,7 @@ extension UIButton { func press(vibrate: Bool = false, animated: Bool = true, - for controlEvents: UIControl.Event = .touchUpInside, _ closure: @escaping() -> Void) { + for controlEvents: UIControl.Event = .touchUpInside, _ closure: @escaping () -> Void) { if #available(iOS 14.0, *) { self.addAction(UIAction { _ in closure() if animated { self.clickedAnimation(vibrate: vibrate) } @@ -64,7 +64,7 @@ extension UIButton { } else { @objc class ClosureSleeve: NSObject { let closure: () -> Void - init(_ closure: @escaping() -> Void) { self.closure = closure } + init(_ closure: @escaping () -> Void) { self.closure = closure } @objc func invoke() { closure() } } let sleeve = ClosureSleeve(closure) diff --git a/Runnect-iOS/Runnect-iOS/Global/Utils/RNUtils/UserManager.swift b/Runnect-iOS/Runnect-iOS/Global/Utils/RNUtils/UserManager.swift index a6e58f70..ac712c41 100644 --- a/Runnect-iOS/Runnect-iOS/Global/Utils/RNUtils/UserManager.swift +++ b/Runnect-iOS/Runnect-iOS/Global/Utils/RNUtils/UserManager.swift @@ -38,7 +38,7 @@ final class UserManager { self.isKakao = isKakao } - func signIn(token: String, provider: String, completion: @escaping(Result) -> Void) { + func signIn(token: String, provider: String, completion: @escaping (Result) -> Void) { authProvider.request(.signIn(token: token, provider: provider)) { [weak self] response in guard let self = self else { return } switch response { @@ -79,7 +79,7 @@ final class UserManager { } } - func getNewToken(completion: @escaping(Result) -> Void) { + func getNewToken(completion: @escaping (Result) -> Void) { authProvider.request(.getNewToken) { [weak self] response in guard let self = self else { return } switch response { diff --git a/Runnect-iOS/Runnect-iOS/Network/Service/NetworkProvider.swift b/Runnect-iOS/Runnect-iOS/Network/Service/NetworkProvider.swift index b3718175..d0aef639 100644 --- a/Runnect-iOS/Runnect-iOS/Network/Service/NetworkProvider.swift +++ b/Runnect-iOS/Runnect-iOS/Network/Service/NetworkProvider.swift @@ -8,7 +8,7 @@ import Moya class NetworkProvider: MoyaProvider { - func request(target: Provider, instance: Model.Type, vc: UIViewController, completion: @escaping(Model) -> Void) { + func request(target: Provider, instance: Model.Type, vc: UIViewController, completion: @escaping (Model) -> Void) { self.request(target) { result in switch result { /// 서버 통신 성공 From f3ab0e38211ebb03f14610e4c15416a783206952 Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Tue, 13 May 2025 21:35:26 +0900 Subject: [PATCH 2/4] =?UTF-8?q?[Fix]=20#272=20-=20=EC=BD=94=EC=8A=A4=20?= =?UTF-8?q?=EA=B3=B5=EC=9C=A0=20=EB=B0=A9=EB=AC=B8=EC=9E=90=20=EB=AA=A8?= =?UTF-8?q?=EB=93=9C=EB=A1=9C=20=EB=90=98=EA=B2=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Global/Supports/SceneDelegate.swift | 2 ++ .../Global/Utils/RNUtils/UserManager.swift | 2 +- .../CourseDetail/VC/CourseDetailVC.swift | 22 ++++++++++++++++--- .../SignIn/VC/NickNameSetUpVC.swift | 1 + 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/Runnect-iOS/Runnect-iOS/Global/Supports/SceneDelegate.swift b/Runnect-iOS/Runnect-iOS/Global/Supports/SceneDelegate.swift index 954dc637..f18c54fc 100644 --- a/Runnect-iOS/Runnect-iOS/Global/Supports/SceneDelegate.swift +++ b/Runnect-iOS/Runnect-iOS/Global/Supports/SceneDelegate.swift @@ -51,6 +51,8 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { let window = UIWindow(windowScene: windowScene) let navigationController = UINavigationController() + if UserManager.shared.userType != .registered { UserManager.shared.userType = .visitor } + switch courseType { case .publicCourse: let courseDetailVC = CourseDetailVC() diff --git a/Runnect-iOS/Runnect-iOS/Global/Utils/RNUtils/UserManager.swift b/Runnect-iOS/Runnect-iOS/Global/Utils/RNUtils/UserManager.swift index ac712c41..5689316e 100644 --- a/Runnect-iOS/Runnect-iOS/Global/Utils/RNUtils/UserManager.swift +++ b/Runnect-iOS/Runnect-iOS/Global/Utils/RNUtils/UserManager.swift @@ -28,7 +28,7 @@ final class UserManager { @UserDefaultWrapper(key: "refreshToken") public var refreshToken @UserDefaultWrapper(key: "isKakao") public var isKakao var hasAccessToken: Bool { return self.accessToken != nil } - var userType: UserType = .registered + var userType: UserType = .visitor private init() {} diff --git a/Runnect-iOS/Runnect-iOS/Presentation/CourseDetail/VC/CourseDetailVC.swift b/Runnect-iOS/Runnect-iOS/Presentation/CourseDetail/VC/CourseDetailVC.swift index 6978a3f3..37760c62 100644 --- a/Runnect-iOS/Runnect-iOS/Presentation/CourseDetail/VC/CourseDetailVC.swift +++ b/Runnect-iOS/Runnect-iOS/Presentation/CourseDetail/VC/CourseDetailVC.swift @@ -259,6 +259,8 @@ extension CourseDetailVC { func setData(model: UploadedCourseDetailResponseDto) { self.uploadedCourseDetailModel = model self.userId = model.user.id + self.publicCourseId = model.publicCourse.id + self.courseId = model.publicCourse.courseId self.mapImageView.setImage(with: model.publicCourse.image) self.profileImageView.image = GoalRewardInfoModel.stampNameImageDictionary[model.user.image] // 탈퇴 유저 처리 @@ -358,10 +360,18 @@ extension CourseDetailVC { $0.centerY.equalTo(navibar) } - shareButton.snp.makeConstraints { - $0.trailing.trailing.equalTo(moreButton).offset(-50) - $0.centerY.equalTo(navibar) + if UserManager.shared.userType == .visitor { + shareButton.snp.makeConstraints { + $0.trailing.equalTo(self.view.safeAreaLayoutGuide).inset(10) + $0.centerY.equalTo(navibar) + } + } else { + shareButton.snp.makeConstraints { + $0.trailing.equalTo(moreButton).offset(-50) + $0.centerY.equalTo(navibar) + } } + } private func setUI() { @@ -372,6 +382,12 @@ extension CourseDetailVC { firstHorizontalDivideLine.backgroundColor = .g3 secondHorizontalDivideLine.backgroundColor = .g5 thirdHorizontalDivideLine.backgroundColor = .g3 + + guard UserManager.shared.userType != .visitor else { + // 방문자일 경우 더보기 버튼 제거 + moreButton.isHidden = true + return + } } private func setLayout() { diff --git a/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/NickNameSetUpVC.swift b/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/NickNameSetUpVC.swift index b887b23e..fed3c9a3 100644 --- a/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/NickNameSetUpVC.swift +++ b/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/NickNameSetUpVC.swift @@ -160,6 +160,7 @@ extension NickNameSetUpVC { do { let responseDto = try result.map(BaseResponse.self) if responseDto.status == 200 { + UserManager.shared.userType = .registered self.pushToTabBarController() } else { self.showToast(message: responseDto.message) From 3d9719c2a75929b14d21554141903f75d1a63e72 Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Wed, 14 May 2025 00:05:41 +0900 Subject: [PATCH 3/4] =?UTF-8?q?[Setting]=20#272=20-=20v2.2.0=20=EC=95=B1?= =?UTF-8?q?=EC=8A=A4=ED=86=A0=EC=96=B4=20=EB=B0=B0=ED=8F=AC=20=EC=84=B1?= =?UTF-8?q?=EA=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj | 12 ++++++++---- Runnect-iOS/Runnect-iOS/Info.plist | 12 ++++++------ 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj b/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj index c7383617..ec0f8485 100644 --- a/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj +++ b/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj @@ -1387,10 +1387,14 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Runnect-iOS/Pods-Runnect-iOS-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + inputPaths = ( + ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Runnect-iOS/Pods-Runnect-iOS-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); + outputPaths = ( + ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runnect-iOS/Pods-Runnect-iOS-frameworks.sh\"\n"; @@ -1700,7 +1704,7 @@ CODE_SIGN_ENTITLEMENTS = "Runnect-iOS/Runnect-iOSDebug.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2024.1128.0304; + CURRENT_PROJECT_VERSION = 2025.0513.2138; DEVELOPMENT_TEAM = 8Q4H7X3Q58; GENERATE_INFOPLIST_FILE = NO; INFOPLIST_FILE = "Runnect-iOS/Info.plist"; @@ -1718,7 +1722,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 2.1.0; + MARKETING_VERSION = 2.2.0; PRODUCT_BUNDLE_IDENTIFIER = "com.runnect.Runnect-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1741,7 +1745,7 @@ CODE_SIGN_ENTITLEMENTS = "Runnect-iOS/Runnect-iOS.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2024.1128.0304; + CURRENT_PROJECT_VERSION = 2025.0513.2138; DEVELOPMENT_TEAM = 8Q4H7X3Q58; GENERATE_INFOPLIST_FILE = NO; INFOPLIST_FILE = "Runnect-iOS/Info.plist"; @@ -1759,7 +1763,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 2.1.0; + MARKETING_VERSION = 2.2.0; PRODUCT_BUNDLE_IDENTIFIER = "com.runnect.Runnect-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/Runnect-iOS/Runnect-iOS/Info.plist b/Runnect-iOS/Runnect-iOS/Info.plist index cb97a61c..62fa291e 100644 --- a/Runnect-iOS/Runnect-iOS/Info.plist +++ b/Runnect-iOS/Runnect-iOS/Info.plist @@ -2,16 +2,14 @@ - ITSAppUsesNonExemptEncryption - - CFBundleIconName - AppIcon CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName Runnect CFBundleExecutable $(EXECUTABLE_NAME) + CFBundleIconName + AppIcon CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion @@ -21,7 +19,7 @@ CFBundlePackageType $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString - 2.1.0 + 2.2.0 CFBundleURLTypes @@ -46,7 +44,9 @@ CFBundleVersion - 2024.1128.0304 + 2025.0513.2138 + ITSAppUsesNonExemptEncryption + LSApplicationQueriesSchemes kakaokompassauth From f8ef7ff66d6bdbd5566b45951007247f67e72cc5 Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Wed, 14 May 2025 00:29:27 +0900 Subject: [PATCH 4/4] =?UTF-8?q?[Docs]=20#272=20-=20=EC=95=B1=EC=8A=A4?= =?UTF-8?q?=ED=86=A0=EC=96=B4=20=EB=B2=84=EC=A0=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index da2eb9f2..909faaee 100644 --- a/README.md +++ b/README.md @@ -3,14 +3,14 @@ # 한줄 소개 러닝과 일상을 Connect하다! 데일리 러닝앱 서비스 Runnect 🏃 -### 앱스토어 링크: [Appstore](https://apps.apple.com/kr/app/runnect-%EC%BD%94%EC%8A%A4%EB%A5%BC-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EA%B3%B5%EC%9C%A0%ED%95%98%EB%8A%94-%EB%8D%B0%EC%9D%BC%EB%A6%AC-%EB%9F%AC%EB%8B%9D%EC%95%B1/id1663884202) v2.1.0 +### 앱스토어 링크: [Appstore](https://apps.apple.com/kr/app/runnect-%EC%BD%94%EC%8A%A4%EB%A5%BC-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EA%B3%B5%EC%9C%A0%ED%95%98%EB%8A%94-%EB%8D%B0%EC%9D%BC%EB%A6%AC-%EB%9F%AC%EB%8B%9D%EC%95%B1/id1663884202) v2.2.0 ![1](https://github.com/thingineeer/Runnect-iOS/assets/88179341/937f9e65-61e5-4298-b703-bc2cf5022bf6) ![2](https://github.com/thingineeer/Runnect-iOS/assets/88179341/ad913367-65f2-4839-9658-e538bccf2d6c)
-### iOS Developers <~ing> +## iOS Developers <~ing> | | :---------:|:----------: [이명진](https://github.com/thingineeer) | [이소진](https://github.com/513sojin) |