Skip to content

Commit

Permalink
Merge pull request #274 from OMZigak/feat/#273-kakaoShare
Browse files Browse the repository at this point in the history
[feat] 카카오 공유하기 + 비동기 함수 부분 리팩토링
  • Loading branch information
hooni0918 authored Aug 6, 2024
2 parents 0b13576 + 3db7ed1 commit 3e748e8
Show file tree
Hide file tree
Showing 10 changed files with 319 additions and 212 deletions.
102 changes: 102 additions & 0 deletions KkuMulKum.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,18 @@
objects = {

/* Begin PBXBuildFile section */
780E897A2C5D22B90009D27E /* KakaoSDK in Frameworks */ = {isa = PBXBuildFile; productRef = 780E89792C5D22B90009D27E /* KakaoSDK */; };
780E897C2C5D22B90009D27E /* KakaoSDKAuth in Frameworks */ = {isa = PBXBuildFile; productRef = 780E897B2C5D22B90009D27E /* KakaoSDKAuth */; };
780E897E2C5D22B90009D27E /* KakaoSDKCert in Frameworks */ = {isa = PBXBuildFile; productRef = 780E897D2C5D22B90009D27E /* KakaoSDKCert */; };
780E89802C5D22B90009D27E /* KakaoSDKCertCore in Frameworks */ = {isa = PBXBuildFile; productRef = 780E897F2C5D22B90009D27E /* KakaoSDKCertCore */; };
780E89822C5D22B90009D27E /* KakaoSDKCommon in Frameworks */ = {isa = PBXBuildFile; productRef = 780E89812C5D22B90009D27E /* KakaoSDKCommon */; };
780E89842C5D22B90009D27E /* KakaoSDKFriend in Frameworks */ = {isa = PBXBuildFile; productRef = 780E89832C5D22B90009D27E /* KakaoSDKFriend */; };
780E89862C5D22B90009D27E /* KakaoSDKFriendCore in Frameworks */ = {isa = PBXBuildFile; productRef = 780E89852C5D22B90009D27E /* KakaoSDKFriendCore */; };
780E89882C5D22B90009D27E /* KakaoSDKNavi in Frameworks */ = {isa = PBXBuildFile; productRef = 780E89872C5D22B90009D27E /* KakaoSDKNavi */; };
780E898A2C5D22B90009D27E /* KakaoSDKShare in Frameworks */ = {isa = PBXBuildFile; productRef = 780E89892C5D22B90009D27E /* KakaoSDKShare */; };
780E898C2C5D22B90009D27E /* KakaoSDKTalk in Frameworks */ = {isa = PBXBuildFile; productRef = 780E898B2C5D22B90009D27E /* KakaoSDKTalk */; };
780E898E2C5D22B90009D27E /* KakaoSDKTemplate in Frameworks */ = {isa = PBXBuildFile; productRef = 780E898D2C5D22B90009D27E /* KakaoSDKTemplate */; };
780E89902C5D22B90009D27E /* KakaoSDKUser in Frameworks */ = {isa = PBXBuildFile; productRef = 780E898F2C5D22B90009D27E /* KakaoSDKUser */; };
782B407B2C3E395A008B0CA7 /* WelcomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 782B407A2C3E395A008B0CA7 /* WelcomeView.swift */; };
782B407D2C3E3984008B0CA7 /* WelcomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 782B407C2C3E3984008B0CA7 /* WelcomeViewController.swift */; };
782B407F2C3E44B7008B0CA7 /* WelcomeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 782B407E2C3E44B7008B0CA7 /* WelcomeViewModel.swift */; };
Expand Down Expand Up @@ -418,23 +430,30 @@
buildActionMask = 2147483647;
files = (
785AE1C02C2E878600677CA0 /* FirebaseVertexAI-Preview in Frameworks */,
780E897A2C5D22B90009D27E /* KakaoSDK in Frameworks */,
785AE19E2C2E878600677CA0 /* FirebaseDatabaseSwift in Frameworks */,
785AE1AA2C2E878600677CA0 /* FirebaseFunctionsCombine-Community in Frameworks */,
785AE1BC2C2E878600677CA0 /* FirebaseStorage in Frameworks */,
785AE1BA2C2E878600677CA0 /* FirebaseRemoteConfigSwift in Frameworks */,
785AE16E2C2E85E800677CA0 /* Then in Frameworks */,
780E897C2C5D22B90009D27E /* KakaoSDKAuth in Frameworks */,
780E89902C5D22B90009D27E /* KakaoSDKUser in Frameworks */,
785AE1662C2E858A00677CA0 /* SnapKit in Frameworks */,
785AE1942C2E878600677CA0 /* FirebaseAppDistribution-Beta in Frameworks */,
785AE1B02C2E878600677CA0 /* FirebaseInstallations in Frameworks */,
784E4D992C3B95A900BC943C /* KeychainAccess in Frameworks */,
780E89822C5D22B90009D27E /* KakaoSDKCommon in Frameworks */,
785AE1902C2E878600677CA0 /* FirebaseAnalyticsWithoutAdIdSupport in Frameworks */,
785AE18E2C2E878600677CA0 /* FirebaseAnalyticsSwift in Frameworks */,
785AE1962C2E878600677CA0 /* FirebaseAuth in Frameworks */,
780E89862C5D22B90009D27E /* KakaoSDKFriendCore in Frameworks */,
785AE1A82C2E878600677CA0 /* FirebaseFunctions in Frameworks */,
785AE1602C2E857A00677CA0 /* LookinServer in Frameworks */,
785AE19A2C2E878600677CA0 /* FirebaseCrashlytics in Frameworks */,
785AE16B2C2E85C200677CA0 /* Moya in Frameworks */,
785AE1922C2E878600677CA0 /* FirebaseAppCheck in Frameworks */,
780E898C2C5D22B90009D27E /* KakaoSDKTalk in Frameworks */,
780E89882C5D22B90009D27E /* KakaoSDKNavi in Frameworks */,
DDAF1C7C2C3D5B86008A37D3 /* RxCocoa in Frameworks */,
785AE18A2C2E878600677CA0 /* FirebaseAnalytics in Frameworks */,
785AE1982C2E878600677CA0 /* FirebaseAuthCombine-Community in Frameworks */,
Expand All @@ -448,13 +467,18 @@
784E4D962C3B1C7F00BC943C /* KakaoSDKAuth in Frameworks */,
785AE1A62C2E878600677CA0 /* FirebaseFirestoreSwift in Frameworks */,
785AE1A22C2E878600677CA0 /* FirebaseFirestore in Frameworks */,
780E897E2C5D22B90009D27E /* KakaoSDKCert in Frameworks */,
785AE1A42C2E878600677CA0 /* FirebaseFirestoreCombine-Community in Frameworks */,
78BD61202C43F557005752FD /* SwiftKeychainWrapper in Frameworks */,
785AE1AC2C2E878600677CA0 /* FirebaseInAppMessaging-Beta in Frameworks */,
780E89842C5D22B90009D27E /* KakaoSDKFriend in Frameworks */,
780E898A2C5D22B90009D27E /* KakaoSDKShare in Frameworks */,
785AE1B22C2E878600677CA0 /* FirebaseMLModelDownloader in Frameworks */,
785AE19C2C2E878600677CA0 /* FirebaseDatabase in Frameworks */,
780E898E2C5D22B90009D27E /* KakaoSDKTemplate in Frameworks */,
785AE1A02C2E878600677CA0 /* FirebaseDynamicLinks in Frameworks */,
DDAF1C812C3D5BD5008A37D3 /* Kingfisher in Frameworks */,
780E89802C5D22B90009D27E /* KakaoSDKCertCore in Frameworks */,
785AE1AE2C2E878600677CA0 /* FirebaseInAppMessagingSwift-Beta in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down Expand Up @@ -1594,6 +1618,18 @@
DDAF1C7D2C3D5B86008A37D3 /* RxRelay */,
DDAF1C802C3D5BD5008A37D3 /* Kingfisher */,
78BD611F2C43F557005752FD /* SwiftKeychainWrapper */,
780E89792C5D22B90009D27E /* KakaoSDK */,
780E897B2C5D22B90009D27E /* KakaoSDKAuth */,
780E897D2C5D22B90009D27E /* KakaoSDKCert */,
780E897F2C5D22B90009D27E /* KakaoSDKCertCore */,
780E89812C5D22B90009D27E /* KakaoSDKCommon */,
780E89832C5D22B90009D27E /* KakaoSDKFriend */,
780E89852C5D22B90009D27E /* KakaoSDKFriendCore */,
780E89872C5D22B90009D27E /* KakaoSDKNavi */,
780E89892C5D22B90009D27E /* KakaoSDKShare */,
780E898B2C5D22B90009D27E /* KakaoSDKTalk */,
780E898D2C5D22B90009D27E /* KakaoSDKTemplate */,
780E898F2C5D22B90009D27E /* KakaoSDKUser */,
);
productName = KkuMulKum;
productReference = 78B928682C29402C006D9942 /* KkuMulKum.app */;
Expand Down Expand Up @@ -1991,10 +2027,13 @@
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = KkuMulKum/Resource/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "꾸물꿈";
INFOPLIST_KEY_NSCameraUsageDescription = "카메라 사용 권한이 필요합니다.";
INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "사진 라이브러리 접근 권한이 필요합니다.";
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UIUserInterfaceStyle = Light;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
Expand Down Expand Up @@ -2025,10 +2064,13 @@
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = KkuMulKum/Resource/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "꾸물꿈";
INFOPLIST_KEY_NSCameraUsageDescription = "카메라 사용 권한이 필요합니다.";
INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "사진 라이브러리 접근 권한이 필요합니다.";
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UIUserInterfaceStyle = Light;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
Expand Down Expand Up @@ -2152,6 +2194,66 @@
/* End XCRemoteSwiftPackageReference section */

