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


-### iOS Developers <~ing>
+## iOS Developers <~ing>
|
|
:---------:|:----------:
[이명진](https://github.com/thingineeer) | [이소진](https://github.com/513sojin) |
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/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/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 a6e58f70..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() {}
@@ -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/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
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 {
/// 서버 통신 성공
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)