From 97b75384e9a66e24037c595be9c3e0765591c82a Mon Sep 17 00:00:00 2001 From: MinjaeLee <2alswo7@khu.ac.kr> Date: Tue, 21 Sep 2021 22:22:35 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[FEAT]=20#4=20-=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=ED=99=94=EB=A9=B4=20=EA=B5=AC=ED=98=84,=20pod=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NADA-iOS-forRelease.xcodeproj/project.pbxproj | 16 + .../AppleLogo.imageset/Apple Logo.png | Bin 0 -> 330 bytes .../AppleLogo.imageset/Apple Logo@2x.png | Bin 0 -> 535 bytes .../AppleLogo.imageset/Apple Logo@3x.png | Bin 0 -> 734 bytes .../AppleLogo.imageset/Contents.json | 23 + .../KakaoLogo.imageset/Contents.json | 23 + .../KakaoLogo.imageset/pngaaa 1.png | Bin 0 -> 420 bytes .../KakaoLogo.imageset/pngaaa 1@2x.png | Bin 0 -> 740 bytes .../KakaoLogo.imageset/pngaaa 1@3x.png | Bin 0 -> 1133 bytes .../NADALogo.imageset/Contents.json | 23 + .../NADALogo.imageset/Group 1.png | Bin 0 -> 1684 bytes .../NADALogo.imageset/Group 1@2x.png | Bin 0 -> 3611 bytes .../NADALogo.imageset/Group 1@3x.png | Bin 0 -> 5844 bytes .../Resouces/Storyboards/Login.storyboard | 146 ++ .../Login/LoginViewController.swift | 28 + Podfile | 1 + Podfile.lock | 20 +- Pods/KakaoSDKAuth/LICENSE | 201 ++ .../sources/KakaoSDKAuth/KakaoSDKAuth.h | 25 + .../sources/KakaoSDKAuth/auth/Auth.swift | 70 + .../sources/KakaoSDKAuth/auth/AuthApi.swift | 164 ++ .../KakaoSDKAuth/auth/AuthController.swift | 429 ++++ .../auth/AuthRequestAdapter.swift | 31 + .../auth/AuthRequestRetrier.swift | 155 ++ .../KakaoSDKAuth/auth/MigrateManager.swift | 107 + .../KakaoSDKAuth/auth/TokenManagable.swift | 40 + .../KakaoSDKAuth/auth/TokenManager.swift | 58 + .../KakaoSDKAuth/model/OAuthToken.swift | 176 ++ Pods/KakaoSDKCommon/LICENSE | 201 ++ .../common/KakaoSDKCommon.swift | 142 ++ .../KakaoSDKCommon/common/common/Common.swift | 80 + .../common/common/Properties.swift | 60 + .../common/common/SdkCoder.swift | 44 + .../common/common/SdkCrypto.swift | 271 +++ .../common/common/SdkError.swift | 348 +++ .../KakaoSDKCommon/common/common/SdkLog.swift | 145 ++ .../common/common/SdkUtils.swift | 49 + .../KakaoSDKCommon/common/common/Urls.swift | 177 ++ .../common/extension/Array+Utils.swift | 27 + .../common/extension/Data+Utils.swift | 21 + .../DecodingContainer+AnyCollection.swift | 162 ++ .../common/extension/Dictionary+Utils.swift | 57 + .../EncodingContainer+AnyCollection.swift | 146 ++ .../common/extension/URL+Utils.swift | 32 + .../common/model/AuthErrorInfo.swift | 27 + .../common/model/ErrorInfo.swift | 43 + .../sources/KakaoSDKCommon/network/Api.swift | 228 ++ .../network/ApiRequestAdapter.swift | 30 + Pods/KakaoSDKUser/LICENSE | 201 ++ .../sources/KakaoSDKUser/KakaoSDKUser.h | 25 + .../sources/KakaoSDKUser/UserApi.swift | 364 ++++ .../KakaoSDKUser/model/AccessTokenInfo.swift | 35 + .../sources/KakaoSDKUser/model/Scope.swift | 67 + .../sources/KakaoSDKUser/model/User.swift | 240 +++ .../KakaoSDKUser/model/UserServiceTerms.swift | 62 + .../model/UserShippingAddresses.swift | 103 + Pods/Manifest.lock | 20 +- Pods/Pods.xcodeproj/project.pbxproj | 1857 ++++++++++++----- .../KakaoSDKAuth/KakaoSDKAuth-Info.plist | 26 + .../KakaoSDKAuth/KakaoSDKAuth-dummy.m | 5 + .../KakaoSDKAuth/KakaoSDKAuth-prefix.pch | 12 + .../KakaoSDKAuth/KakaoSDKAuth-umbrella.h | 17 + .../KakaoSDKAuth/KakaoSDKAuth.debug.xcconfig | 13 + .../KakaoSDKAuth/KakaoSDKAuth.modulemap | 6 + .../KakaoSDKAuth.release.xcconfig | 13 + .../KakaoSDKCommon/KakaoSDKCommon-Info.plist | 26 + .../KakaoSDKCommon/KakaoSDKCommon-dummy.m | 5 + .../KakaoSDKCommon/KakaoSDKCommon-prefix.pch | 12 + .../KakaoSDKCommon/KakaoSDKCommon-umbrella.h | 16 + .../KakaoSDKCommon.debug.xcconfig | 13 + .../KakaoSDKCommon/KakaoSDKCommon.modulemap | 6 + .../KakaoSDKCommon.release.xcconfig | 13 + .../KakaoSDKUser/KakaoSDKUser-Info.plist | 26 + .../KakaoSDKUser/KakaoSDKUser-dummy.m | 5 + .../KakaoSDKUser/KakaoSDKUser-prefix.pch | 12 + .../KakaoSDKUser/KakaoSDKUser-umbrella.h | 17 + .../KakaoSDKUser/KakaoSDKUser.debug.xcconfig | 13 + .../KakaoSDKUser/KakaoSDKUser.modulemap | 6 + .../KakaoSDKUser.release.xcconfig | 13 + ...A-iOS-forRelease-acknowledgements.markdown | 615 ++++++ ...NADA-iOS-forRelease-acknowledgements.plist | 633 ++++++ ...se-frameworks-Debug-input-files.xcfilelist | 3 + ...e-frameworks-Debug-output-files.xcfilelist | 3 + ...-frameworks-Release-input-files.xcfilelist | 3 + ...frameworks-Release-output-files.xcfilelist | 3 + .../Pods-NADA-iOS-forRelease-frameworks.sh | 6 + .../Pods-NADA-iOS-forRelease.debug.xcconfig | 6 +- .../Pods-NADA-iOS-forRelease.release.xcconfig | 6 +- 88 files changed, 7994 insertions(+), 559 deletions(-) create mode 100644 NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/AppleLogo.imageset/Apple Logo.png create mode 100644 NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/AppleLogo.imageset/Apple Logo@2x.png create mode 100644 NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/AppleLogo.imageset/Apple Logo@3x.png create mode 100644 NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/AppleLogo.imageset/Contents.json create mode 100644 NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/KakaoLogo.imageset/Contents.json create mode 100644 NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/KakaoLogo.imageset/pngaaa 1.png create mode 100644 NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/KakaoLogo.imageset/pngaaa 1@2x.png create mode 100644 NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/KakaoLogo.imageset/pngaaa 1@3x.png create mode 100644 NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/NADALogo.imageset/Contents.json create mode 100644 NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/NADALogo.imageset/Group 1.png create mode 100644 NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/NADALogo.imageset/Group 1@2x.png create mode 100644 NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/NADALogo.imageset/Group 1@3x.png create mode 100644 NADA-iOS-forRelease/Resouces/Storyboards/Login.storyboard create mode 100644 NADA-iOS-forRelease/Sources/ViewControllers/Login/LoginViewController.swift create mode 100644 Pods/KakaoSDKAuth/LICENSE create mode 100644 Pods/KakaoSDKAuth/sources/KakaoSDKAuth/KakaoSDKAuth.h create mode 100644 Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/Auth.swift create mode 100644 Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/AuthApi.swift create mode 100644 Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/AuthController.swift create mode 100644 Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/AuthRequestAdapter.swift create mode 100644 Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/AuthRequestRetrier.swift create mode 100644 Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/MigrateManager.swift create mode 100644 Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/TokenManagable.swift create mode 100644 Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/TokenManager.swift create mode 100644 Pods/KakaoSDKAuth/sources/KakaoSDKAuth/model/OAuthToken.swift create mode 100644 Pods/KakaoSDKCommon/LICENSE create mode 100644 Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/KakaoSDKCommon.swift create mode 100644 Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/Common.swift create mode 100644 Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/Properties.swift create mode 100644 Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/SdkCoder.swift create mode 100644 Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/SdkCrypto.swift create mode 100644 Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/SdkError.swift create mode 100644 Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/SdkLog.swift create mode 100644 Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/SdkUtils.swift create mode 100644 Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/Urls.swift create mode 100644 Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/Array+Utils.swift create mode 100644 Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/Data+Utils.swift create mode 100644 Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/DecodingContainer+AnyCollection.swift create mode 100644 Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/Dictionary+Utils.swift create mode 100644 Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/EncodingContainer+AnyCollection.swift create mode 100644 Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/URL+Utils.swift create mode 100644 Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/model/AuthErrorInfo.swift create mode 100644 Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/model/ErrorInfo.swift create mode 100644 Pods/KakaoSDKCommon/sources/KakaoSDKCommon/network/Api.swift create mode 100644 Pods/KakaoSDKCommon/sources/KakaoSDKCommon/network/ApiRequestAdapter.swift create mode 100644 Pods/KakaoSDKUser/LICENSE create mode 100644 Pods/KakaoSDKUser/sources/KakaoSDKUser/KakaoSDKUser.h create mode 100644 Pods/KakaoSDKUser/sources/KakaoSDKUser/UserApi.swift create mode 100644 Pods/KakaoSDKUser/sources/KakaoSDKUser/model/AccessTokenInfo.swift create mode 100644 Pods/KakaoSDKUser/sources/KakaoSDKUser/model/Scope.swift create mode 100644 Pods/KakaoSDKUser/sources/KakaoSDKUser/model/User.swift create mode 100644 Pods/KakaoSDKUser/sources/KakaoSDKUser/model/UserServiceTerms.swift create mode 100644 Pods/KakaoSDKUser/sources/KakaoSDKUser/model/UserShippingAddresses.swift create mode 100644 Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth-Info.plist create mode 100644 Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth-dummy.m create mode 100644 Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth-prefix.pch create mode 100644 Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth-umbrella.h create mode 100644 Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth.debug.xcconfig create mode 100644 Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth.modulemap create mode 100644 Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth.release.xcconfig create mode 100644 Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon-Info.plist create mode 100644 Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon-dummy.m create mode 100644 Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon-prefix.pch create mode 100644 Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon-umbrella.h create mode 100644 Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon.debug.xcconfig create mode 100644 Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon.modulemap create mode 100644 Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon.release.xcconfig create mode 100644 Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser-Info.plist create mode 100644 Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser-dummy.m create mode 100644 Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser-prefix.pch create mode 100644 Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser-umbrella.h create mode 100644 Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser.debug.xcconfig create mode 100644 Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser.modulemap create mode 100644 Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser.release.xcconfig diff --git a/NADA-iOS-forRelease.xcodeproj/project.pbxproj b/NADA-iOS-forRelease.xcodeproj/project.pbxproj index 3818dc6b..a5b115bb 100644 --- a/NADA-iOS-forRelease.xcodeproj/project.pbxproj +++ b/NADA-iOS-forRelease.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 3979709626FA0BE5003FB4F5 /* LoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3979709526FA0BE5003FB4F5 /* LoginViewController.swift */; }; + 3979709826FA0BF0003FB4F5 /* Login.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3979709726FA0BF0003FB4F5 /* Login.storyboard */; }; DBBB91E1639641F40C5B4416 /* Pods_NADA_iOS_forRelease.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A2183AE0E469153221624A0 /* Pods_NADA_iOS_forRelease.framework */; }; F83206AA26F61E3700D61711 /* FrontCardCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F83206A826F61E3700D61711 /* FrontCardCell.swift */; }; F83206AB26F61E3700D61711 /* FrontCardCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F83206A926F61E3700D61711 /* FrontCardCell.xib */; }; @@ -31,6 +33,8 @@ /* Begin PBXFileReference section */ 1E770167DDA25A2CE063AA5C /* Pods-NADA-iOS-forRelease.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NADA-iOS-forRelease.release.xcconfig"; path = "Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease.release.xcconfig"; sourceTree = ""; }; + 3979709526FA0BE5003FB4F5 /* LoginViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginViewController.swift; sourceTree = ""; }; + 3979709726FA0BF0003FB4F5 /* Login.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Login.storyboard; sourceTree = ""; }; 4A2183AE0E469153221624A0 /* Pods_NADA_iOS_forRelease.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_NADA_iOS_forRelease.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7F4EE1D042EC783FA8528743 /* Pods-NADA-iOS-forRelease.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NADA-iOS-forRelease.debug.xcconfig"; path = "Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease.debug.xcconfig"; sourceTree = ""; }; F83206A826F61E3700D61711 /* FrontCardCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrontCardCell.swift; sourceTree = ""; }; @@ -77,6 +81,14 @@ path = Pods; sourceTree = ""; }; + 3979709426FA0BD8003FB4F5 /* Login */ = { + isa = PBXGroup; + children = ( + 3979709526FA0BE5003FB4F5 /* LoginViewController.swift */, + ); + path = Login; + sourceTree = ""; + }; 4D28D444572353D68574D2B0 /* Frameworks */ = { isa = PBXGroup; children = ( @@ -202,6 +214,7 @@ F8FC43A026C01F040033E151 /* ViewControllers */ = { isa = PBXGroup; children = ( + 3979709426FA0BD8003FB4F5 /* Login */, F8FC438926C01CDD0033E151 /* MainViewController.swift */, ); path = ViewControllers; @@ -220,6 +233,7 @@ children = ( F8FC439026C01CDE0033E151 /* LaunchScreen.storyboard */, F8FC438B26C01CDD0033E151 /* Main.storyboard */, + 3979709726FA0BF0003FB4F5 /* Login.storyboard */, ); path = Storyboards; sourceTree = ""; @@ -312,6 +326,7 @@ files = ( F8FC43BF26C025180033E151 /* .swiftlint.yml in Resources */, F83206AB26F61E3700D61711 /* FrontCardCell.xib in Resources */, + 3979709826FA0BF0003FB4F5 /* Login.storyboard in Resources */, F8FC439226C01CDE0033E151 /* LaunchScreen.storyboard in Resources */, F8FC438F26C01CDE0033E151 /* Assets.xcassets in Resources */, F8FC438D26C01CDD0033E151 /* Main.storyboard in Resources */, @@ -387,6 +402,7 @@ F8FC43B126C020A70033E151 /* TempNetwork.swift in Sources */, F8FC438A26C01CDD0033E151 /* MainViewController.swift in Sources */, F83206AA26F61E3700D61711 /* FrontCardCell.swift in Sources */, + 3979709626FA0BE5003FB4F5 /* LoginViewController.swift in Sources */, F8FC43AF26C0209A0033E151 /* TempModel.swift in Sources */, F8FC43A726C020780033E151 /* TempExtensions.swift in Sources */, F8FC43B826C0227D0033E151 /* Const.swift in Sources */, diff --git a/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/AppleLogo.imageset/Apple Logo.png b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/AppleLogo.imageset/Apple Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2266fc22ba0f74d54322c78df28dc967ffd07b7a GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB{(Vmu$B+ufxxtNs%?dm|yBqQrC|fiw-qD!1 zAn$>e-vf?AEE^b=1MJEJGTt_xjeWCdn&m%C*5y2ldlA`cYyMRPI;oU}h>=^(_QFiosE@yvsl zdY)dMOU-py`b=mxrhBRGO1xPdx>FafXu8^8vz0c-#p@bh^m2MBG1*4*Vhp>1A6^71xK zYs#|ad9JqGt=jE&#!vL2$e% z3en!x0Fos62!6ZW#QRqRIG@jh;BDc3wSP5$w%WVkr_)KCdTRiy*V5XuN!jPcd-6VSw}6<3H^)!j%QhxeGkC%yuo2p4j5{{v<|0J!~nRp>A)pU zHjDs*AaD{Ke?FgP0DLzW!Ko4BCxAX(1lJMM0Kk~fZMlvc1_0jeX4B~uoejouUDwLC zp$l|oRSzsN=KxSgVgPLoDBD(+rApIOi2z76+!A{{9`i4M!2>w-ZfrxQnq;snb$DjX z2_IBU-?{>T!!=p}QyR~v_l3(O0GC;q(u0hz!&&@A*Z_jn@HQ7aZHXPzVe@hu7O6TFPb(&KQ== ZmVZQciun38%KHES002ovPDHLkV1i(2;ynNW literal 0 HcmV?d00001 diff --git a/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/AppleLogo.imageset/Apple Logo@3x.png b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/AppleLogo.imageset/Apple Logo@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..ba29679f35352aa50b4567140ed8894a6294b939 GIT binary patch literal 734 zcmV<40wMj0P)0z#~hDGZRnI8ec*fs zkhm(O^CZPlX@q0C-L7)vkr!3qT)?OE{eHhP=YjKu450!>qY({p9*>8)0B*v%w8df} zicku;TrR<#&kLJE0VrXi1#s5_rGU>x#-T7HXMnJRKq|lh;VMc&S0=eRRKJ#ymv5aCH%_Yi( z47Ogcg|&bfwi1{H&UQjsg-q(OD^Q6BgTedIpNmRW40(_k!rAIX7Q=ZUZ3t`C!A2_p zNfeU+m?|f<0-)BU4dU8lV@&C1Ee`cC^p=bT#4-!WM;(QIq19>?Tma7K)&hX4MefUr zj+ZO}dGEMf8s|L%ySW=8l;pO$&@ZF*Iy%h0oaZ#Pj0FI+`eJe3N&qOD36wpoh587By@j@djaH(Koy7_kV&j07Xt9FK zjhTsG7DseJmYMtzPEK<2<=#FTvBpI1t)(OstXEz9a)744q!k(BZzP1CFCbynT! zpg4{XS-37{D+0Qb=lSCwP!I$?Ca&rBL^Ew?S$6aT;yBMOAQP2kIV_6eM!K%M)fS>< z+xFfhBeEG`7leVhmcBHFe1jG>=u;S~s;W21bKeO=d7k&6Gdd6k;#kK?lDybFUBu1L zk=Z~rS45?6!Wi4yqZZB`$LZ2tY64;NA>Sp^j;u$i&>bc=X07HZW8(J1FdWnnE$4R- z0Z#5S6P$6tS^U3qcZMok}~!CTc4d0c{i%)I!kCB48m}2>}m_ z5CjuZRFI(2B!!~H``o)de-mf8NnaEzaQ>5{+FR@g_OehYd~Vf&(QJTi+kHInBF#%U+bSF99m4N8j`Ntd zEA5Esg={uEM)NWvw#eq0<2g6-`TQfeh zCI%sUn3@^X+Tt_#oF;#c&~z=mU|H4^E~X?HcCmgf^1)0S8WpDJt8_U}nlR5=w%0_+ zaKJ*8fk-5hGMS#!5)O`PWcEu4;Hx^I>r9`70D`hjBa@X7K)U?XoLP_%Kv2HvG`*4# zz@qy`BlApxr(7zPKAJ4Wlbn2zV9`C!VznInB|^gz3`_VPB{F|j#84MzsSo`$4~x%` zxECk|X>EJUK!Q5;n$APwA2$(lwR+;+T;;G4?34JzEw7MTF{1lY2IyAeo^%ff8^h0) z+77GEV3!nFJ^9!<&$z+zK(-4_7 z(^RP%j(&4IB>}L*D+IfnOeVYaW7im>FtQqrUqonBe85__!?MnDSf)&z;U_CCKJXuz WIQIBb8T(8C0000JiwsI65(VfGVj#`b#n3;IYUBmiJPQVcWsQxEm69a{By&U{vXGbD#*3}x zc#8B6Z@JgK*4EbZ$W4x0B|~IFYH%bH*^S(b`XLZH&P}&V z@BA+-;5|+=sT^u(XsAltE>%TdUfwu*=LW@T;x3dU>zkUI%2PE+N($>tr&r3P|9r<0 zbU5PMOCa_>S-oLB!DKLji*AWa2`L~{h`L4R&q`KrB~{1;chIB7{TNT@UnwXk7-6mG zMhfOfP!q*FnAFnJa#AdA6f_GE+6MCy@gAmz!{LuaAhb2hB49(n#ZP3?GcXyVmqZ{H6RA#aUSMdB;Lm~<)Q@xLaW3D zAy5_&AcWeg1%tve@d+?cv1;|H1>zsf&>tl=RQ!YC`lFz z{#$$k3{h+C@~2sx<%($ z>k?|Scni1jrIlSzbW6NYxeN75yn_m+@!i&w))d(v>9EunaXE08dNRmc*gW`Tt@|&T zsaa1hSVQrfxEIyBxFtRIG+CvQ>?E0)H<(p-1>cDK@Bvv4p@*p&1XERzN2_JxxQK}h zAvjOmf$O}}S~lX+x<@cwCB0D}kH;^wt5*pzjW`C&06?Q}o_`3}*pK|}seMpv0Bb#k zTxlp2(oet~BqIHQPBJHPhmAb{uHEY#Ws%sk8Vf-k(|x*H){Lv}_tJ?aJ#DZhL&!;E zdaIa+^%bEi$dqyaQY@o;V~n)S7Uhme@xaw~+VOG^G!-lzJ1AjmHKK9mOWIV>QIB*T z1d-R0B{&*>ok8!&G)?pm9{cFwtLFWSii+|%4ns6R(Ag4=Mm33_@qZ-jz&5GQJ>btN zsx=@!MQOo;DWdWhJ&{2tS2B-$~UaoO@y4lz@Ms-M5jdY zk4@rbuthSz3!#f_9v6z&L1JbFmZ?E@hzIZwqV$2_T5*RM00000NkvXXu0mjfK}!VQ literal 0 HcmV?d00001 diff --git a/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/NADALogo.imageset/Contents.json b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/NADALogo.imageset/Contents.json new file mode 100644 index 00000000..ad6d3af5 --- /dev/null +++ b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/NADALogo.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/NADALogo.imageset/Group 1.png b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/NADALogo.imageset/Group 1.png new file mode 100644 index 0000000000000000000000000000000000000000..7ce689fec0f2f58e2dcaba822c32cfb8f760f3f4 GIT binary patch literal 1684 zcmV;F25b3=P)QZny4iZ_of;jsIjfa7~8l!nHXcF zzzjqn;X(U=@u4P)2|kDhkiY-|lLk;JAj|mwE@CL_44ixCUi^N^$vJbFA#>+{zwMlJ zi3C9q1VIo4K@bE%5ClOG1VIo4K@bE%5Cq|WO+i6{A2+fvK4fvq%gaNChliiX@Nu-` zK0ZD!(BRACMFJbbab?l1+b)rK#WW1Ui081F0=<74#&4-ax5iCPEJmkzrX({80L}Z z+?<=6yQiU{;WsidmJtMEghPz$7^cw1`FVPJI-{|%(Mcx75-}t%FE828&+mH-V`+0l zLex7B9Xe$1>gt*$6XHuI2X)1h2;ARb7(og^R+b(T5^{-5im6=|EaN=HxJ>HdAb+;3 ztnAwC>}+6LTia+=Rn-ic082x|d*{Ps;*JdcDu@Dq{ zPoVnJQG2r%Sqo8Ja3^A;U494pgf-EW!7V!#(7ioj++_{sE966%J zhK0DWSzu9>=nNOcs}^$N#EF2oxVVpTH=gnIy95OVX;zSwltf5lJ#k5H!GRtv30Bfe z2I4gffn~(tf@7c3Qb4d&J0>=hU zS@jIm8wEE^31V0?Zk9htXLJ<=nN&Pn)YrI>!+ht5hK6dEz?l+{8IBbR2??}!?_Q$= zwx@7lZ$*0t*YXwVgl>XBj0{-CH4MXSHXEHfbxQlu7rP{0TS`euA?#6*#kh>?c%5`W z7eOFK1;pTG^ANUx^z`&)%NSfoq^727F~p)&LX;0lF-isD${T6wTM*+_d|4m9^Ru$D zwCrgy?3xhhHFsrUM$r;*nZJ`llsWCp%uE}^sKM}@&%b`@*s){F#9(&s-feX;7_Ot9 zBE={ZBse(ueVR`Z|ARMyR>F-v39E3N6r)6tqN1WZVH9T<&v9&6%?i9&c`IdRW+s{x zqeKv-wx^fQSuk_*n30hY<$1c2e~2Ky?5q@a{#YmyJVTYjAxkG%jN##75a zn*KyV$frndE}j>+&n}+p?Cd0A zeRSJ1t*@`I!@kFbh1Z<^%2LYu=(>qrS69b^Xqng4)D#U34Uw=mdY>wAL5MSOUqA2* zDH7L5_hTN-&CRzaCMNhvsJ?-L0h*kgBw=+7Id{|2(lUe%s|;An2#X@Dj$sF(YHMpd z;JThekvOwef;)CZ|0cy4dNPeOFVrOGwn}if*=)-97YsitSY2IxrN6)bi!EX$*GVzn zIJ@b>@=C?n*qGH9xPBooJo2U+PNy>&8P{JfYto07N?Q%Ylf$^MpIp|0#kiYv!s`!X z;NsYAW}@-ZJ)f)#BlE%86hB3E1MModtYr;I5ClOG1VIo4K@bE%5ClOG1VIo4K@bE% e5ClOGHo`xD4>XKgSkn*y0000t*?bXjHYS;w0dDMJkh$ZMMG1Y#D40)coC__P)Exu zkaly1-OK8iF!T05J$!ry;a82!E|DeB$=%wRPjMslst=|NjbY#jk^y{k54ZSqy*Qr$ zSRWsKXM(?Shob!fAi$S;&n1~x+A?F*0^}TRmXf{=0Y||Mx`PeR=jddklQ;TjXEY9H z&pm$+G%Mt$I3K?HaXg@Mh~&Ne{~(_d1_{fK<&_mF*+(_@PlJMjOtrO1&u|r3fFev+ zSNAkgOs#HlVS$bAwI(toB*eqi)bvJ6VpoHjR|w6NV943ucb4V1s_a_-mYB6GfNO=U z;qViejaQgW5tJeQ8BN3=R=U01_V)G_X=!QUbQVWV$BK#y$Q20*vO+!E@{uC4QZ2rq z8UOzM+7B4-xA1lYL&F}Odb(B;d7qDop=4)ob@*@~Pi0rYZ}?I9c)V^92fvVzT}EeWJDgtWG9c-;Mv!ysK2USGi@P8sup>TMLyd_10*n8*#-nw|hVi!xok z=a=3~Jv?WKNpcdsejpk#Ka-uC`>!fI^_*oQLfL@75GcO9dmQ$fq~_w)5!meq1U8jI zrVm-s3AC~D{EL=mo?oJI6Vli2ZJ(bQxw)-d%Ucgg@MmJ)_J8ppx1p^aN}g*gk#K`? zG8bvQ<9SO%>J+&O>+S9J(35}f1w|H_MtTdZr7(?LnL;xqJOSpeo?Pc&~%gQ)6M#XM15< zXyYFPt2S(Q@OYZ*q#zqKl40-{q z9nFzqUaZ$c^j>uCO~00hR#pSHO93os?`n&knOpRF z3yq3)JU!Y`^j^>rR`Dr`2B(X&7rMNhTiMmHee{U3ime4E^GJXgkGz^?QXa>;iE@73 zCX*sx56a5QR{p6Fo%(=4Ah>0aUyf=5dFc5fQd3ja20h2xZXr0(uL^8^dafxtb#iD) zT-vahV8jJ8&-B8gN_5quX;)(st#GD)8Sa1&F|W;>v2)Zc!!*gB@meRB@frud>lB~n zNXJ=U39>v@SLShDdlGkhHE&{vBhLtS#)|h2(}GcE&XQi?CRQCQU&B-D4}gq=XfO!$lCQ|kH~bo zF}q>yoh@Y^A2*{Vw`(R z7MQrSv}BeQ0%U*HRE=e(Tj-G!jN766@-4`2`X`@+NchOe$b1NztN*#?G=nVl*>|k5 zu8@BcF}objgD6Y1pY}b-*&#dLm@)~@KCOs8H91v^&(ztFBRdxY23 zE5IKM3C##pnLnDq*ZBP5iuANd+?`YU)^&eIMn?RC#oItBg-OLr2s(}749tBchDrA! zdrAnJ05TCq*Zs_^s*=k$^WPM+v=vXTtE-!!uvK_WJzj^sGJ_ zD#V6R_^>OWBp(VMB)CsyKCrU#!}by1GyZhBGQP@LEGug{MrTvqKAZ^~(|K7l&c$wG zaNEwiL*NZm9U`}w6K?OSF7%{MIq+jy%%30xb1A7#l}*|8J5XQlSiakUBWgPQ%xFQe ziiO3s(-Ycc+&rhx`BcoiioJBbaBqEskK$77K1$`LY5Qc6cQGYM&FCM{v{?ox!} zqbb#vzU3nk2Kom9PKP&9p@NGdGNEd@$4BAieJG1og@Ti%;^t302AmY0+uz6e4nZ4O#$s8rU{lY&k5-JCVbnb5J zk7f`*4xCfrYPMm=%c=SKVndL0WJL+NX7{hTQlU_7C_A;l>5|-9#m@H&koaewR4oJz zl>|*!Ijk9Q;c`m}My z7Gua@cVfd*$+zJM4RPwSt2fP}O|na0CZ|61txE7Pg}qI|bN0(T#R^hi`m-pXjJfVk zu;zHdYE~~Smb~1TCH3jkr{*Z`gZ!bc)(2SB+1D7=UHtAPRc4q%Ibz9Wfu@s*fkYg( zfx~Cp-;@!nscvra!3QWKX*d7QJpUNpJ>RZy4#Bn*^c(Ny=*31N_Nr!e$DpBxv>!4m ze&=Q0X=U?k1$$e~Jyw$=5?)WPZ2wSIwihpRVIK{NMJ=4lB$aNmVW&UTK3=G;0 zRGdJql2R${w;wF#B|rer_xN?OHtxsAZx*|f`g+o&&=8AwR)Yr*G6eanV|DlU_hJ0k z_3#rHSRKTMC_8%?R))h#JWArxjkqXMWu-cgxcIqO61uGjkH4P?Qn{>?Vn6-9wZ6VS z%Pgs~?$6EO1LBF+2Y&5NM(5?;3`Ds}{s|Y?ZS=`aW-ieD5Fn1_%2-0RO~V#6=<(tF z_OKbU`a>|c_#GLY7dH>u;*{M+QC&;qF)!dyk#s(QtQc6A`_uZ810}!>%tPdip+6|7 zXVe-q#%wsBmcG2`9Z!eDBh8N+L809^?abf8u}n)CH)~N*QSr{L2Kr`?u`0xdYYHC3 zn|wd_mcLWj(w&j3q9?%!OG`jCK*C1l_ZD-7{$!1`w)J|!S+mD^m=Rz{=genhQ;R26 zQf2pacNE*Kx1y8h)xhDy)HQRLnbay?I6%}LP>1}XQ%yzZ=wdeJyG4zEjf|k$w`#GW z1v4^rSSRY&=!i4xagDjLLqB4cbVv_ZA}7lluXEvU7^r3D-(Wl*@3TFxCBc?eOeKGQ zu{r4)rSoKRZu3k75!9C3XHEpYO0$Vt8jgyJQY#tDkwpXzO;5|{ki9w(h1PiZCw4&W z+*k6spwqK;oOa8Fzu$exx*B;Vwb2srH%GP^logRPtb(BZdF z`YT_zPvAP=nrm&fFx`J78}e% z4ov)nG571)?{b8?af=32G&VL4T&%|g6&01SCoV4c=bcItwte%6vjEb|-)VJWXD3|o zPcWNPz8gRc|y zq+R!f<*PB;?Xk?iMn@BS`}%@Ir-|NnI!~jDT%`$)r~P8S_v@uT{90I805kwfBf1W(ZQM)T|Yw zC|cB>X#_F8d4GQU{sZ6deLU{tK3>mrUiaQ}&$;)EBvWGu3nL#R003ao*V8r!04OB? z>-4l_BnUk|ia>LSCZP7az$W>F+Wn!?Lja&YmFe7x z1_0pk)YpD!8A`GHlOZT$E$`c5v^@PQdOdBkYdt)%2pH0;f@yNoqpW<#;7MA2M!l59 zdedad^glJ;5QsbOlTu4??)1%X)C=#1>MQsJn`?%~dAWMyb>8cwd(bn8v?<_84)kR_ zntpo`XyQfG_pt9Idp=F0MN<3dMKMkXevYA!>%zXx^SEY(bHiUJ_s z-rF*%Do6cdn0;ACHfkPodHC7ihrPYMOx&i|K`7nFUe0Gi(PKnRJr;W@a;phNp0?@^ zd3)2AQ{_??T>{lJaIo-M6qvD=4jP4Y`~8UOZI`CBQNBuBX+y&iFqov3A(APS$B4}0 zvR60rP%Vz|ddv=S6!DaklcPhU(GfLUH{U7S zo}WU3f`S%`=Qnx#5!4sTJ+d!Ps@I0HB-)j-%qHJRdBHa7Kgqa9J(SB+itlq`OnDnU zySZdnGDKsLB?ZS_)2HS+_8u?Rx!~vLujamCy}bq-s^w-JqS=}Z|8Y%Ghc?J%FkQTt z5wQ=t-NE}{xM5%T;_CGGx*D-9!Ws!1cYDo6$wX>;{_D#_^68_icu!P21svO4Dk+0- zrTQPDDxzw36Z(ZwDC@}z6JW)60zVhC`=%>!NTgj?^c(riv3!b=R&wC!+q&9C6b1L( zzvm);|NiZ;d2BfJ)BUShRTN~TM~3qtz@MuQ)@A`wSJ8vTpK-a0P)bW#SY@e z3yh9Co9uozf9QwSN?ftS zenBgASkLwGamgL}i=QnW+KFenj-8yFQ!*!BHg3(gS$wdM zo?Tez2=9JLGtaD;)Ww+kG7SGmP%yby1&QS<9w-!7UXG#i=}!}RanMaSUz8|>sgJ(8 z+&$wZpz}zP!A84>m*6Gqp`I<@jEa@R6B))PYaCnaR2pY!rIzDN%iV$*{vE$HTxjxx z(Jd^TWNTyd32J3EhjQxi>58E!zwCI5O;O-iw?cuXL7=mlmX;Q=DY4cRuuns>s1`k0 zleuLIRyB);iI2aA`Ficl)|Ug&-Enkc{N@oyYdn!>Vd_(u*2Zz?Q zY0sd`*;n9l;-{@+5YxfOlgJejxuA_PZQsE-P)f}&){Bnl8j6&;w!n3)d;bGU2@|6{ zCBikiFsbp1tG4jCV>JDthPitBjAW+?h~0c~bx0eXM=4QjJ0Ew}wxkmHXV{&ESI2Qp zWD3bT!T-lSJnn3m&_7&;*Wi=&NE7t`%AQmRl9pB=NZZKYX6)9SkhJ1x_A zmbUVjAsW3W2BQuIrW18iZruBlzy{3sxLg|pY>*ght6o|CxdscO?yM% zq0;c8`9y;hAyp-IbG5Ck5*ax@oJh1=a4>-`q3IUtsH>_Xf6n>>dVO>9oTJk-5k?|tQo@CjQs12P7o-2w@?=f+kEjRemPF(LL~`%r%qomaQL3Q-@*gs9aIm; zNLSj%5)Suw@8odBT2@x}F29T%OXMs z_PMT6)bQgnsb7JA;$_#MNc%K(ehJ-Gct)hkm~6M!Ru>hUp`q4;^MfAFTTy0(m#v@2 zJ^sLcVx9GvC?y~#_xaU@HOq9_q88&b6i!t>sub$J6ZllAe_EjPwm>fkqvm7p`aURp zY%?FeNUidO?PO}JQAvv}VlnsWYOJNLtyiKzfL`&B^%A&<-w^>fczk@!`R98csY>KI z4%J{NSM9=OzSwr@Y6k}HC^`&6&QzLE^XwOA1ZCryC0%cD%vq9qG_s-+72q*AeN(rzBhg)~;K;abTLLs9lvn2AkjqZcV#^1Sg69f8j z*;h?w_^9Ty2JC&ZDuNR<%z6gz*4c<7YjL|YAlJ;e4tY5*T%~s4XigOSj*7|D-HT!4 zNdl`@VJL@8B?dE>YWmr3q^qs1Ww=jkFehBCeiCxl(Clk)V}tk@F~0ao*OBI(sFNF4 zW!Urd+RvtnQr2GvwFc3Cho1CmgX<%zUKX*Q77o)MDLf6yS}~zYG8!XY(pwfphaeKo z5Cs;R{A~WW$eQ=rhKfltmhq|zbGdNsh8N6JHtcAXBiL$mdRMxkGo^ks^{70*ZV6uw zG{XL!OvG6T3JT&ahvt0fspXKeHccL8SK!AjCzsHr`CwZ6zSAgkY#Az~Fk-z;fx_Z} z4z2#g{v~Y6?b~K%7bAUa1}%0y+{L9Nl{&u~HMrp^zqo+kq_fZ2nj_}QKpWlCl$JhM zZR1-4OVmqWizzyi-8Z-Li=9?$kwZDsWYrhX_3e{L^NQ4?Qx0A)bHx=R$ijX2<6)AB zD-K0jns~&|SpAsG3SyfbRx{vjqGmm)JZ7OH%jH?TG&zoNH5uQfN=RpiQ5^U>aS2p> zbFLry+b}rsm1=-&yie=Alir4ub6U0;IIVq%gF~rexdGX)#E(!%CBK6sa?1SwU=q`% zQxEglBbNft%8nj=P=m3muBBVF@S1C~NYE^uO`}=C;^J+#XeRLTC5Y{|gU=4!T#dUM zLP|rk&SK&1GYy$H%)fjKl7?DaTW4lwE>?lAvIzIn-fOUllbMZF)pLuy>+cz1&nwnf z6~JKddO_HqPeuv$B?%d~3z(GxR{Kl1q|lopD&6KP{XISX6*ogG+K2|H^aV5J9!K%X zQ3Vb&iSPGs8#tE5bUm7=G%GQ-F#WlT&ZJ~R)PBd;-kN3iqLXNH+XzoCnmM_#Uu4I> zXIDB8w3Q~Jj?#{@)5-Q59Jv^_w|!D+q!X84u#Wp$r?%TP$;Z<9MY)U)*JfW!Hxjp1 zAUQx5P~3rIrCGc{dTl1(M|`JUH1sNCwE0N1nCKfe`CcyO)L>LI*=u5SBZQP`Uuzkr z@0v2m1NR8Nah%*Wm+CoLo-#)DqS4R&pGNRoy5yPC$RxuV?7Hgdww-chILmO)n>;Q} zaCw8(8qItgVXQG+caE8)?YR56yCV$$?(MggsKU+lh@r?r^)qoewzaUGo+?iptz#4j7@pm@Ub9sK%l{$GL-JM~H9*hOQ=0V-S8lfxX#?!#!AQKC5agdVzEL8 ziM!4jt@)!81c5&Am*U0Sk_Ti%u9@t)>sH`UiaKH?aGI#xE3P=I#$~YpfkJ9(gT>22=trzR3-faT|V6UR?Yejk!>sAI;Wa z`&94pjdo&b)th1yt*LRYbxg-&_MQRxqtU&9tgj~Rsm;3M)or-!C@J^ltjcKCylJ~; zjPZ1!z`$j^9`*F_Cz%VM)D~?~lWDj^voLcqKiQ$QnqT!~E zV;2z=o(D7;{Ud6uzK-I^Gx16h2InJvS3cVFqj`>=V2z3O*P>!z~yc)_1OX603 z#XR9gbb0yt9TTA9EQh{J*q_e#SV0s4W|fo%x8iQ$qBADGip2{xOA15cK`5M4lxYZ^ z-e2vAh<4wfm?^+&z9~)S7f@P!1UWaj4`>tfiRJEZIwEY(%)b*0IJkLu!X0TQGUriFR3nGiMqAWQ@kj-~W(_hK9!Eu|`McTH_MMQ-=*o@5A4{DHvSUS1=$);aN+0 zxdx^ePQW={G@HT^L%%%`7IBnqVOvdJJbFJBlYSP>HGtx!V!yS89 zVuv#UV@za{6oEi6P*PS_Z3^#n&)nA@G#3<(xXB5tMWGH}*j;LMPgScncGzri>Qg+0 zlu{ZP^$2c_V$8b;+lGmYJEEt1Qj!7a2k(F2pjW{Z67#U_%UZa*$)N8GesZ zj^)Fg){xly@MxZxVG-17ES=Dac5|5lIO$?JCntv&Onv`t*IX}z6*{B@K?DE(-A7r{ z^-EHEvyp2P)l*r`{oyxkfl((#K(HI&eq7ht+md%mTmDl`Q4=4GLxJF@#yn|?)YI-K zd#q#?V-1RecQ3KiSzAc^&bjb5S$2(o>5-it9v&N}ju)0|S)^)D_}OL!S>XGxy5{H{ z0xO4z+_tG9==M12S5a3NL>7%RcGyo-4>+O=qlxxzCn*^x(vsJmV~d}zj*pLT1;$QMG1g?c)PJl~Tv!)KAlEwXiZSWQP*x{qf*=3!W|dyD7V7{~k*!>w zDou^rYP5GswnJ;CEP@2g$^= zP@bPd{pil#*z9coOAp}`dZfK+bY|jIJfGruqkQ51a@TEhVK_ZTM+Bb|OZTDztk zb-ElU^sI_Tn1R~r4VSHb9>%hWkY1ZKcGMh?-B(UC<`gx2y^tnLj;9Lt3cHjX(9s7o z!02=TV$Y3c@H;9kjA8DBdjW}z*I*Q89yO9uQkSuQONaj`VJ*K=C1>+Y+zF7$U_b)E zHVvypgy-qk2|;XJ+_Qq=0VO@o0;(HraI$EQ!H9CgQzxfiWg{aa;Q#0)%%$C48M?_g zC?!<=tlM0s5YSyUlAvCkIzrpehK3xAB3yUxNK4m2zmcf;75sKqp9)eBhcF+?$j*bE z>5;N++qLa22z!y7W#LZ-f&OP&3N*|=2e6jq(Go=v!1hX zQc8?`SKjZqBG0&sYq)kzogSZmXS!A(HiLri-uVwq@V335x3`S2PAcNOK!=MAlLK7u z?Cfl8XTaK{mfJcYd+6zVFKd!&h6<7%$vpo0*B}eO{FCOWi?f=YM{n#8jK>VPtbn$! zxOwmY?xq9o+#q{M11dV!9R+gM{Nd4~M<*x^lhb1z^jWPikAH8%+p3xx!Wx%#Mn;Bj zEdqgYCa3b;v_YfSOBM?Q^12zBc`HPnx)IRoKWsp?^K3Qv*;`pJ%&hV=+G)f|zIQIp z`>&I0Je&UK^P?eRb5qms^bo{neb}`ydFCs;rVzLoA>%|4`!B6(uDNgb-LmbG>qn6- z737|Eo9;sb;@9Xkm||DXYm6l#xB5QBHT|$XiO-?`Tpbirb#7Jm58{JXdr!{I#5=8z zeB7VIjn?KtCD60#zxSf7omPGVu%JaEFx+-cC}W+=JlAo8WszF((XTbZ!&{bp^WXWb zGv1_vj%A{roeqXrAH*D`5YJT}>{o;vi4dy({}fvPuhQ5%hJ8 KwQDsUU;ZDjeibGF literal 0 HcmV?d00001 diff --git a/NADA-iOS-forRelease/Resouces/Storyboards/Login.storyboard b/NADA-iOS-forRelease/Resouces/Storyboards/Login.storyboard new file mode 100644 index 00000000..84377ceb --- /dev/null +++ b/NADA-iOS-forRelease/Resouces/Storyboards/Login.storyboard @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NADA-iOS-forRelease/Sources/ViewControllers/Login/LoginViewController.swift b/NADA-iOS-forRelease/Sources/ViewControllers/Login/LoginViewController.swift new file mode 100644 index 00000000..880be616 --- /dev/null +++ b/NADA-iOS-forRelease/Sources/ViewControllers/Login/LoginViewController.swift @@ -0,0 +1,28 @@ +// +// LoginViewController.swift +// NADA-iOS-forRelease +// +// Created by 민 on 2021/09/21. +// + +import UIKit + +class LoginViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + + // 카카오톡으로 로그인 버튼 클릭 시 + @IBAction func kakaoLoginButton(_ sender: Any) { + + } + + // Apple로 로그인 버튼 클릭 시 + @IBAction func appleLoginButton(_ sender: Any) { + + } + +} diff --git a/Podfile b/Podfile index 520c0f45..0d1408d8 100644 --- a/Podfile +++ b/Podfile @@ -10,4 +10,5 @@ pod 'Moya', '~> 14.0' pod 'SkeletonView' pod 'SwiftLint' pod 'VerticalCardSwiper' +pod 'KakaoSDKUser' end diff --git a/Podfile.lock b/Podfile.lock index 38b2b2b4..3ddd89b3 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,5 +1,16 @@ PODS: - Alamofire (5.4.3) + - KakaoSDKAuth (2.5.6): + - KakaoSDKCommon (= 2.5.6) + - KakaoSDKCommon (2.5.6): + - KakaoSDKCommon/Common (= 2.5.6) + - KakaoSDKCommon/Network (= 2.5.6) + - KakaoSDKCommon/Common (2.5.6) + - KakaoSDKCommon/Network (2.5.6): + - Alamofire (~> 5.1) + - KakaoSDKCommon/Common (= 2.5.6) + - KakaoSDKUser (2.5.6): + - KakaoSDKAuth (= 2.5.6) - Moya (14.0.0): - Moya/Core (= 14.0.0) - Moya/Core (14.0.0): @@ -9,6 +20,7 @@ PODS: - VerticalCardSwiper (2.3.1) DEPENDENCIES: + - KakaoSDKUser - Moya (~> 14.0) - SkeletonView - SwiftLint @@ -17,6 +29,9 @@ DEPENDENCIES: SPEC REPOS: trunk: - Alamofire + - KakaoSDKAuth + - KakaoSDKCommon + - KakaoSDKUser - Moya - SkeletonView - SwiftLint @@ -24,11 +39,14 @@ SPEC REPOS: SPEC CHECKSUMS: Alamofire: e447a2774a40c996748296fa2c55112fdbbc42f9 + KakaoSDKAuth: 1e1fa737e78eed3f301ab5c164526781a37a42f9 + KakaoSDKCommon: cdf340a8f671eef75f4ca012003cb350af3c4b6d + KakaoSDKUser: f488aa4699b3fd3a836ab5c7e25e2cb4cea190c1 Moya: 5b45dacb75adb009f97fde91c204c1e565d31916 SkeletonView: a085533443fed0198309f1979780afb6e80eaedd SwiftLint: 99f82d07b837b942dd563c668de129a03fc3fb52 VerticalCardSwiper: 68df635b354500f86934ea044ade37a264c044c6 -PODFILE CHECKSUM: 7da9d2be4f330814582df22e8a247c9567e50a67 +PODFILE CHECKSUM: ed90d25629de2c0d09e14aa4277ccf85ccb9037a COCOAPODS: 1.10.1 diff --git a/Pods/KakaoSDKAuth/LICENSE b/Pods/KakaoSDKAuth/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/Pods/KakaoSDKAuth/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/KakaoSDKAuth.h b/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/KakaoSDKAuth.h new file mode 100644 index 00000000..9f05a8b9 --- /dev/null +++ b/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/KakaoSDKAuth.h @@ -0,0 +1,25 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +//! Project version number for KakaoSDKAuth. +FOUNDATION_EXPORT double KakaoSDKAuthVersionNumber; + +//! Project version string for KakaoSDKAuth. +FOUNDATION_EXPORT const unsigned char KakaoSDKAuthVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/Auth.swift b/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/Auth.swift new file mode 100644 index 00000000..880e2620 --- /dev/null +++ b/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/Auth.swift @@ -0,0 +1,70 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation +import Alamofire +import KakaoSDKCommon + +public let AUTH = Auth.shared + +public class Auth { + let sdkVersionKey = "com.kakao.sdk.version" + static public let retryTokenRefreshCount = 3 + static public let shared = Auth() + + public var tokenManager: TokenManagable + + public init(tokenManager : TokenManagable = TokenManager.manager) { + self.tokenManager = tokenManager + + initSession() + + if tokenManager is KakaoSDKAuth.TokenManager { + MigrateManager.checkSdkVersionForMigration() + } + } + + func initSession() { + let interceptor = Interceptor(adapter: AuthRequestAdapter(), retrier: AuthRequestRetrier()) + API.addSession(type: .AuthApi, session: Session(configuration: URLSessionConfiguration.default, interceptor: interceptor)) + API.addSession(type: .RxAuthApi, session: Session(configuration: URLSessionConfiguration.default, interceptor: AuthRequestAdapter())) + + SdkLog.d(">>>> \(API.sessions)") + } + + /// ## 커스텀 토큰 관리자 + /// TokenManagable 프로토콜을 구현하여 직접 토큰 관리자를 구현할 수 있습니다. + public func setTokenManager(_ tokenManager: TokenManagable = TokenManager.manager) { + self.tokenManager = tokenManager + } + + public func responseData(_ HTTPMethod: Alamofire.HTTPMethod, + _ url: String, + parameters: [String: Any]? = nil, + headers: [String: String]? = nil, + apiType: ApiType, + completion: @escaping (HTTPURLResponse?, Data?, Error?) -> Void) { + + API.responseData(HTTPMethod, url, parameters: parameters, headers: headers, sessionType: .AuthApi, apiType: apiType, completion: completion) + } + + public func upload(_ HTTPMethod: Alamofire.HTTPMethod, + _ url: String, + images: [UIImage?] = [], + headers: [String: String]? = nil, + apiType: ApiType, + completion: @escaping (HTTPURLResponse?, Data?, Error?) -> Void) { + API.upload(HTTPMethod, url, images:images, headers: headers, apiType: apiType, completion: completion) + } +} diff --git a/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/AuthApi.swift b/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/AuthApi.swift new file mode 100644 index 00000000..5d1a8ff3 --- /dev/null +++ b/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/AuthApi.swift @@ -0,0 +1,164 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation +import KakaoSDKCommon + +/// 카카오 로그인 인증서버로 API 요청을 담당하는 클래스입니다. +/// +final public class AuthApi { + + /// 간편하게 API를 호출할 수 있도록 제공되는 공용 싱글톤 객체입니다. + public static let shared = AuthApi() + + // MARK: Methods + + /// 카카오톡 으로부터 리다이렉트 된 URL 인지 체크합니다. + public static func isKakaoTalkLoginUrl(_ url:URL) -> Bool { + if url.absoluteString.hasPrefix(KakaoSDKCommon.shared.redirectUri()) { + return true + } + return false + } + + /// 사용자가 앞서 로그인을 통해 토큰을 발급 받은 상태인지 확인합니다. + /// 주의: 기존 토큰 존재 여부를 확인하는 기능으로, 사용자가 현재도 로그인 상태임을 보장하지 않습니다. + public static func hasToken() -> Bool { + return Auth.shared.tokenManager.getToken() != nil + } + + /// :nodoc: 인증코드 요청입니다. + public func authorizeRequest(parameters:[String:Any]) -> URLRequest? { + guard let finalUrl = SdkUtils.makeUrlWithParameters(Urls.compose(.Kauth, path:Paths.authAuthorize), parameters:parameters) else { return nil } + return URLRequest(url: finalUrl) + } + + /// :nodoc: 추가 항목 동의 받기 요청시 인증값으로 사용되는 임시토큰 발급 요청입니다. SDK 내부 전용입니다. + public func agt(completion:@escaping (String?, Error?) -> Void) { + API.responseData(.post, + Urls.compose(.Kauth, path:Paths.authAgt), + parameters: ["client_id":try! KakaoSDKCommon.shared.appKey(), "access_token":AUTH.tokenManager.getToken()?.accessToken].filterNil(), + sessionType:.Auth, + apiType: .KAuth) { (response, data, error) in + if let error = error { + completion(nil, error) + return + } + + if let data = data { + if let json = (try? JSONSerialization.jsonObject(with:data, options:[])) as? [String: Any] { + completion(json["agt"] as? String, nil) + return + } + } + + completion(nil, SdkError()) + } + } + + /// 사용자 인증코드를 이용하여 신규 토큰 발급을 요청합니다. + public func token(code: String, + codeVerifier: String? = nil, + redirectUri: String = KakaoSDKCommon.shared.redirectUri(), + completion:@escaping (OAuthToken?, Error?) -> Void) { + API.responseData(.post, + Urls.compose(.Kauth, path:Paths.authToken), + parameters: ["grant_type":"authorization_code", + "client_id":try! KakaoSDKCommon.shared.appKey(), + "redirect_uri":redirectUri, + "code":code, + "code_verifier":codeVerifier, + "ios_bundle_id":Bundle.main.bundleIdentifier, + "approval_type":KakaoSDKCommon.shared.approvalType().type].filterNil(), + sessionType:.Auth, + apiType: .KAuth) { (response, data, error) in + if let error = error { + completion(nil, error) + return + } + + if let data = data { + if let oauthToken = try? SdkJSONDecoder.custom.decode(OAuthToken.self, from: data) { + AUTH.tokenManager.setToken(oauthToken) + completion(oauthToken, nil) + return + } + } + completion(nil, SdkError()) + } + } + + /// 기존 토큰을 갱신합니다. + public func refreshAccessToken(refreshToken: String? = nil, + completion:@escaping (OAuthToken?, Error?) -> Void) { + API.responseData(.post, + Urls.compose(.Kauth, path:Paths.authToken), + parameters: ["grant_type":"refresh_token", + "client_id":try! KakaoSDKCommon.shared.appKey(), + "refresh_token":refreshToken ?? AUTH.tokenManager.getToken()?.refreshToken, + "ios_bundle_id":Bundle.main.bundleIdentifier, + "approval_type":KakaoSDKCommon.shared.approvalType().type].filterNil(), + sessionType:.Auth, + apiType: .KAuth) { (response, data, error) in + if let error = error { + completion(nil, error) + return + } + + if let data = data { + if let newToken = try? SdkJSONDecoder.custom.decode(Token.self, from: data) { + + //oauthtoken 객체가 없으면 에러가 나야함. + guard let oldOAuthToken = AUTH.tokenManager.getToken() + else { + completion(nil, SdkError(reason: .TokenNotFound)) + return + } + + var newRefreshToken: String { + if let refreshToken = newToken.refreshToken { + return refreshToken + } + else { + return oldOAuthToken.refreshToken + } + } + + var newRefreshTokenExpiresIn : TimeInterval { + if let refreshTokenExpiresIn = newToken.refreshTokenExpiresIn { + return refreshTokenExpiresIn + } + else { + return oldOAuthToken.refreshTokenExpiresIn + } + } + + let oauthToken = OAuthToken(accessToken: newToken.accessToken, + expiresIn: newToken.expiresIn, + tokenType: newToken.tokenType, + refreshToken: newRefreshToken, + refreshTokenExpiresIn: newRefreshTokenExpiresIn, + scope: newToken.scope, + scopes: newToken.scopes) + + AUTH.tokenManager.setToken(oauthToken) + completion(oauthToken, nil) + return + } + } + + completion(nil, SdkError()) + } + } +} diff --git a/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/AuthController.swift b/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/AuthController.swift new file mode 100644 index 00000000..e1aeb15d --- /dev/null +++ b/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/AuthController.swift @@ -0,0 +1,429 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import UIKit +import SafariServices +import AuthenticationServices +import KakaoSDKCommon + +let authController = AuthController.shared + +/// 인가 코드 요청 시 추가 상호작용을 요청하고자 할 때 전달하는 파라미터입니다. +public enum Prompt : String { + + /// 기본 웹 브라우저에 카카오계정 쿠키(cookie)가 이미 있더라도 이를 무시하고 무조건 카카오계정 로그인 화면을 보여주도록 합니다. + case Login = "login" +} + +public class AuthController { + + // MARK: Fields + + /// 간편하게 API를 호출할 수 있도록 제공되는 공용 싱글톤 객체입니다. + public static let shared = AuthController() + + //TODO: parameter 방식으로 바꾸기. + @available(iOS 13.0, *) + public lazy var presentationContextProvider: Any? = DefaultPresentationContextProvider() + + public var authenticationSession : Any? + + public var authorizeWithTalkCompletionHandler : ((URL) -> Void)? + + static public func isValidRedirectUri(_ redirectUri:URL) -> Bool { + return redirectUri.absoluteString.hasPrefix(KakaoSDKCommon.shared.redirectUri()) + } + + //PKCE Spec + public var codeVerifier : String? + + public init() { + resetCodeVerifier() + } + + public func resetCodeVerifier() { + self.codeVerifier = nil + } + + // MARK: Login with KakaoTalk + /// :nodoc: + public func authorizeWithTalk(channelPublicIds: [String]? = nil, + serviceTerms: [String]? = nil, + completion: @escaping (OAuthToken?, Error?) -> Void) { + + authController.authorizeWithTalkCompletionHandler = { (callbackUrl) in + let parseResult = callbackUrl.oauthResult() + if let code = parseResult.code { + AuthApi.shared.token(code: code, codeVerifier: self.codeVerifier) { (token, error) in + if let error = error { + completion(nil, error) + return + } + else { + if let token = token { + completion(token, nil) + return + } + } + } + } + else { + let error = parseResult.error ?? SdkError(reason: .Unknown, message: "Failed to parse redirect URI.") + SdkLog.e("Failed to parse redirect URI.") + completion(nil, error) + return + } + } + + let parameters = self.makeParametersForTalk(channelPublicIds: channelPublicIds, serviceTerms: serviceTerms) + + guard let url = SdkUtils.makeUrlWithParameters(Urls.compose(.TalkAuth, path:Paths.authTalk), parameters: parameters) else { + SdkLog.e("Bad Parameter.") + completion(nil, SdkError(reason: .BadParameter)) + return + } + + UIApplication.shared.open(url, options: [:]) { (result) in + if (result) { + SdkLog.d("카카오톡 실행: \(url.absoluteString)") + } + else { + SdkLog.e("카카오톡 실행 취소") + completion(nil, SdkError(reason: .Cancelled, message: "The KakaoTalk authentication has been canceled by user.")) + return + } + } + } + + /// **카카오톡 간편로그인** 등 외부로부터 리다이렉트 된 코드요청 결과를 처리합니다. + /// AppDelegate의 openURL 메소드 내에 다음과 같이 구현해야 합니다. + /// + /// ``` + /// func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { + /// if (AuthController.isKakaoTalkLoginUrl(url)) { + /// if AuthController.handleOpenUrl(url: url, options: options) { + /// return true + /// } + /// } + /// // 서비스의 나머지 URL 핸들링 처리 + /// } + /// ``` + public static func handleOpenUrl(url:URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { + if (AuthController.isValidRedirectUri(url)) { + if let authorizeWithTalkCompletionHandler = authController.authorizeWithTalkCompletionHandler { + authorizeWithTalkCompletionHandler(url) + } + } + return false + } + + // MARK: Login with Web Cookie + + ///:nodoc: 카카오 계정 페이지에서 로그인을 하기 위한 지원스펙 입니다. + public func authorizeWithAuthenticationSession(accountParameters: [String:String]? = nil , + completion: @escaping (OAuthToken?, Error?) -> Void) { + return self.authorizeWithAuthenticationSession(agtToken: nil, + scopes: nil, + channelPublicIds:nil, + serviceTerms:nil, + accountParameters: accountParameters, + completion: completion ) + } + + /// :nodoc: iOS 11 이상에서 제공되는 (SF/ASWeb)AuthenticationSession 을 이용하여 로그인 페이지를 띄우고 쿠키 기반 로그인을 수행합니다. 이미 사파리에에서 로그인하여 카카오계정의 쿠키가 있다면 이를 활용하여 ID/PW 입력 없이 간편하게 로그인할 수 있습니다. + public func authorizeWithAuthenticationSession(prompts : [Prompt]? = nil, + completion: @escaping (OAuthToken?, Error?) -> Void) { + return self.authorizeWithAuthenticationSession(prompts: prompts, + agtToken: nil, + scopes: nil, + channelPublicIds: nil, + serviceTerms:nil, + completion: completion ) + } + + /// :nodoc: 카카오싱크 전용입니다. 자세한 내용은 카카오싱크 전용 개발가이드를 참고하시기 바랍니다. + public func authorizeWithAuthenticationSession(prompts : [Prompt]? = nil, + channelPublicIds: [String]? = nil, + serviceTerms: [String]? = nil, + completion: @escaping (OAuthToken?, Error?) -> Void) { + return self.authorizeWithAuthenticationSession(prompts: prompts, + agtToken: nil, + scopes: nil, + channelPublicIds: channelPublicIds, + serviceTerms:serviceTerms, + completion: completion) + } + + /// :nodoc: + public func authorizeWithAuthenticationSession(scopes:[String], + completion: @escaping (OAuthToken?, Error?) -> Void) { + + AuthApi.shared.agt { [weak self] (agtToken, error) in + guard let strongSelf = self else { + completion(nil, SdkError()) //내부에러 + return + } + + if let error = error { + completion(nil, error) + return + } + else { + strongSelf.authorizeWithAuthenticationSession(agtToken: agtToken, scopes: scopes) { (oauthToken, error) in + completion(oauthToken, error) + } + } + } + } + + /// :nodoc: + func authorizeWithAuthenticationSession(prompts: [Prompt]? = nil, + agtToken: String? = nil, + scopes:[String]? = nil, + channelPublicIds: [String]? = nil, + serviceTerms: [String]? = nil, + accountParameters: [String:String]? = nil, + completion: @escaping (OAuthToken?, Error?) -> Void) { + + let authenticationSessionCompletionHandler : (URL?, Error?) -> Void = { + (callbackUrl:URL?, error:Error?) in + + guard let callbackUrl = callbackUrl else { + if #available(iOS 12.0, *), let error = error as? ASWebAuthenticationSessionError { + if error.code == ASWebAuthenticationSessionError.canceledLogin { + SdkLog.e("The authentication session has been canceled by user.") + completion(nil, SdkError(reason: .Cancelled, message: "The authentication session has been canceled by user.")) + return + } else { + SdkLog.e("An error occurred on executing authentication session.\n reason: \(error)") + completion(nil, SdkError(reason: .Unknown, message: "An error occurred on executing authentication session.")) + return + } + } else if let error = error as? SFAuthenticationError, error.code == SFAuthenticationError.canceledLogin { + SdkLog.e("The authentication session has been canceled by user.") + completion(nil, SdkError(reason: .Cancelled, message: "The authentication session has been canceled by user.")) + return + } else { + SdkLog.e("An unknown authentication session error occurred.") + completion(nil, SdkError(reason: .Unknown, message: "An unknown authentication session error occurred.")) + return + } + } + + SdkLog.d("callback url: \(callbackUrl)") + + let parseResult = callbackUrl.oauthResult() + if let code = parseResult.code { + SdkLog.i("code:\n \(String(describing: code))\n\n" ) + + AuthApi.shared.token(code: code, codeVerifier: self.codeVerifier) { (token, error) in + if let error = error { + completion(nil, error) + return + } + else { + if let token = token { + completion(token, nil) + return + } + } + } + } + else { + let error = parseResult.error ?? SdkError(reason: .Unknown, message: "Failed to parse redirect URI.") + SdkLog.e("redirect URI error: \(error)") + completion(nil, error) + return + } + } + + var parameters = self.makeParameters(prompts: prompts, + agtToken: agtToken, + scopes: scopes, + channelPublicIds: channelPublicIds, + serviceTerms: serviceTerms) + + var url: URL? = nil + if let accountParameters = accountParameters, !accountParameters.isEmpty { + for (key, value) in accountParameters { + parameters[key] = value + } + url = SdkUtils.makeUrlWithParameters(Urls.compose(.Auth, path:Paths.kakaoAccountsLogin), parameters:parameters) + } + else { + url = SdkUtils.makeUrlWithParameters(Urls.compose(.Kauth, path:Paths.authAuthorize), parameters:parameters) + } + + if let url = url { + SdkLog.d("\n===================================================================================================") + SdkLog.d("request: \n url:\(url)\n parameters: \(parameters) \n") + + if #available(iOS 12.0, *) { + let authenticationSession = ASWebAuthenticationSession(url: url, + callbackURLScheme: (try! KakaoSDKCommon.shared.scheme()), + completionHandler:authenticationSessionCompletionHandler) + if #available(iOS 13.0, *) { + authenticationSession.presentationContextProvider = authController.presentationContextProvider as? ASWebAuthenticationPresentationContextProviding + if agtToken != nil { + authenticationSession.prefersEphemeralWebBrowserSession = true + } + } + authenticationSession.start() + authController.authenticationSession = authenticationSession + } + else { + authController.authenticationSession = SFAuthenticationSession(url: url, + callbackURLScheme: (try! KakaoSDKCommon.shared.scheme()), + completionHandler:authenticationSessionCompletionHandler) + (authController.authenticationSession as? SFAuthenticationSession)?.start() + } + } + } +} + +extension AuthController { + //Rx 공통 Helper + + /// :nodoc: + public func makeParametersForTalk(channelPublicIds: [String]? = nil, + serviceTerms: [String]? = nil) -> [String:Any] { + self.resetCodeVerifier() + + var parameters = [String:Any]() + parameters["client_id"] = try! KakaoSDKCommon.shared.appKey() + parameters["redirect_uri"] = KakaoSDKCommon.shared.redirectUri() + parameters["response_type"] = Constants.responseType + parameters["headers"] = ["KA": Constants.kaHeader].toJsonString() + + var extraParameters = [String: Any]() + if let channelPublicIds = channelPublicIds?.joined(separator: ",") { + extraParameters["channel_public_id"] = channelPublicIds + } + if let serviceTerms = serviceTerms?.joined(separator: ",") { + extraParameters["service_terms"] = serviceTerms + } + if let approvalType = KakaoSDKCommon.shared.approvalType().type { + extraParameters["approval_type"] = approvalType + } + + self.codeVerifier = SdkCrypto.shared.generateCodeVerifier() + + if let codeVerifier = self.codeVerifier { + SdkLog.d("code_verifier: \(codeVerifier)") + if let codeChallenge = SdkCrypto.shared.sha256(string:codeVerifier) { + extraParameters["code_challenge"] = SdkCrypto.shared.base64url(data:codeChallenge) + SdkLog.d("code_challenge: \(SdkCrypto.shared.base64url(data:codeChallenge))") + extraParameters["code_challenge_method"] = "S256" + } + } + + if !extraParameters.isEmpty { + parameters["params"] = extraParameters.toJsonString() + } + + return parameters + } + + + public func makeParameters(prompts : [Prompt]? = nil, + agtToken: String? = nil, + scopes:[String]? = nil, + channelPublicIds: [String]? = nil, + serviceTerms: [String]? = nil) -> [String:Any] + { + self.resetCodeVerifier() + + var parameters = [String:Any]() + parameters["client_id"] = try! KakaoSDKCommon.shared.appKey() + parameters["redirect_uri"] = KakaoSDKCommon.shared.redirectUri() + parameters["response_type"] = Constants.responseType + parameters["ka"] = Constants.kaHeader + + if let approvalType = KakaoSDKCommon.shared.approvalType().type { + parameters["approval_type"] = approvalType + } + + if let agt = agtToken { + parameters["agt"] = agt + + if let scopes = scopes { + parameters["scope"] = scopes.joined(separator:" ") + } + } + + if let prompts = prompts { + let promptsValues : [String]? = prompts.map { $0.rawValue } + if let prompt = promptsValues?.joined(separator: ",") { + parameters["prompt"] = prompt + } + } + + if let channelPublicIds = channelPublicIds?.joined(separator: ",") { + parameters["channel_public_id"] = channelPublicIds + } + + if let serviceTerms = serviceTerms?.joined(separator: ",") { + parameters["service_terms"] = serviceTerms + } + + self.codeVerifier = SdkCrypto.shared.generateCodeVerifier() + if let codeVerifier = self.codeVerifier { + SdkLog.d("code_verifier: \(codeVerifier)") + if let codeChallenge = SdkCrypto.shared.sha256(string:codeVerifier) { + parameters["code_challenge"] = SdkCrypto.shared.base64url(data:codeChallenge) + SdkLog.d("code_challenge: \(SdkCrypto.shared.base64url(data:codeChallenge))") + parameters["code_challenge_method"] = "S256" + } + } + + return parameters + } +} + + + +extension URL { + // SDK에서 state 제공 계획은 없지만 OAuth 표준이므로 파싱해둔다. + public func oauthResult() -> (code: String?, error: Error?, state: String?) { + var parameters = [String: String]() + if let queryItems = URLComponents(string: self.absoluteString)?.queryItems { + for item in queryItems { + parameters[item.name] = item.value + } + } + + let state = parameters["state"] + if let code = parameters["code"] { + return (code, nil, state) + } else { + if parameters["error"] == nil { + parameters["error"] = "unknown" + parameters["error_description"] = "Invalid authorization redirect URI." + } + if parameters["error"] == "cancelled" { + // 간편로그인 취소버튼 예외처리 + return (nil, SdkError(reason: .Cancelled, message: "The KakaoTalk authentication has been canceled by user."), state) + } else { + return (nil, SdkError(parameters: parameters), state) + } + } + } +} + +@available(iOS 13.0, *) +class DefaultPresentationContextProvider: NSObject, ASWebAuthenticationPresentationContextProviding { + public func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor { + return UIApplication.shared.keyWindow! + } +} diff --git a/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/AuthRequestAdapter.swift b/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/AuthRequestAdapter.swift new file mode 100644 index 00000000..306bd620 --- /dev/null +++ b/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/AuthRequestAdapter.swift @@ -0,0 +1,31 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation +import Alamofire +import KakaoSDKCommon + +public class AuthRequestAdapter : RequestInterceptor { + public init() {} + + public func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { + var urlRequest = urlRequest + + if let accessToken = AUTH.tokenManager.getToken()?.accessToken { + urlRequest.headers.add(.authorization(bearerToken: accessToken)) + } + urlRequest.setValue(Constants.kaHeader, forHTTPHeaderField: "KA") + return completion(.success(urlRequest)) + } +} diff --git a/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/AuthRequestRetrier.swift b/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/AuthRequestRetrier.swift new file mode 100644 index 00000000..9562a220 --- /dev/null +++ b/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/AuthRequestRetrier.swift @@ -0,0 +1,155 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation +import Alamofire +import KakaoSDKCommon + +public class AuthRequestRetrier : RequestInterceptor { + private var requestsToRetry: [(RetryResult) -> Void] = [] + + private var isRefreshing = false + + private var errorLock = NSLock() + + private func getSdkError(error: Error) -> SdkError? { + if let aferror = error as? AFError { + switch aferror { + case .responseValidationFailed(let reason): + switch reason { + case .customValidationFailed(let error): + return error as? SdkError + default: + SdkLog.d("not customValidationFailed. - dont care case") + } + default: + SdkLog.d("not responseValidationFailed. - dont care case") + + } + } + return nil + } + + public init() { + } + + public func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) { + errorLock.lock() ; defer { errorLock.unlock() } + + var logString = "request retrier:" + + if let sdkError = getSdkError(error: error) { + if !sdkError.isApiFailed { + SdkLog.e("\(logString)\n error:\(error)\n not api error -> pass through\n\n") + completion(.doNotRetryWithError(SdkError(message:"not api error -> pass through"))) + return + } + + switch(sdkError.getApiError().reason) { + case .InvalidAccessToken: + logString = "\(logString)\n reason:\(error)\n token: \(String(describing: AUTH.tokenManager.getToken()))" + SdkLog.e("\(logString)\n\n") + + if shouldRefreshToken(request) { + //SdkLog.d("---------------------------- enqueue completion\n request: \(request) \n\n") + requestsToRetry.append(completion) + + if !isRefreshing { + isRefreshing = true + + //SdkLog.d("<<<<<<<<<<<<<< start token refresh\n request: \(String(describing:request))\n\n") + AuthApi.shared.refreshAccessToken { [weak self](token, error) in + + guard let strongSelf = self else { + SdkLog.e("strong self casting error!") + //abort all pending requests. + self?.requestsToRetry.forEach { + $0(.doNotRetryWithError(SdkError(message:"string self casing error!"))) + } + self?.requestsToRetry.removeAll() + self?.isRefreshing = false + return + } + + if let error = error { + //token refresh failure. + SdkLog.e(" refreshToken error: \(error). retry aborted.\n request: \(request) \n\n") + + //pending requests all cancel + strongSelf.requestsToRetry.forEach { + $0(.doNotRetryWithError(error)) + } } + else { + //token refresh success. + //SdkLog.d(">>>>>>>>>>>>>> refreshToken success\n request: \(request) \n\n") + + //proceed all pending requests. + strongSelf.requestsToRetry.forEach { + $0(.retry) + } + } + + strongSelf.requestsToRetry.removeAll() //reset all stored completion + strongSelf.isRefreshing = false + } + } + } + else { + let sdkError = SdkError(reason: .TokenNotFound) + SdkLog.e(" should not refresh: \(sdkError) -> pass through \n") + completion(.doNotRetryWithError(sdkError)) + } + case .InsufficientScope: + logString = "\(logString)\n reason:\(error)\n token: \(String(describing: AUTH.tokenManager.getToken()))" + SdkLog.e("\(logString)\n\n") + + if let requiredScopes = sdkError.getApiError().info?.requiredScopes { + DispatchQueue.main.async { + AuthController.shared.authorizeWithAuthenticationSession(scopes: requiredScopes) { (_, error) in + if let error = error { + completion(.doNotRetryWithError(error)) + } + else { + completion(.retry) + } + } + } + } + else { + SdkLog.e("\(logString)\n reason:\(sdkError)\n requiredScopes not exist -> pass through \n\n") + completion(.doNotRetryWithError(SdkError(apiFailedMessage:"requiredScopes not exist"))) + } + case .RequiredAgeVerification: + SdkLog.e("\(logString)\n reason:\(sdkError)\n not handled error -> pass through partnerAuthRetrier \n\n") + completion(.doNotRetry) + default: + SdkLog.e("\(logString)\n reason:\(sdkError)\n not handled error -> pass through \n\n") + completion(.doNotRetryWithError(sdkError)) + } + } + else { + SdkLog.e("\(logString)\n not handled error -> pass through \n\n") + completion(.doNotRetry) + } + } + + private func shouldRefreshToken(_ request: Request) -> Bool { + guard AUTH.tokenManager.getToken()?.refreshToken != nil else { + SdkLog.e(" refresh token not exist. retry aborted.\n\n") + return false + } + + return true + } +} diff --git a/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/MigrateManager.swift b/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/MigrateManager.swift new file mode 100644 index 00000000..d13061a2 --- /dev/null +++ b/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/MigrateManager.swift @@ -0,0 +1,107 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation +import KakaoSDKCommon + +public class MigrateManager { + public static func checkSdkVersionForMigration() { + SdkLog.d("============================================================================================================") + SdkLog.d("check migration... ") + if let sdkVersion = Properties.markedSdkVersion() { + SdkLog.d(" pass migration... ") + SdkLog.d(" used sdk version:\(sdkVersion)") + return + + //for +// if versionKey.hasPrefix("2.") { +// SdkLog.d("pass migraton...") +// return +// } +// else { +// //may be v3? +// } + } + else { + migrateSdk() + } + } + + public static func migrateSdk() { + SdkLog.d("============================================================================================================") + SdkLog.d("start migration sdk from v1 to v2.... ") + var accessToken : String? + var refreshToken : String? + var accessTokenExpiredAt : Date? + var refreshTokenExpiredAt : Date? + var scopes : [String]? + + if UserDefaults.standard.bool(forKey:"kakao.open.sdk.LastSecureMode") == true { + let storedAccessToken = UserDefaults.standard.data(forKey:"kakao.open.sdk.AccessToken") + let storedRefreshToken = UserDefaults.standard.data(forKey:"kakao.open.sdk.RefreshToken") + + if let accessTokenData = SdkCrypto.shared.decryptForMigration(data: storedAccessToken) { + accessToken = String(data: accessTokenData, encoding: .utf8) + } + if let refreshTokenData = SdkCrypto.shared.decryptForMigration(data: storedRefreshToken) { + refreshToken = String(data: refreshTokenData, encoding: .utf8) + } + } + else { + accessToken = UserDefaults.standard.string(forKey:"kakao.open.sdk.AccessToken") + refreshToken = UserDefaults.standard.string(forKey:"kakao.open.sdk.RefreshToken") + } + + if accessToken == nil && refreshToken == nil { + SdkLog.d(" first time sdk v2...") + markSdkVersion() + return + } + + accessTokenExpiredAt = UserDefaults.standard.object(forKey:"kakao.open.sdk.ExpiresAccessTokenTime") as? Date + refreshTokenExpiredAt = UserDefaults.standard.object(forKey:"kakao.open.sdk.ExpiresRefreshTokenTime") as? Date + + scopes = UserDefaults.standard.array(forKey:"kakao.open.sdk.Scopes") as? [String] + + let oauthToken = OAuthToken(accessToken: (accessToken != nil) ? accessToken! : "", + expiredAt: accessTokenExpiredAt, + tokenType: "Bearer", + refreshToken: (refreshToken != nil) ? refreshToken! : "", + refreshTokenExpiredAt: refreshTokenExpiredAt, + scope: nil, + scopes: scopes) + SdkLog.d("\(String(describing: oauthToken))") + + KakaoSDKAuth.TokenManager.manager.setToken(oauthToken) + + removePrevSdkAuthInfo() + + markSdkVersion() + } + + public static func markSdkVersion() { + Properties.markSdkVersion() + SdkLog.d("finished migration sdk...") + } + + public static func removePrevSdkAuthInfo() { + UserDefaults.standard.removeObject(forKey: "kakao.open.sdk.LastSecureMode") + UserDefaults.standard.removeObject(forKey: "kakao.open.sdk.StorageState") + UserDefaults.standard.removeObject(forKey: "kakao.open.sdk.AccessToken") + UserDefaults.standard.removeObject(forKey: "kakao.open.sdk.RefreshToken") + UserDefaults.standard.removeObject(forKey: "kakao.open.sdk.ExpiresAccessTokenTime") + UserDefaults.standard.removeObject(forKey: "kakao.open.sdk.ExpiresRefreshTokenTime") + SdkLog.d("removed sdk v1 auth info.") + } +} diff --git a/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/TokenManagable.swift b/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/TokenManagable.swift new file mode 100644 index 00000000..2d62e001 --- /dev/null +++ b/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/TokenManagable.swift @@ -0,0 +1,40 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +/// 카카오 로그인 API를 통해 발급 받은 토큰을 관리하는 프로토콜입니다. +/// +/// 카카오에서 제공하는 Open API 중 Authorization 헤더에 토큰을 입력해야 하는 로그인 기반 API를 호출할 때, SDK 내부적으로 이 프로토콜을 통하여 토큰 저장 및 읽기를 수행합니다. +/// 카카오 SDK에서는 개발자의 편의를 위하여 기본 관리자를 제공하고 있습니다. +/// +/// - seealso: `TokenManager` +/// +/// ## 커스텀 토큰 관리자 +/// TokenManagable 프로토콜을 구현하여 직접 토큰 관리자를 구현할 수 있습니다. +/// + +public protocol TokenManagable { + + // MARK: Methods + + /// 토큰을 저장합니다. + func setToken(_ token:OAuthToken?) + + /// 저장된 토큰을 가져옵니다. + func getToken() -> OAuthToken? + + /// 저장된 토큰을 삭제합니다. + func deleteToken() +} diff --git a/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/TokenManager.swift b/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/TokenManager.swift new file mode 100644 index 00000000..64dc479c --- /dev/null +++ b/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/auth/TokenManager.swift @@ -0,0 +1,58 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation +import KakaoSDKCommon + +/// SDK에서 기본 제공하는 토큰 관리자입니다. +/// +/// 카카오 SDK에서 제공하는 로그인 기반 API를 호출할 때 SDK 내부적으로 이 곳에 저장된 토큰을 사용합니다. 토큰은 UserDefaults에 저장되며 기기 고유값을 이용해 암호화하여 저장됩니다. +/// +/// - seealso: `TokenManagable` +final public class TokenManager : TokenManagable { + + // MARK: Fields + + /// 간편한 사용을 위한 싱글톤 객체입니다. + static public let manager = TokenManager() + + let OAuthTokenKey = "com.kakao.sdk.oauth_token" + + var token : OAuthToken? + + /// :nodoc: 토큰 관리자를 초기화합니다. UserDefaults에 저장되어 있는 토큰을 읽어옵니다. + public init() { + self.token = Properties.loadCodable(key:OAuthTokenKey) + } + + + // MARK: TokenManagable Methods + + /// UserDefaults에 토큰을 저장합니다. + public func setToken(_ token: OAuthToken?) { + Properties.saveCodable(key:OAuthTokenKey, data:token) + self.token = token + } + + /// 현재 토큰을 가져옵니다. + public func getToken() -> OAuthToken? { + return self.token + } + + /// UserDefaults에 저장된 토큰을 삭제합니다. + public func deleteToken() { + Properties.delete(OAuthTokenKey) + self.token = nil + } +} diff --git a/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/model/OAuthToken.swift b/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/model/OAuthToken.swift new file mode 100644 index 00000000..b2648c7e --- /dev/null +++ b/Pods/KakaoSDKAuth/sources/KakaoSDKAuth/model/OAuthToken.swift @@ -0,0 +1,176 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +/// 카카오 로그인을 통해 발급 받은 토큰입니다. +/// +/// 이 토큰을 이용하여 로그인 기반 API를 호출할 수 있습니다. 카카오 SDK를 이용하여 로그인에 성공하면 발급된 토큰을 SDK 내부에 설정된 `TokenManagable` 구현체를 통해 저장합니다. 이후 로그인 기반 API(ex. 사용자관리)를 호출하면 해당 토큰을 읽어오며 API 요청 Authorization 헤더에 자동 입력됩니다. +public struct OAuthToken: Codable { + + // MARK: Fields + + /// :nodoc: 토큰 타입. 현재는 "Bearer" 타입만 사용됩니다. + public let tokenType: String + + /// 액세스 토큰 + public let accessToken: String + + /// :nodoc: 액세스 토큰의 남은 만료시간 (단위: 초) + public let expiresIn: TimeInterval + + /// 액세스 토큰의 만료 시각 + public let expiredAt: Date + + /// 리프레시 토큰 + public let refreshToken: String + + /// :nodoc: 리프레시 토큰의 남은 만료시간 (단위: 초) + public let refreshTokenExpiresIn: TimeInterval + + /// 리프레시 토큰의 만료 시각 + public let refreshTokenExpiredAt: Date + + public let scope: String? //space delimited string + + /// 현재까지 사용자로부터 획득에 성공한 scope (동의항목) 목록. 인증코드를 통한 토큰 신규 발급 시점에만 저장되며 이후 같은 값으로 유지됩니다. 토큰 갱신으로는 최신정보로 업데이트되지 않습니다. + public let scopes: [String]? + + enum CodingKeys: String, CodingKey { + case accessToken, expiresIn, tokenType, refreshToken, refreshTokenExpiresIn, scope + } + + + // MARK: Initializers + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + + self.accessToken = try values.decode(String.self, forKey: .accessToken) + self.expiresIn = try values.decode(TimeInterval.self, forKey: .expiresIn) + self.expiredAt = Date().addingTimeInterval(self.expiresIn) + self.tokenType = try values.decode(String.self, forKey: .tokenType) + self.refreshToken = try values.decode(String.self, forKey: .refreshToken) + self.refreshTokenExpiresIn = try values.decode(TimeInterval.self, forKey: .refreshTokenExpiresIn) + self.refreshTokenExpiredAt = Date().addingTimeInterval(self.refreshTokenExpiresIn) + self.scope = try? values.decode(String.self, forKey: .scope) + self.scopes = scope?.components(separatedBy:" ") + } + + public init(accessToken: String, + expiresIn: TimeInterval? = nil, + expiredAt: Date? = nil, + tokenType: String, + refreshToken: String, + refreshTokenExpiresIn: TimeInterval? = nil, + refreshTokenExpiredAt: Date? = nil, + scope: String?, + scopes: [String]? ) { + + self.accessToken = accessToken + self.expiresIn = (expiresIn != nil) ? expiresIn! : 0 + + if let expiredAt = expiredAt { + self.expiredAt = expiredAt + } + else { + self.expiredAt = (self.expiresIn == 0) ? Date(timeIntervalSince1970: 0) : Date().addingTimeInterval(self.expiresIn) + } + + self.tokenType = tokenType + self.refreshToken = refreshToken + self.refreshTokenExpiresIn = (refreshTokenExpiresIn != nil) ? refreshTokenExpiresIn! : 0 + if let refreshTokenExpiredAt = refreshTokenExpiredAt { + self.refreshTokenExpiredAt = refreshTokenExpiredAt + } + else { + self.refreshTokenExpiredAt = (self.refreshTokenExpiresIn == 0) ? Date(timeIntervalSince1970: 0) : Date().addingTimeInterval(self.refreshTokenExpiresIn) + } + self.scope = scope + self.scopes = scopes + } + + static func ==(left:OAuthToken, right:OAuthToken) -> Bool { + if (left.accessToken == right.accessToken) { + return true + } + else { + return false + } + } + + static func !=(left:OAuthToken, right:OAuthToken) -> Bool { + if (left.accessToken != right.accessToken) { + return true + } + else { + return false + } + } + +// static func ==(left:OAuthToken, right:OAuthToken) -> Bool { +// if (left.accessToken == right.accessToken && +// left.expiresIn == right.expiresIn && +// left.tokenType == right.tokenType && +// left.refreshToken == right.refreshToken && +// left.refreshTokenExpiresIn == right.refreshTokenExpiresIn && +// left.scope == right.scope) { +// return true +// } +// else { +// return false +// } +// } +// +// static func !=(left:OAuthToken, right:OAuthToken) -> Bool { +// if (left.accessToken != right.accessToken || +// left.expiresIn != right.expiresIn || +// left.tokenType != right.tokenType || +// left.refreshToken != right.refreshToken || +// left.refreshTokenExpiresIn != right.refreshTokenExpiresIn || +// left.scope != right.scope) { +// return true +// } +// else { +// return false +// } +// } +} + +public struct Token: Codable { + public let accessToken: String + public let expiresIn: TimeInterval + public let tokenType: String + public let refreshToken: String? + public let refreshTokenExpiresIn: TimeInterval? + public let scope: String? //space delimited string + public let scopes: [String]? + + enum CodingKeys: String, CodingKey { + case accessToken, expiresIn, tokenType, refreshToken, refreshTokenExpiresIn, scope + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + + accessToken = try values.decode(String.self, forKey: .accessToken) + expiresIn = try values.decode(TimeInterval.self, forKey: .expiresIn) + tokenType = try values.decode(String.self, forKey: .tokenType) + refreshToken = try? values.decode(String.self, forKey: .refreshToken) + refreshTokenExpiresIn = try? values.decode(TimeInterval.self, forKey: .refreshTokenExpiresIn) + scope = try? values.decode(String.self, forKey: .scope) + scopes = scope?.components(separatedBy:" ") + } +} + diff --git a/Pods/KakaoSDKCommon/LICENSE b/Pods/KakaoSDKCommon/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/Pods/KakaoSDKCommon/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/KakaoSDKCommon.swift b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/KakaoSDKCommon.swift new file mode 100644 index 00000000..932ea5ee --- /dev/null +++ b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/KakaoSDKCommon.swift @@ -0,0 +1,142 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +/// 카카오 SDK 공통의 환경변수 설정을 위한 클래스입니다. +/// +/// 싱글톤으로 제공되는 인스턴스를 사용해야 하며 다음과 같이 초기화할 수 있습니다. +/// +/// // AppDelegate.swift +/// func application(_ application: UIApplication, +/// didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { +/// +/// KakaoSDKCommon.initSDK(appKey: "<#Your App Key#>") +/// +/// return true +/// } +/// - important: SDK 초기화가 수행되지 않으면 SDK 내 모든 기능을 사용할 수 없습니다. 반드시 가장 먼저 실행되어야 합니다. +final public class KakaoSDKCommon { + + // MARK: Fields + + //static 라이브러리용 버전. + private let _version = "2.5.6" + + /// 카카오 SDK의 싱글톤 객체입니다. SDK를 사용할 때 반드시 이 객체가 가장 먼저 초기화되어야 합니다. + public static let shared = KakaoSDKCommon() + + private var _appKey : String? = nil + private var _customScheme : String? = nil + private var _loggingEnable : Bool = false + + private var _hosts : Hosts? = nil + + private var _approvalType : ApprovalType? = nil + + private var _sdkType : SdkType! + + public init() { + _appKey = nil + _customScheme = nil + } + + // MARK: Initializers + + /// SDK 초기화를 수행합니다. + /// - parameters: + /// - appKey: [카카오 디벨로퍼스](https://developers.kakao.com)에서 발급 받은 NATIVE_APP_KEY + /// - loggingEnable: SDK에서 디버그 로깅를 사용 여부 + + public static func initSDK(appKey: String, + customScheme: String? = nil, + loggingEnable: Bool = false, + hosts: Hosts? = nil, + approvalType: ApprovalType? = nil ) { + KakaoSDKCommon.shared.initialize(appKey: appKey, + customScheme:customScheme, + loggingEnable: loggingEnable, + hosts: hosts, + approvalType: approvalType, + sdkType: .Swift) + } + + /// :nodoc: + public func initialize(appKey: String, + customScheme: String? = nil, + loggingEnable: Bool = false, + hosts: Hosts? = nil, + approvalType: ApprovalType? = nil, + sdkType: SdkType) { + _appKey = appKey + _customScheme = customScheme + _loggingEnable = loggingEnable + _hosts = hosts + _approvalType = approvalType + _sdkType = sdkType + + SdkLog.shared.clearLog() + } + + /// 현재 SDK의 버전을 조회합니다. + public func sdkVersion() -> String { + return _version + } + + /// 초기화 시 지정한 loggingEnable + /// - seealso: `SdkLog` + public func isLoggingEnable() -> Bool { + return _loggingEnable + } + + public func hosts() -> Hosts { + return _hosts != nil ? _hosts! : Hosts.shared + } + + public func approvalType() -> ApprovalType { + return _approvalType != nil ? _approvalType! : ApprovalType.shared + } + + public func sdkType() -> SdkType { + return _sdkType != nil ? _sdkType : .Swift + } + + public func scheme() throws -> String { + guard _appKey != nil else { + throw SdkError(reason: .MustInitAppKey) + } + return _customScheme ?? "kakao\(_appKey!)" + } +} + +extension KakaoSDKCommon { + /// 설정된 앱키를 가져옵니다. + /// - throws: `SdkError.ClientFailureReason.MustInitAppKey`: SDK가 초기화되지 않았습니다. 앱키를 가져오기 전에 initSDK를 이용하여 먼저 싱글톤 인스턴스를 초기화해야 합니다. + public func appKey() throws -> String { + guard _appKey != nil else { + throw SdkError(reason: .MustInitAppKey) + } + return _appKey! + } + + /// KA Header를 가져옵니다. + public func kaHeader() -> String { + return Constants.kaHeader + } + + /// redirectUri를 가져옵니다. + public func redirectUri() -> String { + return "\(try! self.scheme())://oauth" + } +} diff --git a/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/Common.swift b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/Common.swift new file mode 100644 index 00000000..a8429db7 --- /dev/null +++ b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/Common.swift @@ -0,0 +1,80 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation +import UIKit + +public class Constants { + static public let responseType = "code" + + static public let kaHeader : String = generateKaHeader() + static func generateKaHeader() -> String { + + let sdkVersion = KakaoSDKCommon.shared.sdkVersion() + + let sdkType = KakaoSDKCommon.shared.sdkType().rawValue + + let osVersion = UIDevice.current.systemVersion + + var langCode = Locale.current.languageCode + if (Locale.preferredLanguages.count > 0) { + if let preferredLanguage = Locale.preferredLanguages.first { + if let languageCode = Locale.components(fromIdentifier:preferredLanguage)[NSLocale.Key.languageCode.rawValue] { + langCode = languageCode + } + } + } + let countryCode = Locale.current.regionCode + + let lang = "\(langCode ?? "")-\(countryCode ?? "")" + let resX = "\(Int(UIScreen.main.bounds.width))" + let resY = "\(Int(UIScreen.main.bounds.height))" + let device = UIDevice.current.model.replacingOccurrences(of: " ", with: "_") + let appBundleId = Bundle.main.bundleIdentifier + let appVersion = self.appVersion() + + return "sdk/\(sdkVersion) sdk_type/\(sdkType) os/ios-\(osVersion) lang/\(lang) res/\(resX)x\(resY) device/\(device) origin/\(appBundleId ?? "") app_ver/\(appVersion ?? "")" + } + + static public func appVersion() -> String? { + var appVersion = Bundle.main.object(forInfoDictionaryKey:"CFBundleShortVersionString") as? String + if appVersion == nil { + appVersion = Bundle.main.object(forInfoDictionaryKey:(kCFBundleVersionKey as String)) as? String + } + appVersion = appVersion?.replacingOccurrences(of: " ", with: "_") + return appVersion + } +} + +///:nodoc: +public enum SdkType : String { + case Swift = "swift" + case RxSwift = "rx_swift" +} + +///:nodoc: +public class ApprovalType { + public static let shared = ApprovalType() + public var type : String? + + public init() { + self.type = nil + } +} + +///:nodoc: +public enum ApiType { + case KApi + case KAuth +} diff --git a/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/Properties.swift b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/Properties.swift new file mode 100644 index 00000000..feb25d1a --- /dev/null +++ b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/Properties.swift @@ -0,0 +1,60 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +public class Properties { + static let sdkVersionKey = "com.kakao.sdk.version" + + public static func saveCodable(key: String, data:T?) { + if let encoded = try? JSONEncoder().encode(data) { + SdkLog.d("save-plain : \(encoded as NSData)") + guard let crypted = SdkCrypto.shared.encrypt(data: encoded) else { return } + SdkLog.d("save-crypted : \(crypted as NSData)") + UserDefaults.standard.set(crypted, forKey:key) + UserDefaults.standard.synchronize() + } + } + + public static func loadCodable(key: String) -> T? { + if let data = UserDefaults.standard.data(forKey: key) { + SdkLog.d("load-crypted : \(data as NSData)") + guard let plain = SdkCrypto.shared.decrypt(data: data) else { return nil } + SdkLog.d("load-plain : \(plain as NSData)") + return try? JSONDecoder().decode(T.self, from:plain) + } + return nil + } + + public static func delete(_ key: String) { + UserDefaults.standard.removeObject(forKey: key) + } + + static func save(key: String, string:String?) { + UserDefaults.standard.set(string, forKey:key) + UserDefaults.standard.synchronize() + } + + static func load(key: String) -> String? { + UserDefaults.standard.string(forKey:key) + } + + public static func markedSdkVersion() -> String? { + return Properties.load(key: sdkVersionKey) + } + + public static func markSdkVersion() { + Properties.save(key: Properties.sdkVersionKey, string: KakaoSDKCommon.shared.sdkVersion()) + } +} diff --git a/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/SdkCoder.swift b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/SdkCoder.swift new file mode 100644 index 00000000..2b1d6247 --- /dev/null +++ b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/SdkCoder.swift @@ -0,0 +1,44 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +public class SdkJSONEncoder : JSONEncoder { + public static var `default`: SdkJSONEncoder { return SdkJSONEncoder() } + public static var `custom`: SdkJSONEncoder { return SdkJSONEncoder(useCustomStrategy:true) } + + init(useCustomStrategy:Bool = false) { + super.init() + if (useCustomStrategy) { + self.keyEncodingStrategy = .convertToSnakeCase + } + } +} + +public class SdkJSONDecoder : JSONDecoder { + public static var `default`: SdkJSONDecoder { return SdkJSONDecoder() } + public static var `custom`: SdkJSONDecoder { return SdkJSONDecoder(useCustomStrategy:true) } + public static var `customIso8601Date`: SdkJSONDecoder { return SdkJSONDecoder(useCustomStrategy:true, dateStrategy: .iso8601) } + public static var `customSecondsSince1970`: SdkJSONDecoder { return SdkJSONDecoder(useCustomStrategy:true, dateStrategy: .secondsSince1970) } + + init(useCustomStrategy:Bool = false, dateStrategy: DateDecodingStrategy? = nil) { + super.init() + if (useCustomStrategy) { + self.keyDecodingStrategy = .convertFromSnakeCase + } + if let dateStrategy = dateStrategy { + self.dateDecodingStrategy = dateStrategy + } + } +} diff --git a/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/SdkCrypto.swift b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/SdkCrypto.swift new file mode 100644 index 00000000..7fd648a8 --- /dev/null +++ b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/SdkCrypto.swift @@ -0,0 +1,271 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation +import UIKit + +import CommonCrypto + +public class SdkCrypto { + public static let shared = SdkCrypto() + + let iteration : Int + var seed : Data = Data() + var iv : Data? + + init() { + self.iteration = 10000 + } + + func createSeed() -> Data? { + guard let appId = Bundle.main.bundleIdentifier else { + SdkLog.e("Invalid AppId") + return nil + } + guard let seed = self.sha256(string: appId), seed.count == 32 else { + SdkLog.e("Invalid Seed") + return nil + } + return seed + } + + func key() -> Data? { + if let seed = createSeed() { + self.seed = seed + //SdkLog.d("seed: \(self.seed)") + + guard seed.count == 32 else { + SdkLog.e("invalid seed length.") + return nil + } + self.iv = seed.subdata(in: 0..<16) + //SdkLog.d("iv: \(self.iv?.hexEncodedString() ?? "iv is nil?")") + } + else { return nil } + + guard let venderId = UIDevice.current.identifierForVendor?.uuidString else { + SdkLog.e("venderId is nil.") + return nil + } + //SdkLog.d("venderId: \(venderId)") + + let password = "SDK-\(venderId)" + let salt = seed.subdata(in: 16.. Data? { +// return self.encrypt(data: string.data(using: .utf8)) +// } + +// public func decrypt(data: Data?) -> String? { +// guard let decryptedData = self.decrypt(data: data) else { return nil } +// return String(bytes: decryptedData, encoding: .utf8) +// } + + public func encrypt(data: Data?) -> Data? { + return crypt(data: data, + key:self.key(), + keyLength: size_t(kCCKeySizeAES256), + iv:self.iv, + operation: CCOperation(kCCEncrypt), + option: CCOptions(kCCOptionPKCS7Padding)) + } + + public func decrypt(data: Data?) -> Data? { + return crypt(data: data, + key:self.key(), + keyLength: size_t(kCCKeySizeAES256), + iv:self.iv, + operation: CCOperation(kCCDecrypt), + option: CCOptions(kCCOptionPKCS7Padding)) + } + + public func encryptForMigration(data: Data?) -> Data? { + guard let venderId = UIDevice.current.identifierForVendor?.uuidString else { + SdkLog.e("venderId is nil.") + return nil + } + //SdkLog.d("venderId: \(venderId)") + let key = self.sha256(string:"SDK-\(venderId)") + //SdkLog.d("key: \(key?.hexEncodedString() ?? "key is nil?")") + + return self.encryptForMigration(data: data, key: key) + } + + public func encryptForMigration(data: Data?, key: Data?) -> Data? { + return crypt(data: data, + key:key, + keyLength: size_t(kCCKeySizeAES256), + iv:nil, + operation: CCOperation(kCCEncrypt), + option: CCOptions(kCCOptionECBMode|kCCOptionPKCS7Padding)) + } + + public func decryptForMigration(data: Data?) -> Data? { + guard let venderId = UIDevice.current.identifierForVendor?.uuidString else { + SdkLog.e("venderId is nil.") + return nil + } + //SdkLog.d("venderId: \(venderId)") + + let key = self.sha256(string:"SDK-\(venderId)") + //SdkLog.d("key: \(key?.hexEncodedString() ?? "key is nil?")") + + return self.decryptForMigration(data: data, key: key) + } + + public func decryptForMigration(data: Data?, key: Data?) -> Data? { + return crypt(data: data, + key:key, + keyLength: size_t(kCCKeySizeAES256), + iv:nil, + operation: CCOperation(kCCDecrypt), + option: CCOptions(kCCOptionECBMode|kCCOptionPKCS7Padding)) + } + + func crypt(data:Data?, key: Data?, keyLength: Int, iv: Data?, operation: CCOperation, option: CCOptions) -> Data? { + + guard let data = data else { return nil } + //SdkLog.d("data: \(data.hexEncodedString())") + + guard let key = key else { return nil } + //SdkLog.d("key: \(key.hexEncodedString())") + + var resultLength :size_t = 0 + + let keyBytes = self.dataToBytes(data: key) + let dataBytes = self.dataToBytes(data: data) + let ivBytes = ( iv != nil ) ? self.dataToBytes(data:iv!) : nil + + let cryptLength = size_t(data.count + kCCBlockSizeAES128) + var cryptData = Data(count:cryptLength) + + let cryptBytes = cryptData.withUnsafeMutableBytes { (tempBytes) -> UnsafeMutableRawPointer? in + return UnsafeMutableRawPointer(tempBytes.bindMemory(to: UInt8.self).baseAddress) + } + + let cryptStatus = CCCrypt(operation, + CCAlgorithm(kCCAlgorithmAES), + option, + keyBytes, keyLength, + ivBytes, + dataBytes, data.count, //data in + cryptBytes, cryptLength, //data out + &resultLength) //data move + + if (Int32(cryptStatus) != Int32(kCCSuccess)) { + SdkLog.e("== operation : \(operation) -- crypt failed : \(cryptStatus)") + return nil + } + + cryptData.removeSubrange(resultLength.. String? { + let uuid = UUID().uuidString + if let codeVerifierData = self.sha512(string: uuid) { + return self.base64(data: codeVerifierData).replacingOccurrences(of: "=", with: "") + } + return nil + } + + func sha512(data: Data) -> Data? { + var hash = [UInt8](repeating: 0, count: Int(CC_SHA512_DIGEST_LENGTH)) + data.withUnsafeBytes { + _ = CC_SHA512($0.baseAddress, CC_LONG(data.count), &hash) + } + return Data(hash) + } + + func sha512(string: String) -> Data? { + guard let data = string.data(using: String.Encoding.utf8) else { + SdkLog.e("Invalid Seed.") + return nil + } + return self.sha512(data: data) + } + + public func base64(data: Data) -> String { + return data.base64EncodedString(options: [.endLineWithCarriageReturn, .endLineWithLineFeed]) + } + + public func base64url(data: Data) -> String { + let base64url = self.base64(data:data) + .replacingOccurrences(of: "+", with: "-") + .replacingOccurrences(of: "/", with: "_") + .replacingOccurrences(of: "=", with: "") + return base64url + } + + public func sha256(data: Data) -> Data? { + var hash = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH)) + data.withUnsafeBytes { + _ = CC_SHA256($0.baseAddress, CC_LONG(data.count), &hash) + } + return Data(hash) + } + + public func sha256(string: String) -> Data? { + guard let data = string.data(using: String.Encoding.utf8) else { + SdkLog.e("Invalid Seed.") + return nil + } + return self.sha256(data: data) + } +} + +///:nodoc: +extension SdkCrypto { + // MARK: - Helper --------------------------------------------------------------------------------- + + func dataToBytes(data:Data) -> UnsafeRawPointer? { + data.withUnsafeBytes { (dataBytes) -> UnsafeRawPointer? in + return UnsafeRawPointer(dataBytes.bindMemory(to: UInt8.self).baseAddress) + } + } + + func pbkdf2(algorithm :CCPBKDFAlgorithm, password: String, salt: Data, keyByteCount: Int, rounds: Int) -> Data? { + guard let passwordData = password.data(using:String.Encoding.utf8) else { + return nil + } + var derivedKeyData = Data(repeating:0, count:keyByteCount) + let count = derivedKeyData.count + let derivationStatus = derivedKeyData.withUnsafeMutableBytes {derivedKeyBytes in + salt.withUnsafeBytes { saltBytes in + + CCKeyDerivationPBKDF( + CCPBKDFAlgorithm(kCCPBKDF2), + password, passwordData.count, + saltBytes.bindMemory(to: UInt8.self).baseAddress, salt.count, + algorithm, + UInt32(rounds), + derivedKeyBytes.bindMemory(to: UInt8.self).baseAddress, count) + } + } + if (derivationStatus != 0) { + SdkLog.e("key generation failed : \(derivationStatus)") + return nil + } + + return derivedKeyData + } +} diff --git a/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/SdkError.swift b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/SdkError.swift new file mode 100644 index 00000000..6db6b1fc --- /dev/null +++ b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/SdkError.swift @@ -0,0 +1,348 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +/// 카카오 SDK를 사용하면서 발생하는 모든 에러를 나타냅니다. +public enum SdkError : Error { + + /// SDK 내에서 발생하는 클라이언트 에러 + case ClientFailed(reason:ClientFailureReason, errorMessage:String?) + + /// API 호출 에러 + case ApiFailed(reason:ApiFailureReason, errorInfo:ErrorInfo?) + + /// 로그인 에러 + case AuthFailed(reason:AuthFailureReason, errorInfo:AuthErrorInfo?) +} + +/// :nodoc: +extension SdkError { + public init(reason:ClientFailureReason = .Unknown, message:String? = nil) { + switch reason { + case .ExceedKakaoLinkSizeLimit: + self = .ClientFailed(reason: reason, errorMessage: message ?? "failed to send message because it exceeds the message size limit.") + case .MustInitAppKey: + self = .ClientFailed(reason: reason, errorMessage: "initSDK(appKey:) must be initialized.") + case .Cancelled: + self = .ClientFailed(reason: reason, errorMessage:message ?? "user cancelled") + case .NotSupported: + self = .ClientFailed(reason: reason, errorMessage: "target app is not installed.") + case .BadParameter: + self = .ClientFailed(reason: reason, errorMessage:message ?? "bad parameters.") + case .TokenNotFound: + self = .ClientFailed(reason: reason, errorMessage: message ?? "authentication tokens not exist.") + case .CastingFailed: + self = .ClientFailed(reason: reason, errorMessage: message ?? "casting failed.") + case .Unknown: + self = .ClientFailed(reason: reason, errorMessage:message ?? "unknown error.") + } + } +} + +/// :nodoc: +extension SdkError { + public init?(response:HTTPURLResponse, data:Data, type:ApiType) { + if 200 ..< 300 ~= response.statusCode { return nil } + + switch type { + case .KApi: + if let errorInfo = try? SdkJSONDecoder.custom.decode(ErrorInfo.self, from: data) { + self = .ApiFailed(reason: errorInfo.code, errorInfo:errorInfo) + } + else { + return nil + } + case .KAuth: + if let authErrorInfo = try? SdkJSONDecoder.custom.decode(AuthErrorInfo.self, from: data) { + self = .AuthFailed(reason: authErrorInfo.error, errorInfo:authErrorInfo) + } + else { + return nil + } + } + } + + public init?(parameters: [String: String]) { + if let authErrorInfo = try? SdkJSONDecoder.custom.decode(AuthErrorInfo.self, from: JSONSerialization.data(withJSONObject: parameters, options: [])) { + self = .AuthFailed(reason: authErrorInfo.error, errorInfo: authErrorInfo) + } else { + return nil + } + } + + public init(scopes:[String]?) { + let errorInfo = ErrorInfo(code: .InsufficientScope, msg: "", requiredScopes: scopes) + self = .ApiFailed(reason: errorInfo.code, errorInfo: errorInfo) + } + + public init(apiFailedMessage:String? = nil) { + self = .ApiFailed(reason: .Unknown, errorInfo: ErrorInfo(code: .Unknown, msg:apiFailedMessage ?? "Unknown Error", requiredScopes: nil)) + } +} + +//helper +extension SdkError { + + /// 클라이언트 에러인지 확인합니다. + /// - seealso: `ClientFailureReason` + public var isClientFailed : Bool { + if case .ClientFailed = self { + return true + } + return false + } + + /// API 서버 에러인지 확인합니다. + /// - seealso: `ApiFailureReason` + public var isApiFailed : Bool { + if case .ApiFailed = self { + return true + } + return false + } + + /// 인증 서버 에러인지 확인합니다. + /// - seealso: `AuthFailureReason` + public var isAuthFailed : Bool { + if case .AuthFailed = self { + return true + } + return false + } + + /// 클라이언트 에러 정보를 얻습니다. `isClientFailed`가 true인 경우 사용해야 합니다. + /// - seealso: `ClientFailureReason` + public func getClientError() -> (reason:ClientFailureReason, message:String?) { + if case let .ClientFailed(reason, message) = self { + return (reason, message) + } + return (ClientFailureReason.Unknown, nil) + } + + /// API 요청 에러에 대한 정보를 얻습니다. `isApiFailed`가 true인 경우 사용해야 합니다. + /// - seealso: `ApiFailureReason`
`ErrorInfo` + public func getApiError() -> (reason:ApiFailureReason, info:ErrorInfo?) { + if case let .ApiFailed(reason, info) = self { + return (reason, info) + } + return (ApiFailureReason.Unknown, nil) + } + + /// 로그인 요청 에러에 대한 정보를 얻습니다. `isAuthFailed`가 true인 경우 사용해야 합니다. + /// - seealso: `AuthFailureReason`
`AuthErrorInfo` + public func getAuthError() -> (reason:AuthFailureReason, info:AuthErrorInfo?) { + if case let .AuthFailed(reason, info) = self { + return (reason, info) + } + return (AuthFailureReason.Unknown, nil) + } + + /// 유효하지 않은 토큰 에러인지 체크합니다. + public func isInvalidTokenError() -> Bool { + if case .ApiFailed = self, getApiError().reason == .InvalidAccessToken { + return true + } + else if case .AuthFailed = self, getAuthError().reason == .InvalidGrant { + return true + } + + return false + } +} + +//MARK: - error code enum + + +/// 클라이언트 에러 종류 입니다. +public enum ClientFailureReason { + + /// 기타 에러 + case Unknown + + /// 사용자의 취소 액션 등 + case Cancelled + + /// API 요청에 사용할 토큰이 없음 + case TokenNotFound + + /// 지원되지 않는 기능 + case NotSupported + + /// 잘못된 파라미터 + case BadParameter + + /// SDK 초기화를 하지 않음 + case MustInitAppKey + + /// 카카오링크 템플릿 용량 초과 + case ExceedKakaoLinkSizeLimit + + /// type casting 실패 + case CastingFailed +} + +/// API 서버 에러 종류 입니다. +public enum ApiFailureReason : Int, Codable { + + /// 기타 서버 에러 + case Unknown = -9999 + + /// 기타 서버 에러 + case Internal = -1 + + /// 잘못된 파라미터 + case BadParameter = -2 + + /// 지원되지 않는 API + case UnsupportedApi = -3 + + /// API 호출이 금지됨 + case Blocked = -4 + + /// 호출 권한이 없음 + case Permission = -5 + + /// 더이상 지원하지 않은 API를 요청한 경우 + case DeprecatedApi = -9 + + /// 쿼터 초과 + case ApiLimitExceed = -10 + + /// 연결되지 않은 사용자 + case NotSignedUpUser = -101 + + /// 이미 연결된 사용자에 대해 signup 시도 + case AlreadySignedUpUsercase = -102 + + /// 존재하지 않는 카카오계정 + case NotKakaoAccountUser = -103 + + /// 등록되지 않은 user property key + case InvalidUserPropertyKey = -201 + + /// 등록되지 않은 앱키의 요청 또는 존재하지 않는 앱으로의 요청. (앱키가 인증에 사용되는 경우는 -401 참조) + case NoSuchApp = -301 + + /// 앱키 또는 토큰이 잘못된 경우. 예) 토큰 만료 + case InvalidAccessToken = -401 + + /// 해당 API에서 접근하는 리소스에 대해 사용자의 동의를 받지 않음 + case InsufficientScope = -402 + + ///연령인증이 필요함 + case RequiredAgeVerification = -405 + + ///연령제한에 걸림 + case UnderAgeLimit = -406 + + /// 앱의 연령제한보다 사용자의 연령이 낮음 + case LowerAgeLimit = -451 + + /// 이미 연령인증이 완료 됨 + case AlreadyAgeAuthorized = -452 + + /// 연령인증 허용 횟수 초과 + case AgeCheckLimitExceed = -453 + + /// 이전 연령인증과 일치하지 않음 + case AgeResultMismatched = -480 + + /// CI 불일치 + case CIResultMismatched = -481 + + /// 카카오톡 사용자가 아님 + case NotTalkUser = -501 + + /// 지원되지 않는 기기로 메시지 보내는 경우 + case UserDevicedUnsupported = -504 + + /// 메시지 수신자가 수신을 거부한 경우 + case TalkMessageDisabled = -530 + + /// 월간 메시지 전송 허용 횟수 초과 + case TalkSendMessageMonthlyLimitExceed = -531 + + /// 일간 메시지 전송 허용 횟수 초과 + case TalkSendMessageDailyLimitExceed = -532 + + /// 카카오스토리 사용자가 아님 + case NotStoryUser = -601 + + /// 카카오스토리 이미지 업로드 사이즈 제한 초과 + case StoryImageUploadSizeExceed = -602 + + /// 카카오스토리 이미지 업로드 타임아웃 + case StoryUploadTimeout = -603 + + /// 카카오스토리 스크랩시 잘못된 스크랩 URL로 호출할 경우 + case StoryInvalidScrapUrl = -604 + + /// 카카오스토리의 내정보 요청시 잘못된 내스토리 아이디(포스트 아이디)로 호출할 경우 + case StoryInvalidPostId = -605 + + /// 카카오스토리 이미지 업로드시 허용된 업로드 파일 수가 넘을 경우 + case StoryMaxUploadNumberExceed = -606 + + /// 서버 점검 중 + case UnderMaintenance = -9798 +} + +/// :nodoc: +extension ApiFailureReason { + public init(from decoder: Decoder) throws { + self = try ApiFailureReason(rawValue: decoder.singleValueContainer().decode(RawValue.self)) ?? .Unknown + } +} + +/// 로그인 요청 에러 종류 입니다. +public enum AuthFailureReason : String, Codable { + + /// 기타 에러 + case Unknown = "unknown" + + /// 요청 파라미터 오류 + case InvalidRequest = "invalid_request" + + /// 유효하지 않은 앱 + case InvalidClient = "invalid_client" + + /// 유효하지 않은 scope + case InvalidScope = "invalid_scope" + + /// 인증 수단이 유효하지 않아 인증할 수 없는 상태 + case InvalidGrant = "invalid_grant" + + /// 설정이 올바르지 않음. 예) bundle id + case Misconfigured = "misconfigured" + + /// 앱이 요청 권한이 없음 + case Unauthorized = "unauthorized" + + /// 접근이 거부 됨 (동의 취소) + case AccessDenied = "access_denied" + + /// 서버 내부 에러 + case ServerError = "server_error" + + /// :nodoc: 카카오싱크 전용 + case AutoLogin = "auto_login" +} + +/// :nodoc: +extension AuthFailureReason { + public init(from decoder: Decoder) throws { + self = try AuthFailureReason(rawValue: decoder.singleValueContainer().decode(RawValue.self)) ?? .Unknown + } +} diff --git a/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/SdkLog.swift b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/SdkLog.swift new file mode 100644 index 00000000..b80f2c18 --- /dev/null +++ b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/SdkLog.swift @@ -0,0 +1,145 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +/// :nodoc: 로그레벨입니다. +/// - verbose: Log type verbose +/// - info: Log type info +/// - debug: Log type debug +/// - warning: Log type warning +/// - error: Log type error +public enum LogEvent: String { + case v = "[🔬]" // verbose + case d = "[💬]" // debug + case i = "[ℹ️]" // info + case w = "[⚠️]" // warning + case e = "[‼️]" // error +} + +/// :nodoc: 로그레벨입니다. +public enum LogLevel : Int { + case v = 0 + case d = 1 + case i = 2 + case w = 3 + case e = 4 +} + +/// :nodoc: SdkLog 클래스 입니다. +open class SdkLog { + public static let shared = SdkLog() + + public let maxLogs = 10 + + var _debugLogs = [String]() + public var debugLogs : [String] { + get { + return _debugLogs + } + } + + public var debugLog : String { + get { + if let appVersion = Bundle.main.object(forInfoDictionaryKey:"CFBundleShortVersionString") as? String { + return "\("==== sdk version: \(KakaoSDKCommon.shared.sdkVersion())\n")\("==== app version: \(appVersion)\n\n\n")\(_debugLogs.joined(separator: "\n"))" + } + else { + return _debugLogs.joined(separator: "\n") + } + } + } + + public let developLoglevel : LogLevel + public let releaseLogLevel : LogLevel + + public init(developLogLevel : LogLevel = LogLevel.d, releaseLogLevel: LogLevel = LogLevel.i) { + self.developLoglevel = developLogLevel + self.releaseLogLevel = releaseLogLevel + } + + class var dateFormatter: DateFormatter { + let formatter = DateFormatter() + formatter.dateFormat = "yyyy-MM-dd hh:mm:ssSSS" + formatter.locale = Locale.current + formatter.timeZone = TimeZone.current + return formatter + } + + class var simpleDateFormatter: DateFormatter { + let formatter = DateFormatter() + formatter.dateFormat = "MM-dd hh:mm:ssSSS" + formatter.locale = Locale.current + formatter.timeZone = TimeZone.current + return formatter + } + + public func clearLog() { + _debugLogs.removeAll() + } + + public class func sourceFileName(filePath: String) -> String { + let components = filePath.components(separatedBy: "/") + return components.isEmpty ? "" : components.last! + } + + class func sdkprint(_ object: Any, filename: String = #file, line: Int = #line, column: Int = #column, funcName: String = #function, logEvent:LogEvent = LogEvent.e, printLogLevel: LogLevel = LogLevel.e) { + // Only allowing in DEBUG mode + #if DEBUG + if (printLogLevel.rawValue >= SdkLog.shared.developLoglevel.rawValue) { + Swift.print("\(Date().toString()) \(logEvent.rawValue)[\(SdkLog.sourceFileName(filePath: filename)) \(line):\(column)] -> \(object)") + } + #endif + + if KakaoSDKCommon.shared.isLoggingEnable() { + if (printLogLevel.rawValue >= SdkLog.shared.releaseLogLevel.rawValue) { + if (SdkLog.shared._debugLogs.count >= SdkLog.shared.maxLogs) { + SdkLog.shared._debugLogs.removeFirst() + } + + SdkLog.shared._debugLogs.append("\(Date().toSimpleString()) \(logEvent.rawValue) -> \(object)") + } + } + } + + public class func v( _ object: Any, filename: String = #file, line: Int = #line, column: Int = #column, funcName: String = #function) { + sdkprint(object, filename: filename, line: line, column: column, funcName: funcName, logEvent: LogEvent.v, printLogLevel: LogLevel.v) + } + + public class func d( _ object: Any, filename: String = #file, line: Int = #line, column: Int = #column, funcName: String = #function) { + sdkprint(object, filename: filename, line: line, column: column, funcName: funcName, logEvent: LogEvent.d, printLogLevel: LogLevel.d) + } + + public class func i( _ object: Any, filename: String = #file, line: Int = #line, column: Int = #column, funcName: String = #function) { + sdkprint(object, filename: filename, line: line, column: column, funcName: funcName, logEvent: LogEvent.i, printLogLevel: LogLevel.i) + } + + public class func w( _ object: Any, filename: String = #file, line: Int = #line, column: Int = #column, funcName: String = #function) { + sdkprint(object, filename: filename, line: line, column: column, funcName: funcName, logEvent: LogEvent.w, printLogLevel: LogLevel.w) + } + + public class func e( _ object: Any, filename: String = #file, line: Int = #line, column: Int = #column, funcName: String = #function) { + sdkprint(object, filename: filename, line: line, column: column, funcName: funcName, logEvent: LogEvent.e, printLogLevel: LogLevel.e) + } +} + +extension Date { + public func toString() -> String { + return SdkLog.dateFormatter.string(from: self as Date) + } + + public func toSimpleString() -> String { + return SdkLog.simpleDateFormatter.string(from: self as Date) + } +} diff --git a/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/SdkUtils.swift b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/SdkUtils.swift new file mode 100644 index 00000000..bb6eb740 --- /dev/null +++ b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/SdkUtils.swift @@ -0,0 +1,49 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +public class SdkUtils { + static public func castOrThrow(_ resultType: T.Type, _ object: Any) throws -> T { + guard let returnValue = object as? T else { + throw SdkError(reason: .CastingFailed) + } + return returnValue + } + + static public func toJsonString(_ value: T) -> String? { + if let jsonData = try? SdkJSONEncoder.custom.encode(value) { + return String(data:jsonData, encoding: .utf8) + } + else { + return nil + } + } + + static public func toJsonObject(_ data: Data) -> [String:Any]? { + return (try? JSONSerialization.jsonObject(with: data, options:[])) as? [String : Any] + } + + + static public func makeUrlStringWithParameters(_ url:String, parameters:[String:Any]?) -> String? { + guard var components = URLComponents(string:url) else { return nil } + components.queryItems = parameters?.urlQueryItems + return components.url?.absoluteString + } + + static public func makeUrlWithParameters(_ url:String, parameters:[String:Any]?) -> URL? { + guard let finalStringUrl = makeUrlStringWithParameters(url, parameters:parameters) else { return nil } + return URL(string:finalStringUrl) + } +} diff --git a/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/Urls.swift b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/Urls.swift new file mode 100644 index 00000000..1d635552 --- /dev/null +++ b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/common/Urls.swift @@ -0,0 +1,177 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +public class Hosts { + public static let shared = Hosts() + + public let kapi : String + public let dapi : String + public let auth : String + public let kauth : String + public let talkAuth : String + public let channel : String + public let webnavi : String + public let talkLink : String + public let talkLinkVersion : String + public let sharerLink : String + + public init(kapi: String = "kapi.kakao.com", + dapi: String = "dapi.kakao.com", + auth: String = "auth.kakao.com", + kauth: String = "kauth.kakao.com", + talkAuth: String = "kakaokompassauth", + channel: String = "pf.kakao.com", + webnavi: String = "kakaonavi-wguide.kakao.com", + talkLink: String = "kakaolink", + talkLinkVersion: String = "kakaotalk-5.9.7", + sharerLink: String = "sharer.kakao.com") + { + self.kapi = kapi + self.dapi = dapi + self.auth = auth + self.kauth = kauth + self.talkAuth = talkAuth + self.channel = channel + self.webnavi = webnavi + self.talkLink = talkLink + self.talkLinkVersion = talkLinkVersion + self.sharerLink = sharerLink + } +} + +public enum HostType { + case Kapi + case Dapi + case Auth + case Kauth + case TalkAuth + case Channel + case Navi + case WebNavi + case TalkLink + case TalkLinkVersion + case SharerLink + + public var host: String { + switch self { + case .Kapi: + return "https://\(KakaoSDKCommon.shared.hosts().kapi)" + case .Dapi: + return "https://\(KakaoSDKCommon.shared.hosts().dapi)" + case .Auth: + return "https://\(KakaoSDKCommon.shared.hosts().auth)" + case .Kauth: + return "https://\(KakaoSDKCommon.shared.hosts().kauth)" + case .TalkAuth: + return "\(KakaoSDKCommon.shared.hosts().talkAuth)://" + case .Channel: + return "https://\(KakaoSDKCommon.shared.hosts().channel)" + case .Navi: + return "kakaonavi-sdk://" + case .WebNavi: + return "https://\(KakaoSDKCommon.shared.hosts().webnavi)" + case .TalkLink: + return "\(KakaoSDKCommon.shared.hosts().talkLink)://" + case .TalkLinkVersion: + return "\(KakaoSDKCommon.shared.hosts().talkLinkVersion)://" + case .SharerLink: + return "https://\(KakaoSDKCommon.shared.hosts().sharerLink)" + } + } +} + +public class Paths { + //kauth + public static let authAuthorize = "/oauth/authorize" + public static let authToken = "/oauth/token" + public static let authAgt = "/api/agt" + + public static let authTalk = "authorize" + + //kakao accounts + public static let kakaoAccountsLogin = "/sdks/page" + + //user + public static let signup = "/v1/user/signup" + public static var userMe = "/v2/user/me" + public static let userUpdateProfile = "/v1/user/update_profile" + public static let userAccessTokenInfo = "/v1/user/access_token_info" + public static let userLogout = "/v1/user/logout" + public static let userUnlink = "/v1/user/unlink" + public static let userShippingAddress = "/v1/user/shipping_address" + public static let userServiceTerms = "/v1/user/service/terms" + public static let userScopes = "/v2/user/scopes" + public static let userRevokeScopes = "/v2/user/revoke/scopes" + + //talk + public static let talkProfile = "/v1/api/talk/profile" + public static let customMemo = "/v2/api/talk/memo/send" + public static let defaultMemo = "/v2/api/talk/memo/default/send" + public static let scrapMemo = "/v2/api/talk/memo/scrap/send" + public static let channels = "/v1/api/talk/channels" + + public static let friends = "/v1/api/talk/friends" + + public static let customMessage = "/v1/api/talk/friends/message/send" + public static let defaultMessage = "/v1/api/talk/friends/message/default/send" + public static let scrapMessage = "/v1/api/talk/friends/message/scrap/send" + + //story + public static let isStoryUser = "/v1/api/story/isstoryuser" + public static let storyProfile = "/v1/api/story/profile" + public static let storyLinkInfo = "/v1/api/story/linkinfo" + + public static let myStory = "/v1/api/story/mystory" + public static let myStories = "/v1/api/story/mystories" + public static let deleteMyStory = "/v1/api/story/delete/mystory" + + public static let postNote = "/v1/api/story/post/note" + public static let postLink = "/v1/api/story/post/link" + public static let postPhoto = "/v1/api/story/post/photo" + + public static let uploadMulti = "/v1/api/story/upload/multi" + + //channel + public static let channel = "" + + //kakaonavi + public static let shareDestination = "sharePoi" + public static let navigateDestination = "navigate" + public static let webShareDestination = "/navigate.html" + public static let webNavigateDestination = "/navigate.html" + + //kakaolink + public static let talkLink = "send" + public static let talkLinkVersion = "send" + + public static let validateLink = "/v2/api/kakaolink/talk/template/validate" + public static let scrapLink = "/v2/api/kakaolink/talk/template/scrap" + public static let defalutLink = "/v2/api/kakaolink/talk/template/default" + + public static let sharerLink = "/talk/friends/picker/easylink" + + public static let imageUploadLink = "/v2/api/talk/message/image/upload" + public static let imageScrapLink = "/v2/api/talk/message/image/scrap" + + //search + public static let searchCafe = "/v2/search/cafe" +} + +public class Urls { + public static func compose(_ hostType:HostType = .Kapi, path:String) -> String { + return "\(hostType.host)\(path)" + } +} diff --git a/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/Array+Utils.swift b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/Array+Utils.swift new file mode 100644 index 00000000..44a2ba73 --- /dev/null +++ b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/Array+Utils.swift @@ -0,0 +1,27 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +extension Array where Element == String { + public func toJsonString() -> String? { + if let data = try? JSONSerialization.data(withJSONObject: self, options:[]) { + return String(data:data, encoding: .utf8) + } + else { + return nil + } + } +} + diff --git a/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/Data+Utils.swift b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/Data+Utils.swift new file mode 100644 index 00000000..1e202b91 --- /dev/null +++ b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/Data+Utils.swift @@ -0,0 +1,21 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +extension Data { + public func hexEncodedString() -> String { + return map { String(format: "%02hhx ", $0) }.joined() + } +} diff --git a/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/DecodingContainer+AnyCollection.swift b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/DecodingContainer+AnyCollection.swift new file mode 100644 index 00000000..39b9ed58 --- /dev/null +++ b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/DecodingContainer+AnyCollection.swift @@ -0,0 +1,162 @@ +// +// MIT License +// +// Copyright (c) 2019 levantAJ +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +import Foundation + +struct AnyCodingKey: CodingKey { + var stringValue: String + var intValue: Int? + + init?(stringValue: String) { + self.stringValue = stringValue + } + + init?(intValue: Int) { + self.intValue = intValue + self.stringValue = String(intValue) + } +} + +extension KeyedDecodingContainer { + /// Decodes a value of the given type for the given key. + /// + /// - parameter type: The type of value to decode. + /// - parameter key: The key that the decoded value is associated with. + /// - returns: A value of the requested type, if present for the given key + /// and convertible to the requested type. + /// - throws: `DecodingError.typeMismatch` if the encountered encoded value + /// is not convertible to the requested type. + /// - throws: `DecodingError.keyNotFound` if `self` does not have an entry + /// for the given key. + /// - throws: `DecodingError.valueNotFound` if `self` has a null entry for + /// the given key. + public func decode(_ type: [Any].Type, forKey key: KeyedDecodingContainer.Key) throws -> [Any] { + var values = try nestedUnkeyedContainer(forKey: key) + return try values.decode(type) + } + + /// Decodes a value of the given type for the given key. + /// + /// - parameter type: The type of value to decode. + /// - parameter key: The key that the decoded value is associated with. + /// - returns: A value of the requested type, if present for the given key + /// and convertible to the requested type. + /// - throws: `DecodingError.typeMismatch` if the encountered encoded value + /// is not convertible to the requested type. + /// - throws: `DecodingError.keyNotFound` if `self` does not have an entry + /// for the given key. + /// - throws: `DecodingError.valueNotFound` if `self` has a null entry for + /// the given key. + public func decode(_ type: [String: Any].Type, forKey key: KeyedDecodingContainer.Key) throws -> [String: Any] { + let values = try nestedContainer(keyedBy: AnyCodingKey.self, forKey: key) + return try values.decode(type) + } + + /// Decodes a value of the given type for the given key, if present. + /// + /// This method returns `nil` if the container does not have a value + /// associated with `key`, or if the value is null. The difference between + /// these states can be distinguished with a `contains(_:)` call. + /// + /// - parameter type: The type of value to decode. + /// - parameter key: The key that the decoded value is associated with. + /// - returns: A decoded value of the requested type, or `nil` if the + /// `Decoder` does not have an entry associated with the given key, or if + /// the value is a null value. + /// - throws: `DecodingError.typeMismatch` if the encountered encoded value + /// is not convertible to the requested type. + public func decodeIfPresent(_ type: [Any].Type, forKey key: KeyedDecodingContainer.Key) throws -> [Any]? { + guard contains(key), + try decodeNil(forKey: key) == false else { return nil } + return try decode(type, forKey: key) + } + + /// Decodes a value of the given type for the given key, if present. + /// + /// This method returns `nil` if the container does not have a value + /// associated with `key`, or if the value is null. The difference between + /// these states can be distinguished with a `contains(_:)` call. + /// + /// - parameter type: The type of value to decode. + /// - parameter key: The key that the decoded value is associated with. + /// - returns: A decoded value of the requested type, or `nil` if the + /// `Decoder` does not have an entry associated with the given key, or if + /// the value is a null value. + /// - throws: `DecodingError.typeMismatch` if the encountered encoded value + /// is not convertible to the requested type. + public func decodeIfPresent(_ type: [String: Any].Type, forKey key: KeyedDecodingContainer.Key) throws -> [String: Any]? { + guard contains(key), + try decodeNil(forKey: key) == false else { return nil } + return try decode(type, forKey: key) + } +} + +private extension KeyedDecodingContainer { + func decode(_ type: [String: Any].Type) throws -> [String: Any] { + var dictionary: [String: Any] = [:] + for key in allKeys { + if try decodeNil(forKey: key) { + dictionary[key.stringValue] = NSNull() + } else if let bool = try? decode(Bool.self, forKey: key) { + dictionary[key.stringValue] = bool + } else if let string = try? decode(String.self, forKey: key) { + dictionary[key.stringValue] = string + } else if let int = try? decode(Int.self, forKey: key) { + dictionary[key.stringValue] = int + } else if let double = try? decode(Double.self, forKey: key) { + dictionary[key.stringValue] = double + } else if let dict = try? decode([String: Any].self, forKey: key) { + dictionary[key.stringValue] = dict + } else if let array = try? decode([Any].self, forKey: key) { + dictionary[key.stringValue] = array + } + } + return dictionary + } +} + +private extension UnkeyedDecodingContainer { + mutating func decode(_ type: [Any].Type) throws -> [Any] { + var elements: [Any] = [] + while !isAtEnd { + if try decodeNil() { + elements.append(NSNull()) + } else if let int = try? decode(Int.self) { + elements.append(int) + } else if let bool = try? decode(Bool.self) { + elements.append(bool) + } else if let double = try? decode(Double.self) { + elements.append(double) + } else if let string = try? decode(String.self) { + elements.append(string) + } else if let values = try? nestedContainer(keyedBy: AnyCodingKey.self), + let element = try? values.decode([String: Any].self) { + elements.append(element) + } else if var values = try? nestedUnkeyedContainer(), + let element = try? values.decode([Any].self) { + elements.append(element) + } + } + return elements + } +} diff --git a/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/Dictionary+Utils.swift b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/Dictionary+Utils.swift new file mode 100644 index 00000000..b3760da4 --- /dev/null +++ b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/Dictionary+Utils.swift @@ -0,0 +1,57 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +extension Dictionary { + public var queryParameters: String { + var parts: [String] = [] + for (key, value) in self { + let part = String(format: "%@=%@", + // ! optional unwrapping [ ] + String(describing: key).addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!, + // ! optional unwrapping [ ] + String(describing: value).addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!) + parts.append(part as String) + } + return parts.joined(separator: "&") + } + + public var urlQueryItems: [URLQueryItem]? { + let queryItems = self.map { (key, value) in + URLQueryItem(name: String(describing: key), + value: String(describing: value)) + } + return queryItems + } +} + +extension Dictionary where Key == String, Value == Any? { + public func filterNil() -> [String:Any]? { + let filteredNil = self.filter({ $0.value != nil }).mapValues({ $0! }) + return (!filteredNil.isEmpty) ? filteredNil : nil + } +} + +extension Dictionary where Key == String, Value: Any { + public func toJsonString() -> String? { + if let data = try? JSONSerialization.data(withJSONObject: self, options:[]) { + return String(data:data, encoding: .utf8) + } + else { + return nil + } + } +} + diff --git a/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/EncodingContainer+AnyCollection.swift b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/EncodingContainer+AnyCollection.swift new file mode 100644 index 00000000..9d1219f5 --- /dev/null +++ b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/EncodingContainer+AnyCollection.swift @@ -0,0 +1,146 @@ + +// MIT License +// +// Copyright (c) 2019 levantAJ +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +import Foundation + +extension KeyedEncodingContainer { + /// Encodes the given value for the given key. + /// + /// - parameter value: The value to encode. + /// - parameter key: The key to associate the value with. + /// - throws: `EncodingError.invalidValue` if the given value is invalid in + /// the current context for this format. + public mutating func encode(_ value: [String: Any], forKey key: KeyedEncodingContainer.Key) throws { + var container = nestedContainer(keyedBy: AnyCodingKey.self, forKey: key) + try container.encode(value) + } + + /// Encodes the given value for the given key. + /// + /// - parameter value: The value to encode. + /// - parameter key: The key to associate the value with. + /// - throws: `EncodingError.invalidValue` if the given value is invalid in + /// the current context for this format. + public mutating func encode(_ value: [Any], forKey key: KeyedEncodingContainer.Key) throws { + var container = nestedUnkeyedContainer(forKey: key) + try container.encode(value) + } + + /// Encodes the given value for the given key if it is not `nil`. + /// + /// - parameter value: The value to encode. + /// - parameter key: The key to associate the value with. + /// - throws: `EncodingError.invalidValue` if the given value is invalid in + /// the current context for this format. + public mutating func encodeIfPresent(_ value: [String: Any]?, forKey key: KeyedEncodingContainer.Key) throws { + if let value = value { + var container = nestedContainer(keyedBy: AnyCodingKey.self, forKey: key) + try container.encode(value) + } else { + try encodeNil(forKey: key) + } + } + + /// Encodes the given value for the given key if it is not `nil`. + /// + /// - parameter value: The value to encode. + /// - parameter key: The key to associate the value with. + /// - throws: `EncodingError.invalidValue` if the given value is invalid in + /// the current context for this format. + public mutating func encodeIfPresent(_ value: [Any]?, forKey key: KeyedEncodingContainer.Key) throws { + if let value = value { + var container = nestedUnkeyedContainer(forKey: key) + try container.encode(value) + } else { + try encodeNil(forKey: key) + } + } +} + +private extension KeyedEncodingContainer where K == AnyCodingKey { + mutating func encode(_ value: [String: Any]) throws { + for (k, v) in value { + let key = AnyCodingKey(stringValue: k)! + switch v { + case is NSNull: + try encodeNil(forKey: key) + case let string as String: + try encode(string, forKey: key) + case let int as Int: + try encode(int, forKey: key) + case let bool as Bool: + try encode(bool, forKey: key) + case let double as Double: + try encode(double, forKey: key) + case let dict as [String: Any]: + try encode(dict, forKey: key) + case let array as [Any]: + try encode(array, forKey: key) + default: + debugPrint("⚠️ Unsuported type!", v) + continue + } + } + } +} + +private extension UnkeyedEncodingContainer { + /// Encodes the given value. + /// + /// - parameter value: The value to encode. + /// - throws: `EncodingError.invalidValue` if the given value is invalid in + /// the current context for this format. + mutating func encode(_ value: [Any]) throws { + for v in value { + switch v { + case is NSNull: + try encodeNil() + case let string as String: + try encode(string) + case let int as Int: + try encode(int) + case let bool as Bool: + try encode(bool) + case let double as Double: + try encode(double) + case let dict as [String: Any]: + try encode(dict) + case let array as [Any]: + var values = nestedUnkeyedContainer() + try values.encode(array) + default: + debugPrint("⚠️ Unsuported type!", v) + } + } + } + + /// Encodes the given value. + /// + /// - parameter value: The value to encode. + /// - throws: `EncodingError.invalidValue` if the given value is invalid in + /// the current context for this format. + mutating func encode(_ value: [String: Any]) throws { + var container = self.nestedContainer(keyedBy: AnyCodingKey.self) + try container.encode(value) + } +} diff --git a/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/URL+Utils.swift b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/URL+Utils.swift new file mode 100644 index 00000000..ddf4ac2a --- /dev/null +++ b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/extension/URL+Utils.swift @@ -0,0 +1,32 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +extension URL { + public func params() -> [String:Any]? { + var dict = [String:Any]() + + if let components = URLComponents(url: self, resolvingAgainstBaseURL: false) { + if let queryItems = components.queryItems { + for item in queryItems { + dict[item.name] = item.value! + } + } + return dict + } else { + return nil + } + } +} diff --git a/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/model/AuthErrorInfo.swift b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/model/AuthErrorInfo.swift new file mode 100644 index 00000000..9b8e06d3 --- /dev/null +++ b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/model/AuthErrorInfo.swift @@ -0,0 +1,27 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +/// 로그인 요청에서 사용되는 OAuth 에러를 나타냅니다. +/// - seealso: `AuthFailureReason` +public struct AuthErrorInfo : Codable { + + /// 에러 코드 + public let error: AuthFailureReason + + /// 에러 메시지 + public let errorDescription: String? + +} diff --git a/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/model/ErrorInfo.swift b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/model/ErrorInfo.swift new file mode 100644 index 00000000..53a5a3f0 --- /dev/null +++ b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/common/model/ErrorInfo.swift @@ -0,0 +1,43 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +/// API 호출 시 발생하는 에러 정보입니다. +/// - seealso: `ApiFailureReason` +public struct ErrorInfo : Codable { + + /// 에러 코드 + public let code: ApiFailureReason + + /// 에러 메시지 + public let msg: String + + /// 사용자에게 API 호출에 필요한 동의를 받지 못하여 `ApiFailureReason.InsufficientScope` 에러가 발생한 경우 필요한 scope 목록이 내려옵니다. 이 scope 목록으로 추가 항목 동의 받기를 요청해야 합니다. + /// - seealso: [AuthController.authorizeWithAuthenticationSession(scopes:)](../../RxKakaoSDKAuth/Classes/AuthController.html) + public let requiredScopes: [String]? + + /// :nodoc: API 타입 + public let apiType: String? + + public let allowedScopes: [String]? + + public init(code: ApiFailureReason, msg:String, requiredScopes:[String]?) { + self.code = code + self.msg = msg + self.requiredScopes = requiredScopes + self.apiType = nil + self.allowedScopes = nil + } +} diff --git a/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/network/Api.swift b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/network/Api.swift new file mode 100644 index 00000000..d1936649 --- /dev/null +++ b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/network/Api.swift @@ -0,0 +1,228 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation +import Alamofire + +public let API = Api.shared + +public enum SessionType { + case Auth //KA + case Api //KA + case AuthApi //Token (withRetrier) + case RxAuthApi //Token + case PartnerAuthApi +} + +//public enum ApiType { +// case KApi +// case KAuth +//} + +public class Api { + public static let shared = Api() + + public let encoding : URLEncoding + + public var sessions : [SessionType:Session] = [SessionType:Session]() + + public init() { + self.encoding = URLEncoding(boolEncoding: .literal) + initSession() + } +} + +extension Api { + private func initSession() { + addSession(type: .Api, session:Session(configuration: URLSessionConfiguration.default, interceptor: ApiRequestAdapter())) + addSession(type: .Auth, session:Session(configuration: URLSessionConfiguration.default, interceptor: ApiRequestAdapter())) + } + + public func addSession(type:SessionType, session:Session) { + if self.sessions[type] == nil { + self.sessions[type] = session + } + +// SdkLog.d("<<<<<<< sessions: \(self.sessions) count: \(self.sessions.count)") + } + + public func session(_ sessionType: SessionType) -> Session { + return sessions[sessionType] ?? sessions[.Api]! + } +} + +extension Api { + public func getRequestRetryFailedError(error:AFError?) -> SdkError? { + if let aferror = error { + switch aferror { + case .requestRetryFailed(let retryError, _): + return retryError as? SdkError + default: + break + } + } + return nil + } + + public func responseData(_ HTTPMethod: Alamofire.HTTPMethod, + _ url: String, + parameters: [String: Any]? = nil, + headers: [String: String]? = nil, + sessionType: SessionType = .AuthApi, + apiType: ApiType, + completion: @escaping (HTTPURLResponse?, Data?, Error?) -> Void) { + + API.session(sessionType) + .request(url, method:HTTPMethod, parameters:parameters, encoding:API.encoding, headers:(headers != nil ? HTTPHeaders(headers!):nil) ) + .validate({ (request, response, data) -> Request.ValidationResult in + if let data = data { + + var json : Any? = nil + do { + json = try JSONSerialization.jsonObject(with:data, options:[]) + } catch { + SdkLog.e(error) + } + + SdkLog.d("===================================================================================================") + SdkLog.d("session: \n type: \(sessionType)\n\n") + SdkLog.i("request: \n method: \(HTTPMethod)\n url:\(url)\n headers:\(String(describing: headers))\n parameters: \(String(describing: parameters)) \n\n") + SdkLog.i("response:\n \(String(describing: json))\n\n" ) + + if let sdkError = SdkError(response: response, data: data, type: apiType) { + return .failure(sdkError) + } + else { + return .success(Void()) + } + } + else { + return .failure(SdkError(reason: .Unknown, message: "data is nil.")) + } + }) + .responseData { [unowned self] response in + if let afError = response.error { + if let retryError = self.getRequestRetryFailedError(error:afError) { + SdkLog.e("response:\n api error: \(retryError)") + completion(nil, nil, retryError) + } + else { + //일반에러 + SdkLog.e("response:\n not api error: \(afError)") + completion(nil, nil, afError) + return + } + } + else if let data = response.data, let response = response.response { + if let sdkError = SdkError(response: response, data: data, type: apiType) { + completion(nil, nil, sdkError) + return + } + + completion(response, data, nil) + return + } + else { + //data or response 가 문제 + SdkLog.e("response:\n error: response or data is nil.") + completion(nil, nil, SdkError(reason: .Unknown, message: "response or data is nil.")) + return + } + } + } + + public func upload(_ HTTPMethod: Alamofire.HTTPMethod, + _ url: String, + images: [UIImage?] = [], + parameters: [String: Any]? = nil, //현재 authapi인 story만 쓰고 있고 나중을 위해 열어둠 + headers: [String: String]? = nil, //현재 authapi인 story만 쓰고 있고 나중을 위해 열어둠 + needsAccessToken: Bool = true, //현재 authapi인 story만 쓰고 있고 나중을 위해 열어둠 + needsKAHeader: Bool = false, //현재 authapi인 story만 쓰고 있고 나중을 위해 열어둠 + sessionType: SessionType = .AuthApi, //현재 authapi인 story만 쓰고 있고 나중을 위해 열어둠 + apiType: ApiType, + completion: @escaping (HTTPURLResponse?, Data?, Error?) -> Void) { + + API.session(sessionType) + .upload(multipartFormData: { (formData) in + images.forEach({ (image) in + if let imageData = image?.pngData() { + formData.append(imageData, withName: "file", fileName:"image.png", mimeType: "image/png") + } + else if let imageData = image?.jpegData(compressionQuality: 1) { + formData.append(imageData, withName: "file", fileName:"image.jpg", mimeType: "image/jpeg") + } + else { + } + }) + parameters?.forEach({ (arg) in + guard let data = String(describing: arg.value).data(using: .utf8) else { + return + } + formData.append(data, withName: arg.key) + }) + }, to: url, method: HTTPMethod, headers: (headers != nil ? HTTPHeaders(headers!):nil)) + .uploadProgress(queue: .main, closure: { (progress) in + SdkLog.i("upload progress: \(String(format:"%.2f", 100.0 * progress.fractionCompleted))%") + }) + .validate { (request, response, data) -> DataRequest.ValidationResult in + if let data = data { + var json : Any? = nil + do { + json = try JSONSerialization.jsonObject(with:data, options:[]) + } catch { + SdkLog.e("response:\n error: \(error)") //json parsing error + return .failure(error) + } + + SdkLog.d("===================================================================================================") + SdkLog.i("request:\n method: \(HTTPMethod)\n url:\(url)\n headers:\(String(describing: headers))\n images:\(String(describing: images))\n parameters:\(String(describing: parameters))\n") + SdkLog.i("response:\n \(String(describing: json))\n\n" ) + + if let sdkError = SdkError(response: response, data: data, type: apiType) { + return .failure(sdkError) + } + else { + return .success(Void()) + } + } + else { + return .failure(SdkError()) + } + } + .responseData { (response) in + if let afError = response.error { + if let retryError = self.getRequestRetryFailedError(error:afError) { + SdkLog.e("response:\n api error: \(retryError)") + completion(nil, nil, retryError) + } + else { + //일반에러 + SdkLog.e("response:\n not api error: \(afError)") + completion(nil, nil, afError) + return + } + } + else if let data = response.data, let response = response.response { + completion(response, data, nil) + return + } + else { + //data or response 가 문제 + SdkLog.e("response:\n error: response or data is nil.") + completion(nil, nil, SdkError(reason: .Unknown, message: "response or data is nil.")) + return + } + } + } +} diff --git a/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/network/ApiRequestAdapter.swift b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/network/ApiRequestAdapter.swift new file mode 100644 index 00000000..1164c45f --- /dev/null +++ b/Pods/KakaoSDKCommon/sources/KakaoSDKCommon/network/ApiRequestAdapter.swift @@ -0,0 +1,30 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation +import Alamofire + +public class ApiRequestAdapter : RequestInterceptor{ + private let kaHeader: String + + public init(kaHeader: String = Constants.kaHeader) { + self.kaHeader = kaHeader + } + + public func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { + var urlRequest = urlRequest + urlRequest.setValue(Constants.kaHeader, forHTTPHeaderField: "KA") + return completion(.success(urlRequest)) + } +} diff --git a/Pods/KakaoSDKUser/LICENSE b/Pods/KakaoSDKUser/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/Pods/KakaoSDKUser/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Pods/KakaoSDKUser/sources/KakaoSDKUser/KakaoSDKUser.h b/Pods/KakaoSDKUser/sources/KakaoSDKUser/KakaoSDKUser.h new file mode 100644 index 00000000..d172fed3 --- /dev/null +++ b/Pods/KakaoSDKUser/sources/KakaoSDKUser/KakaoSDKUser.h @@ -0,0 +1,25 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +//! Project version number for KakaoSDKUser. +FOUNDATION_EXPORT double KakaoSDKUserVersionNumber; + +//! Project version string for KakaoSDKUser. +FOUNDATION_EXPORT const unsigned char KakaoSDKUserVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/Pods/KakaoSDKUser/sources/KakaoSDKUser/UserApi.swift b/Pods/KakaoSDKUser/sources/KakaoSDKUser/UserApi.swift new file mode 100644 index 00000000..2f10435a --- /dev/null +++ b/Pods/KakaoSDKUser/sources/KakaoSDKUser/UserApi.swift @@ -0,0 +1,364 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import UIKit +import Foundation +import KakaoSDKCommon +import KakaoSDKAuth + +/// 카카오 로그인의 주요 기능을 제공하는 클래스입니다. +/// +/// 이 클래스를 이용하여 **카카오톡 간편로그인** 또는 **카카오계정 로그인** 으로 로그인을 수행할 수 있습니다. +/// +/// 카카오톡 간편로그인 예제입니다. +/// +/// // 로그인 버튼 클릭 +/// if (UserApi.isKakaoTalkLoginAvailable()) { +/// UserApi.shared.loginWithKakaoTalk() +/// } +/// +/// // AppDelegate +/// func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { +/// if (AuthController.isKakaoTalkLoginUrl(url)) { +/// if AuthController.handleOpenUrl(url: url, options: options) { +/// return true +/// } +/// } +/// ... +/// } +/// +/// 카카오계정 로그인 예제입니다. +/// +/// UserApi.shared.loginWithKakaoAccount() +/// + +/// 카카오 Open API의 사용자관리 API 호출을 담당하는 클래스입니다. +final public class UserApi { + + // MARK: Fields + + /// 간편하게 API를 호출할 수 있도록 제공되는 공용 싱글톤 객체입니다. + public static let shared = UserApi() + + // MARK: API Methods + + // MARK: Login with KakaoTalk + + /// 카카오톡 간편로그인이 실행 가능한지 확인합니다. + /// + /// 내부적으로 UIApplication.shared.canOpenURL() 메소드를 사용합니다. 카카오톡 간편로그인을 위한 커스텀 스킴은 "kakaokompassauth"이며 이 메소드를 정상적으로 사용하기 위해서는 LSApplicationQueriesSchemes에 해당 스킴이 등록되어야 합니다. + /// 등록되지 않은 상태로 메소드를 호출하면 카카오톡이 설치되어 있더라도 항상 false를 반환합니다. + /// + /// ```xml + /// // info.plist + /// LSApplicationQueriesSchemes + /// + /// kakaokompassauth + /// + /// ``` + public static func isKakaoTalkLoginAvailable() -> Bool { + return UIApplication.shared.canOpenURL(URL(string:Urls.compose(.TalkAuth, path:Paths.authTalk))!) + } + + /// 카카오톡 간편로그인을 실행합니다. + /// - note: UserApi.isKakaoTalkLoginAvailable() 메소드로 실행 가능한 상태인지 확인이 필요합니다. 카카오톡을 실행할 수 없을 경우 loginWithKakaoAccount() 메소드로 웹 로그인을 시도할 수 있습니다. + public func loginWithKakaoTalk(channelPublicIds: [String]? = nil, + serviceTerms: [String]? = nil, + completion: @escaping (OAuthToken?, Error?) -> Void) { + + AuthController.shared.authorizeWithTalk(channelPublicIds:channelPublicIds, + serviceTerms:serviceTerms, + completion:completion) + + } + + + // MARK: Login with Kakao Account + + /// iOS 11 이상에서 제공되는 (SF/ASWeb)AuthenticationSession 을 이용하여 로그인 페이지를 띄우고 쿠키 기반 로그인을 수행합니다. 이미 사파리에에서 로그인하여 카카오계정의 쿠키가 있다면 이를 활용하여 ID/PW 입력 없이 간편하게 로그인할 수 있습니다. + /// - parameters: + /// - prompts 동의 화면 요청 시 추가 상호작용을 요청하고자 할 때 전달. [Prompt] + + public func loginWithKakaoAccount(prompts : [Prompt]? = nil, completion: @escaping (OAuthToken?, Error?) -> Void) { + AuthController.shared.authorizeWithAuthenticationSession(prompts: prompts, completion:completion) + } + + + // MARK: New Agreement + + /// 사용자로부터 카카오가 보유중인 사용자 정보 제공에 대한 동의를 받습니다. + /// + /// 카카오로부터 사용자의 정보를 제공 받거나 카카오서비스 접근권한이 필요한 경우, 사용자로부터 해당 정보 제공에 대한 동의를 받지 않았다면 이 메소드를 사용하여 **추가 항목 동의**를 받아야 합니다. + /// 필요한 동의항목과 매칭되는 scope id를 배열에 담아 파라미터로 전달해야 합니다. 동의항목과 scope id는 카카오 디벨로퍼스의 [내 애플리케이션] > [제품 설정] > [카카오 로그인] > [동의항목]에서 확인할 수 있습니다. + /// + /// ## 사용자 동의 획득 시나리오 + /// 간편로그인 또는 웹 로그인을 수행하면 최초 로그인 시 카카오 디벨로퍼스에 설정된 동의항목 설정에 따라 사용자의 동의를 받습니다. 동의항목을 설정해도 상황에 따라 동의를 받지 못할 수 있습니다. 대표적인 케이스는 아래와 같습니다. + /// - **선택 동의** 로 설정된 동의항목이 최초 로그인시 선택받지 못한 경우 + /// - **필수 동의** 로 설정하였지만 해당 정보가 로그인 시점에 존재하지 않아 카카오에서 동의항목을 보여주지 못한 경우 + /// - 사용자가 해당 동의항목이 설정되기 이전에 로그인한 경우 + /// + /// 이외에도 다양한 여건에 따라 동의받지 못한 항목이 발생할 수 있습니다. + /// + /// ## 추가 항목 동의 받기 시 주의사항 + /// **선택 동의** 으로 설정된 동의항목에 대한 **추가 항목 동의 받기**는, 반드시 **사용자가 동의를 거부하더라도 서비스 이용이 지장이 없는** 시나리오에서 요청해야 합니다. + + public func loginWithKakaoAccount(scopes:[String], + completion: @escaping (OAuthToken?, Error?) -> Void) { + AuthController.shared.authorizeWithAuthenticationSession(scopes:scopes, completion:completion) + } + + /// :nodoc: 카카오싱크 전용입니다. 자세한 내용은 카카오싱크 전용 개발가이드를 참고하시기 바랍니다. + public func loginWithKakaoAccount(prompts : [Prompt]? = nil, + channelPublicIds: [String]? = nil, + serviceTerms: [String]? = nil, + completion: @escaping (OAuthToken?, Error?) -> Void) { + + AuthController.shared.authorizeWithAuthenticationSession(prompts: prompts, + channelPublicIds: channelPublicIds, + serviceTerms: serviceTerms, + completion: completion) + } + + /// 앱 연결 상태가 **PREREGISTER** 상태의 사용자에 대하여 앱 연결 요청을 합니다. **자동연결** 설정을 비활성화한 앱에서 사용합니다. 요청에 성공하면 사용자 아이디가 반환됩니다. + public func signup(completion:@escaping (Int64?, Error?) -> Void) { + AUTH.responseData(.post, + Urls.compose(path:Paths.signup), + apiType: .KApi) { (response, data, error) in + if let error = error { + completion(nil, error) + return + } + + if let data = data { + if let json = (try? JSONSerialization.jsonObject(with:data, options:[])) as? [String: Any] { + if let id = json["id"] as? Int64 { + completion(id, nil) + return + } + } + } + + completion(nil, SdkError()) + } + } + + + /// 사용자에 대한 다양한 정보를 얻을 수 있습니다. + /// - seealso: `User` + public func me(propertyKeys: [String]? = nil, + secureResource: Bool = true, + completion:@escaping (User?, Error?) -> Void) { + AUTH.responseData(.get, + Urls.compose(path:Paths.userMe), + parameters: ["property_keys": propertyKeys?.toJsonString(), "secure_resource": secureResource].filterNil(), + apiType: .KApi) { (response, data, error) in + if let error = error { + completion(nil, error) + return + } + + if let data = data { + completion(try? SdkJSONDecoder.customIso8601Date.decode(User.self, from: data), nil) + return + } + + completion(nil, SdkError()) + } + } + + /// User 클래스에서 제공되고 있는 사용자의 부가정보를 신규저장 및 수정할 수 있습니다. + /// + /// 저장 가능한 키 이름은 개발자 사이트의 [내 애플리케이션] > [제품 설정] > [카카오 로그인] > [사용자 프로퍼티] 메뉴에서 확인하실 수 있습니다. 앱 연결 시 기본 저장되는 nickanme, profile_image, thumbnail_image 값도 덮어쓰기 가능하며 + /// 새로운 컬럼을 추가하면 해당 키 이름으로 값을 저장할 수 있습니다. + /// - seealso: `User.properties` + public func updateProfile(properties: [String:Any], + completion:@escaping (Error?) -> Void) { + AUTH.responseData(.post, + Urls.compose(path:Paths.userUpdateProfile), + parameters: ["properties": properties.toJsonString()].filterNil(), + apiType: .KApi) { (response, data, error) in + if let error = error { + completion(error) + return + } + + completion(nil) + } + } + + /// 현재 토큰의 기본적인 정보를 조회합니다. me()에서 제공되는 다양한 사용자 정보 없이 가볍게 토큰의 유효성을 체크하는 용도로 사용하는 경우 추천합니다. + /// - seealso: `AccessTokenInfo` + public func accessTokenInfo(completion:@escaping (AccessTokenInfo?, Error?) -> Void) { + AUTH.responseData(.get, + Urls.compose(path:Paths.userAccessTokenInfo), + apiType: .KApi) { (response, data, error) in + if let error = error { + completion(nil, error) + return + } + + if let data = data { + completion(try? SdkJSONDecoder.custom.decode(AccessTokenInfo.self, from: data), nil) + return + } + + completion(nil, SdkError()) + } + } + + /// 토큰을 강제로 만료시킵니다. 같은 사용자가 여러개의 토큰을 발급 받은 경우 로그아웃 요청에 사용된 토큰만 만료됩니다. + public func logout(completion:@escaping (Error?) -> Void) { + AUTH.responseData(.post, + Urls.compose(path:Paths.userLogout), + apiType: .KApi) { (response, data, error) in + + ///실패여부와 상관없이 토큰삭제. + AUTH.tokenManager.deleteToken() + + if let error = error { + completion(error) + return + } + + completion(nil) + } + } + + /// 카카오 플랫폼 서비스와 앱 연결을 해제합니다. + public func unlink(completion:@escaping (Error?) -> Void) { + AUTH.responseData(.post, + Urls.compose(path:Paths.userUnlink), + apiType: .KApi) { (response, data, error) in + if let error = error { + completion(error) + return + } + else { + AUTH.tokenManager.deleteToken() + } + + completion(nil) + } + } + + /// 앱에 가입한 사용자의 배송지 정보를 얻을 수 있습니다. + /// - seealso: `UserShippingAddresses` + public func shippingAddresses(fromUpdatedAt: Int? = nil, pageSize: Int? = nil, completion:@escaping (UserShippingAddresses?, Error?) -> Void) { + AUTH.responseData(.get, + Urls.compose(path:Paths.userShippingAddress), + parameters: ["from_updated_at": fromUpdatedAt, "page_size": pageSize].filterNil(), + apiType: .KApi) { (response, data, error) in + if let error = error { + completion(nil, error) + return + } + + if let data = data { + completion(try? SdkJSONDecoder.customSecondsSince1970.decode(UserShippingAddresses.self, from: data), nil) + return + } + + completion(nil, SdkError()) + } + } + + /// 앱에 가입한 사용자의 배송지 정보를 얻을 수 있습니다. + /// - seealso: `UserShippingAddresses` + public func shippingAddresses(addressId: Int64, completion:@escaping (UserShippingAddresses?, Error?) -> Void) { + AUTH.responseData(.get, + Urls.compose(path:Paths.userShippingAddress), + parameters: ["address_id": addressId].filterNil(), + apiType: .KApi) { (response, data, error) in + if let error = error { + completion(nil, error) + return + } + + if let data = data { + completion(try? SdkJSONDecoder.customSecondsSince1970.decode(UserShippingAddresses.self, from: data), nil) + return + } + + completion(nil, SdkError()) + } + } + + /// 사용자가 카카오 간편가입을 통해 동의한 서비스 약관 내역을 반환합니다. + /// - seealso: `UserServiceTerms` + public func serviceTerms(extra:String? = nil, completion:@escaping (UserServiceTerms?, Error?) -> Void) { + AUTH.responseData(.get, + Urls.compose(path:Paths.userServiceTerms), + parameters: ["extra": extra].filterNil(), + apiType: .KApi) { (response, data, error) in + if let error = error { + completion(nil, error) + return + } + + if let data = data { + completion(try? SdkJSONDecoder.customIso8601Date.decode(UserServiceTerms.self, from: data), nil) + return + } + + completion(nil, SdkError()) + } + } + + /// 사용자가 동의한 동의 항목의 상세 정보 목록을 조회합니다. + /// [내 애플리케이션] > [카카오 로그인] > [동의 항목]에 설정된 동의 항목의 목록과 사용자의 동의 여부를 반환합니다. + /// - parameters: + /// - scopes 추가할 동의 항목 ID 목록 (옵셔널) + public func scopes(scopes:[String]? = nil, completion:@escaping (ScopeInfo?, Error?) -> Void) { + AUTH.responseData(.get, + Urls.compose(path:Paths.userScopes), + parameters: ["scopes":scopes?.toJsonString()].filterNil(), + apiType: .KApi) { (response, data, error) in + if let error = error { + completion(nil, error) + return + } + + if let data = data { + completion(try? SdkJSONDecoder.custom.decode(ScopeInfo.self, from: data), nil) + return + } + + completion(nil, SdkError()) + } + } + + /// 사용자의 특정 동의 항목에 대한 동의를 철회(Revoke)합니다. + /// 동의 내역 확인하기 API를 통해 조회한 동의 항목 정보 중 동의 철회 가능 여부(revocable) 값이 true인 동의 항목만 철회 가능합니다. + /// - parameters: + /// - scopes 추가할 동의 항목 ID 목록 + public func revokeScopes(scopes:[String], completion:@escaping (ScopeInfo?, Error?) -> Void) { + AUTH.responseData(.post, + Urls.compose(path:Paths.userRevokeScopes), + parameters: ["scopes":scopes.toJsonString()].filterNil(), + apiType: .KApi) { (response, data, error) in + if let error = error { + completion(nil, error) + return + } + + if let data = data { + completion(try? SdkJSONDecoder.custom.decode(ScopeInfo.self, from: data), nil) + return + } + + completion(nil, SdkError()) + } + } +} + diff --git a/Pods/KakaoSDKUser/sources/KakaoSDKUser/model/AccessTokenInfo.swift b/Pods/KakaoSDKUser/sources/KakaoSDKUser/model/AccessTokenInfo.swift new file mode 100644 index 00000000..b3301e89 --- /dev/null +++ b/Pods/KakaoSDKUser/sources/KakaoSDKUser/model/AccessTokenInfo.swift @@ -0,0 +1,35 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +/// 토큰 정보 요청 API 응답 클래스 입니다. +/// - seealso: `UserApi.accessTokenInfo()` +public struct AccessTokenInfo: Codable { + + // MARK: Fields + /// 앱 아이디 + public let appId: Int64 + + /// 사용자 아이디 + public let id: Int64? + + /// 더 이상 사용하지 않는 프로퍼티 입니다. 대신 expriresIn을 사용해주세요. + /// 해당 액세스 토큰의 남은 만료시간 (단위: milli-second) + @available(*, deprecated, message: "대신 expiresIn 을 사용해주세요.") + public let expiresInMillis: Int64? + + /// 해당 액세스 토큰의 남은 만료시간 (단위: second) + public let expiresIn: Int64 +} diff --git a/Pods/KakaoSDKUser/sources/KakaoSDKUser/model/Scope.swift b/Pods/KakaoSDKUser/sources/KakaoSDKUser/model/Scope.swift new file mode 100644 index 00000000..b6551e19 --- /dev/null +++ b/Pods/KakaoSDKUser/sources/KakaoSDKUser/model/Scope.swift @@ -0,0 +1,67 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +// MARK: Enumerations + +///동의 항목 타입 +public enum ScopeType: String, Codable { + ///개인정보 보호 동의 항목 + case Privacy = "PRIVACY" + + ///접근권한 관리 동의 항목 + case Service = "SERVICE" +} + +public struct Scope : Codable { + // MARK: Fields + + /// 동의 항목 ID + public let id: String + + /// 사용자 동의 화면에 출력되는 동의 항목 이름 또는 설명 + public let displayName: String + + /// 동의 항목 타입 + public let type: ScopeType + + ///동의 항목의 현재 사용 여부 + ///사용자가 동의했으나 현재 앱에 설정되어 있지 않은 동의 항목의 경우 false + public let using: Bool + + ///카카오가 관리하지 않는 위임 동의 항목인지 여부 + ///현재 사용 중인 동의 항목이고, 위임 동의 항목인 경우에만 응답에 포함 + public let delegated: Bool? + + ///사용자 동의 여부 + ///동의한 경우 true, 동의하지 않은 경우 false + public let agreed: Bool + + ///동의 항목의 동의 철회 가능 여부 + ///사용자가 동의한 동의 항목인 경우에만 응답에 포함 + public let revocable : Bool? + +} + +public struct ScopeInfo : Codable { + + // MARK: Fields + + ///회원번호 + public let id: Int64 + + ///해당 앱의 동의 항목(Scope) 목록 (empty 일 경우가 있음) + public let scopes: [Scope]? +} diff --git a/Pods/KakaoSDKUser/sources/KakaoSDKUser/model/User.swift b/Pods/KakaoSDKUser/sources/KakaoSDKUser/model/User.swift new file mode 100644 index 00000000..8b644720 --- /dev/null +++ b/Pods/KakaoSDKUser/sources/KakaoSDKUser/model/User.swift @@ -0,0 +1,240 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +/// 사용자 정보 요청 API 응답으로 제공되는 사용자 정보 최상위 클래스입니다. +/// - seealso: `UserApi.me(propertyKeys:secureResource:)` +public struct User : Codable { + + // MARK: Fields + + /// 카카오 플랫폼 내에서 사용되는 사용자의 고유 아이디입니다. + /// + /// 서로 다른 앱키로 로그인한 경우 동일한 카카오계정이라 하더라도 다른 값이 부여됩니다. 연결 끊기(unlink) 후 다시 로그인할 때 **사용자 아이디 고정**이 비활성화 상태인 경우 새로운 값으로 재발급됩니다. + /// + /// - note: + /// 2018년 9월 19일부터 신규로 생성되는 앱에 대해 **사용자 아이디 고정**을 자동으로 활성화하고 있습니다. https://devtalk.kakao.com/t/api/58481?u=karl.lee&source_topic_id=60227 + public let id: Int64? + + /// 앱 별로 제공되는 사용자 정보 데이터베이스입니다. + /// + /// 이 데이터베이스를 통해 서비스에서 사용되는 사용자의 각종 정보를 저장하는 DB로 활용할 수 있으며 카카오 서비스에 등록된 사용자의 프로필 정보를 제공 받을 수도 있습니다. + /// 로그인한 사용자의 카카오계정 프로필에 있는 닉네임과 프로필 이미지 정보를 앱 연결 시점에 복사하여 초기값으로 제공되며 이후 해당 카카오계정 프로필에 변경이 발생한 경우 변경된 정보와 동기화되지 않습니다. + /// + /// - note: + /// **실시간 프로필** 정보를 원하는 경우 `Profile`을 참고하시기 바랍니다. + /// + /// 기본 제공되는 사용자 프로필 정보의 키 이름은 아래와 같습니다. + /// + /// - nickname : 카카오계정에 설정된 닉네임 + /// - profile_image : 프로필 이미지 URL 문자열 + /// - thumbnail_image : 썸네일 사이즈의 프로필 이미지 URL 문자열 + /// + /// 프로필 또는 다른 정보를 추가 저장하거나 기본 제공되는 정보를 수정하고 싶은 경우 `UserApi`의 updateProfile 메소드를 사용할 수 있습니다. + public let properties: [String:String]? + + /// 사용자의 카카오계정 정보 + /// + /// 이메일, 프로필 정보 등이 제공됩니다. 이 필드를 통해 내려 받을 수 있는 정보가 하나도 없을 경우 nil이 될 수 있습니다. + /// - seealso: `Account` + public let kakaoAccount: Account? + + /// 앱이 그룹에 속해 있는 경우 그룹 내 사용자 식별 토큰입니다. 앱의 그룹정보가 변경될 경우 토큰 값도 변경됩니다. 제휴를 통해 권한이 부여된 특정 앱에만 제공됩니다. + public let groupUserToken: String? + + ///해당 서비스에 연결 완료된 시각 + public let connectedAt : Date? + + ///'카카오싱크 간편가입창'을 통해 카카오 로그인 한 시각 + public let synchedAt : Date? + + /// 사용자가 앱에 연결되어 있는지 여부를 나타냅니다. **자동 연결** 설정이 활성화되어 있는 경우 값이 내려오지 않으므로 앱에 연결되어 있다고 가정해도 무방합니다. + public let hasSignedUp: Bool? +} + +// MARK: Enumerations + +/// 연령대(한국 나이) 정보 열거형 +public enum AgeRange : String, Codable { + /// 0세 ~ 9세 + case Age0_9 = "0~9" + /// 10세 ~ 14세 + case Age10_14 = "10~14" + /// 15세 ~ 19세 + case Age15_19 = "15~19" + /// 20세 ~ 29세 + case Age20_29 = "20~29" + /// 30세 ~ 39세 + case Age30_39 = "30~39" + /// 40세 ~ 49세 + case Age40_49 = "40~49" + /// 50세 ~ 59세 + case Age50_59 = "50~59" + /// 60세 ~ 69세 + case Age60_69 = "60~69" + /// 70세 ~ 79세 + case Age70_79 = "70~79" + /// 80세 ~ 89세 + case Age80_89 = "80~89" + /// 90세 이상 + case Age90_Above = "90~" +} + +/// 성별 정보 열거형 +public enum Gender : String, Codable { + /// 남자 + case Male = "male" + /// 여자 + case Female = "female" +} + +/// 생일의 양력/음력 열거형 +public enum BirthdayType : String, Codable { + /// 양력 + case Solar = "SOLAR" + /// 음력 + case Lunar = "LUNAR" +} + +/// 카카오계정에 등록된 사용자 개인정보를 제공합니다. +/// - seealso: `User.kakaoAccount` +/// +/// 내려오는 실제 정보는 https://accounts.kakao.com 으로 접속하여 해당 계정으로 로그인한 후 확인하실 수 있습니다. +/// +/// 이 클래스에서 제공하는 카카오계정의 모든 개인정보는 사용자의 동의를 받지 않은 경우 nil이 반환됩니다. 개인정보 필드의 값이 없으면 해당 필드와 매칭되는 {property}NeedsAgreement 속성 값을 확인하여 사용자에게 정보 제공에 대한 동의를 요청하고 정보 획득을 시도해 볼 수 있습니다. {property}NeedsAgreement 값이 true인 경우 새로운 동의 요청이 가능한 상태이며 KOSession의 updateScopes 메소드를 이용하여 동의를 받을 수 있습니다. 동의를 받은 후 user/me를 다시 호출하면 해당 값이 반환될 것입니다. {property}NeedsAgreement 값이 false인 경우 사용자의 계정에 해당 정보가 없어서 값을 얻을 수 없음을 의미합니다. +/// +/// - important: +/// [내 애플리케이션] > [제품 설정] > [카카오 로그인] > [동의항목] 에서 **선택 동의**로 설정된 정보의 동의 요청은 매우 주의해야 합니다. 추가 항목 동의 받기로 값을 필수로 획득하는 행위는 반드시 서비스 가입과 관계 없는 특정 시나리오에서 시도해야 합니다. 사용자가 동의하지 않아도 서비스 이용에 지장이 없어야 합니다. + +public struct Account : Codable { + + // MARK: Fields + + /// profile 제공에 대한 사용자 동의 필요 여부 + public let profileNeedsAgreement: Bool? + /// profile 닉네임 제공에 대한 사용자 동의 필요 여부 + public let profileNicknameNeedsAgreement: Bool? + /// profile 이미지 제공에 대한 사용자 동의 필요 여부 + public let profileImageNeedsAgreement: Bool? + + /// 카카오계정에 등록한 프로필 정보 + /// - seealso: `Profile` + public let profile: Profile? + + /// email 제공에 대한 사용자 동의 필요 여부 + public let emailNeedsAgreement: Bool? + /// 카카오계정에 등록된 이메일의 유효성 + public let isEmailValid: Bool? + /// 카카오계정에 이메일 등록 시 이메일 인증을 받았는지 여부 + public let isEmailVerified: Bool? + /// 카카오계정에 등록된 이메일 + public let email: String? + + /// ageRange 제공에 대한 사용자 동의 필요 여부 + public let ageRangeNeedsAgreement: Bool? + /// 연령대 + /// - seealso: `AgeRange` + public let ageRange: AgeRange? + /// birthyear 제공에 대한 사용자 동의 필요 여부 + public let birthyearNeedsAgreement: Bool? + /// 출생 연도 (YYYY) + public let birthyear: String? + /// birthday 제공에 대한 사용자 동의 필요 여부 + public let birthdayNeedsAgreement: Bool? + /// 생일 (MMDD) + public let birthday: String? + /// 생일의 양력/음력 + public let birthdayType: BirthdayType? + + /// gender 제공에 대한 사용자의 동의 필요 여부 + public let genderNeedsAgreement: Bool? + /// 성별 + /// - seealso: `Gender` + public let gender: Gender? + + /// phoneNumber 제공에 대한 사용자 동의 필요 여부 + public let phoneNumberNeedsAgreement: Bool? + /// 카카오톡에서 인증한 전화번호 + public let phoneNumber: String? + + /// ci 제공에 대한 사용자의 동의 필요 여부 + public let ciNeedsAgreement: Bool? + /// 암호화된 사용자 확인값 + public let ci: String? + /// ci 발급시간 + public let ciAuthenticatedAt: Date? + + + + /// legalName 제공에 대한 사용자 동의 필요 여부 + public let legalNameNeedsAgreement : Bool? + + /// 실명 + public let legalName : String? + + /// legalBirthDate 제공에 대한 사용자 동의 필요 여부 + public let legalBirthDateNeedsAgreement : Bool? + + /// 법정생년월일 + public let legalBirthDate : String? + + /// legalGender 제공에 대한 사용자 동의 필요 여부 + public let legalGenderNeedsAgreement : Bool? + + /// 법정성별 + public let legalGender : Gender? + + ///한국인 여부 제공에 대한 사용자 동의 필요 여부 + public let isKoreanNeedsAgreement : Bool? + + ///한국인 여부 + public let isKorean : Bool? +} + +/// 카카오계정에 등록된 사용자의 프로필 정보를 제공합니다. +/// - seealso: `Account.profile` +public struct Profile : Codable { + + // MARK: Fields + + /// 사용자의 닉네임 + public let nickname: String? + + /// 카카오계정에 등록된 프로필 이미지 URL + /// + /// 사용자가 프로필 이미지를 등록하지 않은 경우 nil이 내려옵니다. 사용자가 등록한 프로필 이미지가 사진인 경우 640 * 640 규격의 이미지가, 동영상인 경우 480 * 480 규격의 스냅샷 이미지가 제공됩니다. + public let profileImageUrl: URL? + + /// 카카오계정에 등록된 프로필 이미지의 썸네일 규격 이미지 URL + /// + /// 사용자가 프로필 이미지를 등록하지 않은 경우 nil이 내려옵니다. 사용자가 등록한 프로필 이미지가 사진인 경우 110 * 110 규격의 이미지가, 동영상인 경우 100 * 100 규격의 스냅샷 이미지가 제공됩니다. + public let thumbnailImageUrl: URL? + + /// 사용자 프로필 기본 이미지 여부 + public let isDefaultImage: Bool? + + enum CodingKeys : String, CodingKey { + case nickname, profileImageUrl, thumbnailImageUrl, isDefaultImage + } + + public init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + + nickname = try? values.decode(String.self, forKey: .nickname) + profileImageUrl = URL(string: (try? values.decode(String.self, forKey: .profileImageUrl)) ?? "") + thumbnailImageUrl = URL(string: (try? values.decode(String.self, forKey: .thumbnailImageUrl)) ?? "") + isDefaultImage = try? values.decode(Bool.self, forKey: .isDefaultImage) + } +} diff --git a/Pods/KakaoSDKUser/sources/KakaoSDKUser/model/UserServiceTerms.swift b/Pods/KakaoSDKUser/sources/KakaoSDKUser/model/UserServiceTerms.swift new file mode 100644 index 00000000..72873b0e --- /dev/null +++ b/Pods/KakaoSDKUser/sources/KakaoSDKUser/model/UserServiceTerms.swift @@ -0,0 +1,62 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +/// 사용자가 동의한 약관 조회 API 응답 클래스 입니다. +/// - seealso: `UserApi.serviceTerms()` +public struct UserServiceTerms : Codable { + + // MARK: Fields + + /// 사용자 아이디 + public let userId: Int64? + + /// 사용자가 동의한 3rd의 약관 항목들 + /// - seealso: `ServiceTerms` + public let allowedServiceTerms: [ServiceTerms]? + + /// 앱에 사용 설정된 서비스 약관 목록들 + public let appServiceTerms: [AppServiceTerms]? +} + +/// 3rd party 서비스 약관 정보 클래스 입니다. +/// - seealso: `UserServiceTerms` +public struct ServiceTerms : Codable { + + // MARK: Fields + + /// 3rd에서 동의한 약관의 항목들을 정의한 값 + public let tag: String + + /// 동의한 시간. 약관이 여러번 뜨는 구조라면, 마지막으로 동의한 시간. + public let agreedAt: Date +} + + +/// 앱에 사용 설정된 서비스 약관 목록 +/// - seealso: `AppServiceTerms` +public struct AppServiceTerms : Codable { + + // MARK: Fields + + /// 3rd에서 동의한 약관의 항목들을 정의한 값 + public let tag: String + + /// 약관을 생성한 시간 + public let createdAt: Date + + /// 약관을 수정한 시간 + public let updatedAt: Date +} diff --git a/Pods/KakaoSDKUser/sources/KakaoSDKUser/model/UserShippingAddresses.swift b/Pods/KakaoSDKUser/sources/KakaoSDKUser/model/UserShippingAddresses.swift new file mode 100644 index 00000000..f79ea9df --- /dev/null +++ b/Pods/KakaoSDKUser/sources/KakaoSDKUser/model/UserShippingAddresses.swift @@ -0,0 +1,103 @@ +// Copyright 2019 Kakao Corp. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +/// 앱에 가입한 사용자의 배송지 정보 API 응답 클래스 입니다. +/// - seealso: `UserApi.shippingAddresses(fromUpdatedAt:pageSize:)`
`UserApi.shippingAddresses(addressId:)` +/// +/// 배송지 목록은 기본 배송지가 가장 상위에 배치되고, 그 이후에는 배송지가 수정된 시각을 기준으로 최신순으로 정렬됩니다. +/// pageSize를 설정하여 배송지 목록을 여러 페이지를 나누어 조회하거나, addressId를 이용하여 특정 배송지 아이디에 대한 배송지 정보만 조회할 수도 있습니다. +public struct UserShippingAddresses : Codable { + + // MARK: Fields + + /// 사용자 아이디 + public let userId: Int64? + + /// 배송지 제공에 대한 사용자의 동의 필요 여부 + public let needsAgreement: Bool? + + /// 사용자가 소유한 배송지 목록 + /// + /// 가장 최근 수정했던 순으로 정렬됩니다. (단, 기본 배송지는 수정시각과 상관없이 첫번째에 위치) shippingAddresses는 사용자의 동의를 받지 않은 경우 nil이 반환됩니다. shippingAddresses가 nil이면 needsAgreement 속성 값을 확인하여 사용자에게 정보 제공에 대한 동의를 요청하고 정보 획득을 시도해 볼 수 있습니다. + /// - seealso: `ShippingAddress` + public let shippingAddresses: [ShippingAddress]? + + + enum CodingKeys: String, CodingKey { + case userId, shippingAddresses + case needsAgreement = "shippingAddressesNeedsAgreement" + } +} + + +/// 배송지 정보 클래스 입니다. +/// - seealso: `UserShippingAddresses` +public struct ShippingAddress : Codable { + + // MARK: Enumerations + + /// 배송지 타입 열거형 + public enum `Type` : String, Codable { + /// 지번 주소 + case Old = "OLD" + /// 도로명 주소 + case New = "NEW" + } + + // MARK: Fields + + /// 배송지 아이디 + public let id: Int64 + + /// 배송지명 + public let name: String? + + /// 기본 배송지 여부 + public let isDefault: Bool + + /// 마지막 배송지정보 수정시각 + public let updatedAt: Date? + + /// 배송지 타입 + /// - seealso: Type + public let type: Type? + + /// 주소 검색을 통해 자동으로 입력되는 기본 주소 + public let baseAddress: String? + + /// 기본 주소에 추가하는 상세 주소 + public let detailAddress: String? + + /// 수령인 이름 + public let receiverName: String? + + /// 수령인 연락처 + public let receiverPhoneNumber1: String? + + /// 수령인 추가 연락처 + public let receiverPhoneNumber2: String? + + /// 도로명 주소 우편번호. 배송지 타입이 NEW(도로명 주소)인 경우 반드시 존재함 + public let zoneNumber: String? + + /// 지번 주소 우편번호. 배송지 타입이 OLD(지번 주소)여도 값이 없을 수 있음 + public let zipCode: String? + + enum CodingKeys: String, CodingKey { + case id, name, updatedAt, type, baseAddress, detailAddress, receiverName, receiverPhoneNumber1, receiverPhoneNumber2, zoneNumber, zipCode + case isDefault = "default" + } +} diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index 38b2b2b4..3ddd89b3 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -1,5 +1,16 @@ PODS: - Alamofire (5.4.3) + - KakaoSDKAuth (2.5.6): + - KakaoSDKCommon (= 2.5.6) + - KakaoSDKCommon (2.5.6): + - KakaoSDKCommon/Common (= 2.5.6) + - KakaoSDKCommon/Network (= 2.5.6) + - KakaoSDKCommon/Common (2.5.6) + - KakaoSDKCommon/Network (2.5.6): + - Alamofire (~> 5.1) + - KakaoSDKCommon/Common (= 2.5.6) + - KakaoSDKUser (2.5.6): + - KakaoSDKAuth (= 2.5.6) - Moya (14.0.0): - Moya/Core (= 14.0.0) - Moya/Core (14.0.0): @@ -9,6 +20,7 @@ PODS: - VerticalCardSwiper (2.3.1) DEPENDENCIES: + - KakaoSDKUser - Moya (~> 14.0) - SkeletonView - SwiftLint @@ -17,6 +29,9 @@ DEPENDENCIES: SPEC REPOS: trunk: - Alamofire + - KakaoSDKAuth + - KakaoSDKCommon + - KakaoSDKUser - Moya - SkeletonView - SwiftLint @@ -24,11 +39,14 @@ SPEC REPOS: SPEC CHECKSUMS: Alamofire: e447a2774a40c996748296fa2c55112fdbbc42f9 + KakaoSDKAuth: 1e1fa737e78eed3f301ab5c164526781a37a42f9 + KakaoSDKCommon: cdf340a8f671eef75f4ca012003cb350af3c4b6d + KakaoSDKUser: f488aa4699b3fd3a836ab5c7e25e2cb4cea190c1 Moya: 5b45dacb75adb009f97fde91c204c1e565d31916 SkeletonView: a085533443fed0198309f1979780afb6e80eaedd SwiftLint: 99f82d07b837b942dd563c668de129a03fc3fb52 VerticalCardSwiper: 68df635b354500f86934ea044ade37a264c044c6 -PODFILE CHECKSUM: 7da9d2be4f330814582df22e8a247c9567e50a67 +PODFILE CHECKSUM: ed90d25629de2c0d09e14aa4277ccf85ccb9037a COCOAPODS: 1.10.1 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index f7ff75c6..84743a30 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -19,342 +19,503 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 013BAC24F7AC722E59517CB110A9E685 /* HTTPMethod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BFFEADC6F86761385F0309E089BC5BA /* HTTPMethod.swift */; }; - 01FEF30F6CF1A002DE5DA785CD28393D /* CALayer+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 646927E46534990E23246477C2C43412 /* CALayer+Extensions.swift */; }; - 02EA3013E5947ED2EA63D18AEAEB802D /* Plugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0809FDCA44D4320F40BB8B7093C3D42E /* Plugin.swift */; }; - 07FC2ADF722D80878095CDCBD927BC67 /* UIView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FC6366E68A6D481255A6CBEC1E95B9B /* UIView+Extension.swift */; }; - 0995E3E9A52AFB6D9801ABB039FA8963 /* Recoverable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76116D2CCC519790D15679ABEF5ED8D4 /* Recoverable.swift */; }; - 0A1849775CF90D514963187D3A771CF8 /* Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36D1F25C04B2957B0CB03928455D206F /* Combine.swift */; }; - 0A900DF17E3B64F08AF673E9A0DDD697 /* OperationQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07AC158772041D7767F5412F51F584F6 /* OperationQueue+Alamofire.swift */; }; - 0FB3AFCE496DFE07444D6E54EDEB6860 /* CardCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DDB57356F98EF16F5267B5E1F80AB3E /* CardCell.swift */; }; - 1208E81DA8B532D0646D627B50290EB6 /* AFError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 155E78119EA83B4F27884C941EFF3018 /* AFError.swift */; }; - 173959124053EB4256FC64AD38DAC521 /* URL+Moya.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2AA3D13192DD3F67FA307A988F64C4D /* URL+Moya.swift */; }; - 19D605A3233499828FB6B790869F3E9C /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD570DBB55ABEBEB25B93E4535C1AA5D /* NetworkReachabilityManager.swift */; }; - 1E11499FB66A92D1AE5E1F68CFCA41E6 /* RecursiveProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = A281D5ED025B4D2B99EAD6C93C93D340 /* RecursiveProtocol.swift */; }; - 212EDC48B68107BEA9247F3464CE696E /* StringEncoding+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 532D030CBE81BE97499BFD28673BEE26 /* StringEncoding+Alamofire.swift */; }; - 218C14EAE5AA31C30314AE0289B732A0 /* Protected.swift in Sources */ = {isa = PBXBuildFile; fileRef = D58F31B1650C7E8BC8CF7698273813FE /* Protected.swift */; }; - 225C81AF7B10A0E5F149AFD253FACA69 /* Moya-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 14FEC61118FA1DFB43AE4AA368D5D1CE /* Moya-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 22EA0B74EE7190BBD94DAB298901DB11 /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67457047C6FD0DD459F76D285F15BF74 /* MultipartFormData.swift */; }; - 27E59A11A2743B0595CDE3A08675EAE1 /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64B30679B2A44FE78B4D31DAF510B2A4 /* DispatchQueue+Alamofire.swift */; }; - 283303C245C13465414126A3B68F129D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1AC44BC108255F6766BF5383BF088F46 /* Foundation.framework */; }; - 2BFD4AA3D5BDC25F2E442B897E74B528 /* UILabel+Multiline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78971C1CA86FE3E0398C55CE0871F49E /* UILabel+Multiline.swift */; }; - 2C8E87123BE2E1DB6EFB6A646F85964E /* VerticalCardSwiperDatasource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DA78B802277EB63663D16DC451A4FF4 /* VerticalCardSwiperDatasource.swift */; }; - 31F8B6897895035B807AE752FD933784 /* URLRequest+Encoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECC54E1E62F77AE4B9C900BBBB4B0981 /* URLRequest+Encoding.swift */; }; - 320066283ACE51DA1282CBAF395D5977 /* SkeletonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8605D8EE7CB7AB0299E3EC10FA9FF1E3 /* SkeletonView.swift */; }; - 330CABED0FC3EEDA02B09774D72E2472 /* RequestTypeWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABDFF39F82D74DD8F53494C5765F7658 /* RequestTypeWrapper.swift */; }; - 3606501F67419009E29D78CBFDC9ADC5 /* UICollectionView+CollectionSkeleton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 559A56EC48BF2BD2F7CDF8BB13F126D6 /* UICollectionView+CollectionSkeleton.swift */; }; - 3769F7577102C14C3591A59E730F506B /* UIView+Frame.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0A4D7E7C274BFD346B8B037780789DE /* UIView+Frame.swift */; }; - 381FF05F8B4F611EE9C2FDBE4457BB89 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7D399099D86D5EDE99B034325B33F15 /* SessionDelegate.swift */; }; - 3922DE2CBA6E56D5A447D30608A5EB57 /* VerticalCardSwiper-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 206CA4DEDF09AC3EFDF2A27BC99474BA /* VerticalCardSwiper-dummy.m */; }; - 3D75A9668E22EFC34CC72446A43806F0 /* UIView+UIApplicationDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B3AF2EE2F1CD1665C80959CD2780963 /* UIView+UIApplicationDelegate.swift */; }; - 3D9BAF7BB8F6997DCF84BE270414B390 /* SkeletonGradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BC7E9C891D48C1FEB8695D5630DA91D /* SkeletonGradient.swift */; }; - 3DB366A803B0BE7848E93E9BB6B9500B /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0FF301302A2A77E95697F2B5692FA5E /* Alamofire.framework */; }; - 435BE404918D9422CD81EE41CC59494B /* SkeletonAnimationBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DD4218A002BE7F2BA7F85FD45AD348E /* SkeletonAnimationBuilder.swift */; }; - 45B8CC1C61E7A0BB28CFA8CE7C12FEBC /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 196D7B95A892DEE608F24372E2C2922C /* MultipartFormData.swift */; }; - 46B19592113934CCE9D240A9D6CA74D6 /* UIView+Transitions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7175342A497598EA3B2BDE31C8B51DDD /* UIView+Transitions.swift */; }; - 476D5F33E25386C60D6BD75C4FA97C67 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1AC44BC108255F6766BF5383BF088F46 /* Foundation.framework */; }; - 47FDBBBD2704901588C3A7C56BBC502D /* ServerTrustEvaluation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6BD20A7EE7D940F61D7A8F83DD45123 /* ServerTrustEvaluation.swift */; }; - 48894B3EEDB9AFF70DB143648F9FAC63 /* Endpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0800918AFE62176475D74E0433D6642 /* Endpoint.swift */; }; - 48E765CDF02ABC4CBDBCEA7BC25D0743 /* SkeletonCollectionDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E05D910CDA22F90C03145469D8D6B9C /* SkeletonCollectionDataSource.swift */; }; - 49BD91B2822625D90E6941AFE8BA64BE /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD153DC5F88EAC220DAEEBC479CDD42A /* Extensions.swift */; }; - 4A3689BF00171A24F0A3C741F43033A9 /* SkeletonCollectionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 203FF326D56ACC1E09C056C8E06C43E3 /* SkeletonCollectionDelegate.swift */; }; - 4AEC050FA7D5ED52FDA9DF50EA3560DF /* ParameterEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBC7515DB3394FB6AB91091DB6E1E66A /* ParameterEncoder.swift */; }; - 4C67202604DBF149C8D99AFA89CDC247 /* SkeletonMultilineLayerBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DC2911B177DA6F17732F4B995E200CD /* SkeletonMultilineLayerBuilder.swift */; }; - 505DEC94E1FD88DD055D6542084D9973 /* SkeletonCollectionViewProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2588297D9CE75AF7905584041DEE0BA4 /* SkeletonCollectionViewProtocols.swift */; }; - 508783EF3077382F85362930BA87EBFE /* MoyaError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FB3A05E2C522CCDF36961D982E5FFD4 /* MoyaError.swift */; }; - 522DB7B1FE8A14E82A35602C06303223 /* MoyaProvider+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7E35B1801FC966DF0ACA82450D00C1F /* MoyaProvider+Internal.swift */; }; - 5454E93424F5DBBED188F26D7357317A /* Int+Whitespaces.swift in Sources */ = {isa = PBXBuildFile; fileRef = 353AE8475692C946A3DC23536ECDA2D1 /* Int+Whitespaces.swift */; }; - 599D1E6464DDED0DAAF45680E7C51EC5 /* NetworkActivityPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93DD6D889F319B45461ABAFC06CB73C7 /* NetworkActivityPlugin.swift */; }; - 59E90FCB9AA180761439B1A0E43CC41A /* UITextView+Multiline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41E783C8C11C68F10B21C86D2CEBE69C /* UITextView+Multiline.swift */; }; - 5C12463A0B997BCD539D9B292EFB3A44 /* VerticalCardSwiperDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83DD4E8F5E12A49B106000D441E8D9D4 /* VerticalCardSwiperDelegate.swift */; }; - 5E13589E564DF35414E2D26F0D25B1F6 /* MultiTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = B470D8CD426F3703BFCF93966769DF13 /* MultiTarget.swift */; }; - 603B8F08C54290B3EBD0F6EBCFCF2893 /* Swizzling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F7CD09D7F4E1625EBD3AC1C3FC55784 /* Swizzling.swift */; }; - 6084187DFBFBB9D27774ACD5C4EBDD0B /* VerticalCardSwiper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47D0259CE9677DCE75C790D43F66723C /* VerticalCardSwiper.swift */; }; - 6546D728B69398F93B506845141EBD61 /* EventMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 514B1E82CF7490B03A9B6A5F27520CE1 /* EventMonitor.swift */; }; - 6651DE8BD5F1653C466C9CE4ED57568B /* ValidationType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 552EC4CF2BA7638857957C08CF8A44FA /* ValidationType.swift */; }; - 666EC5C8356E6D4448A2FE7BEE77AD88 /* RedirectHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF908A01151C5B81C51CAF360AD253D6 /* RedirectHandler.swift */; }; - 66B26C6CAE737EC21F4BA1F1851B69C5 /* Result+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC39DE8004DF137061BA591F79DA2C63 /* Result+Alamofire.swift */; }; - 6AE407A4FB6C3D6ADD862CC6E3067A17 /* Session.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E54768C4F9DBC5AA475E45511E303B6 /* Session.swift */; }; - 6C08F6A77889651626583100F560153D /* RequestTaskMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4CB5E5506638C2C5C8AACCB8DC289D0 /* RequestTaskMap.swift */; }; - 6D3E5469839411AA3296E219167E9AAB /* SkeletonLayerBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80E2713D117E9E481A6466A33791BEE3 /* SkeletonLayerBuilder.swift */; }; - 6E54F64E8DA73F4B0B46C216F9F93F63 /* RequestInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B598972018B1724A57F0BD6F1A740247 /* RequestInterceptor.swift */; }; - 6E69092C92AF304383640614CE7F6B19 /* UIColor+Skeleton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A71160C3BC79211D48EFB23A4960458 /* UIColor+Skeleton.swift */; }; - 7042121E5596C3258681A38843F44BA6 /* UIView+IBInspectable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14784F7734EDF9EFDB892DD3639FE1D1 /* UIView+IBInspectable.swift */; }; - 707CDC3C1F97310FE8D35B06D7697C26 /* SkeletonView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BA74ABEFAD76942DA4F63B33CDD11C90 /* SkeletonView-dummy.m */; }; - 70E5E9B6E8EBF205A502B8F32F18FB6E /* AssociationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C9F7BA86DF05562C2BDCC21EDE77B56 /* AssociationPolicy.swift */; }; - 72EC2712926E6D28B52360D9AC41668F /* AlamofireExtended.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8B679BE77413AB71804A675234A3C43 /* AlamofireExtended.swift */; }; - 72FB1F829DAA1BF28C84D67D603F33CE /* SkeletonLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AB29DC337E1F008B023BA790F65A05B /* SkeletonLayer.swift */; }; - 74A86BEF20B34699FD2F43A78DC8AF09 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1AC44BC108255F6766BF5383BF088F46 /* Foundation.framework */; }; - 74B47F84109C44A13D5A90A0751D195C /* Cancellable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A761AEBB4566F55E8BB32CBA8A406DEF /* Cancellable.swift */; }; - 75AF7F925C348F884062C8A16D93A890 /* VerticalCardSwiperFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECE25D6A10DD0E05A03117311B990C75 /* VerticalCardSwiperFlowLayout.swift */; }; - 7797EFE4F02AE03874050CD9B5FBB9E0 /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15F3C9505785E857C6970A417FB0AD6D /* Response.swift */; }; - 7CE0911040FB99158182B6131E9BA60A /* MoyaProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB3039D558A5A92FE68789293C55D9BD /* MoyaProvider.swift */; }; - 7D3DD4A8BB36733BA15868F7FB8C56CE /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AC1FE1B338821BC10B666A3A9F106BB2 /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7FD95ABE3D7DBE42A5691B4A79389507 /* SkeletonFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 987361860E5814468414741114B24C0E /* SkeletonFlow.swift */; }; - 81BC0C6162FEE7F0EE45B1D6267330F5 /* SkeletonAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29662D72EA0149C3E2CC3A3AC6F13EA2 /* SkeletonAppearance.swift */; }; - 848FEA1EBB3D8ADF961000FF5AD1AABD /* RecoverableViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FBA57DDEAA036ED7080B98CE818A061 /* RecoverableViewState.swift */; }; - 891360304AB40160D3446D7A712387B9 /* Pods-NADA-iOS-forRelease-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 36D03C2EF9C9F318F0B763F10E20A245 /* Pods-NADA-iOS-forRelease-dummy.m */; }; - 8AA937910F87915DE700CAB6C868689E /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB5C8D53A3034138CD34DA8F8F54DC3B /* Notifications.swift */; }; - 8B4697A5ADBE7B6680E81E334D6753B2 /* NetworkLoggerPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF8DEF87DC574572CB84F467652D9D9B /* NetworkLoggerPlugin.swift */; }; - 901BD3E04F3B57CC77D00B566B087400 /* UIView+CollectionSkeleton.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3118AB7BBE34F4DEE0DE0C542C9B7A4 /* UIView+CollectionSkeleton.swift */; }; - 9025F283B182AD7FD66B4F3BD1D52747 /* ContainsMultilineText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06814129BF8F8CFF14AAB6F2F884D3B6 /* ContainsMultilineText.swift */; }; - 911448B2EDA2FF880108F77642797A88 /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = A65DB20677974814968BA7D9CECE7D7F /* ResponseSerialization.swift */; }; - 913AF10026C423A68E44620C29E5D2C9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1AC44BC108255F6766BF5383BF088F46 /* Foundation.framework */; }; - 91B837CE0DCD8EDB300FCDFFA1279162 /* HTTPHeaders.swift in Sources */ = {isa = PBXBuildFile; fileRef = C950BDC64D851683652E7176D1C7BEB8 /* HTTPHeaders.swift */; }; - 9558C251165A9B17B3EBE2778ABAD04E /* Moya-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 280359BD9E534D7CDA387CB4A989DACF /* Moya-dummy.m */; }; - 964D26A306654AB4945A21FA08627C4F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1AC44BC108255F6766BF5383BF088F46 /* Foundation.framework */; }; - 98A00CF45E004F2B1763FAA0CB4928E9 /* PanDirection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01AF17458DBC4BD9FC4307461FCE75B0 /* PanDirection.swift */; }; - 9A412A17A20B32F4DA6541A9690435DD /* TargetType.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDC6AE3363987449FBF8533036A71A7A /* TargetType.swift */; }; - 9AA8337991A99D52AB4909F797F29319 /* MoyaProvider+Defaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2506058B796B7FD850977033F6EEFC8F /* MoyaProvider+Defaults.swift */; }; - 9B1D8A7798D8A6F518FC9AF9725431D0 /* URLConvertible+URLRequestConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FF1931149BF083089579D8650F59C06 /* URLConvertible+URLRequestConvertible.swift */; }; - 9B8F8D53D20BCCEAF53D12748D6FD531 /* UITableView+VisibleSections.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE0D512B0234DC5807B13EABA2DADA1F /* UITableView+VisibleSections.swift */; }; - 9FED70D1E1FBFB80E974E999EF732258 /* RetryPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8F3AE8AD0C8CA6C0EB6AEA6349E31FB /* RetryPolicy.swift */; }; - A396FE0752A639E9274F640BF26F2A35 /* UITableView+CollectionSkeleton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28C5F6C487E4E51AF860635D8790A464 /* UITableView+CollectionSkeleton.swift */; }; - A66024D7C3FD7AE57804BDA39A1CA2C6 /* VerticalCardSwiperView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53AA0C71A39EF70A003582F856C38A44 /* VerticalCardSwiperView.swift */; }; - A67B68E7C029F70B0B8B0B201FC99C25 /* SkeletonView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EEF172C651BC49B1518E9A6BBCDA970 /* SkeletonView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A9C7B29D4878F1690BBE3F8195CF0313 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C1615E1FA68C09F9971FB26DF9B7D2BC /* CFNetwork.framework */; }; - AAC431B9EA605017153223586D0F63F6 /* AnyEncodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52B31FA98C668A21E4B3B0129EEAC628 /* AnyEncodable.swift */; }; - ABA85887A41495358C83CE3F3030EDEA /* CachedResponseHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC5E0CEB052AEB3554879A6BD6B9689C /* CachedResponseHandler.swift */; }; - B54EAAF9370E03F80E227C73141D487D /* CollectionSkeletonProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BA2BEDA278291CA647AAFAC49EC0BA4 /* CollectionSkeletonProtocol.swift */; }; - B712C105E82026A8AF3618783F1713EA /* SwipeDirection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5114D29CA6F0C789E819011CE2E4D4B0 /* SwipeDirection.swift */; }; - B75DDFBA4563633B823C8874C892482F /* PrepareForSkeletonProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC1602A6964AC5E341BBDABFBCBFB21D /* PrepareForSkeletonProtocol.swift */; }; - BC9CCA7BB1EBCD10CB4A8AC67D7CD09D /* SubviewsSkeletonables.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4C7FA66E820B8AC16FC1B4EE6BBE238 /* SubviewsSkeletonables.swift */; }; - BCA074BFC1E5CE7479B638F1BDF96B1E /* UIView+Autolayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53AE0A2A396044FEFDDA56A0CC10F868 /* UIView+Autolayout.swift */; }; - BF16F08F7FBB7FEBFE27169B2DAED114 /* SkeletonTransitionStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AC058DDE1DEBFA5AB3CBE4741AEEBAC /* SkeletonTransitionStyle.swift */; }; - BF35ED4A558BEC06D6A176C76129A4DD /* Moya+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26350B149220D1C8A95125E6B614476A /* Moya+Alamofire.swift */; }; - C1C5B050B55C15103ABC81769551A283 /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66F3759253CFAD783999039544FE9B0A /* Response.swift */; }; - C1D4716773A0DC8B18C351CE34E4F2C5 /* SkeletonTableViewProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1101B41E4343A53F8E4D03A676BE19CF /* SkeletonTableViewProtocols.swift */; }; - C1F1DB6A9CBDE584D09BA1613AAD4F9D /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 034CAB8BE63B971B22E2E330C02FD0EE /* Alamofire.swift */; }; - C6D5A4B4028B2C43380C9FA58BD5C8CA /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 37435577C632F9A9337E3E0DFDAE9F76 /* Alamofire-dummy.m */; }; - C8E321D84D25A482AA41C1D5849C8C7F /* Pods-NADA-iOS-forRelease-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E90C6981AB7A1F39F209C09BB075374B /* Pods-NADA-iOS-forRelease-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D00994BD11CDA991205AB64A685EED51 /* ProcessInfo+XCTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = A721B3267C3FA75474B6986859488100 /* ProcessInfo+XCTest.swift */; }; - D03F1F02DE8606E6057D57866611BEBF /* MultipartUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26BB708E47448F3138DB5C78747AC9CC /* MultipartUpload.swift */; }; - D14066FAE94E304798E43651E5886D13 /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = B004007A80D13B672318B0668134C673 /* ParameterEncoding.swift */; }; - D31FC7FDD450C4CDD633ECBAD27C6221 /* URLEncodedFormEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D73B47A52EA17DDBFC15CA388016C3E /* URLEncodedFormEncoder.swift */; }; - D5D1C997D9BCFBAC5ADE265762AEB6DF /* SkeletonReusableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C52B71D99DDFC958ABC6CB1C30B0BA45 /* SkeletonReusableCell.swift */; }; - D5EAAFB6FAD77A8F0699345149BA3CBB /* URLRequest+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D06A26E22EAC591EA4B913C02C83F11 /* URLRequest+Alamofire.swift */; }; - DC627AFC5B585686898B014184AFCABD /* AuthenticationInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 163B551B47E6034B95A839DD7F3FF622 /* AuthenticationInterceptor.swift */; }; - DF7DDB302D2AD98DC36049179CFCEF08 /* SkeletonDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39DB5AB8BB243B250C7033123922745C /* SkeletonDebug.swift */; }; - E088F69C48094F7DD721B6BD8D6B0389 /* CardDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 438B64445806556056A2853C68DAD8E4 /* CardDelegate.swift */; }; - E3F855EE1891A43249C8D5EAD7F45266 /* VerticalCardSwiper-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 18C7DA9047C4236C2486FB57864EC3D6 /* VerticalCardSwiper-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EA72CC2DB9B653E1BA2DA123FF56C3BE /* CredentialsPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF2C7E2356E04595B7271CF0F425D810 /* CredentialsPlugin.swift */; }; - EDC93BD7B9262119AE145E4C7A9D0212 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = D59434D6E94D181C9754853035731BA4 /* Request.swift */; }; - EECFAE6E50A1472E0E724B4C7240C0D0 /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 329CAFC91DEA2845955F0BA783654588 /* Image.swift */; }; - F0F3224FF592F9BA2A044A2FC2BD4CCD /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E0385435D9F6C1FED1877641AA16B2D /* Validation.swift */; }; - F318B9CAD0AE436906C5C809FAD01667 /* SkeletonConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01160D8B19E8258D184155FB87F19812 /* SkeletonConfig.swift */; }; - F36726220F4B923ACE3B8C58A2663428 /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18DFFEE0B5973145E834A965D19DCF4C /* Task.swift */; }; - F70EF854395CDE981A8336E4FF0310FE /* URLSessionConfiguration+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD454D2124E295C2307C772A2ACD4FEB /* URLSessionConfiguration+Alamofire.swift */; }; - F822D891CB3C55D332B7216047E3585F /* GenericCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F22F7AF564983BD9A66CBCAA9BED795F /* GenericCollectionView.swift */; }; - F965B8DF95392AE5AFB69A758F2328C0 /* AccessTokenPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F2364BDF45DB318E369A32A82300570 /* AccessTokenPlugin.swift */; }; + 013BAC24F7AC722E59517CB110A9E685 /* HTTPMethod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 354B4DD1F80EF9928D939D38DFCA6E39 /* HTTPMethod.swift */; }; + 01FEF30F6CF1A002DE5DA785CD28393D /* CALayer+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C304B28E72C69EB63B12B827287933EC /* CALayer+Extensions.swift */; }; + 02EA3013E5947ED2EA63D18AEAEB802D /* Plugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD2E21EE8BF97162E2CED22B421FA295 /* Plugin.swift */; }; + 07FC2ADF722D80878095CDCBD927BC67 /* UIView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAFA5EFBB80F7AB0CB2739FD232C51D1 /* UIView+Extension.swift */; }; + 0995E3E9A52AFB6D9801ABB039FA8963 /* Recoverable.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD3A77A8F513F51A4DE31E3ECCC9E93A /* Recoverable.swift */; }; + 0A1849775CF90D514963187D3A771CF8 /* Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17D38C59C1924E8F3ECD26E6186BDF53 /* Combine.swift */; }; + 0A900DF17E3B64F08AF673E9A0DDD697 /* OperationQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5B340610A67CA98C1D052BC0E4C2208 /* OperationQueue+Alamofire.swift */; }; + 0FB3AFCE496DFE07444D6E54EDEB6860 /* CardCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 201BB0937308D6C1AE652E84C7DD1A9E /* CardCell.swift */; }; + 1208E81DA8B532D0646D627B50290EB6 /* AFError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03056395B56168964846B9A19B2DC096 /* AFError.swift */; }; + 173959124053EB4256FC64AD38DAC521 /* URL+Moya.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC5A1DD137D66B2D342F997EB4296CE /* URL+Moya.swift */; }; + 19D605A3233499828FB6B790869F3E9C /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF8EB70798D63EB9E4C7CAAD63DF2F60 /* NetworkReachabilityManager.swift */; }; + 1E11499FB66A92D1AE5E1F68CFCA41E6 /* RecursiveProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B360355E87C9EA2E43E53223E8A81B4 /* RecursiveProtocol.swift */; }; + 207DFDDAAA2692540615D480957A76F6 /* KakaoSDKAuth-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BB70937F2D3866336ADDE4987E9B0C54 /* KakaoSDKAuth-dummy.m */; }; + 212EDC48B68107BEA9247F3464CE696E /* StringEncoding+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F79120A14A3DDD98EC5F8732D15A8FD /* StringEncoding+Alamofire.swift */; }; + 218C14EAE5AA31C30314AE0289B732A0 /* Protected.swift in Sources */ = {isa = PBXBuildFile; fileRef = 862117AC312873415B51327A2139BCD4 /* Protected.swift */; }; + 225C81AF7B10A0E5F149AFD253FACA69 /* Moya-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5009CA4BE127B88B5025BAC5B59D5EBE /* Moya-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 22EA0B74EE7190BBD94DAB298901DB11 /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D70A72AFB0E6D4A567B16158BC76FAC /* MultipartFormData.swift */; }; + 244AC1ABF46A4256FE53B07F41A1D78B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D29CBCE254728AFF0F22F7C348091DA /* Foundation.framework */; }; + 26CD7A62B902D922FEEE0FE218977E19 /* KakaoSDKUser-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 42DFE1342432C013C21DF3E96707AAE7 /* KakaoSDKUser-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 27E59A11A2743B0595CDE3A08675EAE1 /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9505221A0D201274FF92A7DD8DDF5B6 /* DispatchQueue+Alamofire.swift */; }; + 283303C245C13465414126A3B68F129D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D29CBCE254728AFF0F22F7C348091DA /* Foundation.framework */; }; + 2BFD4AA3D5BDC25F2E442B897E74B528 /* UILabel+Multiline.swift in Sources */ = {isa = PBXBuildFile; fileRef = A510848B670DF93AC141BC838D11B96A /* UILabel+Multiline.swift */; }; + 2C8E87123BE2E1DB6EFB6A646F85964E /* VerticalCardSwiperDatasource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8906830BFDFE1AA458F4C8346494302B /* VerticalCardSwiperDatasource.swift */; }; + 2ED6C9092BBA5A56FAEB8FA937751F92 /* AccessTokenInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87D288A185BF54C8815698BF1B071F85 /* AccessTokenInfo.swift */; }; + 31F8B6897895035B807AE752FD933784 /* URLRequest+Encoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12285F0E1823C9CB6E99C493C004DF74 /* URLRequest+Encoding.swift */; }; + 320066283ACE51DA1282CBAF395D5977 /* SkeletonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14550269357F684B8B3C691B186AFB51 /* SkeletonView.swift */; }; + 330CABED0FC3EEDA02B09774D72E2472 /* RequestTypeWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04089EF7E8621139826C2E79717BA10 /* RequestTypeWrapper.swift */; }; + 3606501F67419009E29D78CBFDC9ADC5 /* UICollectionView+CollectionSkeleton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B479748F2C1745AD42DEACA036E74B6 /* UICollectionView+CollectionSkeleton.swift */; }; + 3769F7577102C14C3591A59E730F506B /* UIView+Frame.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2721360639183A8DB566806B57A1F3DA /* UIView+Frame.swift */; }; + 381FF05F8B4F611EE9C2FDBE4457BB89 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 852587985B9E4EBA869F1C19D4D37F08 /* SessionDelegate.swift */; }; + 3922DE2CBA6E56D5A447D30608A5EB57 /* VerticalCardSwiper-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F0A72FB54C5BECA0F8856931ABC35FC4 /* VerticalCardSwiper-dummy.m */; }; + 3D75A9668E22EFC34CC72446A43806F0 /* UIView+UIApplicationDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 935157435E387E5FEC32AE8A9ED9E05C /* UIView+UIApplicationDelegate.swift */; }; + 3D9BAF7BB8F6997DCF84BE270414B390 /* SkeletonGradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4179DF058ED0BAC6C59CFFBC52671665 /* SkeletonGradient.swift */; }; + 3DB366A803B0BE7848E93E9BB6B9500B /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C577D1FC4FD6B9BE7A82D2BCC7021DA /* Alamofire.framework */; }; + 42BFDF808113EBF7D94070C7361B126B /* Pods-NADA-iOS-forRelease-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E90C6981AB7A1F39F209C09BB075374B /* Pods-NADA-iOS-forRelease-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 435BE404918D9422CD81EE41CC59494B /* SkeletonAnimationBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01AAB425325C29722CE8AD24DC3E2B19 /* SkeletonAnimationBuilder.swift */; }; + 44A36CB3F1BB16366231C874ABB1CAE6 /* AuthErrorInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A1B67450881C0A23E04BB20B09C27F /* AuthErrorInfo.swift */; }; + 45B8CC1C61E7A0BB28CFA8CE7C12FEBC /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = BABE6B48D3EC13556FA2C1E3B0E99F6C /* MultipartFormData.swift */; }; + 46B19592113934CCE9D240A9D6CA74D6 /* UIView+Transitions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C89B0460CCD2A2AA4A705D0CD4DC2340 /* UIView+Transitions.swift */; }; + 476D5F33E25386C60D6BD75C4FA97C67 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D29CBCE254728AFF0F22F7C348091DA /* Foundation.framework */; }; + 47FDBBBD2704901588C3A7C56BBC502D /* ServerTrustEvaluation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8F0A7650F653E2725812127BF7E37DD /* ServerTrustEvaluation.swift */; }; + 48894B3EEDB9AFF70DB143648F9FAC63 /* Endpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB7BEB422F272B1B164A33D14ECED236 /* Endpoint.swift */; }; + 48C3096F6FED37EE98EFF4B304401495 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D29CBCE254728AFF0F22F7C348091DA /* Foundation.framework */; }; + 48E765CDF02ABC4CBDBCEA7BC25D0743 /* SkeletonCollectionDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 667C5116528DEF8EDA95F675A1C7F484 /* SkeletonCollectionDataSource.swift */; }; + 49A3EAE89294324E1C3F85E16E48307F /* TokenManagable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 793B82A4458CD5F30432DE62B0E40A5B /* TokenManagable.swift */; }; + 49BD91B2822625D90E6941AFE8BA64BE /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86A91118F90F0D20FF94BA3D9AF0801C /* Extensions.swift */; }; + 4A24F4E478A86BDFFAB09FFA6FE3E948 /* KakaoSDKAuth-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C56237DEF175249A5CFB1DB137A67E18 /* KakaoSDKAuth-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4A3689BF00171A24F0A3C741F43033A9 /* SkeletonCollectionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39E4F26C0828D5181A4E22C6E1953609 /* SkeletonCollectionDelegate.swift */; }; + 4AEC050FA7D5ED52FDA9DF50EA3560DF /* ParameterEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = E033A932CA11955308A5735C12602725 /* ParameterEncoder.swift */; }; + 4C67202604DBF149C8D99AFA89CDC247 /* SkeletonMultilineLayerBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03E4520C26D608D08982C66220FC019D /* SkeletonMultilineLayerBuilder.swift */; }; + 4E2399AABBC682AC2F00E8B7EFF84117 /* SdkError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4283E84D4F2F044899194BA1E634742 /* SdkError.swift */; }; + 505DEC94E1FD88DD055D6542084D9973 /* SkeletonCollectionViewProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9BCE4875A076F92D70B2D15E6957CE7 /* SkeletonCollectionViewProtocols.swift */; }; + 508783EF3077382F85362930BA87EBFE /* MoyaError.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3F8683A1C70F0618002A3BCEA5140B /* MoyaError.swift */; }; + 514A002447682855D21588096DB1C532 /* AuthApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4E1C3DDAC91815299EA3E20143D3C7C /* AuthApi.swift */; }; + 522DB7B1FE8A14E82A35602C06303223 /* MoyaProvider+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49FDCD2D3873E3393C11DDA5955BB817 /* MoyaProvider+Internal.swift */; }; + 53A43F2AE3C60AB2F0424C2D51B2F46A /* EncodingContainer+AnyCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = E307D3483507CBEC6245E0FBD92FE697 /* EncodingContainer+AnyCollection.swift */; }; + 5454E93424F5DBBED188F26D7357317A /* Int+Whitespaces.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF113E31CFCCB0809CBB5D7A393157D4 /* Int+Whitespaces.swift */; }; + 584F28B8B334A6331E254DA27D4FD48F /* AuthRequestRetrier.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3A6426E0DE9AB49B64C93E257044F8B /* AuthRequestRetrier.swift */; }; + 585D94D92CBB503AD0F8646A1C11EB96 /* Api.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43A8B4EE61197960B8DB5A29E7B4B0B2 /* Api.swift */; }; + 599D1E6464DDED0DAAF45680E7C51EC5 /* NetworkActivityPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9589AA64D8D429EA5325C6A45D84D050 /* NetworkActivityPlugin.swift */; }; + 59E90FCB9AA180761439B1A0E43CC41A /* UITextView+Multiline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 243175092AE28349A7D1CA5E2B12FAC9 /* UITextView+Multiline.swift */; }; + 5A2723FD3D8BDAE24BB703224AF402D2 /* KakaoSDKCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3BB253AE2681A4E2549052380BD3815 /* KakaoSDKCommon.framework */; }; + 5C12463A0B997BCD539D9B292EFB3A44 /* VerticalCardSwiperDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E152F250D5EBF9A65E480096CFA80624 /* VerticalCardSwiperDelegate.swift */; }; + 5E13589E564DF35414E2D26F0D25B1F6 /* MultiTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = A510141DDD095B01C4771BBE1E5DAAA7 /* MultiTarget.swift */; }; + 603B8F08C54290B3EBD0F6EBCFCF2893 /* Swizzling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D9A31758D6173B723233A20CF5821E4 /* Swizzling.swift */; }; + 6084187DFBFBB9D27774ACD5C4EBDD0B /* VerticalCardSwiper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D9EDCC406FCF40A56D716E2B29188B6 /* VerticalCardSwiper.swift */; }; + 6546D728B69398F93B506845141EBD61 /* EventMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB1DA25BB9F566525971C700992B6AE5 /* EventMonitor.swift */; }; + 65B9D79850A5F50B38D09A8AFFEFF6FC /* Common.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E858DB180C643326719036CB443A285 /* Common.swift */; }; + 6651DE8BD5F1653C466C9CE4ED57568B /* ValidationType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D73D651F42952961A36DCD0D8452C79 /* ValidationType.swift */; }; + 666EC5C8356E6D4448A2FE7BEE77AD88 /* RedirectHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 369CC5F7967B0D65D714A86D9A454423 /* RedirectHandler.swift */; }; + 66B26C6CAE737EC21F4BA1F1851B69C5 /* Result+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A5AA0AB95FA4E2BFE1CD8FA8D13406 /* Result+Alamofire.swift */; }; + 6AE407A4FB6C3D6ADD862CC6E3067A17 /* Session.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2EF7DD2A2C85B1D3A6F1E7D458FD11C /* Session.swift */; }; + 6C08F6A77889651626583100F560153D /* RequestTaskMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7F1F805B3EFAE381FA889BA557DD675 /* RequestTaskMap.swift */; }; + 6CC9379849049CD91E63E94EB7A03AF3 /* UserApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A32BD08D9936BEF16E0E96DE5D39CF6 /* UserApi.swift */; }; + 6D3E5469839411AA3296E219167E9AAB /* SkeletonLayerBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09ACCBCE6D539CA74FEB6752DD505A39 /* SkeletonLayerBuilder.swift */; }; + 6E54F64E8DA73F4B0B46C216F9F93F63 /* RequestInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7B4FF18DBB8C9939B65076D1744735B /* RequestInterceptor.swift */; }; + 6E69092C92AF304383640614CE7F6B19 /* UIColor+Skeleton.swift in Sources */ = {isa = PBXBuildFile; fileRef = F56EE8B669FFB3EBBC518DE763166647 /* UIColor+Skeleton.swift */; }; + 7042121E5596C3258681A38843F44BA6 /* UIView+IBInspectable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F748F833CDA83471A0BD4D87D5B4F7D /* UIView+IBInspectable.swift */; }; + 707B12234AD5D4D8DCEDFF4794705DB6 /* DecodingContainer+AnyCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E2D2BD2A5D72AC689461D5256799E0 /* DecodingContainer+AnyCollection.swift */; }; + 707CDC3C1F97310FE8D35B06D7697C26 /* SkeletonView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 01E1DA6FA8E3B726E952CA731F37BA09 /* SkeletonView-dummy.m */; }; + 70E5E9B6E8EBF205A502B8F32F18FB6E /* AssociationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CCBA75E9B23AE002A4A95E8B31EA569 /* AssociationPolicy.swift */; }; + 72EC2712926E6D28B52360D9AC41668F /* AlamofireExtended.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF426FFEF434E5C7C1098438C0C1A0CE /* AlamofireExtended.swift */; }; + 72FB1F829DAA1BF28C84D67D603F33CE /* SkeletonLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C57A1408912795E1C490C92CE8C28E3F /* SkeletonLayer.swift */; }; + 74A86BEF20B34699FD2F43A78DC8AF09 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D29CBCE254728AFF0F22F7C348091DA /* Foundation.framework */; }; + 74B47F84109C44A13D5A90A0751D195C /* Cancellable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A5D688BB5BF6CC0B463832469154C1C /* Cancellable.swift */; }; + 757491FCD642AC80E179D83DA5780E14 /* KakaoSDKAuth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 280432C1345EC091AA5C1975D6087A8A /* KakaoSDKAuth.framework */; }; + 75AF7F925C348F884062C8A16D93A890 /* VerticalCardSwiperFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93505AA1F4FE4308FA39620AED22DB3B /* VerticalCardSwiperFlowLayout.swift */; }; + 7797EFE4F02AE03874050CD9B5FBB9E0 /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1CB79BBEC919439433D861D031D36FB /* Response.swift */; }; + 7CE0911040FB99158182B6131E9BA60A /* MoyaProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A661C46E9812F01D6755AA880534E8C /* MoyaProvider.swift */; }; + 7D3DD4A8BB36733BA15868F7FB8C56CE /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FD698826048124C098CC60F3BB91F19 /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7FD1F039D7AD6D3B64AD699978D9C238 /* TokenManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF84EB16B8353C4196E811E8F82FB1CF /* TokenManager.swift */; }; + 7FD95ABE3D7DBE42A5691B4A79389507 /* SkeletonFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B4FFD478579B04642D169A45E91668A /* SkeletonFlow.swift */; }; + 8066E43C8B9CA8FAF618FCF8DD78308C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D29CBCE254728AFF0F22F7C348091DA /* Foundation.framework */; }; + 81BC0C6162FEE7F0EE45B1D6267330F5 /* SkeletonAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 893D22A21E8095AC18647012E6140C3C /* SkeletonAppearance.swift */; }; + 848FEA1EBB3D8ADF961000FF5AD1AABD /* RecoverableViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 369EEF149A229DC55CA98708629897E5 /* RecoverableViewState.swift */; }; + 875021448737367D14FDA98B398485A2 /* Properties.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2EF5C8B104B066D9092671EDE041382 /* Properties.swift */; }; + 8AA937910F87915DE700CAB6C868689E /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1703E145C8B89997E08295645F7DD8ED /* Notifications.swift */; }; + 8B4697A5ADBE7B6680E81E334D6753B2 /* NetworkLoggerPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB1916D272D326A0C025BD450FD70E95 /* NetworkLoggerPlugin.swift */; }; + 901BD3E04F3B57CC77D00B566B087400 /* UIView+CollectionSkeleton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E1F8C70958EEF672E8BBB591B9787D9 /* UIView+CollectionSkeleton.swift */; }; + 9025F283B182AD7FD66B4F3BD1D52747 /* ContainsMultilineText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 249B7648B5B85EA0E714D49CD6C67A04 /* ContainsMultilineText.swift */; }; + 911448B2EDA2FF880108F77642797A88 /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 852C3101524D3D0A78D26622B79A66B9 /* ResponseSerialization.swift */; }; + 913AF10026C423A68E44620C29E5D2C9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D29CBCE254728AFF0F22F7C348091DA /* Foundation.framework */; }; + 91B837CE0DCD8EDB300FCDFFA1279162 /* HTTPHeaders.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E6A1466FEE5637585E37CEB9D259C05 /* HTTPHeaders.swift */; }; + 92D0E59939CF3F4C4ABB23FDBDFDF724 /* KakaoSDKCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8605820768AAB17DB5C129355B6C02CC /* KakaoSDKCommon.swift */; }; + 93266D3BC1875D0425C5D97C35590C96 /* Pods-NADA-iOS-forRelease-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 36D03C2EF9C9F318F0B763F10E20A245 /* Pods-NADA-iOS-forRelease-dummy.m */; }; + 93D4F8823E627811A39D5EF0C07CE24C /* SdkCoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 678245FBA2170ACF84BCF021F4C5ACA5 /* SdkCoder.swift */; }; + 9558C251165A9B17B3EBE2778ABAD04E /* Moya-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 19B883F61DF1A577827AFDBCB38C5640 /* Moya-dummy.m */; }; + 98A00CF45E004F2B1763FAA0CB4928E9 /* PanDirection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F0D4C224ADF9B29DD4A5B0EAD9D2F3B /* PanDirection.swift */; }; + 98F8A598374ED181216B15777174C2B0 /* KakaoSDKAuth.h in Headers */ = {isa = PBXBuildFile; fileRef = 48D3ED2E80A6128747E1D37E5223BA80 /* KakaoSDKAuth.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9A412A17A20B32F4DA6541A9690435DD /* TargetType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C78E9D57B4E8050F0C3306561504C01 /* TargetType.swift */; }; + 9AA8337991A99D52AB4909F797F29319 /* MoyaProvider+Defaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 009F828EA8701B678BBA81F221B61390 /* MoyaProvider+Defaults.swift */; }; + 9B1D8A7798D8A6F518FC9AF9725431D0 /* URLConvertible+URLRequestConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43C0DE0ECF5239BF754435B145CDE7A3 /* URLConvertible+URLRequestConvertible.swift */; }; + 9B8F8D53D20BCCEAF53D12748D6FD531 /* UITableView+VisibleSections.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C65BE6C477529EAD847B72994C4CE3B /* UITableView+VisibleSections.swift */; }; + 9BA9C86EE2D6B421F3EDAF27BBC64BE2 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C577D1FC4FD6B9BE7A82D2BCC7021DA /* Alamofire.framework */; }; + 9FED70D1E1FBFB80E974E999EF732258 /* RetryPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96B72CC9CD04670514C724D0EAE3BDF3 /* RetryPolicy.swift */; }; + A22737A11F8DFBF609E793D90DE850FE /* URL+Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = A690CF4F27F6293D07619EA2DF368F9E /* URL+Utils.swift */; }; + A396FE0752A639E9274F640BF26F2A35 /* UITableView+CollectionSkeleton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FCB24F8457456770E438D215F0E9241 /* UITableView+CollectionSkeleton.swift */; }; + A66024D7C3FD7AE57804BDA39A1CA2C6 /* VerticalCardSwiperView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10A81FA7B8B908A7C8D089E887090DB5 /* VerticalCardSwiperView.swift */; }; + A67B68E7C029F70B0B8B0B201FC99C25 /* SkeletonView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AD58BE76272A6463194A7B4633A534BE /* SkeletonView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A7FC40CEEA937DF65DFD2EC4CAE3AE5D /* SdkLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58F90832FAB6E2C3B4E4632D43ACBEED /* SdkLog.swift */; }; + A8E6AF258A5683F80CC3553F36AA02C6 /* Urls.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EBABEBDC18695F169914DD8749C2E62 /* Urls.swift */; }; + A9151B452B7C08D6D45D4446F7747940 /* UserServiceTerms.swift in Sources */ = {isa = PBXBuildFile; fileRef = 008445A655D4C257B4B16CC9A1F8AA40 /* UserServiceTerms.swift */; }; + A9C7B29D4878F1690BBE3F8195CF0313 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EEB2616C26E3D0D3EDB84F723310C7AE /* CFNetwork.framework */; }; + AAC431B9EA605017153223586D0F63F6 /* AnyEncodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8E30AC1882FB20FF533ADECDA9FFECB /* AnyEncodable.swift */; }; + ABA85887A41495358C83CE3F3030EDEA /* CachedResponseHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C1D89E1FCE366944CAE3AA74A9529F1 /* CachedResponseHandler.swift */; }; + AE9201DCD6062A33C2C6708D63025F70 /* Scope.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B9EE958B3D32D9EBC0473A75F2FE8AB /* Scope.swift */; }; + B27DD4CBF2CF9CBF31DFCBF41D6B1EEA /* Array+Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40282D6146CC6E361BC731AEE2EA5695 /* Array+Utils.swift */; }; + B2B04552103A7C0B1A15E125E28E1E41 /* Dictionary+Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = F48DA41AA226856C2D1A2FA98F09D680 /* Dictionary+Utils.swift */; }; + B54EAAF9370E03F80E227C73141D487D /* CollectionSkeletonProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A18AB1D2C4B37FA132F5E7F7D25CA17 /* CollectionSkeletonProtocol.swift */; }; + B58736B133736426A08937C26162108F /* UserShippingAddresses.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F06A6480E9A9B4992FAEBBF975586FA /* UserShippingAddresses.swift */; }; + B6E94478CC9DEA36C88E64FD4E6B5D69 /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF7F57BAF1AAA4398E5EC8C57BD1C577 /* User.swift */; }; + B712C105E82026A8AF3618783F1713EA /* SwipeDirection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F1B06B12E49993B5D4DA7ACA0C29B89 /* SwipeDirection.swift */; }; + B75DDFBA4563633B823C8874C892482F /* PrepareForSkeletonProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08F264F9833CCE9C55B58CF250D385A0 /* PrepareForSkeletonProtocol.swift */; }; + BC14C216303258F50AD73221EE1BD67B /* KakaoSDKCommon-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E9CA0B4DA503382DA4EDC12AE4E09F0 /* KakaoSDKCommon-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BC9CCA7BB1EBCD10CB4A8AC67D7CD09D /* SubviewsSkeletonables.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AFA83C0F1EA5B1A5FFEB8FFD96C1B62 /* SubviewsSkeletonables.swift */; }; + BCA074BFC1E5CE7479B638F1BDF96B1E /* UIView+Autolayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3D70335DD50EC5E5918E84F49F6F92A /* UIView+Autolayout.swift */; }; + BF16F08F7FBB7FEBFE27169B2DAED114 /* SkeletonTransitionStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E65A61B49A188164C361F9680DCCAC9 /* SkeletonTransitionStyle.swift */; }; + BF35ED4A558BEC06D6A176C76129A4DD /* Moya+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 274B11176974591E13E3BB73D605EDF8 /* Moya+Alamofire.swift */; }; + BFAC3E3A8CED9443C44A2A6884E0A75F /* OAuthToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE9384FDDCE90496D0719AE77C73ED10 /* OAuthToken.swift */; }; + C1C5B050B55C15103ABC81769551A283 /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85126B0C8193F57CE6E4E868A7FD0213 /* Response.swift */; }; + C1D4716773A0DC8B18C351CE34E4F2C5 /* SkeletonTableViewProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FE9E1AA3582B9D5E2643397BF2D5A9B /* SkeletonTableViewProtocols.swift */; }; + C1F1DB6A9CBDE584D09BA1613AAD4F9D /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BC28BB4C90015CE35D6295188A6D2B5 /* Alamofire.swift */; }; + C3158DC632F79419B4E5F77AB383A9E3 /* MigrateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9F85B1B7B138062BF9C7225589AE40D /* MigrateManager.swift */; }; + C6D5A4B4028B2C43380C9FA58BD5C8CA /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EC3AF4268ED927093FDC39D2D1252790 /* Alamofire-dummy.m */; }; + CC9855930B37DF2A2FD9D439C5833370 /* AuthRequestAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1DE676BBE8A33752D7215A123648E5B /* AuthRequestAdapter.swift */; }; + D00994BD11CDA991205AB64A685EED51 /* ProcessInfo+XCTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13D6A276868192B461E3C22BD32B0CB4 /* ProcessInfo+XCTest.swift */; }; + D03F1F02DE8606E6057D57866611BEBF /* MultipartUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A2D5DAE2DDC26B5F1470937209B44F1 /* MultipartUpload.swift */; }; + D14066FAE94E304798E43651E5886D13 /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 396491C5F0C5AF8818E72AF1E78FA29C /* ParameterEncoding.swift */; }; + D31FC7FDD450C4CDD633ECBAD27C6221 /* URLEncodedFormEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 015CDA9BD9BDD87CE8D8D41B757646F9 /* URLEncodedFormEncoder.swift */; }; + D3FEAA699D84FEFCB17D8A92A0B50101 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D29CBCE254728AFF0F22F7C348091DA /* Foundation.framework */; }; + D45FEB0D154AD7E2215517EDB8658CAE /* KakaoSDKCommon-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FD1BE1C85DCEBC651CE9E0C88F89780 /* KakaoSDKCommon-dummy.m */; }; + D5D1C997D9BCFBAC5ADE265762AEB6DF /* SkeletonReusableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C31EC9956AFB15A83E931CBA14D2399 /* SkeletonReusableCell.swift */; }; + D5EAAFB6FAD77A8F0699345149BA3CBB /* URLRequest+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2265DDA1B52FBACA9D8EAB807773462 /* URLRequest+Alamofire.swift */; }; + D94D0653B64A5AF79E8B76F587800D32 /* SdkUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0D015672355F813813F7252BD9D84F6 /* SdkUtils.swift */; }; + DBCA7F7E7308A90DE6C2DAF711EEE7D7 /* Data+Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = F50A098DC1B6880A5579A0DBB78B1EC4 /* Data+Utils.swift */; }; + DBE98EDAE6714A2211B6687B0ABCA1E5 /* SdkCrypto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F33B5CDDA1FB89A69CADA455560E4B5 /* SdkCrypto.swift */; }; + DC627AFC5B585686898B014184AFCABD /* AuthenticationInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7461EC9E2F13DE7039E6B4B2F4AB4A11 /* AuthenticationInterceptor.swift */; }; + DDB1E5153DF595856FEDAFA9789A77FE /* KakaoSDKUser-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A1F5290A08E70F2C16C95CA58172D447 /* KakaoSDKUser-dummy.m */; }; + DF7DDB302D2AD98DC36049179CFCEF08 /* SkeletonDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAB52E2DB483465483CDC5399449BE33 /* SkeletonDebug.swift */; }; + DF905C9610BFAB1A1C27A444D4EC1CAE /* AuthController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F4967E3BB5F87C6A74A5D0D71681DC6 /* AuthController.swift */; }; + DFB1DA26B1C207CBF5E0D7CCD5604A28 /* ErrorInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B12F9A97350B8849703EB288D95584D /* ErrorInfo.swift */; }; + E088F69C48094F7DD721B6BD8D6B0389 /* CardDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C77FA23A09B294A6ACFB6DDBDC4555 /* CardDelegate.swift */; }; + E3F855EE1891A43249C8D5EAD7F45266 /* VerticalCardSwiper-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 30DEDC24A5B6D2166FCCCB7A4FFC6C4D /* VerticalCardSwiper-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EA72CC2DB9B653E1BA2DA123FF56C3BE /* CredentialsPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AA5FCF98B858B3399A61E72D31EBBAC /* CredentialsPlugin.swift */; }; + EBEAEF9CAFEDC67DB7D6EB7C0B440DF5 /* ApiRequestAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = E40057C871CE5D0767150996286842B7 /* ApiRequestAdapter.swift */; }; + EDC93BD7B9262119AE145E4C7A9D0212 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 527506230C52824B3A0FE53A99D4FB80 /* Request.swift */; }; + EDD286540239367F23AE1477B588CA62 /* Auth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81E5142C56282A939A8B0CDD32AEE009 /* Auth.swift */; }; + EECFAE6E50A1472E0E724B4C7240C0D0 /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4194384DE31B90473A3D6679395D37E2 /* Image.swift */; }; + F0F3224FF592F9BA2A044A2FC2BD4CCD /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F36577683A895118B0B11EB99E034B57 /* Validation.swift */; }; + F318B9CAD0AE436906C5C809FAD01667 /* SkeletonConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A15C32E5921F8A71AED2FC54F4488E7 /* SkeletonConfig.swift */; }; + F36726220F4B923ACE3B8C58A2663428 /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = 875755ACED01570F5207B833675D1480 /* Task.swift */; }; + F6CE0C22ED00F821ADA37C231B836616 /* KakaoSDKUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E9A24464B53FB64082ABC28A5D043CB /* KakaoSDKUser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F70EF854395CDE981A8336E4FF0310FE /* URLSessionConfiguration+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EF6A4E150976043A9C8CBA1C76CE3AC /* URLSessionConfiguration+Alamofire.swift */; }; + F822D891CB3C55D332B7216047E3585F /* GenericCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C77D68D4356868251FDAC8AB833E9AE5 /* GenericCollectionView.swift */; }; + F965B8DF95392AE5AFB69A758F2328C0 /* AccessTokenPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1F197B234EBCFBC0A8A37D464FB8332 /* AccessTokenPlugin.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 06BFE9FA164CE9D09B48210F03CFBA90 /* PBXContainerItemProxy */ = { + 057F96BC5B1A98D3B6CC9CB92CDCDFFC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 8CEEFD1CB630CA790F0396E2E24A4C8C; - remoteInfo = SkeletonView; + remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; + remoteInfo = Alamofire; }; - 5DE09AC12DE6B5A45CBBF905994B9CCE /* PBXContainerItemProxy */ = { + 092D1C3FD008901F9FB0F13593DA8944 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; - remoteInfo = Alamofire; + remoteGlobalIDString = 205D6EF1B8DCC8419E2F53266F6ADCDC; + remoteInfo = KakaoSDKCommon; }; - 848A3404725E884800D31ADD6A65A211 /* PBXContainerItemProxy */ = { + 28F3373C2454ABF8466AC887398971EB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 205D6EF1B8DCC8419E2F53266F6ADCDC; + remoteInfo = KakaoSDKCommon; + }; + 313A09AE573BD23681AAAABB75380F8B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 17F9141D333DA1A7BE5937F227221070; remoteInfo = Moya; }; - B09C10AA9BCADE0B51F123600AF7E080 /* PBXContainerItemProxy */ = { + 36A7AD997E5CF219757457218EC213B4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 83CA882AD877ED964BDF66235E416BC1; + remoteInfo = KakaoSDKAuth; + }; + 428AC53FA98299F020210E0A139EEE1E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; remoteInfo = Alamofire; }; - C5F8FB9DEA0EF4B067C41C296E1923A6 /* PBXContainerItemProxy */ = { + 61DF0DC59E146EFE511639DCFA571E02 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3F7BF367078951B6E8BC95B3DA89967A; + remoteInfo = KakaoSDKUser; + }; + 9DF74DD6AA4C3E3A515693BA771EB1CE /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 207F12AADC9561F2D78577DDD788B9C5; remoteInfo = VerticalCardSwiper; }; - E21D54BB9782086F320A4E81AC536804 /* PBXContainerItemProxy */ = { + CA48115103ED63FD2DFA0094054B4B9A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 52B60EC2A583F24ACBB69C113F5488B9; remoteInfo = SwiftLint; }; + CF19D2F61785470EE383C0497E64D5ED /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8CEEFD1CB630CA790F0396E2E24A4C8C; + remoteInfo = SkeletonView; + }; + DF1656F10F4A6A33E010A3CBD056F64C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 83CA882AD877ED964BDF66235E416BC1; + remoteInfo = KakaoSDKAuth; + }; + E2518DD114D45DB43EA1FF1CA5EE5D14 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; + remoteInfo = Alamofire; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 01160D8B19E8258D184155FB87F19812 /* SkeletonConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonConfig.swift; path = Sources/SkeletonConfig.swift; sourceTree = ""; }; - 0141CB962D63B6FBD73C7FFEFE66CE6F /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; }; - 01AF17458DBC4BD9FC4307461FCE75B0 /* PanDirection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PanDirection.swift; path = Sources/PanDirection.swift; sourceTree = ""; }; - 034CAB8BE63B971B22E2E330C02FD0EE /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = ""; }; - 06814129BF8F8CFF14AAB6F2F884D3B6 /* ContainsMultilineText.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContainsMultilineText.swift; path = Sources/Multilines/ContainsMultilineText.swift; sourceTree = ""; }; - 071A394B6C5492D3338349ECCCE905D0 /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Alamofire.modulemap; sourceTree = ""; }; - 07AC158772041D7767F5412F51F584F6 /* OperationQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "OperationQueue+Alamofire.swift"; path = "Source/OperationQueue+Alamofire.swift"; sourceTree = ""; }; - 0809FDCA44D4320F40BB8B7093C3D42E /* Plugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Plugin.swift; path = Sources/Moya/Plugin.swift; sourceTree = ""; }; - 0FB3A05E2C522CCDF36961D982E5FFD4 /* MoyaError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MoyaError.swift; path = Sources/Moya/MoyaError.swift; sourceTree = ""; }; - 1101B41E4343A53F8E4D03A676BE19CF /* SkeletonTableViewProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonTableViewProtocols.swift; path = Sources/Collections/TableViews/SkeletonTableViewProtocols.swift; sourceTree = ""; }; + 008445A655D4C257B4B16CC9A1F8AA40 /* UserServiceTerms.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UserServiceTerms.swift; path = sources/KakaoSDKUser/model/UserServiceTerms.swift; sourceTree = ""; }; + 009F828EA8701B678BBA81F221B61390 /* MoyaProvider+Defaults.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "MoyaProvider+Defaults.swift"; path = "Sources/Moya/MoyaProvider+Defaults.swift"; sourceTree = ""; }; + 015CDA9BD9BDD87CE8D8D41B757646F9 /* URLEncodedFormEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLEncodedFormEncoder.swift; path = Source/URLEncodedFormEncoder.swift; sourceTree = ""; }; + 01AAB425325C29722CE8AD24DC3E2B19 /* SkeletonAnimationBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonAnimationBuilder.swift; path = Sources/SkeletonAnimationBuilder.swift; sourceTree = ""; }; + 01E1DA6FA8E3B726E952CA731F37BA09 /* SkeletonView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SkeletonView-dummy.m"; sourceTree = ""; }; + 03056395B56168964846B9A19B2DC096 /* AFError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AFError.swift; path = Source/AFError.swift; sourceTree = ""; }; + 03E4520C26D608D08982C66220FC019D /* SkeletonMultilineLayerBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonMultilineLayerBuilder.swift; path = Sources/Builders/SkeletonMultilineLayerBuilder.swift; sourceTree = ""; }; + 08F264F9833CCE9C55B58CF250D385A0 /* PrepareForSkeletonProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PrepareForSkeletonProtocol.swift; path = Sources/Helpers/PrepareForSkeletonProtocol.swift; sourceTree = ""; }; + 09ACCBCE6D539CA74FEB6752DD505A39 /* SkeletonLayerBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonLayerBuilder.swift; path = Sources/Builders/SkeletonLayerBuilder.swift; sourceTree = ""; }; + 0A2D5DAE2DDC26B5F1470937209B44F1 /* MultipartUpload.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartUpload.swift; path = Source/MultipartUpload.swift; sourceTree = ""; }; + 0ACD8C4622FE784E54FF554F1A9C2958 /* Alamofire.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.debug.xcconfig; sourceTree = ""; }; + 0AFA83C0F1EA5B1A5FFEB8FFD96C1B62 /* SubviewsSkeletonables.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubviewsSkeletonables.swift; path = Sources/SubviewsSkeletonables.swift; sourceTree = ""; }; + 0B12F9A97350B8849703EB288D95584D /* ErrorInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ErrorInfo.swift; path = sources/KakaoSDKCommon/common/model/ErrorInfo.swift; sourceTree = ""; }; + 0B479748F2C1745AD42DEACA036E74B6 /* UICollectionView+CollectionSkeleton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UICollectionView+CollectionSkeleton.swift"; path = "Sources/Collections/CollectionViews/UICollectionView+CollectionSkeleton.swift"; sourceTree = ""; }; + 0C15C09BC5B5A6B7448E2D8E03DAEEE4 /* SkeletonView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SkeletonView-prefix.pch"; sourceTree = ""; }; + 0C1D89E1FCE366944CAE3AA74A9529F1 /* CachedResponseHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CachedResponseHandler.swift; path = Source/CachedResponseHandler.swift; sourceTree = ""; }; + 0C31EC9956AFB15A83E931CBA14D2399 /* SkeletonReusableCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonReusableCell.swift; path = Sources/Collections/Generics/SkeletonReusableCell.swift; sourceTree = ""; }; + 0DEA9F5A47CCD837A70125ED7FA6F6B3 /* Moya.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Moya.modulemap; sourceTree = ""; }; + 0E1F8C70958EEF672E8BBB591B9787D9 /* UIView+CollectionSkeleton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+CollectionSkeleton.swift"; path = "Sources/Collections/UIView+CollectionSkeleton.swift"; sourceTree = ""; }; + 0F06A6480E9A9B4992FAEBBF975586FA /* UserShippingAddresses.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UserShippingAddresses.swift; path = sources/KakaoSDKUser/model/UserShippingAddresses.swift; sourceTree = ""; }; + 0F0D4C224ADF9B29DD4A5B0EAD9D2F3B /* PanDirection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PanDirection.swift; path = Sources/PanDirection.swift; sourceTree = ""; }; + 1052D5AE0B7E0C825CAD042265B52BD8 /* KakaoSDKAuth.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = KakaoSDKAuth.modulemap; sourceTree = ""; }; + 10A81FA7B8B908A7C8D089E887090DB5 /* VerticalCardSwiperView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VerticalCardSwiperView.swift; path = Sources/VerticalCardSwiperView.swift; sourceTree = ""; }; + 12285F0E1823C9CB6E99C493C004DF74 /* URLRequest+Encoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLRequest+Encoding.swift"; path = "Sources/Moya/URLRequest+Encoding.swift"; sourceTree = ""; }; 12E5A6A506752A0961C3C9EA1DA4FB15 /* Pods-NADA-iOS-forRelease-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-NADA-iOS-forRelease-frameworks.sh"; sourceTree = ""; }; - 14784F7734EDF9EFDB892DD3639FE1D1 /* UIView+IBInspectable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+IBInspectable.swift"; path = "Sources/Extensions/UIView+IBInspectable.swift"; sourceTree = ""; }; - 14FEC61118FA1DFB43AE4AA368D5D1CE /* Moya-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Moya-umbrella.h"; sourceTree = ""; }; - 155E78119EA83B4F27884C941EFF3018 /* AFError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AFError.swift; path = Source/AFError.swift; sourceTree = ""; }; - 15F3C9505785E857C6970A417FB0AD6D /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Sources/Moya/Response.swift; sourceTree = ""; }; - 163B551B47E6034B95A839DD7F3FF622 /* AuthenticationInterceptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthenticationInterceptor.swift; path = Source/AuthenticationInterceptor.swift; sourceTree = ""; }; - 18C7DA9047C4236C2486FB57864EC3D6 /* VerticalCardSwiper-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "VerticalCardSwiper-umbrella.h"; sourceTree = ""; }; - 18DFFEE0B5973145E834A965D19DCF4C /* Task.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Task.swift; path = Sources/Moya/Task.swift; sourceTree = ""; }; - 196D7B95A892DEE608F24372E2C2922C /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/MultipartFormData.swift; sourceTree = ""; }; - 1AC44BC108255F6766BF5383BF088F46 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 1C9F7BA86DF05562C2BDCC21EDE77B56 /* AssociationPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssociationPolicy.swift; path = Sources/Helpers/AssociationPolicy.swift; sourceTree = ""; }; - 1D73B47A52EA17DDBFC15CA388016C3E /* URLEncodedFormEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLEncodedFormEncoder.swift; path = Source/URLEncodedFormEncoder.swift; sourceTree = ""; }; - 1E05D910CDA22F90C03145469D8D6B9C /* SkeletonCollectionDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonCollectionDataSource.swift; path = Sources/Collections/SkeletonCollectionDataSource.swift; sourceTree = ""; }; - 203FF326D56ACC1E09C056C8E06C43E3 /* SkeletonCollectionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonCollectionDelegate.swift; path = Sources/Collections/SkeletonCollectionDelegate.swift; sourceTree = ""; }; - 206CA4DEDF09AC3EFDF2A27BC99474BA /* VerticalCardSwiper-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "VerticalCardSwiper-dummy.m"; sourceTree = ""; }; + 1353D6A467F43A6A3EA21D310BD35A31 /* KakaoSDKUser.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = KakaoSDKUser.framework; path = KakaoSDKUser.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 13D6A276868192B461E3C22BD32B0CB4 /* ProcessInfo+XCTest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ProcessInfo+XCTest.swift"; path = "Sources/Extensions/ProcessInfo+XCTest.swift"; sourceTree = ""; }; + 14550269357F684B8B3C691B186AFB51 /* SkeletonView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonView.swift; path = Sources/SkeletonView.swift; sourceTree = ""; }; + 1703E145C8B89997E08295645F7DD8ED /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Notifications.swift; sourceTree = ""; }; + 17D38C59C1924E8F3ECD26E6186BDF53 /* Combine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Combine.swift; path = Source/Combine.swift; sourceTree = ""; }; + 19B883F61DF1A577827AFDBCB38C5640 /* Moya-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Moya-dummy.m"; sourceTree = ""; }; + 1D73D651F42952961A36DCD0D8452C79 /* ValidationType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ValidationType.swift; path = Sources/Moya/ValidationType.swift; sourceTree = ""; }; + 1E6A1466FEE5637585E37CEB9D259C05 /* HTTPHeaders.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPHeaders.swift; path = Source/HTTPHeaders.swift; sourceTree = ""; }; + 1E858DB180C643326719036CB443A285 /* Common.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Common.swift; path = sources/KakaoSDKCommon/common/common/Common.swift; sourceTree = ""; }; + 201BB0937308D6C1AE652E84C7DD1A9E /* CardCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CardCell.swift; path = Sources/CardCell.swift; sourceTree = ""; }; 2210E8F68B83B00DEA18F335FDCBCF71 /* Pods-NADA-iOS-forRelease-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-NADA-iOS-forRelease-Info.plist"; sourceTree = ""; }; - 2506058B796B7FD850977033F6EEFC8F /* MoyaProvider+Defaults.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "MoyaProvider+Defaults.swift"; path = "Sources/Moya/MoyaProvider+Defaults.swift"; sourceTree = ""; }; - 2588297D9CE75AF7905584041DEE0BA4 /* SkeletonCollectionViewProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonCollectionViewProtocols.swift; path = Sources/Collections/CollectionViews/SkeletonCollectionViewProtocols.swift; sourceTree = ""; }; - 26350B149220D1C8A95125E6B614476A /* Moya+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Moya+Alamofire.swift"; path = "Sources/Moya/Moya+Alamofire.swift"; sourceTree = ""; }; - 26BB708E47448F3138DB5C78747AC9CC /* MultipartUpload.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartUpload.swift; path = Source/MultipartUpload.swift; sourceTree = ""; }; - 280359BD9E534D7CDA387CB4A989DACF /* Moya-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Moya-dummy.m"; sourceTree = ""; }; - 28C5F6C487E4E51AF860635D8790A464 /* UITableView+CollectionSkeleton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITableView+CollectionSkeleton.swift"; path = "Sources/Collections/TableViews/UITableView+CollectionSkeleton.swift"; sourceTree = ""; }; - 29662D72EA0149C3E2CC3A3AC6F13EA2 /* SkeletonAppearance.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonAppearance.swift; path = Sources/Appearance/SkeletonAppearance.swift; sourceTree = ""; }; - 2E5D7C4C028536D79ADB6FD7F02D7BA1 /* Moya-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Moya-Info.plist"; sourceTree = ""; }; - 2EEF172C651BC49B1518E9A6BBCDA970 /* SkeletonView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SkeletonView-umbrella.h"; sourceTree = ""; }; - 3299AA543EFC153C50CC16F895694875 /* VerticalCardSwiper.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = VerticalCardSwiper.release.xcconfig; sourceTree = ""; }; - 329CAFC91DEA2845955F0BA783654588 /* Image.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Image.swift; path = Sources/Moya/Image.swift; sourceTree = ""; }; - 353AE8475692C946A3DC23536ECDA2D1 /* Int+Whitespaces.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Int+Whitespaces.swift"; path = "Sources/Extensions/Int+Whitespaces.swift"; sourceTree = ""; }; + 243175092AE28349A7D1CA5E2B12FAC9 /* UITextView+Multiline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITextView+Multiline.swift"; path = "Sources/Multilines/UITextView+Multiline.swift"; sourceTree = ""; }; + 249B7648B5B85EA0E714D49CD6C67A04 /* ContainsMultilineText.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContainsMultilineText.swift; path = Sources/Multilines/ContainsMultilineText.swift; sourceTree = ""; }; + 25BDA6E824AD6CBD857358A023C694AD /* KakaoSDKCommon.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = KakaoSDKCommon.framework; path = KakaoSDKCommon.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 268D95FCA52BE6F4E87365E1061A0DBE /* VerticalCardSwiper-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "VerticalCardSwiper-prefix.pch"; sourceTree = ""; }; + 2721360639183A8DB566806B57A1F3DA /* UIView+Frame.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Frame.swift"; path = "Sources/Extensions/UIView+Frame.swift"; sourceTree = ""; }; + 274B11176974591E13E3BB73D605EDF8 /* Moya+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Moya+Alamofire.swift"; path = "Sources/Moya/Moya+Alamofire.swift"; sourceTree = ""; }; + 280432C1345EC091AA5C1975D6087A8A /* KakaoSDKAuth.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = KakaoSDKAuth.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2BC28BB4C90015CE35D6295188A6D2B5 /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = ""; }; + 2C65BE6C477529EAD847B72994C4CE3B /* UITableView+VisibleSections.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITableView+VisibleSections.swift"; path = "Sources/Extensions/UITableView+VisibleSections.swift"; sourceTree = ""; }; + 30DEDC24A5B6D2166FCCCB7A4FFC6C4D /* VerticalCardSwiper-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "VerticalCardSwiper-umbrella.h"; sourceTree = ""; }; + 354B4DD1F80EF9928D939D38DFCA6E39 /* HTTPMethod.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPMethod.swift; path = Source/HTTPMethod.swift; sourceTree = ""; }; + 369CC5F7967B0D65D714A86D9A454423 /* RedirectHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RedirectHandler.swift; path = Source/RedirectHandler.swift; sourceTree = ""; }; + 369EEF149A229DC55CA98708629897E5 /* RecoverableViewState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecoverableViewState.swift; path = Sources/Recoverable/RecoverableViewState.swift; sourceTree = ""; }; 36D03C2EF9C9F318F0B763F10E20A245 /* Pods-NADA-iOS-forRelease-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-NADA-iOS-forRelease-dummy.m"; sourceTree = ""; }; - 36D1F25C04B2957B0CB03928455D206F /* Combine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Combine.swift; path = Source/Combine.swift; sourceTree = ""; }; - 37435577C632F9A9337E3E0DFDAE9F76 /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = ""; }; 3756A9BBE41ABEE8DCBF5BCA6972C4DA /* Moya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Moya.framework; path = Moya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 39DB5AB8BB243B250C7033123922745C /* SkeletonDebug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonDebug.swift; path = Sources/Debug/SkeletonDebug.swift; sourceTree = ""; }; - 3B3775370F3C08006D033CA24668DB49 /* VerticalCardSwiper-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "VerticalCardSwiper-Info.plist"; sourceTree = ""; }; - 3B3AF2EE2F1CD1665C80959CD2780963 /* UIView+UIApplicationDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+UIApplicationDelegate.swift"; path = "Sources/Extensions/UIView+UIApplicationDelegate.swift"; sourceTree = ""; }; - 3E54768C4F9DBC5AA475E45511E303B6 /* Session.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Session.swift; path = Source/Session.swift; sourceTree = ""; }; - 3FBA57DDEAA036ED7080B98CE818A061 /* RecoverableViewState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecoverableViewState.swift; path = Sources/Recoverable/RecoverableViewState.swift; sourceTree = ""; }; - 41E783C8C11C68F10B21C86D2CEBE69C /* UITextView+Multiline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITextView+Multiline.swift"; path = "Sources/Multilines/UITextView+Multiline.swift"; sourceTree = ""; }; + 3936B74A53465E283BDFA54F4DE19A98 /* Moya.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Moya.release.xcconfig; sourceTree = ""; }; + 396491C5F0C5AF8818E72AF1E78FA29C /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/ParameterEncoding.swift; sourceTree = ""; }; + 39E4F26C0828D5181A4E22C6E1953609 /* SkeletonCollectionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonCollectionDelegate.swift; path = Sources/Collections/SkeletonCollectionDelegate.swift; sourceTree = ""; }; + 3B4FFD478579B04642D169A45E91668A /* SkeletonFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonFlow.swift; path = Sources/SkeletonFlow.swift; sourceTree = ""; }; + 3C577D1FC4FD6B9BE7A82D2BCC7021DA /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3D29CBCE254728AFF0F22F7C348091DA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 3E4DFC85C701B502EEEAF61B66FB3460 /* KakaoSDKUser-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "KakaoSDKUser-Info.plist"; sourceTree = ""; }; + 3F79120A14A3DDD98EC5F8732D15A8FD /* StringEncoding+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "StringEncoding+Alamofire.swift"; path = "Source/StringEncoding+Alamofire.swift"; sourceTree = ""; }; + 3FD698826048124C098CC60F3BB91F19 /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = ""; }; + 40282D6146CC6E361BC731AEE2EA5695 /* Array+Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Array+Utils.swift"; path = "sources/KakaoSDKCommon/common/extension/Array+Utils.swift"; sourceTree = ""; }; + 4179DF058ED0BAC6C59CFFBC52671665 /* SkeletonGradient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonGradient.swift; path = Sources/SkeletonGradient.swift; sourceTree = ""; }; + 4194384DE31B90473A3D6679395D37E2 /* Image.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Image.swift; path = Sources/Moya/Image.swift; sourceTree = ""; }; 420E35C3FCBD48BED7CAC20D5A22E981 /* Pods-NADA-iOS-forRelease.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-NADA-iOS-forRelease.release.xcconfig"; sourceTree = ""; }; - 438B64445806556056A2853C68DAD8E4 /* CardDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CardDelegate.swift; path = Sources/CardDelegate.swift; sourceTree = ""; }; - 457B434CF73D04C4FDCCBC62214B5D9A /* SwiftLint.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftLint.debug.xcconfig; sourceTree = ""; }; - 47D0259CE9677DCE75C790D43F66723C /* VerticalCardSwiper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VerticalCardSwiper.swift; path = Sources/VerticalCardSwiper.swift; sourceTree = ""; }; - 4865B9D1DD52E42E3E55AC434DF8EBF8 /* VerticalCardSwiper-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "VerticalCardSwiper-prefix.pch"; sourceTree = ""; }; - 4AB29DC337E1F008B023BA790F65A05B /* SkeletonLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonLayer.swift; path = Sources/SkeletonLayer.swift; sourceTree = ""; }; - 4DA78B802277EB63663D16DC451A4FF4 /* VerticalCardSwiperDatasource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VerticalCardSwiperDatasource.swift; path = Sources/VerticalCardSwiperDatasource.swift; sourceTree = ""; }; - 4E61E326D7B3A77ED30807DACB2FD7C6 /* Moya.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Moya.debug.xcconfig; sourceTree = ""; }; - 4FC6366E68A6D481255A6CBEC1E95B9B /* UIView+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Extension.swift"; path = "Sources/Extensions/UIView+Extension.swift"; sourceTree = ""; }; - 5114D29CA6F0C789E819011CE2E4D4B0 /* SwipeDirection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeDirection.swift; path = Sources/SwipeDirection.swift; sourceTree = ""; }; - 514B1E82CF7490B03A9B6A5F27520CE1 /* EventMonitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EventMonitor.swift; path = Source/EventMonitor.swift; sourceTree = ""; }; + 42DFE1342432C013C21DF3E96707AAE7 /* KakaoSDKUser-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "KakaoSDKUser-umbrella.h"; sourceTree = ""; }; + 43A8B4EE61197960B8DB5A29E7B4B0B2 /* Api.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Api.swift; path = sources/KakaoSDKCommon/network/Api.swift; sourceTree = ""; }; + 43C0DE0ECF5239BF754435B145CDE7A3 /* URLConvertible+URLRequestConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLConvertible+URLRequestConvertible.swift"; path = "Source/URLConvertible+URLRequestConvertible.swift"; sourceTree = ""; }; + 48D3ED2E80A6128747E1D37E5223BA80 /* KakaoSDKAuth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KakaoSDKAuth.h; path = sources/KakaoSDKAuth/KakaoSDKAuth.h; sourceTree = ""; }; + 49224E14B818703FCC953C3B23881A3A /* KakaoSDKAuth.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = KakaoSDKAuth.release.xcconfig; sourceTree = ""; }; + 49FDCD2D3873E3393C11DDA5955BB817 /* MoyaProvider+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "MoyaProvider+Internal.swift"; path = "Sources/Moya/MoyaProvider+Internal.swift"; sourceTree = ""; }; + 4B9EE958B3D32D9EBC0473A75F2FE8AB /* Scope.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Scope.swift; path = sources/KakaoSDKUser/model/Scope.swift; sourceTree = ""; }; + 4D9A31758D6173B723233A20CF5821E4 /* Swizzling.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Swizzling.swift; path = Sources/Helpers/Swizzling.swift; sourceTree = ""; }; + 4D9EDCC406FCF40A56D716E2B29188B6 /* VerticalCardSwiper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VerticalCardSwiper.swift; path = Sources/VerticalCardSwiper.swift; sourceTree = ""; }; + 5009CA4BE127B88B5025BAC5B59D5EBE /* Moya-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Moya-umbrella.h"; sourceTree = ""; }; 5183F64F0CB82B2049B97A16612CA752 /* Pods_NADA_iOS_forRelease.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_NADA_iOS_forRelease.framework; path = "Pods-NADA-iOS-forRelease.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 52B31FA98C668A21E4B3B0129EEAC628 /* AnyEncodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyEncodable.swift; path = Sources/Moya/AnyEncodable.swift; sourceTree = ""; }; - 532D030CBE81BE97499BFD28673BEE26 /* StringEncoding+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "StringEncoding+Alamofire.swift"; path = "Source/StringEncoding+Alamofire.swift"; sourceTree = ""; }; - 53AA0C71A39EF70A003582F856C38A44 /* VerticalCardSwiperView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VerticalCardSwiperView.swift; path = Sources/VerticalCardSwiperView.swift; sourceTree = ""; }; - 53AE0A2A396044FEFDDA56A0CC10F868 /* UIView+Autolayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Autolayout.swift"; path = "Sources/Extensions/UIView+Autolayout.swift"; sourceTree = ""; }; - 552EC4CF2BA7638857957C08CF8A44FA /* ValidationType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ValidationType.swift; path = Sources/Moya/ValidationType.swift; sourceTree = ""; }; - 559A56EC48BF2BD2F7CDF8BB13F126D6 /* UICollectionView+CollectionSkeleton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UICollectionView+CollectionSkeleton.swift"; path = "Sources/Collections/CollectionViews/UICollectionView+CollectionSkeleton.swift"; sourceTree = ""; }; - 5994A3FA87CBCA0CBB78552409467226 /* Moya.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Moya.release.xcconfig; sourceTree = ""; }; - 5A71160C3BC79211D48EFB23A4960458 /* UIColor+Skeleton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIColor+Skeleton.swift"; path = "Sources/Extensions/UIColor+Skeleton.swift"; sourceTree = ""; }; - 5BFFEADC6F86761385F0309E089BC5BA /* HTTPMethod.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPMethod.swift; path = Source/HTTPMethod.swift; sourceTree = ""; }; + 527506230C52824B3A0FE53A99D4FB80 /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Request.swift; sourceTree = ""; }; + 55E2D2BD2A5D72AC689461D5256799E0 /* DecodingContainer+AnyCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DecodingContainer+AnyCollection.swift"; path = "sources/KakaoSDKCommon/common/extension/DecodingContainer+AnyCollection.swift"; sourceTree = ""; }; + 56A5AA0AB95FA4E2BFE1CD8FA8D13406 /* Result+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Result+Alamofire.swift"; path = "Source/Result+Alamofire.swift"; sourceTree = ""; }; + 58F90832FAB6E2C3B4E4632D43ACBEED /* SdkLog.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkLog.swift; path = sources/KakaoSDKCommon/common/common/SdkLog.swift; sourceTree = ""; }; 5C57111ECFEC8037A512447C17843C43 /* Pods-NADA-iOS-forRelease-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-NADA-iOS-forRelease-acknowledgements.plist"; sourceTree = ""; }; - 5D06A26E22EAC591EA4B913C02C83F11 /* URLRequest+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLRequest+Alamofire.swift"; path = "Source/URLRequest+Alamofire.swift"; sourceTree = ""; }; + 5C78E9D57B4E8050F0C3306561504C01 /* TargetType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TargetType.swift; path = Sources/Moya/TargetType.swift; sourceTree = ""; }; + 5D1EE1DBF74D393F0E257A42C788BF0B /* Moya.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Moya.debug.xcconfig; sourceTree = ""; }; 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Alamofire.framework; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 5E77B546F8ABDDE70861710F6482E2A1 /* Pods-NADA-iOS-forRelease.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-NADA-iOS-forRelease.debug.xcconfig"; sourceTree = ""; }; - 5F2364BDF45DB318E369A32A82300570 /* AccessTokenPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AccessTokenPlugin.swift; path = Sources/Moya/Plugins/AccessTokenPlugin.swift; sourceTree = ""; }; - 646927E46534990E23246477C2C43412 /* CALayer+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CALayer+Extensions.swift"; path = "Sources/Extensions/CALayer+Extensions.swift"; sourceTree = ""; }; - 64B30679B2A44FE78B4D31DAF510B2A4 /* DispatchQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Alamofire.swift"; path = "Source/DispatchQueue+Alamofire.swift"; sourceTree = ""; }; - 66F3759253CFAD783999039544FE9B0A /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Source/Response.swift; sourceTree = ""; }; - 67457047C6FD0DD459F76D285F15BF74 /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Sources/Moya/MultipartFormData.swift; sourceTree = ""; }; - 6BA2BEDA278291CA647AAFAC49EC0BA4 /* CollectionSkeletonProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CollectionSkeletonProtocol.swift; path = Sources/Collections/CollectionSkeletonProtocol.swift; sourceTree = ""; }; - 6DD4218A002BE7F2BA7F85FD45AD348E /* SkeletonAnimationBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonAnimationBuilder.swift; path = Sources/SkeletonAnimationBuilder.swift; sourceTree = ""; }; - 7175342A497598EA3B2BDE31C8B51DDD /* UIView+Transitions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Transitions.swift"; path = "Sources/Transitions/UIView+Transitions.swift"; sourceTree = ""; }; - 7253C0C48A552A1F99C4D5EB8CEBAC9B /* SkeletonView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SkeletonView-prefix.pch"; sourceTree = ""; }; - 76116D2CCC519790D15679ABEF5ED8D4 /* Recoverable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Recoverable.swift; path = Sources/Recoverable/Recoverable.swift; sourceTree = ""; }; - 78971C1CA86FE3E0398C55CE0871F49E /* UILabel+Multiline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILabel+Multiline.swift"; path = "Sources/Multilines/UILabel+Multiline.swift"; sourceTree = ""; }; - 7DDB57356F98EF16F5267B5E1F80AB3E /* CardCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CardCell.swift; path = Sources/CardCell.swift; sourceTree = ""; }; - 7E0385435D9F6C1FED1877641AA16B2D /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = ""; }; - 7F7CD09D7F4E1625EBD3AC1C3FC55784 /* Swizzling.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Swizzling.swift; path = Sources/Helpers/Swizzling.swift; sourceTree = ""; }; - 80E2713D117E9E481A6466A33791BEE3 /* SkeletonLayerBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonLayerBuilder.swift; path = Sources/Builders/SkeletonLayerBuilder.swift; sourceTree = ""; }; - 83DD4E8F5E12A49B106000D441E8D9D4 /* VerticalCardSwiperDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VerticalCardSwiperDelegate.swift; path = Sources/VerticalCardSwiperDelegate.swift; sourceTree = ""; }; - 8605D8EE7CB7AB0299E3EC10FA9FF1E3 /* SkeletonView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonView.swift; path = Sources/SkeletonView.swift; sourceTree = ""; }; - 8AC058DDE1DEBFA5AB3CBE4741AEEBAC /* SkeletonTransitionStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonTransitionStyle.swift; path = Sources/Transitions/SkeletonTransitionStyle.swift; sourceTree = ""; }; - 8BC7E9C891D48C1FEB8695D5630DA91D /* SkeletonGradient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonGradient.swift; path = Sources/SkeletonGradient.swift; sourceTree = ""; }; - 8D5DA142DA7A5CB91998DB139D945250 /* Alamofire.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.debug.xcconfig; sourceTree = ""; }; - 8DC2911B177DA6F17732F4B995E200CD /* SkeletonMultilineLayerBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonMultilineLayerBuilder.swift; path = Sources/Builders/SkeletonMultilineLayerBuilder.swift; sourceTree = ""; }; - 8F1F432B2D60C8A39E8E10A0D42D1FC6 /* Moya.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Moya.modulemap; sourceTree = ""; }; - 93DD6D889F319B45461ABAFC06CB73C7 /* NetworkActivityPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkActivityPlugin.swift; path = Sources/Moya/Plugins/NetworkActivityPlugin.swift; sourceTree = ""; }; - 987361860E5814468414741114B24C0E /* SkeletonFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonFlow.swift; path = Sources/SkeletonFlow.swift; sourceTree = ""; }; + 5F748F833CDA83471A0BD4D87D5B4F7D /* UIView+IBInspectable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+IBInspectable.swift"; path = "Sources/Extensions/UIView+IBInspectable.swift"; sourceTree = ""; }; + 5FE9E1AA3582B9D5E2643397BF2D5A9B /* SkeletonTableViewProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonTableViewProtocols.swift; path = Sources/Collections/TableViews/SkeletonTableViewProtocols.swift; sourceTree = ""; }; + 63A0238267891C6BDCD658D22CA9C6FD /* KakaoSDKAuth-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "KakaoSDKAuth-Info.plist"; sourceTree = ""; }; + 63BAB23C04C39A5D8E57627C0CBE33FD /* KakaoSDKCommon.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = KakaoSDKCommon.modulemap; sourceTree = ""; }; + 6555393019118F521088D924E4590A4A /* SkeletonView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SkeletonView-Info.plist"; sourceTree = ""; }; + 667C5116528DEF8EDA95F675A1C7F484 /* SkeletonCollectionDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonCollectionDataSource.swift; path = Sources/Collections/SkeletonCollectionDataSource.swift; sourceTree = ""; }; + 678245FBA2170ACF84BCF021F4C5ACA5 /* SdkCoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkCoder.swift; path = sources/KakaoSDKCommon/common/common/SdkCoder.swift; sourceTree = ""; }; + 6A15C32E5921F8A71AED2FC54F4488E7 /* SkeletonConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonConfig.swift; path = Sources/SkeletonConfig.swift; sourceTree = ""; }; + 6A661C46E9812F01D6755AA880534E8C /* MoyaProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MoyaProvider.swift; path = Sources/Moya/MoyaProvider.swift; sourceTree = ""; }; + 6AA5FCF98B858B3399A61E72D31EBBAC /* CredentialsPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CredentialsPlugin.swift; path = Sources/Moya/Plugins/CredentialsPlugin.swift; sourceTree = ""; }; + 6B360355E87C9EA2E43E53223E8A81B4 /* RecursiveProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecursiveProtocol.swift; path = Sources/Helpers/RecursiveProtocol.swift; sourceTree = ""; }; + 6D70A72AFB0E6D4A567B16158BC76FAC /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Sources/Moya/MultipartFormData.swift; sourceTree = ""; }; + 6EBABEBDC18695F169914DD8749C2E62 /* Urls.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Urls.swift; path = sources/KakaoSDKCommon/common/common/Urls.swift; sourceTree = ""; }; + 6F33B5CDDA1FB89A69CADA455560E4B5 /* SdkCrypto.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkCrypto.swift; path = sources/KakaoSDKCommon/common/common/SdkCrypto.swift; sourceTree = ""; }; + 7461EC9E2F13DE7039E6B4B2F4AB4A11 /* AuthenticationInterceptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthenticationInterceptor.swift; path = Source/AuthenticationInterceptor.swift; sourceTree = ""; }; + 7890039FDEF33FD03D750E0BE0FBC620 /* Alamofire.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.release.xcconfig; sourceTree = ""; }; + 793B82A4458CD5F30432DE62B0E40A5B /* TokenManagable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TokenManagable.swift; path = sources/KakaoSDKAuth/auth/TokenManagable.swift; sourceTree = ""; }; + 7A18AB1D2C4B37FA132F5E7F7D25CA17 /* CollectionSkeletonProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CollectionSkeletonProtocol.swift; path = Sources/Collections/CollectionSkeletonProtocol.swift; sourceTree = ""; }; + 7CCBA75E9B23AE002A4A95E8B31EA569 /* AssociationPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssociationPolicy.swift; path = Sources/Helpers/AssociationPolicy.swift; sourceTree = ""; }; + 7E9A24464B53FB64082ABC28A5D043CB /* KakaoSDKUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KakaoSDKUser.h; path = sources/KakaoSDKUser/KakaoSDKUser.h; sourceTree = ""; }; + 81E5142C56282A939A8B0CDD32AEE009 /* Auth.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Auth.swift; path = sources/KakaoSDKAuth/auth/Auth.swift; sourceTree = ""; }; + 845BA8930569CF63502AC14DE58791E8 /* VerticalCardSwiper.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = VerticalCardSwiper.debug.xcconfig; sourceTree = ""; }; + 846902602AE9DAAD3C05CE15EAF78E4E /* VerticalCardSwiper-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "VerticalCardSwiper-Info.plist"; sourceTree = ""; }; + 84D580D15836A2CD5DACA7EEC8835DE8 /* SkeletonView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SkeletonView.modulemap; sourceTree = ""; }; + 85126B0C8193F57CE6E4E868A7FD0213 /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Source/Response.swift; sourceTree = ""; }; + 852587985B9E4EBA869F1C19D4D37F08 /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Source/SessionDelegate.swift; sourceTree = ""; }; + 852C3101524D3D0A78D26622B79A66B9 /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = ""; }; + 8605820768AAB17DB5C129355B6C02CC /* KakaoSDKCommon.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KakaoSDKCommon.swift; path = sources/KakaoSDKCommon/common/KakaoSDKCommon.swift; sourceTree = ""; }; + 862117AC312873415B51327A2139BCD4 /* Protected.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Protected.swift; path = Source/Protected.swift; sourceTree = ""; }; + 86A91118F90F0D20FF94BA3D9AF0801C /* Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Extensions.swift; path = Sources/Extensions.swift; sourceTree = ""; }; + 875755ACED01570F5207B833675D1480 /* Task.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Task.swift; path = Sources/Moya/Task.swift; sourceTree = ""; }; + 87D288A185BF54C8815698BF1B071F85 /* AccessTokenInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AccessTokenInfo.swift; path = sources/KakaoSDKUser/model/AccessTokenInfo.swift; sourceTree = ""; }; + 8906830BFDFE1AA458F4C8346494302B /* VerticalCardSwiperDatasource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VerticalCardSwiperDatasource.swift; path = Sources/VerticalCardSwiperDatasource.swift; sourceTree = ""; }; + 893D22A21E8095AC18647012E6140C3C /* SkeletonAppearance.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonAppearance.swift; path = Sources/Appearance/SkeletonAppearance.swift; sourceTree = ""; }; + 8A5D688BB5BF6CC0B463832469154C1C /* Cancellable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cancellable.swift; path = Sources/Moya/Cancellable.swift; sourceTree = ""; }; + 8DB08E7416D6E1D0EEB114CD1CC88AE8 /* VerticalCardSwiper.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = VerticalCardSwiper.modulemap; sourceTree = ""; }; + 8E9CA0B4DA503382DA4EDC12AE4E09F0 /* KakaoSDKCommon-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "KakaoSDKCommon-umbrella.h"; sourceTree = ""; }; + 8EF6A4E150976043A9C8CBA1C76CE3AC /* URLSessionConfiguration+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLSessionConfiguration+Alamofire.swift"; path = "Source/URLSessionConfiguration+Alamofire.swift"; sourceTree = ""; }; + 8FD1BE1C85DCEBC651CE9E0C88F89780 /* KakaoSDKCommon-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "KakaoSDKCommon-dummy.m"; sourceTree = ""; }; + 93505AA1F4FE4308FA39620AED22DB3B /* VerticalCardSwiperFlowLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VerticalCardSwiperFlowLayout.swift; path = Sources/VerticalCardSwiperFlowLayout.swift; sourceTree = ""; }; + 935157435E387E5FEC32AE8A9ED9E05C /* UIView+UIApplicationDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+UIApplicationDelegate.swift"; path = "Sources/Extensions/UIView+UIApplicationDelegate.swift"; sourceTree = ""; }; + 94059D9EA304B4A09B10EA6EFBDF7F98 /* SkeletonView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SkeletonView.debug.xcconfig; sourceTree = ""; }; + 9471D6C44F58EA525824D9EFA74C618D /* VerticalCardSwiper.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = VerticalCardSwiper.release.xcconfig; sourceTree = ""; }; + 9589AA64D8D429EA5325C6A45D84D050 /* NetworkActivityPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkActivityPlugin.swift; path = Sources/Moya/Plugins/NetworkActivityPlugin.swift; sourceTree = ""; }; + 96B72CC9CD04670514C724D0EAE3BDF3 /* RetryPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryPolicy.swift; path = Source/RetryPolicy.swift; sourceTree = ""; }; + 9A32BD08D9936BEF16E0E96DE5D39CF6 /* UserApi.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UserApi.swift; path = sources/KakaoSDKUser/UserApi.swift; sourceTree = ""; }; + 9AAB931CEE3AA1C1AC3C723994134B30 /* SwiftLint.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftLint.release.xcconfig; sourceTree = ""; }; + 9B1A89E732D04D8214258713473E1B8C /* KakaoSDKUser-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "KakaoSDKUser-prefix.pch"; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9FF1931149BF083089579D8650F59C06 /* URLConvertible+URLRequestConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLConvertible+URLRequestConvertible.swift"; path = "Source/URLConvertible+URLRequestConvertible.swift"; sourceTree = ""; }; - A23DBBFF1C0954E140760C48E8AF98FC /* SkeletonView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SkeletonView.modulemap; sourceTree = ""; }; - A281D5ED025B4D2B99EAD6C93C93D340 /* RecursiveProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecursiveProtocol.swift; path = Sources/Helpers/RecursiveProtocol.swift; sourceTree = ""; }; - A4C7FA66E820B8AC16FC1B4EE6BBE238 /* SubviewsSkeletonables.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubviewsSkeletonables.swift; path = Sources/SubviewsSkeletonables.swift; sourceTree = ""; }; - A65DB20677974814968BA7D9CECE7D7F /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = ""; }; - A721B3267C3FA75474B6986859488100 /* ProcessInfo+XCTest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ProcessInfo+XCTest.swift"; path = "Sources/Extensions/ProcessInfo+XCTest.swift"; sourceTree = ""; }; - A761AEBB4566F55E8BB32CBA8A406DEF /* Cancellable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cancellable.swift; path = Sources/Moya/Cancellable.swift; sourceTree = ""; }; - A8F3AE8AD0C8CA6C0EB6AEA6349E31FB /* RetryPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryPolicy.swift; path = Source/RetryPolicy.swift; sourceTree = ""; }; - ABDFF39F82D74DD8F53494C5765F7658 /* RequestTypeWrapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestTypeWrapper.swift; path = Sources/Moya/RequestTypeWrapper.swift; sourceTree = ""; }; - AC0991AA757970F4A70DA042614FD5A0 /* Alamofire-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Alamofire-Info.plist"; sourceTree = ""; }; - AC1FE1B338821BC10B666A3A9F106BB2 /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = ""; }; - AD454D2124E295C2307C772A2ACD4FEB /* URLSessionConfiguration+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLSessionConfiguration+Alamofire.swift"; path = "Source/URLSessionConfiguration+Alamofire.swift"; sourceTree = ""; }; - B004007A80D13B672318B0668134C673 /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/ParameterEncoding.swift; sourceTree = ""; }; - B0A4D7E7C274BFD346B8B037780789DE /* UIView+Frame.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Frame.swift"; path = "Sources/Extensions/UIView+Frame.swift"; sourceTree = ""; }; - B470D8CD426F3703BFCF93966769DF13 /* MultiTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultiTarget.swift; path = Sources/Moya/MultiTarget.swift; sourceTree = ""; }; - B598972018B1724A57F0BD6F1A740247 /* RequestInterceptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestInterceptor.swift; path = Source/RequestInterceptor.swift; sourceTree = ""; }; - B7D399099D86D5EDE99B034325B33F15 /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Source/SessionDelegate.swift; sourceTree = ""; }; - BA74ABEFAD76942DA4F63B33CDD11C90 /* SkeletonView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SkeletonView-dummy.m"; sourceTree = ""; }; - BC2D0C25488D0C13636232987812103D /* SkeletonView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SkeletonView.release.xcconfig; sourceTree = ""; }; - BC39DE8004DF137061BA591F79DA2C63 /* Result+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Result+Alamofire.swift"; path = "Source/Result+Alamofire.swift"; sourceTree = ""; }; - BC5E0CEB052AEB3554879A6BD6B9689C /* CachedResponseHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CachedResponseHandler.swift; path = Source/CachedResponseHandler.swift; sourceTree = ""; }; - BD153DC5F88EAC220DAEEBC479CDD42A /* Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Extensions.swift; path = Sources/Extensions.swift; sourceTree = ""; }; - BE3D6404301A2E0F014862805B3BA985 /* SkeletonView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SkeletonView-Info.plist"; sourceTree = ""; }; - C1615E1FA68C09F9971FB26DF9B7D2BC /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; - C52B71D99DDFC958ABC6CB1C30B0BA45 /* SkeletonReusableCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonReusableCell.swift; path = Sources/Collections/Generics/SkeletonReusableCell.swift; sourceTree = ""; }; - C950BDC64D851683652E7176D1C7BEB8 /* HTTPHeaders.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPHeaders.swift; path = Source/HTTPHeaders.swift; sourceTree = ""; }; - CB5C8D53A3034138CD34DA8F8F54DC3B /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Notifications.swift; sourceTree = ""; }; - CBC7515DB3394FB6AB91091DB6E1E66A /* ParameterEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoder.swift; path = Source/ParameterEncoder.swift; sourceTree = ""; }; - CD570DBB55ABEBEB25B93E4535C1AA5D /* NetworkReachabilityManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkReachabilityManager.swift; path = Source/NetworkReachabilityManager.swift; sourceTree = ""; }; + 9DED66719D8C0A494BC20D2EB8203B32 /* KakaoSDKCommon.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = KakaoSDKCommon.release.xcconfig; sourceTree = ""; }; + 9E65A61B49A188164C361F9680DCCAC9 /* SkeletonTransitionStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonTransitionStyle.swift; path = Sources/Transitions/SkeletonTransitionStyle.swift; sourceTree = ""; }; + 9F1B06B12E49993B5D4DA7ACA0C29B89 /* SwipeDirection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwipeDirection.swift; path = Sources/SwipeDirection.swift; sourceTree = ""; }; + 9F453801F27585052F413F613C847DB2 /* KakaoSDKAuth.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = KakaoSDKAuth.framework; path = KakaoSDKAuth.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9F4967E3BB5F87C6A74A5D0D71681DC6 /* AuthController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthController.swift; path = sources/KakaoSDKAuth/auth/AuthController.swift; sourceTree = ""; }; + 9FCB24F8457456770E438D215F0E9241 /* UITableView+CollectionSkeleton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITableView+CollectionSkeleton.swift"; path = "Sources/Collections/TableViews/UITableView+CollectionSkeleton.swift"; sourceTree = ""; }; + A053438CC6C2AFF4FF3419D45D3A0B1E /* KakaoSDKCommon-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "KakaoSDKCommon-Info.plist"; sourceTree = ""; }; + A09673180A599145E93E8FC3F88C2F49 /* KakaoSDKUser.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = KakaoSDKUser.debug.xcconfig; sourceTree = ""; }; + A1F5290A08E70F2C16C95CA58172D447 /* KakaoSDKUser-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "KakaoSDKUser-dummy.m"; sourceTree = ""; }; + A2EF5C8B104B066D9092671EDE041382 /* Properties.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Properties.swift; path = sources/KakaoSDKCommon/common/common/Properties.swift; sourceTree = ""; }; + A3BB253AE2681A4E2549052380BD3815 /* KakaoSDKCommon.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = KakaoSDKCommon.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A3D70335DD50EC5E5918E84F49F6F92A /* UIView+Autolayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Autolayout.swift"; path = "Sources/Extensions/UIView+Autolayout.swift"; sourceTree = ""; }; + A510141DDD095B01C4771BBE1E5DAAA7 /* MultiTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultiTarget.swift; path = Sources/Moya/MultiTarget.swift; sourceTree = ""; }; + A510848B670DF93AC141BC838D11B96A /* UILabel+Multiline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILabel+Multiline.swift"; path = "Sources/Multilines/UILabel+Multiline.swift"; sourceTree = ""; }; + A690CF4F27F6293D07619EA2DF368F9E /* URL+Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URL+Utils.swift"; path = "sources/KakaoSDKCommon/common/extension/URL+Utils.swift"; sourceTree = ""; }; + A8F0A7650F653E2725812127BF7E37DD /* ServerTrustEvaluation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustEvaluation.swift; path = Source/ServerTrustEvaluation.swift; sourceTree = ""; }; + A9415D26B0A851BEE58B49608292637B /* KakaoSDKUser.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = KakaoSDKUser.release.xcconfig; sourceTree = ""; }; + AAB52E2DB483465483CDC5399449BE33 /* SkeletonDebug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonDebug.swift; path = Sources/Debug/SkeletonDebug.swift; sourceTree = ""; }; + AD58BE76272A6463194A7B4633A534BE /* SkeletonView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SkeletonView-umbrella.h"; sourceTree = ""; }; + ADBEAD14600CE5EC08682DD591133058 /* Moya-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Moya-prefix.pch"; sourceTree = ""; }; + AF113E31CFCCB0809CBB5D7A393157D4 /* Int+Whitespaces.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Int+Whitespaces.swift"; path = "Sources/Extensions/Int+Whitespaces.swift"; sourceTree = ""; }; + B012CC24D0313F7B8A8A57BFF800B78B /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Alamofire.modulemap; sourceTree = ""; }; + B0D015672355F813813F7252BD9D84F6 /* SdkUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkUtils.swift; path = sources/KakaoSDKCommon/common/common/SdkUtils.swift; sourceTree = ""; }; + B1CB79BBEC919439433D861D031D36FB /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Sources/Moya/Response.swift; sourceTree = ""; }; + B4283E84D4F2F044899194BA1E634742 /* SdkError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkError.swift; path = sources/KakaoSDKCommon/common/common/SdkError.swift; sourceTree = ""; }; + B50009F6D40E91D1F40E3567CA73997D /* Alamofire-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Alamofire-Info.plist"; sourceTree = ""; }; + BABE6B48D3EC13556FA2C1E3B0E99F6C /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/MultipartFormData.swift; sourceTree = ""; }; + BB1B93909B8C1BF5315AE4B4077C8DC5 /* KakaoSDKAuth.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = KakaoSDKAuth.debug.xcconfig; sourceTree = ""; }; + BB400910A7C5695F6C290E7F0FBA0436 /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; }; + BB70937F2D3866336ADDE4987E9B0C54 /* KakaoSDKAuth-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "KakaoSDKAuth-dummy.m"; sourceTree = ""; }; + BF7F57BAF1AAA4398E5EC8C57BD1C577 /* User.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = User.swift; path = sources/KakaoSDKUser/model/User.swift; sourceTree = ""; }; + BFC5A1DD137D66B2D342F997EB4296CE /* URL+Moya.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URL+Moya.swift"; path = "Sources/Moya/URL+Moya.swift"; sourceTree = ""; }; + C1798FF438C9157328CDC64B059D7596 /* SkeletonView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SkeletonView.release.xcconfig; sourceTree = ""; }; + C1F197B234EBCFBC0A8A37D464FB8332 /* AccessTokenPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AccessTokenPlugin.swift; path = Sources/Moya/Plugins/AccessTokenPlugin.swift; sourceTree = ""; }; + C304B28E72C69EB63B12B827287933EC /* CALayer+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CALayer+Extensions.swift"; path = "Sources/Extensions/CALayer+Extensions.swift"; sourceTree = ""; }; + C56237DEF175249A5CFB1DB137A67E18 /* KakaoSDKAuth-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "KakaoSDKAuth-umbrella.h"; sourceTree = ""; }; + C57A1408912795E1C490C92CE8C28E3F /* SkeletonLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonLayer.swift; path = Sources/SkeletonLayer.swift; sourceTree = ""; }; + C5A1B67450881C0A23E04BB20B09C27F /* AuthErrorInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthErrorInfo.swift; path = sources/KakaoSDKCommon/common/model/AuthErrorInfo.swift; sourceTree = ""; }; + C5B340610A67CA98C1D052BC0E4C2208 /* OperationQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "OperationQueue+Alamofire.swift"; path = "Source/OperationQueue+Alamofire.swift"; sourceTree = ""; }; + C5C77FA23A09B294A6ACFB6DDBDC4555 /* CardDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CardDelegate.swift; path = Sources/CardDelegate.swift; sourceTree = ""; }; + C77D68D4356868251FDAC8AB833E9AE5 /* GenericCollectionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GenericCollectionView.swift; path = Sources/Collections/Generics/GenericCollectionView.swift; sourceTree = ""; }; + C7F1F805B3EFAE381FA889BA557DD675 /* RequestTaskMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestTaskMap.swift; path = Source/RequestTaskMap.swift; sourceTree = ""; }; + C89B0460CCD2A2AA4A705D0CD4DC2340 /* UIView+Transitions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Transitions.swift"; path = "Sources/Transitions/UIView+Transitions.swift"; sourceTree = ""; }; + C9BCE4875A076F92D70B2D15E6957CE7 /* SkeletonCollectionViewProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkeletonCollectionViewProtocols.swift; path = Sources/Collections/CollectionViews/SkeletonCollectionViewProtocols.swift; sourceTree = ""; }; + CB7BEB422F272B1B164A33D14ECED236 /* Endpoint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Endpoint.swift; path = Sources/Moya/Endpoint.swift; sourceTree = ""; }; CDC8C1E54D1F3A8B5CAC89FFFF6A3F80 /* SkeletonView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SkeletonView.framework; path = SkeletonView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CE0D512B0234DC5807B13EABA2DADA1F /* UITableView+VisibleSections.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITableView+VisibleSections.swift"; path = "Sources/Extensions/UITableView+VisibleSections.swift"; sourceTree = ""; }; - CF4D224B84E231301C79BA116C4A126A /* Alamofire.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.release.xcconfig; sourceTree = ""; }; - CF908A01151C5B81C51CAF360AD253D6 /* RedirectHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RedirectHandler.swift; path = Source/RedirectHandler.swift; sourceTree = ""; }; + CF426FFEF434E5C7C1098438C0C1A0CE /* AlamofireExtended.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlamofireExtended.swift; path = Source/AlamofireExtended.swift; sourceTree = ""; }; + CF84EB16B8353C4196E811E8F82FB1CF /* TokenManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TokenManager.swift; path = sources/KakaoSDKAuth/auth/TokenManager.swift; sourceTree = ""; }; CFACA269D99E1CD4511195DDB6CC5BE3 /* Pods-NADA-iOS-forRelease-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-NADA-iOS-forRelease-acknowledgements.markdown"; sourceTree = ""; }; - D0FF301302A2A77E95697F2B5692FA5E /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D3118AB7BBE34F4DEE0DE0C542C9B7A4 /* UIView+CollectionSkeleton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+CollectionSkeleton.swift"; path = "Sources/Collections/UIView+CollectionSkeleton.swift"; sourceTree = ""; }; - D4CB5E5506638C2C5C8AACCB8DC289D0 /* RequestTaskMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestTaskMap.swift; path = Source/RequestTaskMap.swift; sourceTree = ""; }; - D58F31B1650C7E8BC8CF7698273813FE /* Protected.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Protected.swift; path = Source/Protected.swift; sourceTree = ""; }; - D59434D6E94D181C9754853035731BA4 /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Request.swift; sourceTree = ""; }; - D6BD20A7EE7D940F61D7A8F83DD45123 /* ServerTrustEvaluation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustEvaluation.swift; path = Source/ServerTrustEvaluation.swift; sourceTree = ""; }; - D7E35B1801FC966DF0ACA82450D00C1F /* MoyaProvider+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "MoyaProvider+Internal.swift"; path = "Sources/Moya/MoyaProvider+Internal.swift"; sourceTree = ""; }; - D8B679BE77413AB71804A675234A3C43 /* AlamofireExtended.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlamofireExtended.swift; path = Source/AlamofireExtended.swift; sourceTree = ""; }; - D9CA0AB7FED5A8A3A175CA964CC0D893 /* VerticalCardSwiper.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = VerticalCardSwiper.modulemap; sourceTree = ""; }; - DB3039D558A5A92FE68789293C55D9BD /* MoyaProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MoyaProvider.swift; path = Sources/Moya/MoyaProvider.swift; sourceTree = ""; }; - DC1602A6964AC5E341BBDABFBCBFB21D /* PrepareForSkeletonProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PrepareForSkeletonProtocol.swift; path = Sources/Helpers/PrepareForSkeletonProtocol.swift; sourceTree = ""; }; + D04089EF7E8621139826C2E79717BA10 /* RequestTypeWrapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestTypeWrapper.swift; path = Sources/Moya/RequestTypeWrapper.swift; sourceTree = ""; }; + D2EF7DD2A2C85B1D3A6F1E7D458FD11C /* Session.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Session.swift; path = Source/Session.swift; sourceTree = ""; }; + D30002F812895E2989CE931B9A082F5A /* KakaoSDKCommon-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "KakaoSDKCommon-prefix.pch"; sourceTree = ""; }; + D4E1C3DDAC91815299EA3E20143D3C7C /* AuthApi.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthApi.swift; path = sources/KakaoSDKAuth/auth/AuthApi.swift; sourceTree = ""; }; + D7B4FF18DBB8C9939B65076D1744735B /* RequestInterceptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestInterceptor.swift; path = Source/RequestInterceptor.swift; sourceTree = ""; }; + DA3F8683A1C70F0618002A3BCEA5140B /* MoyaError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MoyaError.swift; path = Sources/Moya/MoyaError.swift; sourceTree = ""; }; DC3A6DDA3973D13CB8E5D02372E8B528 /* Pods-NADA-iOS-forRelease.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-NADA-iOS-forRelease.modulemap"; sourceTree = ""; }; - E0800918AFE62176475D74E0433D6642 /* Endpoint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Endpoint.swift; path = Sources/Moya/Endpoint.swift; sourceTree = ""; }; - E2AA3D13192DD3F67FA307A988F64C4D /* URL+Moya.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URL+Moya.swift"; path = "Sources/Moya/URL+Moya.swift"; sourceTree = ""; }; + DCB85D975F1EC65E008594C07C85FD3E /* SwiftLint.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftLint.debug.xcconfig; sourceTree = ""; }; + DE9384FDDCE90496D0719AE77C73ED10 /* OAuthToken.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuthToken.swift; path = sources/KakaoSDKAuth/model/OAuthToken.swift; sourceTree = ""; }; + DF8EB70798D63EB9E4C7CAAD63DF2F60 /* NetworkReachabilityManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkReachabilityManager.swift; path = Source/NetworkReachabilityManager.swift; sourceTree = ""; }; + E033A932CA11955308A5735C12602725 /* ParameterEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoder.swift; path = Source/ParameterEncoder.swift; sourceTree = ""; }; + E152F250D5EBF9A65E480096CFA80624 /* VerticalCardSwiperDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VerticalCardSwiperDelegate.swift; path = Sources/VerticalCardSwiperDelegate.swift; sourceTree = ""; }; + E1DE676BBE8A33752D7215A123648E5B /* AuthRequestAdapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthRequestAdapter.swift; path = sources/KakaoSDKAuth/auth/AuthRequestAdapter.swift; sourceTree = ""; }; + E307D3483507CBEC6245E0FBD92FE697 /* EncodingContainer+AnyCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EncodingContainer+AnyCollection.swift"; path = "sources/KakaoSDKCommon/common/extension/EncodingContainer+AnyCollection.swift"; sourceTree = ""; }; + E3A6426E0DE9AB49B64C93E257044F8B /* AuthRequestRetrier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthRequestRetrier.swift; path = sources/KakaoSDKAuth/auth/AuthRequestRetrier.swift; sourceTree = ""; }; + E3FBE80AFF325E29AC73F635D62D8CBE /* Moya-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Moya-Info.plist"; sourceTree = ""; }; + E40057C871CE5D0767150996286842B7 /* ApiRequestAdapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ApiRequestAdapter.swift; path = sources/KakaoSDKCommon/network/ApiRequestAdapter.swift; sourceTree = ""; }; E546B58EA4069366B11D69313FB99ED0 /* VerticalCardSwiper.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = VerticalCardSwiper.framework; path = VerticalCardSwiper.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E6BBFC84FD9C3D22604E92B82B8BCB55 /* KakaoSDKAuth-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "KakaoSDKAuth-prefix.pch"; sourceTree = ""; }; + E7EF208D1A4DEE1AB23B49FAA8F1C26F /* KakaoSDKUser.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = KakaoSDKUser.modulemap; sourceTree = ""; }; E90C6981AB7A1F39F209C09BB075374B /* Pods-NADA-iOS-forRelease-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-NADA-iOS-forRelease-umbrella.h"; sourceTree = ""; }; - ECC54E1E62F77AE4B9C900BBBB4B0981 /* URLRequest+Encoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLRequest+Encoding.swift"; path = "Sources/Moya/URLRequest+Encoding.swift"; sourceTree = ""; }; - ECE25D6A10DD0E05A03117311B990C75 /* VerticalCardSwiperFlowLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VerticalCardSwiperFlowLayout.swift; path = Sources/VerticalCardSwiperFlowLayout.swift; sourceTree = ""; }; - ED93E10F6E44D3507E9DFED050C01AAE /* Moya-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Moya-prefix.pch"; sourceTree = ""; }; - EDC6AE3363987449FBF8533036A71A7A /* TargetType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TargetType.swift; path = Sources/Moya/TargetType.swift; sourceTree = ""; }; - F22F7AF564983BD9A66CBCAA9BED795F /* GenericCollectionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GenericCollectionView.swift; path = Sources/Collections/Generics/GenericCollectionView.swift; sourceTree = ""; }; - F32099AC992096D6DDD391F016D75F4C /* SkeletonView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SkeletonView.debug.xcconfig; sourceTree = ""; }; - F695B67356D609A300C4C6B32D551BD0 /* SwiftLint.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftLint.release.xcconfig; sourceTree = ""; }; - FB5AD31E50BBC14892267AF5769B974D /* VerticalCardSwiper.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = VerticalCardSwiper.debug.xcconfig; sourceTree = ""; }; - FF2C7E2356E04595B7271CF0F425D810 /* CredentialsPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CredentialsPlugin.swift; path = Sources/Moya/Plugins/CredentialsPlugin.swift; sourceTree = ""; }; - FF8DEF87DC574572CB84F467652D9D9B /* NetworkLoggerPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkLoggerPlugin.swift; path = Sources/Moya/Plugins/NetworkLoggerPlugin.swift; sourceTree = ""; }; + E9505221A0D201274FF92A7DD8DDF5B6 /* DispatchQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Alamofire.swift"; path = "Source/DispatchQueue+Alamofire.swift"; sourceTree = ""; }; + E9F85B1B7B138062BF9C7225589AE40D /* MigrateManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MigrateManager.swift; path = sources/KakaoSDKAuth/auth/MigrateManager.swift; sourceTree = ""; }; + EAFA5EFBB80F7AB0CB2739FD232C51D1 /* UIView+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Extension.swift"; path = "Sources/Extensions/UIView+Extension.swift"; sourceTree = ""; }; + EB1916D272D326A0C025BD450FD70E95 /* NetworkLoggerPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkLoggerPlugin.swift; path = Sources/Moya/Plugins/NetworkLoggerPlugin.swift; sourceTree = ""; }; + EB1DA25BB9F566525971C700992B6AE5 /* EventMonitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EventMonitor.swift; path = Source/EventMonitor.swift; sourceTree = ""; }; + EC3AF4268ED927093FDC39D2D1252790 /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = ""; }; + ED2D63940F786C94949C0B43B205C8AE /* KakaoSDKCommon.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = KakaoSDKCommon.debug.xcconfig; sourceTree = ""; }; + EEB2616C26E3D0D3EDB84F723310C7AE /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + F0A72FB54C5BECA0F8856931ABC35FC4 /* VerticalCardSwiper-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "VerticalCardSwiper-dummy.m"; sourceTree = ""; }; + F2265DDA1B52FBACA9D8EAB807773462 /* URLRequest+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLRequest+Alamofire.swift"; path = "Source/URLRequest+Alamofire.swift"; sourceTree = ""; }; + F36577683A895118B0B11EB99E034B57 /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = ""; }; + F48DA41AA226856C2D1A2FA98F09D680 /* Dictionary+Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Dictionary+Utils.swift"; path = "sources/KakaoSDKCommon/common/extension/Dictionary+Utils.swift"; sourceTree = ""; }; + F50A098DC1B6880A5579A0DBB78B1EC4 /* Data+Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Utils.swift"; path = "sources/KakaoSDKCommon/common/extension/Data+Utils.swift"; sourceTree = ""; }; + F56EE8B669FFB3EBBC518DE763166647 /* UIColor+Skeleton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIColor+Skeleton.swift"; path = "Sources/Extensions/UIColor+Skeleton.swift"; sourceTree = ""; }; + F8E30AC1882FB20FF533ADECDA9FFECB /* AnyEncodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyEncodable.swift; path = Sources/Moya/AnyEncodable.swift; sourceTree = ""; }; + FD2E21EE8BF97162E2CED22B421FA295 /* Plugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Plugin.swift; path = Sources/Moya/Plugin.swift; sourceTree = ""; }; + FD3A77A8F513F51A4DE31E3ECCC9E93A /* Recoverable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Recoverable.swift; path = Sources/Recoverable/Recoverable.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 1EE98FFAB399AA303F2FED55E53E1AB1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D3FEAA699D84FEFCB17D8A92A0B50101 /* Foundation.framework in Frameworks */, + 5A2723FD3D8BDAE24BB703224AF402D2 /* KakaoSDKCommon.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 418ACE2E3AB9F6D35E8E21C11232AAD9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -364,11 +525,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 78D8C20C8B07BFA700B1572FA88201A1 /* Frameworks */ = { + 6DAAF4F53104001C7B806AC7E7891655 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 244AC1ABF46A4256FE53B07F41A1D78B /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8EB012ACE326C19B140A72C5209D9C51 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 964D26A306654AB4945A21FA08627C4F /* Foundation.framework in Frameworks */, + 48C3096F6FED37EE98EFF4B304401495 /* Foundation.framework in Frameworks */, + 757491FCD642AC80E179D83DA5780E14 /* KakaoSDKAuth.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -381,6 +551,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 9ABC1C4849BFE4CFC0B9E1C0E915B93B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9BA9C86EE2D6B421F3EDAF27BBC64BE2 /* Alamofire.framework in Frameworks */, + 8066E43C8B9CA8FAF618FCF8DD78308C /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 9EEAEF7F3824B0C6128BC5530ED58DE0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -400,65 +579,60 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1FB680EA95EC9E7F499D6676F06603F3 /* Support Files */ = { + 0058533D7D2AE8976FA2291C2E304674 /* KakaoSDKCommon */ = { isa = PBXGroup; children = ( - 457B434CF73D04C4FDCCBC62214B5D9A /* SwiftLint.debug.xcconfig */, - F695B67356D609A300C4C6B32D551BD0 /* SwiftLint.release.xcconfig */, + 4963508203C06C7B1904E1D72C2828FA /* Common */, + C9C1EDA6F6433A3C831293EBF1511ECF /* Network */, + 66ACA3BAAB0421C84BFE0A4FD0FA1EA5 /* Support Files */, + ); + name = KakaoSDKCommon; + path = KakaoSDKCommon; + sourceTree = ""; + }; + 076FC66D0D7FC3F95E589C2884A3B2A0 /* Support Files */ = { + isa = PBXGroup; + children = ( + 1052D5AE0B7E0C825CAD042265B52BD8 /* KakaoSDKAuth.modulemap */, + BB70937F2D3866336ADDE4987E9B0C54 /* KakaoSDKAuth-dummy.m */, + 63A0238267891C6BDCD658D22CA9C6FD /* KakaoSDKAuth-Info.plist */, + E6BBFC84FD9C3D22604E92B82B8BCB55 /* KakaoSDKAuth-prefix.pch */, + C56237DEF175249A5CFB1DB137A67E18 /* KakaoSDKAuth-umbrella.h */, + BB1B93909B8C1BF5315AE4B4077C8DC5 /* KakaoSDKAuth.debug.xcconfig */, + 49224E14B818703FCC953C3B23881A3A /* KakaoSDKAuth.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/SwiftLint"; + path = "../Target Support Files/KakaoSDKAuth"; sourceTree = ""; }; - 261E783E57E11B029870DD0DF709DBAA /* SkeletonView */ = { + 0CCB6A4723D20500F2DF788DE3A14224 /* Core */ = { isa = PBXGroup; children = ( - 1C9F7BA86DF05562C2BDCC21EDE77B56 /* AssociationPolicy.swift */, - 646927E46534990E23246477C2C43412 /* CALayer+Extensions.swift */, - 6BA2BEDA278291CA647AAFAC49EC0BA4 /* CollectionSkeletonProtocol.swift */, - 06814129BF8F8CFF14AAB6F2F884D3B6 /* ContainsMultilineText.swift */, - F22F7AF564983BD9A66CBCAA9BED795F /* GenericCollectionView.swift */, - 353AE8475692C946A3DC23536ECDA2D1 /* Int+Whitespaces.swift */, - DC1602A6964AC5E341BBDABFBCBFB21D /* PrepareForSkeletonProtocol.swift */, - A721B3267C3FA75474B6986859488100 /* ProcessInfo+XCTest.swift */, - 76116D2CCC519790D15679ABEF5ED8D4 /* Recoverable.swift */, - 3FBA57DDEAA036ED7080B98CE818A061 /* RecoverableViewState.swift */, - A281D5ED025B4D2B99EAD6C93C93D340 /* RecursiveProtocol.swift */, - 6DD4218A002BE7F2BA7F85FD45AD348E /* SkeletonAnimationBuilder.swift */, - 29662D72EA0149C3E2CC3A3AC6F13EA2 /* SkeletonAppearance.swift */, - 1E05D910CDA22F90C03145469D8D6B9C /* SkeletonCollectionDataSource.swift */, - 203FF326D56ACC1E09C056C8E06C43E3 /* SkeletonCollectionDelegate.swift */, - 2588297D9CE75AF7905584041DEE0BA4 /* SkeletonCollectionViewProtocols.swift */, - 01160D8B19E8258D184155FB87F19812 /* SkeletonConfig.swift */, - 39DB5AB8BB243B250C7033123922745C /* SkeletonDebug.swift */, - 987361860E5814468414741114B24C0E /* SkeletonFlow.swift */, - 8BC7E9C891D48C1FEB8695D5630DA91D /* SkeletonGradient.swift */, - 4AB29DC337E1F008B023BA790F65A05B /* SkeletonLayer.swift */, - 80E2713D117E9E481A6466A33791BEE3 /* SkeletonLayerBuilder.swift */, - 8DC2911B177DA6F17732F4B995E200CD /* SkeletonMultilineLayerBuilder.swift */, - C52B71D99DDFC958ABC6CB1C30B0BA45 /* SkeletonReusableCell.swift */, - 1101B41E4343A53F8E4D03A676BE19CF /* SkeletonTableViewProtocols.swift */, - 8AC058DDE1DEBFA5AB3CBE4741AEEBAC /* SkeletonTransitionStyle.swift */, - 8605D8EE7CB7AB0299E3EC10FA9FF1E3 /* SkeletonView.swift */, - A4C7FA66E820B8AC16FC1B4EE6BBE238 /* SubviewsSkeletonables.swift */, - 7F7CD09D7F4E1625EBD3AC1C3FC55784 /* Swizzling.swift */, - 559A56EC48BF2BD2F7CDF8BB13F126D6 /* UICollectionView+CollectionSkeleton.swift */, - 5A71160C3BC79211D48EFB23A4960458 /* UIColor+Skeleton.swift */, - 78971C1CA86FE3E0398C55CE0871F49E /* UILabel+Multiline.swift */, - 28C5F6C487E4E51AF860635D8790A464 /* UITableView+CollectionSkeleton.swift */, - CE0D512B0234DC5807B13EABA2DADA1F /* UITableView+VisibleSections.swift */, - 41E783C8C11C68F10B21C86D2CEBE69C /* UITextView+Multiline.swift */, - 53AE0A2A396044FEFDDA56A0CC10F868 /* UIView+Autolayout.swift */, - D3118AB7BBE34F4DEE0DE0C542C9B7A4 /* UIView+CollectionSkeleton.swift */, - 4FC6366E68A6D481255A6CBEC1E95B9B /* UIView+Extension.swift */, - B0A4D7E7C274BFD346B8B037780789DE /* UIView+Frame.swift */, - 14784F7734EDF9EFDB892DD3639FE1D1 /* UIView+IBInspectable.swift */, - 7175342A497598EA3B2BDE31C8B51DDD /* UIView+Transitions.swift */, - 3B3AF2EE2F1CD1665C80959CD2780963 /* UIView+UIApplicationDelegate.swift */, - A5BACF0E58E6D3B6F2989181F3AEC4EE /* Support Files */, + C1F197B234EBCFBC0A8A37D464FB8332 /* AccessTokenPlugin.swift */, + F8E30AC1882FB20FF533ADECDA9FFECB /* AnyEncodable.swift */, + 8A5D688BB5BF6CC0B463832469154C1C /* Cancellable.swift */, + 6AA5FCF98B858B3399A61E72D31EBBAC /* CredentialsPlugin.swift */, + CB7BEB422F272B1B164A33D14ECED236 /* Endpoint.swift */, + 4194384DE31B90473A3D6679395D37E2 /* Image.swift */, + 274B11176974591E13E3BB73D605EDF8 /* Moya+Alamofire.swift */, + DA3F8683A1C70F0618002A3BCEA5140B /* MoyaError.swift */, + 6A661C46E9812F01D6755AA880534E8C /* MoyaProvider.swift */, + 009F828EA8701B678BBA81F221B61390 /* MoyaProvider+Defaults.swift */, + 49FDCD2D3873E3393C11DDA5955BB817 /* MoyaProvider+Internal.swift */, + 6D70A72AFB0E6D4A567B16158BC76FAC /* MultipartFormData.swift */, + A510141DDD095B01C4771BBE1E5DAAA7 /* MultiTarget.swift */, + 9589AA64D8D429EA5325C6A45D84D050 /* NetworkActivityPlugin.swift */, + EB1916D272D326A0C025BD450FD70E95 /* NetworkLoggerPlugin.swift */, + FD2E21EE8BF97162E2CED22B421FA295 /* Plugin.swift */, + D04089EF7E8621139826C2E79717BA10 /* RequestTypeWrapper.swift */, + B1CB79BBEC919439433D861D031D36FB /* Response.swift */, + 5C78E9D57B4E8050F0C3306561504C01 /* TargetType.swift */, + 875755ACED01570F5207B833675D1480 /* Task.swift */, + BFC5A1DD137D66B2D342F997EB4296CE /* URL+Moya.swift */, + 12285F0E1823C9CB6E99C493C004DF74 /* URLRequest+Encoding.swift */, + 1D73D651F42952961A36DCD0D8452C79 /* ValidationType.swift */, ); - name = SkeletonView; - path = SkeletonView; + name = Core; sourceTree = ""; }; 27857492FB2FFEB73524174A5029B928 /* Pods-NADA-iOS-forRelease */ = { @@ -478,237 +652,374 @@ path = "Target Support Files/Pods-NADA-iOS-forRelease"; sourceTree = ""; }; - 45152B3E76A1DEFFEB6FC0EBB11453E3 /* Core */ = { + 28F03780CE5769783851EE39E40E0449 /* Support Files */ = { isa = PBXGroup; children = ( - 5F2364BDF45DB318E369A32A82300570 /* AccessTokenPlugin.swift */, - 52B31FA98C668A21E4B3B0129EEAC628 /* AnyEncodable.swift */, - A761AEBB4566F55E8BB32CBA8A406DEF /* Cancellable.swift */, - FF2C7E2356E04595B7271CF0F425D810 /* CredentialsPlugin.swift */, - E0800918AFE62176475D74E0433D6642 /* Endpoint.swift */, - 329CAFC91DEA2845955F0BA783654588 /* Image.swift */, - 26350B149220D1C8A95125E6B614476A /* Moya+Alamofire.swift */, - 0FB3A05E2C522CCDF36961D982E5FFD4 /* MoyaError.swift */, - DB3039D558A5A92FE68789293C55D9BD /* MoyaProvider.swift */, - 2506058B796B7FD850977033F6EEFC8F /* MoyaProvider+Defaults.swift */, - D7E35B1801FC966DF0ACA82450D00C1F /* MoyaProvider+Internal.swift */, - 67457047C6FD0DD459F76D285F15BF74 /* MultipartFormData.swift */, - B470D8CD426F3703BFCF93966769DF13 /* MultiTarget.swift */, - 93DD6D889F319B45461ABAFC06CB73C7 /* NetworkActivityPlugin.swift */, - FF8DEF87DC574572CB84F467652D9D9B /* NetworkLoggerPlugin.swift */, - 0809FDCA44D4320F40BB8B7093C3D42E /* Plugin.swift */, - ABDFF39F82D74DD8F53494C5765F7658 /* RequestTypeWrapper.swift */, - 15F3C9505785E857C6970A417FB0AD6D /* Response.swift */, - EDC6AE3363987449FBF8533036A71A7A /* TargetType.swift */, - 18DFFEE0B5973145E834A965D19DCF4C /* Task.swift */, - E2AA3D13192DD3F67FA307A988F64C4D /* URL+Moya.swift */, - ECC54E1E62F77AE4B9C900BBBB4B0981 /* URLRequest+Encoding.swift */, - 552EC4CF2BA7638857957C08CF8A44FA /* ValidationType.swift */, + E7EF208D1A4DEE1AB23B49FAA8F1C26F /* KakaoSDKUser.modulemap */, + A1F5290A08E70F2C16C95CA58172D447 /* KakaoSDKUser-dummy.m */, + 3E4DFC85C701B502EEEAF61B66FB3460 /* KakaoSDKUser-Info.plist */, + 9B1A89E732D04D8214258713473E1B8C /* KakaoSDKUser-prefix.pch */, + 42DFE1342432C013C21DF3E96707AAE7 /* KakaoSDKUser-umbrella.h */, + A09673180A599145E93E8FC3F88C2F49 /* KakaoSDKUser.debug.xcconfig */, + A9415D26B0A851BEE58B49608292637B /* KakaoSDKUser.release.xcconfig */, ); - name = Core; + name = "Support Files"; + path = "../Target Support Files/KakaoSDKUser"; sourceTree = ""; }; - 45F449007554B6E286CA70D1D13B32D9 /* SwiftLint */ = { + 2A6FA3563FE0565F2695840203C2E6FD /* Support Files */ = { isa = PBXGroup; children = ( - 1FB680EA95EC9E7F499D6676F06603F3 /* Support Files */, + 84D580D15836A2CD5DACA7EEC8835DE8 /* SkeletonView.modulemap */, + 01E1DA6FA8E3B726E952CA731F37BA09 /* SkeletonView-dummy.m */, + 6555393019118F521088D924E4590A4A /* SkeletonView-Info.plist */, + 0C15C09BC5B5A6B7448E2D8E03DAEEE4 /* SkeletonView-prefix.pch */, + AD58BE76272A6463194A7B4633A534BE /* SkeletonView-umbrella.h */, + 94059D9EA304B4A09B10EA6EFBDF7F98 /* SkeletonView.debug.xcconfig */, + C1798FF438C9157328CDC64B059D7596 /* SkeletonView.release.xcconfig */, ); - name = SwiftLint; - path = SwiftLint; + name = "Support Files"; + path = "../Target Support Files/SkeletonView"; sourceTree = ""; }; - 4C92B01A1F22BCB5B7E09CFA1B46A3E8 /* Moya */ = { + 48A748B54D9EFEB2A17E4D8D8C248707 /* KakaoSDKAuth */ = { isa = PBXGroup; children = ( - 45152B3E76A1DEFFEB6FC0EBB11453E3 /* Core */, - F8EC4FE555853C196CE9A01D43F41D35 /* Support Files */, - ); - name = Moya; - path = Moya; + 81E5142C56282A939A8B0CDD32AEE009 /* Auth.swift */, + D4E1C3DDAC91815299EA3E20143D3C7C /* AuthApi.swift */, + 9F4967E3BB5F87C6A74A5D0D71681DC6 /* AuthController.swift */, + E1DE676BBE8A33752D7215A123648E5B /* AuthRequestAdapter.swift */, + E3A6426E0DE9AB49B64C93E257044F8B /* AuthRequestRetrier.swift */, + 48D3ED2E80A6128747E1D37E5223BA80 /* KakaoSDKAuth.h */, + E9F85B1B7B138062BF9C7225589AE40D /* MigrateManager.swift */, + DE9384FDDCE90496D0719AE77C73ED10 /* OAuthToken.swift */, + 793B82A4458CD5F30432DE62B0E40A5B /* TokenManagable.swift */, + CF84EB16B8353C4196E811E8F82FB1CF /* TokenManager.swift */, + 076FC66D0D7FC3F95E589C2884A3B2A0 /* Support Files */, + ); + name = KakaoSDKAuth; + path = KakaoSDKAuth; sourceTree = ""; }; - 5536D472E3434C3012F6DB5784FDA0E0 /* Products */ = { + 4963508203C06C7B1904E1D72C2828FA /* Common */ = { isa = PBXGroup; children = ( - 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire.framework */, - 3756A9BBE41ABEE8DCBF5BCA6972C4DA /* Moya.framework */, - 5183F64F0CB82B2049B97A16612CA752 /* Pods_NADA_iOS_forRelease.framework */, - CDC8C1E54D1F3A8B5CAC89FFFF6A3F80 /* SkeletonView.framework */, - E546B58EA4069366B11D69313FB99ED0 /* VerticalCardSwiper.framework */, + 40282D6146CC6E361BC731AEE2EA5695 /* Array+Utils.swift */, + C5A1B67450881C0A23E04BB20B09C27F /* AuthErrorInfo.swift */, + 1E858DB180C643326719036CB443A285 /* Common.swift */, + F50A098DC1B6880A5579A0DBB78B1EC4 /* Data+Utils.swift */, + 55E2D2BD2A5D72AC689461D5256799E0 /* DecodingContainer+AnyCollection.swift */, + F48DA41AA226856C2D1A2FA98F09D680 /* Dictionary+Utils.swift */, + E307D3483507CBEC6245E0FBD92FE697 /* EncodingContainer+AnyCollection.swift */, + 0B12F9A97350B8849703EB288D95584D /* ErrorInfo.swift */, + 8605820768AAB17DB5C129355B6C02CC /* KakaoSDKCommon.swift */, + A2EF5C8B104B066D9092671EDE041382 /* Properties.swift */, + 678245FBA2170ACF84BCF021F4C5ACA5 /* SdkCoder.swift */, + 6F33B5CDDA1FB89A69CADA455560E4B5 /* SdkCrypto.swift */, + B4283E84D4F2F044899194BA1E634742 /* SdkError.swift */, + 58F90832FAB6E2C3B4E4632D43ACBEED /* SdkLog.swift */, + B0D015672355F813813F7252BD9D84F6 /* SdkUtils.swift */, + A690CF4F27F6293D07619EA2DF368F9E /* URL+Utils.swift */, + 6EBABEBDC18695F169914DD8749C2E62 /* Urls.swift */, + ); + name = Common; + sourceTree = ""; + }; + 4DDDFB2FCFEB3B5BECB1495CCFCAC488 /* Support Files */ = { + isa = PBXGroup; + children = ( + B012CC24D0313F7B8A8A57BFF800B78B /* Alamofire.modulemap */, + EC3AF4268ED927093FDC39D2D1252790 /* Alamofire-dummy.m */, + B50009F6D40E91D1F40E3567CA73997D /* Alamofire-Info.plist */, + BB400910A7C5695F6C290E7F0FBA0436 /* Alamofire-prefix.pch */, + 3FD698826048124C098CC60F3BB91F19 /* Alamofire-umbrella.h */, + 0ACD8C4622FE784E54FF554F1A9C2958 /* Alamofire.debug.xcconfig */, + 7890039FDEF33FD03D750E0BE0FBC620 /* Alamofire.release.xcconfig */, ); - name = Products; + name = "Support Files"; + path = "../Target Support Files/Alamofire"; sourceTree = ""; }; - 8B7A79262BFE6D94671D449787F3AAA9 /* Frameworks */ = { + 509CDA1DFE251A05E0C5137723B668C4 /* Support Files */ = { isa = PBXGroup; children = ( - D0FF301302A2A77E95697F2B5692FA5E /* Alamofire.framework */, - C5DA6AFE22B4BD7F9A7902BFAC53F976 /* iOS */, + DCB85D975F1EC65E008594C07C85FD3E /* SwiftLint.debug.xcconfig */, + 9AAB931CEE3AA1C1AC3C723994134B30 /* SwiftLint.release.xcconfig */, ); - name = Frameworks; + name = "Support Files"; + path = "../Target Support Files/SwiftLint"; sourceTree = ""; }; - 8C3D08C59119EF5561FC3E0EFEBA351A /* VerticalCardSwiper */ = { + 5B4F1193E9638E46967A8FBC18CEB253 /* iOS */ = { isa = PBXGroup; children = ( - 7DDB57356F98EF16F5267B5E1F80AB3E /* CardCell.swift */, - 438B64445806556056A2853C68DAD8E4 /* CardDelegate.swift */, - BD153DC5F88EAC220DAEEBC479CDD42A /* Extensions.swift */, - 01AF17458DBC4BD9FC4307461FCE75B0 /* PanDirection.swift */, - 5114D29CA6F0C789E819011CE2E4D4B0 /* SwipeDirection.swift */, - 47D0259CE9677DCE75C790D43F66723C /* VerticalCardSwiper.swift */, - 4DA78B802277EB63663D16DC451A4FF4 /* VerticalCardSwiperDatasource.swift */, - 83DD4E8F5E12A49B106000D441E8D9D4 /* VerticalCardSwiperDelegate.swift */, - ECE25D6A10DD0E05A03117311B990C75 /* VerticalCardSwiperFlowLayout.swift */, - 53AA0C71A39EF70A003582F856C38A44 /* VerticalCardSwiperView.swift */, - C5967CE02296156B12BA51CDF89A8ECB /* Support Files */, + EEB2616C26E3D0D3EDB84F723310C7AE /* CFNetwork.framework */, + 3D29CBCE254728AFF0F22F7C348091DA /* Foundation.framework */, ); - name = VerticalCardSwiper; - path = VerticalCardSwiper; + name = iOS; sourceTree = ""; }; - A10BB86EEB667B1D2A9E885E177BE747 /* Support Files */ = { + 5D1DDC96B72ED1FBEAA459FA64DEC71C /* Support Files */ = { isa = PBXGroup; children = ( - 071A394B6C5492D3338349ECCCE905D0 /* Alamofire.modulemap */, - 37435577C632F9A9337E3E0DFDAE9F76 /* Alamofire-dummy.m */, - AC0991AA757970F4A70DA042614FD5A0 /* Alamofire-Info.plist */, - 0141CB962D63B6FBD73C7FFEFE66CE6F /* Alamofire-prefix.pch */, - AC1FE1B338821BC10B666A3A9F106BB2 /* Alamofire-umbrella.h */, - 8D5DA142DA7A5CB91998DB139D945250 /* Alamofire.debug.xcconfig */, - CF4D224B84E231301C79BA116C4A126A /* Alamofire.release.xcconfig */, + 0DEA9F5A47CCD837A70125ED7FA6F6B3 /* Moya.modulemap */, + 19B883F61DF1A577827AFDBCB38C5640 /* Moya-dummy.m */, + E3FBE80AFF325E29AC73F635D62D8CBE /* Moya-Info.plist */, + ADBEAD14600CE5EC08682DD591133058 /* Moya-prefix.pch */, + 5009CA4BE127B88B5025BAC5B59D5EBE /* Moya-umbrella.h */, + 5D1EE1DBF74D393F0E257A42C788BF0B /* Moya.debug.xcconfig */, + 3936B74A53465E283BDFA54F4DE19A98 /* Moya.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/Alamofire"; + path = "../Target Support Files/Moya"; sourceTree = ""; }; - A5BACF0E58E6D3B6F2989181F3AEC4EE /* Support Files */ = { + 66ACA3BAAB0421C84BFE0A4FD0FA1EA5 /* Support Files */ = { isa = PBXGroup; children = ( - A23DBBFF1C0954E140760C48E8AF98FC /* SkeletonView.modulemap */, - BA74ABEFAD76942DA4F63B33CDD11C90 /* SkeletonView-dummy.m */, - BE3D6404301A2E0F014862805B3BA985 /* SkeletonView-Info.plist */, - 7253C0C48A552A1F99C4D5EB8CEBAC9B /* SkeletonView-prefix.pch */, - 2EEF172C651BC49B1518E9A6BBCDA970 /* SkeletonView-umbrella.h */, - F32099AC992096D6DDD391F016D75F4C /* SkeletonView.debug.xcconfig */, - BC2D0C25488D0C13636232987812103D /* SkeletonView.release.xcconfig */, + 63BAB23C04C39A5D8E57627C0CBE33FD /* KakaoSDKCommon.modulemap */, + 8FD1BE1C85DCEBC651CE9E0C88F89780 /* KakaoSDKCommon-dummy.m */, + A053438CC6C2AFF4FF3419D45D3A0B1E /* KakaoSDKCommon-Info.plist */, + D30002F812895E2989CE931B9A082F5A /* KakaoSDKCommon-prefix.pch */, + 8E9CA0B4DA503382DA4EDC12AE4E09F0 /* KakaoSDKCommon-umbrella.h */, + ED2D63940F786C94949C0B43B205C8AE /* KakaoSDKCommon.debug.xcconfig */, + 9DED66719D8C0A494BC20D2EB8203B32 /* KakaoSDKCommon.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/SkeletonView"; + path = "../Target Support Files/KakaoSDKCommon"; sourceTree = ""; }; - C1753FB080EF787D199FC0D6F0E4FBED /* Targets Support Files */ = { + 6AF978A97A57B32C1520EA5E2836B067 /* Pods */ = { isa = PBXGroup; children = ( - 27857492FB2FFEB73524174A5029B928 /* Pods-NADA-iOS-forRelease */, + D256EB33BF6284DAECE74188DA40AE3A /* Alamofire */, + 48A748B54D9EFEB2A17E4D8D8C248707 /* KakaoSDKAuth */, + 0058533D7D2AE8976FA2291C2E304674 /* KakaoSDKCommon */, + E4310B195BB923C5E1558B1394D9CEA2 /* KakaoSDKUser */, + F0A7FAB2BE49B748C534B675A1E9B02D /* Moya */, + E153D1AC23034717D62FC7A218E20317 /* SkeletonView */, + E0767362F61531A5338CBA4A2FA7546E /* SwiftLint */, + F4BB1F0104927496891E664F91E142AC /* VerticalCardSwiper */, ); - name = "Targets Support Files"; + name = Pods; sourceTree = ""; }; - C5967CE02296156B12BA51CDF89A8ECB /* Support Files */ = { + 927A5AB8E2B0CBBF4834546187F43EE8 /* Support Files */ = { isa = PBXGroup; children = ( - D9CA0AB7FED5A8A3A175CA964CC0D893 /* VerticalCardSwiper.modulemap */, - 206CA4DEDF09AC3EFDF2A27BC99474BA /* VerticalCardSwiper-dummy.m */, - 3B3775370F3C08006D033CA24668DB49 /* VerticalCardSwiper-Info.plist */, - 4865B9D1DD52E42E3E55AC434DF8EBF8 /* VerticalCardSwiper-prefix.pch */, - 18C7DA9047C4236C2486FB57864EC3D6 /* VerticalCardSwiper-umbrella.h */, - FB5AD31E50BBC14892267AF5769B974D /* VerticalCardSwiper.debug.xcconfig */, - 3299AA543EFC153C50CC16F895694875 /* VerticalCardSwiper.release.xcconfig */, + 8DB08E7416D6E1D0EEB114CD1CC88AE8 /* VerticalCardSwiper.modulemap */, + F0A72FB54C5BECA0F8856931ABC35FC4 /* VerticalCardSwiper-dummy.m */, + 846902602AE9DAAD3C05CE15EAF78E4E /* VerticalCardSwiper-Info.plist */, + 268D95FCA52BE6F4E87365E1061A0DBE /* VerticalCardSwiper-prefix.pch */, + 30DEDC24A5B6D2166FCCCB7A4FFC6C4D /* VerticalCardSwiper-umbrella.h */, + 845BA8930569CF63502AC14DE58791E8 /* VerticalCardSwiper.debug.xcconfig */, + 9471D6C44F58EA525824D9EFA74C618D /* VerticalCardSwiper.release.xcconfig */, ); name = "Support Files"; path = "../Target Support Files/VerticalCardSwiper"; sourceTree = ""; }; - C5DA6AFE22B4BD7F9A7902BFAC53F976 /* iOS */ = { + A020267F0EBEBD25E53DC6797533195E /* Frameworks */ = { isa = PBXGroup; children = ( - C1615E1FA68C09F9971FB26DF9B7D2BC /* CFNetwork.framework */, - 1AC44BC108255F6766BF5383BF088F46 /* Foundation.framework */, + 3C577D1FC4FD6B9BE7A82D2BCC7021DA /* Alamofire.framework */, + 280432C1345EC091AA5C1975D6087A8A /* KakaoSDKAuth.framework */, + A3BB253AE2681A4E2549052380BD3815 /* KakaoSDKCommon.framework */, + 5B4F1193E9638E46967A8FBC18CEB253 /* iOS */, ); - name = iOS; + name = Frameworks; + sourceTree = ""; + }; + C1753FB080EF787D199FC0D6F0E4FBED /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + 27857492FB2FFEB73524174A5029B928 /* Pods-NADA-iOS-forRelease */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + C9C1EDA6F6433A3C831293EBF1511ECF /* Network */ = { + isa = PBXGroup; + children = ( + 43A8B4EE61197960B8DB5A29E7B4B0B2 /* Api.swift */, + E40057C871CE5D0767150996286842B7 /* ApiRequestAdapter.swift */, + ); + name = Network; sourceTree = ""; }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - 8B7A79262BFE6D94671D449787F3AAA9 /* Frameworks */, - DA4AEAA0BCA8C674381D080A102873CE /* Pods */, - 5536D472E3434C3012F6DB5784FDA0E0 /* Products */, + A020267F0EBEBD25E53DC6797533195E /* Frameworks */, + 6AF978A97A57B32C1520EA5E2836B067 /* Pods */, + F89C59F90ECF3B3F8601A151AABD1773 /* Products */, C1753FB080EF787D199FC0D6F0E4FBED /* Targets Support Files */, ); sourceTree = ""; }; - DA4AEAA0BCA8C674381D080A102873CE /* Pods */ = { + D256EB33BF6284DAECE74188DA40AE3A /* Alamofire */ = { isa = PBXGroup; children = ( - F1E75C83E518C8BF3F7E875F35F46C30 /* Alamofire */, - 4C92B01A1F22BCB5B7E09CFA1B46A3E8 /* Moya */, - 261E783E57E11B029870DD0DF709DBAA /* SkeletonView */, - 45F449007554B6E286CA70D1D13B32D9 /* SwiftLint */, - 8C3D08C59119EF5561FC3E0EFEBA351A /* VerticalCardSwiper */, + 03056395B56168964846B9A19B2DC096 /* AFError.swift */, + 2BC28BB4C90015CE35D6295188A6D2B5 /* Alamofire.swift */, + CF426FFEF434E5C7C1098438C0C1A0CE /* AlamofireExtended.swift */, + 7461EC9E2F13DE7039E6B4B2F4AB4A11 /* AuthenticationInterceptor.swift */, + 0C1D89E1FCE366944CAE3AA74A9529F1 /* CachedResponseHandler.swift */, + 17D38C59C1924E8F3ECD26E6186BDF53 /* Combine.swift */, + E9505221A0D201274FF92A7DD8DDF5B6 /* DispatchQueue+Alamofire.swift */, + EB1DA25BB9F566525971C700992B6AE5 /* EventMonitor.swift */, + 1E6A1466FEE5637585E37CEB9D259C05 /* HTTPHeaders.swift */, + 354B4DD1F80EF9928D939D38DFCA6E39 /* HTTPMethod.swift */, + BABE6B48D3EC13556FA2C1E3B0E99F6C /* MultipartFormData.swift */, + 0A2D5DAE2DDC26B5F1470937209B44F1 /* MultipartUpload.swift */, + DF8EB70798D63EB9E4C7CAAD63DF2F60 /* NetworkReachabilityManager.swift */, + 1703E145C8B89997E08295645F7DD8ED /* Notifications.swift */, + C5B340610A67CA98C1D052BC0E4C2208 /* OperationQueue+Alamofire.swift */, + E033A932CA11955308A5735C12602725 /* ParameterEncoder.swift */, + 396491C5F0C5AF8818E72AF1E78FA29C /* ParameterEncoding.swift */, + 862117AC312873415B51327A2139BCD4 /* Protected.swift */, + 369CC5F7967B0D65D714A86D9A454423 /* RedirectHandler.swift */, + 527506230C52824B3A0FE53A99D4FB80 /* Request.swift */, + D7B4FF18DBB8C9939B65076D1744735B /* RequestInterceptor.swift */, + C7F1F805B3EFAE381FA889BA557DD675 /* RequestTaskMap.swift */, + 85126B0C8193F57CE6E4E868A7FD0213 /* Response.swift */, + 852C3101524D3D0A78D26622B79A66B9 /* ResponseSerialization.swift */, + 56A5AA0AB95FA4E2BFE1CD8FA8D13406 /* Result+Alamofire.swift */, + 96B72CC9CD04670514C724D0EAE3BDF3 /* RetryPolicy.swift */, + A8F0A7650F653E2725812127BF7E37DD /* ServerTrustEvaluation.swift */, + D2EF7DD2A2C85B1D3A6F1E7D458FD11C /* Session.swift */, + 852587985B9E4EBA869F1C19D4D37F08 /* SessionDelegate.swift */, + 3F79120A14A3DDD98EC5F8732D15A8FD /* StringEncoding+Alamofire.swift */, + 43C0DE0ECF5239BF754435B145CDE7A3 /* URLConvertible+URLRequestConvertible.swift */, + 015CDA9BD9BDD87CE8D8D41B757646F9 /* URLEncodedFormEncoder.swift */, + F2265DDA1B52FBACA9D8EAB807773462 /* URLRequest+Alamofire.swift */, + 8EF6A4E150976043A9C8CBA1C76CE3AC /* URLSessionConfiguration+Alamofire.swift */, + F36577683A895118B0B11EB99E034B57 /* Validation.swift */, + 4DDDFB2FCFEB3B5BECB1495CCFCAC488 /* Support Files */, ); - name = Pods; + name = Alamofire; + path = Alamofire; sourceTree = ""; }; - F1E75C83E518C8BF3F7E875F35F46C30 /* Alamofire */ = { + E0767362F61531A5338CBA4A2FA7546E /* SwiftLint */ = { isa = PBXGroup; children = ( - 155E78119EA83B4F27884C941EFF3018 /* AFError.swift */, - 034CAB8BE63B971B22E2E330C02FD0EE /* Alamofire.swift */, - D8B679BE77413AB71804A675234A3C43 /* AlamofireExtended.swift */, - 163B551B47E6034B95A839DD7F3FF622 /* AuthenticationInterceptor.swift */, - BC5E0CEB052AEB3554879A6BD6B9689C /* CachedResponseHandler.swift */, - 36D1F25C04B2957B0CB03928455D206F /* Combine.swift */, - 64B30679B2A44FE78B4D31DAF510B2A4 /* DispatchQueue+Alamofire.swift */, - 514B1E82CF7490B03A9B6A5F27520CE1 /* EventMonitor.swift */, - C950BDC64D851683652E7176D1C7BEB8 /* HTTPHeaders.swift */, - 5BFFEADC6F86761385F0309E089BC5BA /* HTTPMethod.swift */, - 196D7B95A892DEE608F24372E2C2922C /* MultipartFormData.swift */, - 26BB708E47448F3138DB5C78747AC9CC /* MultipartUpload.swift */, - CD570DBB55ABEBEB25B93E4535C1AA5D /* NetworkReachabilityManager.swift */, - CB5C8D53A3034138CD34DA8F8F54DC3B /* Notifications.swift */, - 07AC158772041D7767F5412F51F584F6 /* OperationQueue+Alamofire.swift */, - CBC7515DB3394FB6AB91091DB6E1E66A /* ParameterEncoder.swift */, - B004007A80D13B672318B0668134C673 /* ParameterEncoding.swift */, - D58F31B1650C7E8BC8CF7698273813FE /* Protected.swift */, - CF908A01151C5B81C51CAF360AD253D6 /* RedirectHandler.swift */, - D59434D6E94D181C9754853035731BA4 /* Request.swift */, - B598972018B1724A57F0BD6F1A740247 /* RequestInterceptor.swift */, - D4CB5E5506638C2C5C8AACCB8DC289D0 /* RequestTaskMap.swift */, - 66F3759253CFAD783999039544FE9B0A /* Response.swift */, - A65DB20677974814968BA7D9CECE7D7F /* ResponseSerialization.swift */, - BC39DE8004DF137061BA591F79DA2C63 /* Result+Alamofire.swift */, - A8F3AE8AD0C8CA6C0EB6AEA6349E31FB /* RetryPolicy.swift */, - D6BD20A7EE7D940F61D7A8F83DD45123 /* ServerTrustEvaluation.swift */, - 3E54768C4F9DBC5AA475E45511E303B6 /* Session.swift */, - B7D399099D86D5EDE99B034325B33F15 /* SessionDelegate.swift */, - 532D030CBE81BE97499BFD28673BEE26 /* StringEncoding+Alamofire.swift */, - 9FF1931149BF083089579D8650F59C06 /* URLConvertible+URLRequestConvertible.swift */, - 1D73B47A52EA17DDBFC15CA388016C3E /* URLEncodedFormEncoder.swift */, - 5D06A26E22EAC591EA4B913C02C83F11 /* URLRequest+Alamofire.swift */, - AD454D2124E295C2307C772A2ACD4FEB /* URLSessionConfiguration+Alamofire.swift */, - 7E0385435D9F6C1FED1877641AA16B2D /* Validation.swift */, - A10BB86EEB667B1D2A9E885E177BE747 /* Support Files */, + 509CDA1DFE251A05E0C5137723B668C4 /* Support Files */, ); - name = Alamofire; - path = Alamofire; + name = SwiftLint; + path = SwiftLint; sourceTree = ""; }; - F8EC4FE555853C196CE9A01D43F41D35 /* Support Files */ = { + E153D1AC23034717D62FC7A218E20317 /* SkeletonView */ = { isa = PBXGroup; children = ( - 8F1F432B2D60C8A39E8E10A0D42D1FC6 /* Moya.modulemap */, - 280359BD9E534D7CDA387CB4A989DACF /* Moya-dummy.m */, - 2E5D7C4C028536D79ADB6FD7F02D7BA1 /* Moya-Info.plist */, - ED93E10F6E44D3507E9DFED050C01AAE /* Moya-prefix.pch */, - 14FEC61118FA1DFB43AE4AA368D5D1CE /* Moya-umbrella.h */, - 4E61E326D7B3A77ED30807DACB2FD7C6 /* Moya.debug.xcconfig */, - 5994A3FA87CBCA0CBB78552409467226 /* Moya.release.xcconfig */, + 7CCBA75E9B23AE002A4A95E8B31EA569 /* AssociationPolicy.swift */, + C304B28E72C69EB63B12B827287933EC /* CALayer+Extensions.swift */, + 7A18AB1D2C4B37FA132F5E7F7D25CA17 /* CollectionSkeletonProtocol.swift */, + 249B7648B5B85EA0E714D49CD6C67A04 /* ContainsMultilineText.swift */, + C77D68D4356868251FDAC8AB833E9AE5 /* GenericCollectionView.swift */, + AF113E31CFCCB0809CBB5D7A393157D4 /* Int+Whitespaces.swift */, + 08F264F9833CCE9C55B58CF250D385A0 /* PrepareForSkeletonProtocol.swift */, + 13D6A276868192B461E3C22BD32B0CB4 /* ProcessInfo+XCTest.swift */, + FD3A77A8F513F51A4DE31E3ECCC9E93A /* Recoverable.swift */, + 369EEF149A229DC55CA98708629897E5 /* RecoverableViewState.swift */, + 6B360355E87C9EA2E43E53223E8A81B4 /* RecursiveProtocol.swift */, + 01AAB425325C29722CE8AD24DC3E2B19 /* SkeletonAnimationBuilder.swift */, + 893D22A21E8095AC18647012E6140C3C /* SkeletonAppearance.swift */, + 667C5116528DEF8EDA95F675A1C7F484 /* SkeletonCollectionDataSource.swift */, + 39E4F26C0828D5181A4E22C6E1953609 /* SkeletonCollectionDelegate.swift */, + C9BCE4875A076F92D70B2D15E6957CE7 /* SkeletonCollectionViewProtocols.swift */, + 6A15C32E5921F8A71AED2FC54F4488E7 /* SkeletonConfig.swift */, + AAB52E2DB483465483CDC5399449BE33 /* SkeletonDebug.swift */, + 3B4FFD478579B04642D169A45E91668A /* SkeletonFlow.swift */, + 4179DF058ED0BAC6C59CFFBC52671665 /* SkeletonGradient.swift */, + C57A1408912795E1C490C92CE8C28E3F /* SkeletonLayer.swift */, + 09ACCBCE6D539CA74FEB6752DD505A39 /* SkeletonLayerBuilder.swift */, + 03E4520C26D608D08982C66220FC019D /* SkeletonMultilineLayerBuilder.swift */, + 0C31EC9956AFB15A83E931CBA14D2399 /* SkeletonReusableCell.swift */, + 5FE9E1AA3582B9D5E2643397BF2D5A9B /* SkeletonTableViewProtocols.swift */, + 9E65A61B49A188164C361F9680DCCAC9 /* SkeletonTransitionStyle.swift */, + 14550269357F684B8B3C691B186AFB51 /* SkeletonView.swift */, + 0AFA83C0F1EA5B1A5FFEB8FFD96C1B62 /* SubviewsSkeletonables.swift */, + 4D9A31758D6173B723233A20CF5821E4 /* Swizzling.swift */, + 0B479748F2C1745AD42DEACA036E74B6 /* UICollectionView+CollectionSkeleton.swift */, + F56EE8B669FFB3EBBC518DE763166647 /* UIColor+Skeleton.swift */, + A510848B670DF93AC141BC838D11B96A /* UILabel+Multiline.swift */, + 9FCB24F8457456770E438D215F0E9241 /* UITableView+CollectionSkeleton.swift */, + 2C65BE6C477529EAD847B72994C4CE3B /* UITableView+VisibleSections.swift */, + 243175092AE28349A7D1CA5E2B12FAC9 /* UITextView+Multiline.swift */, + A3D70335DD50EC5E5918E84F49F6F92A /* UIView+Autolayout.swift */, + 0E1F8C70958EEF672E8BBB591B9787D9 /* UIView+CollectionSkeleton.swift */, + EAFA5EFBB80F7AB0CB2739FD232C51D1 /* UIView+Extension.swift */, + 2721360639183A8DB566806B57A1F3DA /* UIView+Frame.swift */, + 5F748F833CDA83471A0BD4D87D5B4F7D /* UIView+IBInspectable.swift */, + C89B0460CCD2A2AA4A705D0CD4DC2340 /* UIView+Transitions.swift */, + 935157435E387E5FEC32AE8A9ED9E05C /* UIView+UIApplicationDelegate.swift */, + 2A6FA3563FE0565F2695840203C2E6FD /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/Moya"; + name = SkeletonView; + path = SkeletonView; + sourceTree = ""; + }; + E4310B195BB923C5E1558B1394D9CEA2 /* KakaoSDKUser */ = { + isa = PBXGroup; + children = ( + 87D288A185BF54C8815698BF1B071F85 /* AccessTokenInfo.swift */, + 7E9A24464B53FB64082ABC28A5D043CB /* KakaoSDKUser.h */, + 4B9EE958B3D32D9EBC0473A75F2FE8AB /* Scope.swift */, + BF7F57BAF1AAA4398E5EC8C57BD1C577 /* User.swift */, + 9A32BD08D9936BEF16E0E96DE5D39CF6 /* UserApi.swift */, + 008445A655D4C257B4B16CC9A1F8AA40 /* UserServiceTerms.swift */, + 0F06A6480E9A9B4992FAEBBF975586FA /* UserShippingAddresses.swift */, + 28F03780CE5769783851EE39E40E0449 /* Support Files */, + ); + name = KakaoSDKUser; + path = KakaoSDKUser; + sourceTree = ""; + }; + F0A7FAB2BE49B748C534B675A1E9B02D /* Moya */ = { + isa = PBXGroup; + children = ( + 0CCB6A4723D20500F2DF788DE3A14224 /* Core */, + 5D1DDC96B72ED1FBEAA459FA64DEC71C /* Support Files */, + ); + name = Moya; + path = Moya; + sourceTree = ""; + }; + F4BB1F0104927496891E664F91E142AC /* VerticalCardSwiper */ = { + isa = PBXGroup; + children = ( + 201BB0937308D6C1AE652E84C7DD1A9E /* CardCell.swift */, + C5C77FA23A09B294A6ACFB6DDBDC4555 /* CardDelegate.swift */, + 86A91118F90F0D20FF94BA3D9AF0801C /* Extensions.swift */, + 0F0D4C224ADF9B29DD4A5B0EAD9D2F3B /* PanDirection.swift */, + 9F1B06B12E49993B5D4DA7ACA0C29B89 /* SwipeDirection.swift */, + 4D9EDCC406FCF40A56D716E2B29188B6 /* VerticalCardSwiper.swift */, + 8906830BFDFE1AA458F4C8346494302B /* VerticalCardSwiperDatasource.swift */, + E152F250D5EBF9A65E480096CFA80624 /* VerticalCardSwiperDelegate.swift */, + 93505AA1F4FE4308FA39620AED22DB3B /* VerticalCardSwiperFlowLayout.swift */, + 10A81FA7B8B908A7C8D089E887090DB5 /* VerticalCardSwiperView.swift */, + 927A5AB8E2B0CBBF4834546187F43EE8 /* Support Files */, + ); + name = VerticalCardSwiper; + path = VerticalCardSwiper; + sourceTree = ""; + }; + F89C59F90ECF3B3F8601A151AABD1773 /* Products */ = { + isa = PBXGroup; + children = ( + 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire.framework */, + 9F453801F27585052F413F613C847DB2 /* KakaoSDKAuth.framework */, + 25BDA6E824AD6CBD857358A023C694AD /* KakaoSDKCommon.framework */, + 1353D6A467F43A6A3EA21D310BD35A31 /* KakaoSDKUser.framework */, + 3756A9BBE41ABEE8DCBF5BCA6972C4DA /* Moya.framework */, + 5183F64F0CB82B2049B97A16612CA752 /* Pods_NADA_iOS_forRelease.framework */, + CDC8C1E54D1F3A8B5CAC89FFFF6A3F80 /* SkeletonView.framework */, + E546B58EA4069366B11D69313FB99ED0 /* VerticalCardSwiper.framework */, + ); + name = Products; sourceTree = ""; }; /* End PBXGroup section */ @@ -730,6 +1041,23 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 4FD903AB5A2647DCADBBB59756C686AC /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 4A24F4E478A86BDFFAB09FFA6FE3E948 /* KakaoSDKAuth-umbrella.h in Headers */, + 98F8A598374ED181216B15777174C2B0 /* KakaoSDKAuth.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 53B1D87EEC874546E0E8DAA63CED26AA /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + BC14C216303258F50AD73221EE1BD67B /* KakaoSDKCommon-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 5D4D8F2316E3B388EA66319DAE9C862F /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -746,11 +1074,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - CC3DAA4598774A48A29F5A380C6FF168 /* Headers */ = { + F29008FACA6BEE27C996FC02C026546A /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - C8E321D84D25A482AA41C1D5849C8C7F /* Pods-NADA-iOS-forRelease-umbrella.h in Headers */, + 26CD7A62B902D922FEEE0FE218977E19 /* KakaoSDKUser-umbrella.h in Headers */, + F6CE0C22ED00F821ADA37C231B836616 /* KakaoSDKUser.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FB0D93EB2E73B8F1A433BE54837AC15E /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 42BFDF808113EBF7D94070C7361B126B /* Pods-NADA-iOS-forRelease-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -769,13 +1106,32 @@ buildRules = ( ); dependencies = ( - 384827BC5C4C3687AE7DAAB6DC6001C0 /* PBXTargetDependency */, + CF5F73A9C0DAA3ECB9ABD374F37FF3E8 /* PBXTargetDependency */, ); name = Moya; productName = Moya; productReference = 3756A9BBE41ABEE8DCBF5BCA6972C4DA /* Moya.framework */; productType = "com.apple.product-type.framework"; }; + 205D6EF1B8DCC8419E2F53266F6ADCDC /* KakaoSDKCommon */ = { + isa = PBXNativeTarget; + buildConfigurationList = DF3EF6BCC11903BEA7A6065D580BD15C /* Build configuration list for PBXNativeTarget "KakaoSDKCommon" */; + buildPhases = ( + 53B1D87EEC874546E0E8DAA63CED26AA /* Headers */, + 8D2E712DF5DF8D90AA02EF91963542AE /* Sources */, + 9ABC1C4849BFE4CFC0B9E1C0E915B93B /* Frameworks */, + 1F637A45F4A3A8B0A1F1429D267F1FE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + FDF7D0593948762B7E708F1CB93DC8BF /* PBXTargetDependency */, + ); + name = KakaoSDKCommon; + productName = KakaoSDKCommon; + productReference = 25BDA6E824AD6CBD857358A023C694AD /* KakaoSDKCommon.framework */; + productType = "com.apple.product-type.framework"; + }; 207F12AADC9561F2D78577DDD788B9C5 /* VerticalCardSwiper */ = { isa = PBXNativeTarget; buildConfigurationList = 3FEF6CB8F92C5FFB386C127FF85F6488 /* Build configuration list for PBXNativeTarget "VerticalCardSwiper" */; @@ -794,23 +1150,64 @@ productReference = E546B58EA4069366B11D69313FB99ED0 /* VerticalCardSwiper.framework */; productType = "com.apple.product-type.framework"; }; + 3F7BF367078951B6E8BC95B3DA89967A /* KakaoSDKUser */ = { + isa = PBXNativeTarget; + buildConfigurationList = A4F2B994BC62AA8D392217B060EEB331 /* Build configuration list for PBXNativeTarget "KakaoSDKUser" */; + buildPhases = ( + F29008FACA6BEE27C996FC02C026546A /* Headers */, + 869482FB42F2FAD269440DBE5400A7E5 /* Sources */, + 8EB012ACE326C19B140A72C5209D9C51 /* Frameworks */, + 208336A26DE94252D554173FD613D9E6 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 59C2841ECB5A61752A8CC32D1040944C /* PBXTargetDependency */, + ); + name = KakaoSDKUser; + productName = KakaoSDKUser; + productReference = 1353D6A467F43A6A3EA21D310BD35A31 /* KakaoSDKUser.framework */; + productType = "com.apple.product-type.framework"; + }; + 83CA882AD877ED964BDF66235E416BC1 /* KakaoSDKAuth */ = { + isa = PBXNativeTarget; + buildConfigurationList = 366E8673DC134D464F9922093A19AE38 /* Build configuration list for PBXNativeTarget "KakaoSDKAuth" */; + buildPhases = ( + 4FD903AB5A2647DCADBBB59756C686AC /* Headers */, + E8112EA77CEDE5813D444C24629359BA /* Sources */, + 1EE98FFAB399AA303F2FED55E53E1AB1 /* Frameworks */, + A8599A8CF478988707432A0A94228983 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + D8C1F5ED627EC712C129B0CFD53F934F /* PBXTargetDependency */, + ); + name = KakaoSDKAuth; + productName = KakaoSDKAuth; + productReference = 9F453801F27585052F413F613C847DB2 /* KakaoSDKAuth.framework */; + productType = "com.apple.product-type.framework"; + }; 8473F894E0985DE23CDA4C1345E05BD1 /* Pods-NADA-iOS-forRelease */ = { isa = PBXNativeTarget; - buildConfigurationList = 1598C9DF3E3F3C4DF167BC707AC9742E /* Build configuration list for PBXNativeTarget "Pods-NADA-iOS-forRelease" */; + buildConfigurationList = EEBC167A7CB74B48A8A1A93080568D7D /* Build configuration list for PBXNativeTarget "Pods-NADA-iOS-forRelease" */; buildPhases = ( - CC3DAA4598774A48A29F5A380C6FF168 /* Headers */, - 218948A4EEF75CC2C7F18C1E5DC71B84 /* Sources */, - 78D8C20C8B07BFA700B1572FA88201A1 /* Frameworks */, - E986BF9E4EDEEBEA3B44A1318C2B63CF /* Resources */, + FB0D93EB2E73B8F1A433BE54837AC15E /* Headers */, + 10555DEF3E4856BEA09B45CF94AA1A51 /* Sources */, + 6DAAF4F53104001C7B806AC7E7891655 /* Frameworks */, + BB3390B256F3AB86825E4BBC6C2945CF /* Resources */, ); buildRules = ( ); dependencies = ( - F05C799FC97DED9EDC2C4D630305859D /* PBXTargetDependency */, - E62B9F07441C3927AA5FE041127FE61C /* PBXTargetDependency */, - 9AEA7688529CDD65E224BB0BE9333C50 /* PBXTargetDependency */, - 14580DBA901B53DEEEE888E14E1552E6 /* PBXTargetDependency */, - C6BA3B82E8BA2180686D343ED9D53244 /* PBXTargetDependency */, + 4C3B1B1CC623507CA27F175DE9340B3E /* PBXTargetDependency */, + 28990D523486F98102A3AFBF45C977A0 /* PBXTargetDependency */, + 6EC4E256499C79D4869C97ACEC882103 /* PBXTargetDependency */, + 4EF52DB334C903F5C3088C3BDD9072E1 /* PBXTargetDependency */, + CDFF729BD95355AC31DF3B2D28BBDDA5 /* PBXTargetDependency */, + 7A2257A7D04E1061FF3C2B755422F555 /* PBXTargetDependency */, + 2B363D629908836AB9589B86967789AD /* PBXTargetDependency */, + AF8C05D0E5AB758AED0F7189946963A0 /* PBXTargetDependency */, ); name = "Pods-NADA-iOS-forRelease"; productName = "Pods-NADA-iOS-forRelease"; @@ -871,11 +1268,14 @@ Base, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 5536D472E3434C3012F6DB5784FDA0E0 /* Products */; + productRefGroup = F89C59F90ECF3B3F8601A151AABD1773 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */, + 83CA882AD877ED964BDF66235E416BC1 /* KakaoSDKAuth */, + 205D6EF1B8DCC8419E2F53266F6ADCDC /* KakaoSDKCommon */, + 3F7BF367078951B6E8BC95B3DA89967A /* KakaoSDKUser */, 17F9141D333DA1A7BE5937F227221070 /* Moya */, 8473F894E0985DE23CDA4C1345E05BD1 /* Pods-NADA-iOS-forRelease */, 8CEEFD1CB630CA790F0396E2E24A4C8C /* SkeletonView */, @@ -886,6 +1286,20 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 1F637A45F4A3A8B0A1F1429D267F1FE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 208336A26DE94252D554173FD613D9E6 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 6EBF51D6092A5CC8E29D04F25E51E962 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -907,7 +1321,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - E986BF9E4EDEEBEA3B44A1318C2B63CF /* Resources */ = { + A8599A8CF478988707432A0A94228983 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BB3390B256F3AB86825E4BBC6C2945CF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -942,11 +1363,11 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 218948A4EEF75CC2C7F18C1E5DC71B84 /* Sources */ = { + 10555DEF3E4856BEA09B45CF94AA1A51 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 891360304AB40160D3446D7A712387B9 /* Pods-NADA-iOS-forRelease-dummy.m in Sources */, + 93266D3BC1875D0425C5D97C35590C96 /* Pods-NADA-iOS-forRelease-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -993,6 +1414,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 869482FB42F2FAD269440DBE5400A7E5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2ED6C9092BBA5A56FAEB8FA937751F92 /* AccessTokenInfo.swift in Sources */, + DDB1E5153DF595856FEDAFA9789A77FE /* KakaoSDKUser-dummy.m in Sources */, + AE9201DCD6062A33C2C6708D63025F70 /* Scope.swift in Sources */, + B6E94478CC9DEA36C88E64FD4E6B5D69 /* User.swift in Sources */, + 6CC9379849049CD91E63E94EB7A03AF3 /* UserApi.swift in Sources */, + A9151B452B7C08D6D45D4446F7747940 /* UserServiceTerms.swift in Sources */, + B58736B133736426A08937C26162108F /* UserShippingAddresses.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 89BCE565BC796CDAB159B58EFACA3718 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1043,6 +1478,50 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 8D2E712DF5DF8D90AA02EF91963542AE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 585D94D92CBB503AD0F8646A1C11EB96 /* Api.swift in Sources */, + EBEAEF9CAFEDC67DB7D6EB7C0B440DF5 /* ApiRequestAdapter.swift in Sources */, + B27DD4CBF2CF9CBF31DFCBF41D6B1EEA /* Array+Utils.swift in Sources */, + 44A36CB3F1BB16366231C874ABB1CAE6 /* AuthErrorInfo.swift in Sources */, + 65B9D79850A5F50B38D09A8AFFEFF6FC /* Common.swift in Sources */, + DBCA7F7E7308A90DE6C2DAF711EEE7D7 /* Data+Utils.swift in Sources */, + 707B12234AD5D4D8DCEDFF4794705DB6 /* DecodingContainer+AnyCollection.swift in Sources */, + B2B04552103A7C0B1A15E125E28E1E41 /* Dictionary+Utils.swift in Sources */, + 53A43F2AE3C60AB2F0424C2D51B2F46A /* EncodingContainer+AnyCollection.swift in Sources */, + DFB1DA26B1C207CBF5E0D7CCD5604A28 /* ErrorInfo.swift in Sources */, + D45FEB0D154AD7E2215517EDB8658CAE /* KakaoSDKCommon-dummy.m in Sources */, + 92D0E59939CF3F4C4ABB23FDBDFDF724 /* KakaoSDKCommon.swift in Sources */, + 875021448737367D14FDA98B398485A2 /* Properties.swift in Sources */, + 93D4F8823E627811A39D5EF0C07CE24C /* SdkCoder.swift in Sources */, + DBE98EDAE6714A2211B6687B0ABCA1E5 /* SdkCrypto.swift in Sources */, + 4E2399AABBC682AC2F00E8B7EFF84117 /* SdkError.swift in Sources */, + A7FC40CEEA937DF65DFD2EC4CAE3AE5D /* SdkLog.swift in Sources */, + D94D0653B64A5AF79E8B76F587800D32 /* SdkUtils.swift in Sources */, + A22737A11F8DFBF609E793D90DE850FE /* URL+Utils.swift in Sources */, + A8E6AF258A5683F80CC3553F36AA02C6 /* Urls.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E8112EA77CEDE5813D444C24629359BA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EDD286540239367F23AE1477B588CA62 /* Auth.swift in Sources */, + 514A002447682855D21588096DB1C532 /* AuthApi.swift in Sources */, + DF905C9610BFAB1A1C27A444D4EC1CAE /* AuthController.swift in Sources */, + CC9855930B37DF2A2FD9D439C5833370 /* AuthRequestAdapter.swift in Sources */, + 584F28B8B334A6331E254DA27D4FD48F /* AuthRequestRetrier.swift in Sources */, + 207DFDDAAA2692540615D480957A76F6 /* KakaoSDKAuth-dummy.m in Sources */, + C3158DC632F79419B4E5F77AB383A9E3 /* MigrateManager.swift in Sources */, + BFAC3E3A8CED9443C44A2A6884E0A75F /* OAuthToken.swift in Sources */, + 49A3EAE89294324E1C3F85E16E48307F /* TokenManagable.swift in Sources */, + 7FD1F039D7AD6D3B64AD699978D9C238 /* TokenManager.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; F543DD072EC55754F4B0A9154EEE19E0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1077,48 +1556,84 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 14580DBA901B53DEEEE888E14E1552E6 /* PBXTargetDependency */ = { + 28990D523486F98102A3AFBF45C977A0 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = KakaoSDKAuth; + target = 83CA882AD877ED964BDF66235E416BC1 /* KakaoSDKAuth */; + targetProxy = DF1656F10F4A6A33E010A3CBD056F64C /* PBXContainerItemProxy */; + }; + 2B363D629908836AB9589B86967789AD /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SwiftLint; target = 52B60EC2A583F24ACBB69C113F5488B9 /* SwiftLint */; - targetProxy = E21D54BB9782086F320A4E81AC536804 /* PBXContainerItemProxy */; + targetProxy = CA48115103ED63FD2DFA0094054B4B9A /* PBXContainerItemProxy */; }; - 384827BC5C4C3687AE7DAAB6DC6001C0 /* PBXTargetDependency */ = { + 4C3B1B1CC623507CA27F175DE9340B3E /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Alamofire; target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; - targetProxy = B09C10AA9BCADE0B51F123600AF7E080 /* PBXContainerItemProxy */; + targetProxy = E2518DD114D45DB43EA1FF1CA5EE5D14 /* PBXContainerItemProxy */; + }; + 4EF52DB334C903F5C3088C3BDD9072E1 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = KakaoSDKUser; + target = 3F7BF367078951B6E8BC95B3DA89967A /* KakaoSDKUser */; + targetProxy = 61DF0DC59E146EFE511639DCFA571E02 /* PBXContainerItemProxy */; + }; + 59C2841ECB5A61752A8CC32D1040944C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = KakaoSDKAuth; + target = 83CA882AD877ED964BDF66235E416BC1 /* KakaoSDKAuth */; + targetProxy = 36A7AD997E5CF219757457218EC213B4 /* PBXContainerItemProxy */; }; - 9AEA7688529CDD65E224BB0BE9333C50 /* PBXTargetDependency */ = { + 6EC4E256499C79D4869C97ACEC882103 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = KakaoSDKCommon; + target = 205D6EF1B8DCC8419E2F53266F6ADCDC /* KakaoSDKCommon */; + targetProxy = 28F3373C2454ABF8466AC887398971EB /* PBXContainerItemProxy */; + }; + 7A2257A7D04E1061FF3C2B755422F555 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SkeletonView; target = 8CEEFD1CB630CA790F0396E2E24A4C8C /* SkeletonView */; - targetProxy = 06BFE9FA164CE9D09B48210F03CFBA90 /* PBXContainerItemProxy */; + targetProxy = CF19D2F61785470EE383C0497E64D5ED /* PBXContainerItemProxy */; }; - C6BA3B82E8BA2180686D343ED9D53244 /* PBXTargetDependency */ = { + AF8C05D0E5AB758AED0F7189946963A0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = VerticalCardSwiper; target = 207F12AADC9561F2D78577DDD788B9C5 /* VerticalCardSwiper */; - targetProxy = C5F8FB9DEA0EF4B067C41C296E1923A6 /* PBXContainerItemProxy */; + targetProxy = 9DF74DD6AA4C3E3A515693BA771EB1CE /* PBXContainerItemProxy */; }; - E62B9F07441C3927AA5FE041127FE61C /* PBXTargetDependency */ = { + CDFF729BD95355AC31DF3B2D28BBDDA5 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Moya; target = 17F9141D333DA1A7BE5937F227221070 /* Moya */; - targetProxy = 848A3404725E884800D31ADD6A65A211 /* PBXContainerItemProxy */; + targetProxy = 313A09AE573BD23681AAAABB75380F8B /* PBXContainerItemProxy */; + }; + CF5F73A9C0DAA3ECB9ABD374F37FF3E8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Alamofire; + target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; + targetProxy = 057F96BC5B1A98D3B6CC9CB92CDCDFFC /* PBXContainerItemProxy */; + }; + D8C1F5ED627EC712C129B0CFD53F934F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = KakaoSDKCommon; + target = 205D6EF1B8DCC8419E2F53266F6ADCDC /* KakaoSDKCommon */; + targetProxy = 092D1C3FD008901F9FB0F13593DA8944 /* PBXContainerItemProxy */; }; - F05C799FC97DED9EDC2C4D630305859D /* PBXTargetDependency */ = { + FDF7D0593948762B7E708F1CB93DC8BF /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Alamofire; target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; - targetProxy = 5DE09AC12DE6B5A45CBBF905994B9CCE /* PBXContainerItemProxy */; + targetProxy = 428AC53FA98299F020210E0A139EEE1E /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 0252DEDE8FF1D063AA2CEF7385BBC52E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5994A3FA87CBCA0CBB78552409467226 /* Moya.release.xcconfig */; + baseConfigurationReference = 3936B74A53465E283BDFA54F4DE19A98 /* Moya.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1152,9 +1667,47 @@ }; name = Release; }; + 0296E3797A6D1A5FA1E69684D80E2F1D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 420E35C3FCBD48BED7CAC20D5A22E981 /* Pods-NADA-iOS-forRelease.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 14.5; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; 0947A8B352398617D947D895180E9A81 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F32099AC992096D6DDD391F016D75F4C /* SkeletonView.debug.xcconfig */; + baseConfigurationReference = 94059D9EA304B4A09B10EA6EFBDF7F98 /* SkeletonView.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1188,7 +1741,7 @@ }; 2444D36F2CB5FF3F9469EF5F6322EA10 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8D5DA142DA7A5CB91998DB139D945250 /* Alamofire.debug.xcconfig */; + baseConfigurationReference = 0ACD8C4622FE784E54FF554F1A9C2958 /* Alamofire.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1221,9 +1774,79 @@ }; name = Debug; }; + 2958494001331539BA1BE3725FEC761E /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BB1B93909B8C1BF5315AE4B4077C8DC5 /* KakaoSDKAuth.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/KakaoSDKAuth/KakaoSDKAuth-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/KakaoSDKAuth/KakaoSDKAuth-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/KakaoSDKAuth/KakaoSDKAuth.modulemap"; + PRODUCT_MODULE_NAME = KakaoSDKAuth; + PRODUCT_NAME = KakaoSDKAuth; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 31BAA8E94597DA1BC08717E1508CAE9F /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = ED2D63940F786C94949C0B43B205C8AE /* KakaoSDKCommon.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/KakaoSDKCommon/KakaoSDKCommon-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/KakaoSDKCommon/KakaoSDKCommon-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/KakaoSDKCommon/KakaoSDKCommon.modulemap"; + PRODUCT_MODULE_NAME = KakaoSDKCommon; + PRODUCT_NAME = KakaoSDKCommon; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; 37738B29ABC14854C5583822FE826935 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4E61E326D7B3A77ED30807DACB2FD7C6 /* Moya.debug.xcconfig */; + baseConfigurationReference = 5D1EE1DBF74D393F0E257A42C788BF0B /* Moya.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1256,11 +1879,10 @@ }; name = Debug; }; - 4B1FBE932E3E59F3F2576CB27F970BF7 /* Debug */ = { + 3B71319B55979DA722037EFC4B9B5119 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5E77B546F8ABDDE70861710F6482E2A1 /* Pods-NADA-iOS-forRelease.debug.xcconfig */; + baseConfigurationReference = 49224E14B818703FCC953C3B23881A3A /* KakaoSDKAuth.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1270,32 +1892,32 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/KakaoSDKAuth/KakaoSDKAuth-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/KakaoSDKAuth/KakaoSDKAuth-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 14.5; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/KakaoSDKAuth/KakaoSDKAuth.modulemap"; + PRODUCT_MODULE_NAME = KakaoSDKAuth; + PRODUCT_NAME = KakaoSDKAuth; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; 4B51AFEEB351C25BBAF9C85FD469B96B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BC2D0C25488D0C13636232987812103D /* SkeletonView.release.xcconfig */; + baseConfigurationReference = C1798FF438C9157328CDC64B059D7596 /* SkeletonView.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1328,11 +1950,10 @@ }; name = Release; }; - 7B8BB5EB9DF69A15750EA9A6DF733636 /* Release */ = { + 4BC79C093EF96BEA190A9B118CD1B07E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 420E35C3FCBD48BED7CAC20D5A22E981 /* Pods-NADA-iOS-forRelease.release.xcconfig */; + baseConfigurationReference = A9415D26B0A851BEE58B49608292637B /* KakaoSDKUser.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1342,23 +1963,22 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/KakaoSDKUser/KakaoSDKUser-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/KakaoSDKUser/KakaoSDKUser-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 14.5; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/KakaoSDKUser/KakaoSDKUser.modulemap"; + PRODUCT_MODULE_NAME = KakaoSDKUser; + PRODUCT_NAME = KakaoSDKUser; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -1366,9 +1986,80 @@ }; name = Release; }; + 79C7A4B182914295BA981437F5A64B2A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9DED66719D8C0A494BC20D2EB8203B32 /* KakaoSDKCommon.release.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/KakaoSDKCommon/KakaoSDKCommon-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/KakaoSDKCommon/KakaoSDKCommon-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/KakaoSDKCommon/KakaoSDKCommon.modulemap"; + PRODUCT_MODULE_NAME = KakaoSDKCommon; + PRODUCT_NAME = KakaoSDKCommon; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 7BDF01DE0C99E23C26C366ED421BA01E /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A09673180A599145E93E8FC3F88C2F49 /* KakaoSDKUser.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/KakaoSDKUser/KakaoSDKUser-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/KakaoSDKUser/KakaoSDKUser-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/KakaoSDKUser/KakaoSDKUser.modulemap"; + PRODUCT_MODULE_NAME = KakaoSDKUser; + PRODUCT_NAME = KakaoSDKUser; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; 9B66E952E27F29569285AB82461A2F34 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CF4D224B84E231301C79BA116C4A126A /* Alamofire.release.xcconfig */; + baseConfigurationReference = 7890039FDEF33FD03D750E0BE0FBC620 /* Alamofire.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1404,7 +2095,7 @@ }; AD81E62ACCB0B7A923FC8AA288F9921E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F695B67356D609A300C4C6B32D551BD0 /* SwiftLint.release.xcconfig */; + baseConfigurationReference = 9AAB931CEE3AA1C1AC3C723994134B30 /* SwiftLint.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -1487,7 +2178,7 @@ }; C49F4BBBD3B9D8618B5A44E6F3A63F2D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FB5AD31E50BBC14892267AF5769B974D /* VerticalCardSwiper.debug.xcconfig */; + baseConfigurationReference = 845BA8930569CF63502AC14DE58791E8 /* VerticalCardSwiper.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1581,9 +2272,46 @@ }; name = Release; }; + D0605F32F9D5DE1D6EE9E21FD784F0F2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5E77B546F8ABDDE70861710F6482E2A1 /* Pods-NADA-iOS-forRelease.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 14.5; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; EADD1F50ABC8096A0D6CB18822BB4EE4 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 457B434CF73D04C4FDCCBC62214B5D9A /* SwiftLint.debug.xcconfig */; + baseConfigurationReference = DCB85D975F1EC65E008594C07C85FD3E /* SwiftLint.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -1599,7 +2327,7 @@ }; F13F7FA08276BB370497C03414D24517 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3299AA543EFC153C50CC16F895694875 /* VerticalCardSwiper.release.xcconfig */; + baseConfigurationReference = 9471D6C44F58EA525824D9EFA74C618D /* VerticalCardSwiper.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1635,11 +2363,11 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 1598C9DF3E3F3C4DF167BC707AC9742E /* Build configuration list for PBXNativeTarget "Pods-NADA-iOS-forRelease" */ = { + 366E8673DC134D464F9922093A19AE38 /* Build configuration list for PBXNativeTarget "KakaoSDKAuth" */ = { isa = XCConfigurationList; buildConfigurations = ( - 4B1FBE932E3E59F3F2576CB27F970BF7 /* Debug */, - 7B8BB5EB9DF69A15750EA9A6DF733636 /* Release */, + 2958494001331539BA1BE3725FEC761E /* Debug */, + 3B71319B55979DA722037EFC4B9B5119 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -1680,6 +2408,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + A4F2B994BC62AA8D392217B060EEB331 /* Build configuration list for PBXNativeTarget "KakaoSDKUser" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7BDF01DE0C99E23C26C366ED421BA01E /* Debug */, + 4BC79C093EF96BEA190A9B118CD1B07E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; AE7B4FB01588B9E6DF09CB79FC7CE7BD /* Build configuration list for PBXAggregateTarget "SwiftLint" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -1698,6 +2435,24 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + DF3EF6BCC11903BEA7A6065D580BD15C /* Build configuration list for PBXNativeTarget "KakaoSDKCommon" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 31BAA8E94597DA1BC08717E1508CAE9F /* Debug */, + 79C7A4B182914295BA981437F5A64B2A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EEBC167A7CB74B48A8A1A93080568D7D /* Build configuration list for PBXNativeTarget "Pods-NADA-iOS-forRelease" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0605F32F9D5DE1D6EE9E21FD784F0F2 /* Debug */, + 0296E3797A6D1A5FA1E69684D80E2F1D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; diff --git a/Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth-Info.plist b/Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth-Info.plist new file mode 100644 index 00000000..19f44c51 --- /dev/null +++ b/Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.5.6 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth-dummy.m b/Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth-dummy.m new file mode 100644 index 00000000..773d6595 --- /dev/null +++ b/Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_KakaoSDKAuth : NSObject +@end +@implementation PodsDummy_KakaoSDKAuth +@end diff --git a/Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth-prefix.pch b/Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth-prefix.pch new file mode 100644 index 00000000..beb2a244 --- /dev/null +++ b/Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth-umbrella.h b/Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth-umbrella.h new file mode 100644 index 00000000..ad88c4ce --- /dev/null +++ b/Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth-umbrella.h @@ -0,0 +1,17 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "KakaoSDKAuth.h" + +FOUNDATION_EXPORT double KakaoSDKAuthVersionNumber; +FOUNDATION_EXPORT const unsigned char KakaoSDKAuthVersionString[]; + diff --git a/Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth.debug.xcconfig b/Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth.debug.xcconfig new file mode 100644 index 00000000..708bb3a1 --- /dev/null +++ b/Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth.debug.xcconfig @@ -0,0 +1,13 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKAuth +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKCommon" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/KakaoSDKAuth +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth.modulemap b/Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth.modulemap new file mode 100644 index 00000000..0cedfbba --- /dev/null +++ b/Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth.modulemap @@ -0,0 +1,6 @@ +framework module KakaoSDKAuth { + umbrella header "KakaoSDKAuth-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth.release.xcconfig b/Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth.release.xcconfig new file mode 100644 index 00000000..708bb3a1 --- /dev/null +++ b/Pods/Target Support Files/KakaoSDKAuth/KakaoSDKAuth.release.xcconfig @@ -0,0 +1,13 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKAuth +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKCommon" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/KakaoSDKAuth +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon-Info.plist b/Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon-Info.plist new file mode 100644 index 00000000..19f44c51 --- /dev/null +++ b/Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.5.6 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon-dummy.m b/Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon-dummy.m new file mode 100644 index 00000000..d14c2ff6 --- /dev/null +++ b/Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_KakaoSDKCommon : NSObject +@end +@implementation PodsDummy_KakaoSDKCommon +@end diff --git a/Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon-prefix.pch b/Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon-prefix.pch new file mode 100644 index 00000000..beb2a244 --- /dev/null +++ b/Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon-umbrella.h b/Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon-umbrella.h new file mode 100644 index 00000000..b53492a4 --- /dev/null +++ b/Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double KakaoSDKCommonVersionNumber; +FOUNDATION_EXPORT const unsigned char KakaoSDKCommonVersionString[]; + diff --git a/Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon.debug.xcconfig b/Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon.debug.xcconfig new file mode 100644 index 00000000..5727fc62 --- /dev/null +++ b/Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon.debug.xcconfig @@ -0,0 +1,13 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKCommon +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/KakaoSDKCommon +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon.modulemap b/Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon.modulemap new file mode 100644 index 00000000..a3964d87 --- /dev/null +++ b/Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon.modulemap @@ -0,0 +1,6 @@ +framework module KakaoSDKCommon { + umbrella header "KakaoSDKCommon-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon.release.xcconfig b/Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon.release.xcconfig new file mode 100644 index 00000000..5727fc62 --- /dev/null +++ b/Pods/Target Support Files/KakaoSDKCommon/KakaoSDKCommon.release.xcconfig @@ -0,0 +1,13 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKCommon +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/KakaoSDKCommon +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser-Info.plist b/Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser-Info.plist new file mode 100644 index 00000000..19f44c51 --- /dev/null +++ b/Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.5.6 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser-dummy.m b/Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser-dummy.m new file mode 100644 index 00000000..ad0dbb5c --- /dev/null +++ b/Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_KakaoSDKUser : NSObject +@end +@implementation PodsDummy_KakaoSDKUser +@end diff --git a/Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser-prefix.pch b/Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser-prefix.pch new file mode 100644 index 00000000..beb2a244 --- /dev/null +++ b/Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser-umbrella.h b/Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser-umbrella.h new file mode 100644 index 00000000..7cd856ed --- /dev/null +++ b/Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser-umbrella.h @@ -0,0 +1,17 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "KakaoSDKUser.h" + +FOUNDATION_EXPORT double KakaoSDKUserVersionNumber; +FOUNDATION_EXPORT const unsigned char KakaoSDKUserVersionString[]; + diff --git a/Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser.debug.xcconfig b/Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser.debug.xcconfig new file mode 100644 index 00000000..98b3ec61 --- /dev/null +++ b/Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser.debug.xcconfig @@ -0,0 +1,13 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKUser +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKAuth" "${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKCommon" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/KakaoSDKUser +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser.modulemap b/Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser.modulemap new file mode 100644 index 00000000..166b5e1b --- /dev/null +++ b/Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser.modulemap @@ -0,0 +1,6 @@ +framework module KakaoSDKUser { + umbrella header "KakaoSDKUser-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser.release.xcconfig b/Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser.release.xcconfig new file mode 100644 index 00000000..98b3ec61 --- /dev/null +++ b/Pods/Target Support Files/KakaoSDKUser/KakaoSDKUser.release.xcconfig @@ -0,0 +1,13 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKUser +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKAuth" "${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKCommon" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/KakaoSDKUser +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-acknowledgements.markdown b/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-acknowledgements.markdown index e2fcdacd..08840dd8 100644 --- a/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-acknowledgements.markdown +++ b/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-acknowledgements.markdown @@ -24,6 +24,621 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +## KakaoSDKAuth + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +## KakaoSDKCommon + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +## KakaoSDKUser + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + ## Moya The MIT License (MIT) diff --git a/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-acknowledgements.plist b/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-acknowledgements.plist index 1fde4c69..4b5a3f31 100644 --- a/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-acknowledgements.plist +++ b/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-acknowledgements.plist @@ -41,6 +41,639 @@ THE SOFTWARE. Type PSGroupSpecifier + + FooterText + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + License + MIT + Title + KakaoSDKAuth + Type + PSGroupSpecifier + + + FooterText + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + License + MIT + Title + KakaoSDKCommon + Type + PSGroupSpecifier + + + FooterText + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + License + MIT + Title + KakaoSDKUser + Type + PSGroupSpecifier + FooterText The MIT License (MIT) diff --git a/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-frameworks-Debug-input-files.xcfilelist b/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-frameworks-Debug-input-files.xcfilelist index aaa3b209..52e79366 100644 --- a/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-frameworks-Debug-input-files.xcfilelist +++ b/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-frameworks-Debug-input-files.xcfilelist @@ -1,5 +1,8 @@ ${PODS_ROOT}/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-frameworks.sh ${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework +${BUILT_PRODUCTS_DIR}/KakaoSDKAuth/KakaoSDKAuth.framework +${BUILT_PRODUCTS_DIR}/KakaoSDKCommon/KakaoSDKCommon.framework +${BUILT_PRODUCTS_DIR}/KakaoSDKUser/KakaoSDKUser.framework ${BUILT_PRODUCTS_DIR}/Moya/Moya.framework ${BUILT_PRODUCTS_DIR}/SkeletonView/SkeletonView.framework ${BUILT_PRODUCTS_DIR}/VerticalCardSwiper/VerticalCardSwiper.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-frameworks-Debug-output-files.xcfilelist b/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-frameworks-Debug-output-files.xcfilelist index 696efd39..e38ecbd0 100644 --- a/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-frameworks-Debug-output-files.xcfilelist +++ b/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-frameworks-Debug-output-files.xcfilelist @@ -1,4 +1,7 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KakaoSDKAuth.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KakaoSDKCommon.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KakaoSDKUser.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Moya.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SkeletonView.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/VerticalCardSwiper.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-frameworks-Release-input-files.xcfilelist b/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-frameworks-Release-input-files.xcfilelist index aaa3b209..52e79366 100644 --- a/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-frameworks-Release-input-files.xcfilelist +++ b/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-frameworks-Release-input-files.xcfilelist @@ -1,5 +1,8 @@ ${PODS_ROOT}/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-frameworks.sh ${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework +${BUILT_PRODUCTS_DIR}/KakaoSDKAuth/KakaoSDKAuth.framework +${BUILT_PRODUCTS_DIR}/KakaoSDKCommon/KakaoSDKCommon.framework +${BUILT_PRODUCTS_DIR}/KakaoSDKUser/KakaoSDKUser.framework ${BUILT_PRODUCTS_DIR}/Moya/Moya.framework ${BUILT_PRODUCTS_DIR}/SkeletonView/SkeletonView.framework ${BUILT_PRODUCTS_DIR}/VerticalCardSwiper/VerticalCardSwiper.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-frameworks-Release-output-files.xcfilelist b/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-frameworks-Release-output-files.xcfilelist index 696efd39..e38ecbd0 100644 --- a/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-frameworks-Release-output-files.xcfilelist +++ b/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-frameworks-Release-output-files.xcfilelist @@ -1,4 +1,7 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KakaoSDKAuth.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KakaoSDKCommon.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KakaoSDKUser.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Moya.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SkeletonView.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/VerticalCardSwiper.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-frameworks.sh b/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-frameworks.sh index d8d482d8..fc154dc4 100755 --- a/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-frameworks.sh +++ b/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease-frameworks.sh @@ -176,12 +176,18 @@ code_sign_if_enabled() { if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework" + install_framework "${BUILT_PRODUCTS_DIR}/KakaoSDKAuth/KakaoSDKAuth.framework" + install_framework "${BUILT_PRODUCTS_DIR}/KakaoSDKCommon/KakaoSDKCommon.framework" + install_framework "${BUILT_PRODUCTS_DIR}/KakaoSDKUser/KakaoSDKUser.framework" install_framework "${BUILT_PRODUCTS_DIR}/Moya/Moya.framework" install_framework "${BUILT_PRODUCTS_DIR}/SkeletonView/SkeletonView.framework" install_framework "${BUILT_PRODUCTS_DIR}/VerticalCardSwiper/VerticalCardSwiper.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework" + install_framework "${BUILT_PRODUCTS_DIR}/KakaoSDKAuth/KakaoSDKAuth.framework" + install_framework "${BUILT_PRODUCTS_DIR}/KakaoSDKCommon/KakaoSDKCommon.framework" + install_framework "${BUILT_PRODUCTS_DIR}/KakaoSDKUser/KakaoSDKUser.framework" install_framework "${BUILT_PRODUCTS_DIR}/Moya/Moya.framework" install_framework "${BUILT_PRODUCTS_DIR}/SkeletonView/SkeletonView.framework" install_framework "${BUILT_PRODUCTS_DIR}/VerticalCardSwiper/VerticalCardSwiper.framework" diff --git a/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease.debug.xcconfig b/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease.debug.xcconfig index f2f8fbfe..68904a46 100644 --- a/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease.debug.xcconfig +++ b/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease.debug.xcconfig @@ -1,10 +1,10 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/Moya" "${PODS_CONFIGURATION_BUILD_DIR}/SkeletonView" "${PODS_CONFIGURATION_BUILD_DIR}/VerticalCardSwiper" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKAuth" "${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKCommon" "${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKUser" "${PODS_CONFIGURATION_BUILD_DIR}/Moya" "${PODS_CONFIGURATION_BUILD_DIR}/SkeletonView" "${PODS_CONFIGURATION_BUILD_DIR}/VerticalCardSwiper" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SkeletonView/SkeletonView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/VerticalCardSwiper/VerticalCardSwiper.framework/Headers" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKAuth/KakaoSDKAuth.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKCommon/KakaoSDKCommon.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKUser/KakaoSDKUser.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SkeletonView/SkeletonView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/VerticalCardSwiper/VerticalCardSwiper.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "CFNetwork" -framework "Foundation" -framework "Moya" -framework "SkeletonView" -framework "VerticalCardSwiper" +OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "CFNetwork" -framework "Foundation" -framework "KakaoSDKAuth" -framework "KakaoSDKCommon" -framework "KakaoSDKUser" -framework "Moya" -framework "SkeletonView" -framework "VerticalCardSwiper" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease.release.xcconfig b/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease.release.xcconfig index f2f8fbfe..68904a46 100644 --- a/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease.release.xcconfig +++ b/Pods/Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease.release.xcconfig @@ -1,10 +1,10 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/Moya" "${PODS_CONFIGURATION_BUILD_DIR}/SkeletonView" "${PODS_CONFIGURATION_BUILD_DIR}/VerticalCardSwiper" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKAuth" "${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKCommon" "${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKUser" "${PODS_CONFIGURATION_BUILD_DIR}/Moya" "${PODS_CONFIGURATION_BUILD_DIR}/SkeletonView" "${PODS_CONFIGURATION_BUILD_DIR}/VerticalCardSwiper" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SkeletonView/SkeletonView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/VerticalCardSwiper/VerticalCardSwiper.framework/Headers" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKAuth/KakaoSDKAuth.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKCommon/KakaoSDKCommon.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KakaoSDKUser/KakaoSDKUser.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SkeletonView/SkeletonView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/VerticalCardSwiper/VerticalCardSwiper.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "CFNetwork" -framework "Foundation" -framework "Moya" -framework "SkeletonView" -framework "VerticalCardSwiper" +OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "CFNetwork" -framework "Foundation" -framework "KakaoSDKAuth" -framework "KakaoSDKCommon" -framework "KakaoSDKUser" -framework "Moya" -framework "SkeletonView" -framework "VerticalCardSwiper" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) From cd862b339a7f7e477b0374c08d7809ab09a5599a Mon Sep 17 00:00:00 2001 From: MinjaeLee <2alswo7@khu.ac.kr> Date: Tue, 21 Sep 2021 22:32:40 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[FEAT]=20#4=20-=20UIView+Extension=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80,=20=EB=91=A5=EA=B7=BC=20=EB=AA=A8=EC=84=9C?= =?UTF-8?q?=EB=A6=AC=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NADA-iOS-forRelease.xcodeproj/project.pbxproj | 4 ++ .../Extensions/UIView+Extension.swift | 65 +++++++++++++++++++ .../Resouces/Storyboards/Login.storyboard | 10 +++ 3 files changed, 79 insertions(+) create mode 100644 NADA-iOS-forRelease/Resouces/Extensions/UIView+Extension.swift diff --git a/NADA-iOS-forRelease.xcodeproj/project.pbxproj b/NADA-iOS-forRelease.xcodeproj/project.pbxproj index a5b115bb..a7c6bbb7 100644 --- a/NADA-iOS-forRelease.xcodeproj/project.pbxproj +++ b/NADA-iOS-forRelease.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 3909242F26FA15E800236C51 /* UIView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3909242E26FA15E800236C51 /* UIView+Extension.swift */; }; 3979709626FA0BE5003FB4F5 /* LoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3979709526FA0BE5003FB4F5 /* LoginViewController.swift */; }; 3979709826FA0BF0003FB4F5 /* Login.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3979709726FA0BF0003FB4F5 /* Login.storyboard */; }; DBBB91E1639641F40C5B4416 /* Pods_NADA_iOS_forRelease.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A2183AE0E469153221624A0 /* Pods_NADA_iOS_forRelease.framework */; }; @@ -33,6 +34,7 @@ /* Begin PBXFileReference section */ 1E770167DDA25A2CE063AA5C /* Pods-NADA-iOS-forRelease.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NADA-iOS-forRelease.release.xcconfig"; path = "Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease.release.xcconfig"; sourceTree = ""; }; + 3909242E26FA15E800236C51 /* UIView+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+Extension.swift"; sourceTree = ""; }; 3979709526FA0BE5003FB4F5 /* LoginViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginViewController.swift; sourceTree = ""; }; 3979709726FA0BF0003FB4F5 /* Login.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Login.storyboard; sourceTree = ""; }; 4A2183AE0E469153221624A0 /* Pods_NADA_iOS_forRelease.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_NADA_iOS_forRelease.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -252,6 +254,7 @@ isa = PBXGroup; children = ( F8FC43A626C020780033E151 /* TempExtensions.swift */, + 3909242E26FA15E800236C51 /* UIView+Extension.swift */, ); path = Extensions; sourceTree = ""; @@ -401,6 +404,7 @@ files = ( F8FC43B126C020A70033E151 /* TempNetwork.swift in Sources */, F8FC438A26C01CDD0033E151 /* MainViewController.swift in Sources */, + 3909242F26FA15E800236C51 /* UIView+Extension.swift in Sources */, F83206AA26F61E3700D61711 /* FrontCardCell.swift in Sources */, 3979709626FA0BE5003FB4F5 /* LoginViewController.swift in Sources */, F8FC43AF26C0209A0033E151 /* TempModel.swift in Sources */, diff --git a/NADA-iOS-forRelease/Resouces/Extensions/UIView+Extension.swift b/NADA-iOS-forRelease/Resouces/Extensions/UIView+Extension.swift new file mode 100644 index 00000000..e14b19e4 --- /dev/null +++ b/NADA-iOS-forRelease/Resouces/Extensions/UIView+Extension.swift @@ -0,0 +1,65 @@ +// +// UIView+Extension.swift +// NADA-iOS-forRelease +// +// Created by 민 on 2021/09/21. +// + +import Foundation +import UIKit + +//@IBDesignable +extension UIView { + + @IBInspectable + var cornerRadius: CGFloat { + get { + return layer.cornerRadius + } + set { + layer.cornerRadius = newValue + } + } + + + @IBInspectable + var borderWidth: CGFloat { + get { + return layer.borderWidth + } + set { + layer.borderWidth = newValue + } + } + + @IBInspectable + var borderColor: UIColor? { + get { + if let color = layer.borderColor { + return UIColor(cgColor: color) + } + return nil + } + set { + if let color = newValue { + layer.borderColor = color.cgColor + } else { + layer.borderColor = nil + } + } + } +} + +// MARK: - load xib + +extension UIView { + static func loadFromXib(withOwner: Any? = nil, options: [UINib.OptionsKey: Any]? = nil) -> Self { + let bundle = Bundle(for: self) + let nib = UINib(nibName: "\(self)", bundle: bundle) + + guard let view = nib.instantiate(withOwner: withOwner, options: options).first as? Self else { + fatalError("Could not load view from nib file.") + } + return view + } +} diff --git a/NADA-iOS-forRelease/Resouces/Storyboards/Login.storyboard b/NADA-iOS-forRelease/Resouces/Storyboards/Login.storyboard index 84377ceb..98b50640 100644 --- a/NADA-iOS-forRelease/Resouces/Storyboards/Login.storyboard +++ b/NADA-iOS-forRelease/Resouces/Storyboards/Login.storyboard @@ -64,6 +64,11 @@