/* Begin XCSwiftPackageProductDependency section */
780E89792C5D22B90009D27E /* KakaoSDK */ = {
isa = XCSwiftPackageProductDependency;
package = 784E4D922C3B1C7F00BC943C /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */;
productName = KakaoSDK;
};
780E897B2C5D22B90009D27E /* KakaoSDKAuth */ = {
isa = XCSwiftPackageProductDependency;
package = 784E4D922C3B1C7F00BC943C /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */;
productName = KakaoSDKAuth;
};
780E897D2C5D22B90009D27E /* KakaoSDKCert */ = {
isa = XCSwiftPackageProductDependency;
package = 784E4D922C3B1C7F00BC943C /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */;
productName = KakaoSDKCert;
};
780E897F2C5D22B90009D27E /* KakaoSDKCertCore */ = {
isa = XCSwiftPackageProductDependency;
package = 784E4D922C3B1C7F00BC943C /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */;
productName = KakaoSDKCertCore;
};
780E89812C5D22B90009D27E /* KakaoSDKCommon */ = {
isa = XCSwiftPackageProductDependency;
package = 784E4D922C3B1C7F00BC943C /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */;
productName = KakaoSDKCommon;
};
780E89832C5D22B90009D27E /* KakaoSDKFriend */ = {
isa = XCSwiftPackageProductDependency;
package = 784E4D922C3B1C7F00BC943C /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */;
productName = KakaoSDKFriend;
};
780E89852C5D22B90009D27E /* KakaoSDKFriendCore */ = {
isa = XCSwiftPackageProductDependency;
package = 784E4D922C3B1C7F00BC943C /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */;
productName = KakaoSDKFriendCore;
};
780E89872C5D22B90009D27E /* KakaoSDKNavi */ = {
isa = XCSwiftPackageProductDependency;
package = 784E4D922C3B1C7F00BC943C /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */;
productName = KakaoSDKNavi;
};
780E89892C5D22B90009D27E /* KakaoSDKShare */ = {
isa = XCSwiftPackageProductDependency;
package = 784E4D922C3B1C7F00BC943C /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */;
productName = KakaoSDKShare;
};
780E898B2C5D22B90009D27E /* KakaoSDKTalk */ = {
isa = XCSwiftPackageProductDependency;
package = 784E4D922C3B1C7F00BC943C /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */;
productName = KakaoSDKTalk;
};
780E898D2C5D22B90009D27E /* KakaoSDKTemplate */ = {
isa = XCSwiftPackageProductDependency;
package = 784E4D922C3B1C7F00BC943C /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */;
productName = KakaoSDKTemplate;
};
780E898F2C5D22B90009D27E /* KakaoSDKUser */ = {
isa = XCSwiftPackageProductDependency;
package = 784E4D922C3B1C7F00BC943C /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */;
productName = KakaoSDKUser;
};
784E4D932C3B1C7F00BC943C /* KakaoSDK */ = {
isa = XCSwiftPackageProductDependency;
package = 784E4D922C3B1C7F00BC943C /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */;
Expand Down
50 changes: 26 additions & 24 deletions KkuMulKum/Network/Service/AuthService.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ protocol AuthServiceType {
func getAccessToken() -> String?
func getRefreshToken() -> String?
func clearTokens() -> Bool
func performRequest<T: ResponseModelType>(_ target: AuthTargetType, completion: @escaping (Result<T, NetworkError>) -> Void)
func performRequest<T: ResponseModelType>(_ target: AuthTargetType) async throws -> T
}

class AuthService: AuthServiceType {
Expand Down Expand Up @@ -50,31 +50,33 @@ class AuthService: AuthServiceType {
return keychainService.accessToken == nil && keychainService.refreshToken == nil
}

func performRequest<T: ResponseModelType>(_ target: AuthTargetType, completion: @escaping (Result<T, NetworkError>) -> Void) {
provider.request(target) { result in
switch result {
case .success(let response):
print("서버 응답 상태 코드: \(response.statusCode)")
print("서버 응답 데이터: \(String(data: response.data, encoding: .utf8) ?? "디코딩 불가")")

do {
let decodedResponse = try JSONDecoder().decode(ResponseBodyDTO<T>.self, from: response.data)
if decodedResponse.success {
if let data = decodedResponse.data {
completion(.success(data))
} else if T.self == EmptyModel.self {
completion(.success(EmptyModel() as! T))
} else {
completion(.failure(.decodingError))
func performRequest<T: ResponseModelType>(_ target: AuthTargetType) async throws -> T {
return try await withCheckedThrowingContinuation { continuation in
provider.request(target) { result in
switch result {
case .success(let response):
print("서버 응답 상태 코드: \(response.statusCode)")
print("서버 응답 데이터: \(String(data: response.data, encoding: .utf8) ?? "디코딩 불가")")

do {
let decodedResponse = try JSONDecoder().decode(ResponseBodyDTO<T>.self, from: response.data)
guard decodedResponse.success else {
throw decodedResponse.error.map(self.mapErrorResponse) ?? NetworkError.unknownError("Unknown error occurred")
}
} else if let error = decodedResponse.error {
completion(.failure(self.mapErrorResponse(error)))
} else {
completion(.failure(.unknownError("Unknown error occurred")))
guard let data = decodedResponse.data else {
if T.self == EmptyModel.self {
continuation.resume(returning: EmptyModel() as! T)
} else {
throw NetworkError.decodingError
}
return
}
continuation.resume(returning: data)
} catch {
continuation.resume(throwing: error is NetworkError ? error : NetworkError.decodingError)
}
} catch {
print("디코딩 오류: \(error)")
completion(.failure(.decodingError))
case .failure(let error):
continuation.resume(throwing: NetworkError.networkError(error))
}
case .failure(let error):
if let response = error.response, response.statusCode == 413 {
Expand Down
106 changes: 49 additions & 57 deletions KkuMulKum/Resource/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -2,64 +2,56 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array/>
</dict>
</array>
<key>FirebaseAppDelegateProxyEnabled</key>
<string>No</string>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>kakaotalk</string>
<string>kakaoplus</string>
<string>kakaolink</string>
<string>kakaokompassauth</string>
</array>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>사진 라이브러리 접근 권한이 필요합니다.</string>
<key>NSCameraUsageDescription</key>
<string>카메라 사용 권한이 필요합니다.</string>
<key>UIUserInterfaceStyle</key>
<string>Light</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>kakao69aeef4a49d5b6772d62efdf1686994c</string>
</array>
</dict>
</array>
<key>KeychainAccessGroups</key>
<array>
<string>$(AppIdentifierPrefix)KkuMulKum.yizihn</string>
</array>
<key>UIAppFonts</key>
<array>
<string>Pretendard-Black.otf</string>
<string>Pretendard-Bold.otf</string>
<string>Pretendard-ExtraBold.otf</string>
<string>Pretendard-ExtraLight.otf</string>
<string>Pretendard-Light.otf</string>
<string>Pretendard-Medium.otf</string>
<string>Pretendard-Regular.otf</string>
<string>Pretendard-SemiBold.otf</string>
<string>Pretendard-Thin.otf</string>
</array>
<key>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>
<false/>
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneConfigurationName</key>
<string>Default Configuration</string>
<key>UISceneDelegateClassName</key>
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
</dict>
</array>
</dict>
</dict>
<key>KeychainAccessGroups</key>
<array>
<string>$(AppIdentifierPrefix)KkuMulKum.yizihn</string>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>kakaotalk</string>
<string>kakaoplus</string>
<string>kakaolink</string>
<string>kakaokompassauth</string>
</array>
<key>UIAppFonts</key>
<array>
<string>Pretendard-Black.otf</string>
<string>Pretendard-Bold.otf</string>
<string>Pretendard-ExtraBold.otf</string>
<string>Pretendard-ExtraLight.otf</string>
<string>Pretendard-Light.otf</string>
<string>Pretendard-Medium.otf</string>
<string>Pretendard-Regular.otf</string>
<string>Pretendard-SemiBold.otf</string>
<string>Pretendard-Thin.otf</string>
</array>
<key>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>
<false/>
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneConfigurationName</key>
<string>Default Configuration</string>
<key>UISceneDelegateClassName</key>
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
</dict>
</array>
</dict>
</dict>
</dict>
</plist>
5 changes: 4 additions & 1 deletion KkuMulKum/Source/MyPage/View/MyPageEtcSettingView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ import SnapKit
import Then

class MyPageEtcSettingView: BaseView {

let kakaoShareTapped = ObservablePattern<Void?>(nil)

let stackView = UIStackView(axis: .vertical).then {
$0.spacing = 24
$0.distribution = .fillEqually
Expand Down Expand Up @@ -74,7 +77,7 @@ class MyPageEtcSettingView: BaseView {

switch index {
case 0:
print("버전정보 탭됨")
kakaoShareTapped.value = ()
case 1:
print("이용약관 탭됨")
case 2:
Expand Down
2 changes: 1 addition & 1 deletion KkuMulKum/Source/MyPage/View/MyPageView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class MyPageView: BaseView {
private let topBackgroundView = UIView(backgroundColor: .white)
private let contentView = MyPageContentView()
private let alarmView = MyPageAlarmSettingView()
private let etcSettingView = MyPageEtcSettingView()
let etcSettingView = MyPageEtcSettingView()

override func setupView() {
backgroundColor = .green1
Expand Down
Loading

0 comments on commit 3e748e8

Please sign in to comment.