diff --git a/ChaRo-iOS/ChaRo-iOS.xcodeproj/project.pbxproj b/ChaRo-iOS/ChaRo-iOS.xcodeproj/project.pbxproj index 877c253f..833b0427 100644 --- a/ChaRo-iOS/ChaRo-iOS.xcodeproj/project.pbxproj +++ b/ChaRo-iOS/ChaRo-iOS.xcodeproj/project.pbxproj @@ -218,6 +218,8 @@ 70FD425F2817158900631BB7 /* UpdateProfileService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70FD425E2817158900631BB7 /* UpdateProfileService.swift */; }; 70FD4261281715B300631BB7 /* UserDefaultKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70FD4260281715B300631BB7 /* UserDefaultKey.swift */; }; 70FD4263281839B400631BB7 /* String+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70FD4262281839B400631BB7 /* String+.swift */; }; + 7FC2455B2866008A00B3756F /* ExpendedImageVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FC2455A2866008A00B3756F /* ExpendedImageVC.swift */; }; + 7FC2455D2866013000B3756F /* ExpendedImageViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FC2455C2866013000B3756F /* ExpendedImageViewModel.swift */; }; 8B188860E6B0E2739A7DC8FC /* Pods_ChaRo_iOSTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A28755551AA4AA1EE63FA224 /* Pods_ChaRo_iOSTests.framework */; }; DDA7344339CF4453CB1007E6 /* Pods_ChaRo_iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2D4415326DCA1FAFA4CF005 /* Pods_ChaRo_iOS.framework */; }; F42DA7FD2692235C003DA0DC /* PostTitleDataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F42DA7FC2692235C003DA0DC /* PostTitleDataModel.swift */; }; @@ -490,6 +492,8 @@ 70FD425E2817158900631BB7 /* UpdateProfileService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateProfileService.swift; sourceTree = ""; }; 70FD4260281715B300631BB7 /* UserDefaultKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultKey.swift; sourceTree = ""; }; 70FD4262281839B400631BB7 /* String+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+.swift"; sourceTree = ""; }; + 7FC2455A2866008A00B3756F /* ExpendedImageVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExpendedImageVC.swift; sourceTree = ""; }; + 7FC2455C2866013000B3756F /* ExpendedImageViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExpendedImageViewModel.swift; sourceTree = ""; }; 83D65C0CC1D310B45627BC8F /* Pods-ChaRo-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ChaRo-iOS.release.xcconfig"; path = "Target Support Files/Pods-ChaRo-iOS/Pods-ChaRo-iOS.release.xcconfig"; sourceTree = ""; }; A28755551AA4AA1EE63FA224 /* Pods_ChaRo_iOSTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ChaRo_iOSTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D2D4415326DCA1FAFA4CF005 /* Pods_ChaRo_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ChaRo_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -571,7 +575,6 @@ 3CAE519D26C241D300DB8A41 /* MyPageScene */, 3CAE519726C240E100DB8A41 /* OnBoardScene */, 3CAE519C26C241B500DB8A41 /* PostSearchScene */, - 36A2FECE278F206800B1D87A /* New Group */, 3610A8912693730700EFC794 /* CommonCVC.swift */, 360937AB2699EF7B005392BB /* TabbarCVC.swift */, 7084948126A23AB7001B3C2B /* CollectionViewFooter.swift */, @@ -602,13 +605,6 @@ path = FollowScene; sourceTree = ""; }; - 36A2FECE278F206800B1D87A /* New Group */ = { - isa = PBXGroup; - children = ( - ); - path = "New Group"; - sourceTree = ""; - }; 36B69F7E2775DC0D00FEEAAE /* FollowScene */ = { isa = PBXGroup; children = ( @@ -1224,6 +1220,7 @@ 3CB532CA27C507C2005AAB1D /* Component */, F49DE532268E148300A8185C /* PostDetailVC.swift */, 3C7A0C4E27CE838100B78854 /* PostLikeListVC.swift */, + 7FC2455A2866008A00B3756F /* ExpendedImageVC.swift */, ); path = PostDetailScene; sourceTree = ""; @@ -1419,6 +1416,7 @@ 3C7A0C5027CE83AE00B78854 /* PostLikeListViewModel.swift */, 3C86C1BA27DF92CE00A41FCE /* PostDetailViewModel.swift */, 3C34CC7027F19B010016069C /* AddressMainViewModel.swift */, + 7FC2455C2866013000B3756F /* ExpendedImageViewModel.swift */, ); path = ViewModels; sourceTree = ""; @@ -1714,6 +1712,7 @@ 3C597C48280EA0CA007153B0 /* UINavigationController+.swift in Sources */, F42DA80E2694D47F003DA0DC /* PostCourseThemeTVC.swift in Sources */, F4CC1B65269B943B009A0C01 /* CreatePostPhotoTVC.swift in Sources */, + 7FC2455D2866013000B3756F /* ExpendedImageViewModel.swift in Sources */, 3C879BEF268B147D00C41BB8 /* UITableView+.swift in Sources */, 36E445BB277CD6A2008E31BE /* SettingViewDataModel.swift in Sources */, 3C879BF3268B14A800C41BB8 /* UIColor+.swift in Sources */, @@ -1800,6 +1799,7 @@ 70A37C3126EF5FE3006CCEA9 /* JoinVC.swift in Sources */, 3CB532CF27C50950005AAB1D /* ImageLiterals.swift in Sources */, 7062C84B270CDE6F00C1CD2E /* IsDuplicatedNicknameService.swift in Sources */, + 7FC2455B2866008A00B3756F /* ExpendedImageVC.swift in Sources */, 365FEF4927D66C9C0036E182 /* FilterCellView.swift in Sources */, F4CC1B90269C5EFA009A0C01 /* CreatePostPhotosCVC.swift in Sources */, 3C5B15B82749802600F178A8 /* GenericResponse.swift in Sources */, @@ -2045,7 +2045,7 @@ CODE_SIGN_ENTITLEMENTS = "ChaRo-iOS/ChaRo-iOS.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 2ZS26WP93H; + DEVELOPMENT_TEAM = J8A843466G; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)", @@ -2077,7 +2077,7 @@ CODE_SIGN_ENTITLEMENTS = "ChaRo-iOS/ChaRo-iOS.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 2ZS26WP93H; + DEVELOPMENT_TEAM = JCV986BPR5; "EXCLUDED_ARCHS[sdk=*]" = arm64; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", diff --git a/ChaRo-iOS/ChaRo-iOS.xcworkspace/appleLogo.svg b/ChaRo-iOS/ChaRo-iOS.xcworkspace/appleLogo.svg deleted file mode 100644 index 4a362466..00000000 --- a/ChaRo-iOS/ChaRo-iOS.xcworkspace/appleLogo.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/ChaRo-iOS/ChaRo-iOS/Source/ViewModels/ExpendedImageViewModel.swift b/ChaRo-iOS/ChaRo-iOS/Source/ViewModels/ExpendedImageViewModel.swift new file mode 100644 index 00000000..5267e075 --- /dev/null +++ b/ChaRo-iOS/ChaRo-iOS/Source/ViewModels/ExpendedImageViewModel.swift @@ -0,0 +1,39 @@ +// +// ExpendedImageViewModel.swift +// ChaRo-iOS +// +// Created by 장혜령 on 2022/06/24. +// + +import Foundation +import RxSwift + +class ExpendedImageViewModel { + + private let dismissibleHeight: CGFloat = 300 + private let newHeightSubject = PublishSubject() + + struct Input { + let scrolledOffsetSubject: PublishSubject + } + + struct Output { + let newHeightSubject: PublishSubject + } + + func transform(to input: Input, disposeBag: DisposeBag) -> Output { + input.scrolledOffsetSubject.bind(onNext: { [weak self] yOffset in + let newHeight = self?.calculateNewHeight(with: yOffset) + self?.newHeightSubject.onNext(newHeight) + }).disposed(by: disposeBag) + return Output(newHeightSubject: newHeightSubject) + } + + private func calculateNewHeight(with yOffset: CGFloat) -> CGFloat? { + if yOffset > 0 { + return yOffset > dismissibleHeight ? -1 : yOffset + } + return nil + } + +} diff --git a/ChaRo-iOS/ChaRo-iOS/Source/Views/Cells/TVC/PostDetailScene/PostPhotoCVC.swift b/ChaRo-iOS/ChaRo-iOS/Source/Views/Cells/TVC/PostDetailScene/PostPhotoCVC.swift index b790d5c3..20ee9f0f 100644 --- a/ChaRo-iOS/ChaRo-iOS/Source/Views/Cells/TVC/PostDetailScene/PostPhotoCVC.swift +++ b/ChaRo-iOS/ChaRo-iOS/Source/Views/Cells/TVC/PostDetailScene/PostPhotoCVC.swift @@ -11,7 +11,7 @@ import Then final class PostPhotoCVC: UICollectionViewCell{ - private let imageView = UIImageView().then { + let imageView = UIImageView().then { $0.contentMode = .scaleAspectFill } diff --git a/ChaRo-iOS/ChaRo-iOS/Source/Views/Cells/TVC/PostDetailScene/PostPhotoTVC.swift b/ChaRo-iOS/ChaRo-iOS/Source/Views/Cells/TVC/PostDetailScene/PostPhotoTVC.swift index 3a4e22f3..29614bc9 100644 --- a/ChaRo-iOS/ChaRo-iOS/Source/Views/Cells/TVC/PostDetailScene/PostPhotoTVC.swift +++ b/ChaRo-iOS/ChaRo-iOS/Source/Views/Cells/TVC/PostDetailScene/PostPhotoTVC.swift @@ -13,6 +13,7 @@ import RxSwift final class PostPhotoTVC: UITableViewCell{ // MARK: - properties + var presentingClosure: (() -> ())? private let disposeBag = DisposeBag() private let photoSubject = PublishSubject<[String]>() @@ -77,6 +78,10 @@ final class PostPhotoTVC: UITableViewCell{ cellType: PostPhotoCVC.self)) { row, element, cell in cell.setImage(to: element) }.disposed(by: disposeBag) + + collectionView.rx.itemSelected.bind(onNext: { [weak self] indexPath in + self?.presentingClosure?() + }) } func setContent(imageList: [String]) { diff --git a/ChaRo-iOS/ChaRo-iOS/Source/Views/VCs/PostDetailScene/ExpendedImageVC.swift b/ChaRo-iOS/ChaRo-iOS/Source/Views/VCs/PostDetailScene/ExpendedImageVC.swift new file mode 100644 index 00000000..451f58af --- /dev/null +++ b/ChaRo-iOS/ChaRo-iOS/Source/Views/VCs/PostDetailScene/ExpendedImageVC.swift @@ -0,0 +1,171 @@ +// +// ExpendedImageVC.swift +// ChaRo-iOS +// +// Created by 장혜령 on 2022/06/24. +// + +import UIKit +import SnapKit +import Then +import RxSwift + +final class ExpendedImageVC: UIViewController { + + // MARK: - properties + private let disposeBag = DisposeBag() + private let imageList: [String] + private let animator = UIViewPropertyAnimator(duration: 0.4, curve: .easeInOut) + private let scrolledOffsetSubject = PublishSubject() + private let photoSubject = ReplaySubject<[String]>.create(bufferSize: 1) + + private let xmarkButton = UIButton().then { + $0.setImage(ImageLiterals.icCloseWhite, for: .normal) + } + + private lazy var photoNumberButton = UIButton().then { + $0.titleLabel?.font = .notoSansMediumFont(ofSize: 15) + $0.setTitleColor(.white, for: .normal) + $0.setTitle("1 / \(imageList.count)", for: .normal) + $0.layer.cornerRadius = 25.0 / 2.0 + $0.backgroundColor = .gray10.withAlphaComponent(0.7) + } + + private lazy var collectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout()).then { + let layout = UICollectionViewFlowLayout() + let screenWidth = UIScreen.main.bounds.width + layout.itemSize = CGSize(width: screenWidth, height: UIScreen.main.bounds.height) + layout.minimumLineSpacing = 0 + layout.minimumInteritemSpacing = 0 + layout.scrollDirection = .horizontal + $0.setCollectionViewLayout(layout, animated: true) + $0.tintColor = .clear + $0.backgroundColor = .clear + $0.register(cell: PostPhotoCVC.self) + $0.rx.setDelegate(self) + $0.showsHorizontalScrollIndicator = false + $0.isPagingEnabled = true + } + + private let viewModel: ExpendedImageViewModel + + init(imageList: [String]) { + self.imageList = imageList + self.photoSubject.onNext(imageList) + self.viewModel = ExpendedImageViewModel() + super.init(nibName: nil, bundle: nil) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func viewDidLoad() { + super.viewDidLoad() + bind() + render() + configUI() + } + + private func render() { + view.addSubviews([collectionView, xmarkButton, photoNumberButton]) + collectionView.snp.makeConstraints { + $0.top.bottom.equalTo(view.safeAreaLayoutGuide) + $0.leading.trailing.equalToSuperview() + } + + xmarkButton.snp.makeConstraints { + $0.top.equalTo(view.safeAreaLayoutGuide).offset(11) + $0.trailing.equalToSuperview().inset(10) + $0.width.height.equalTo(50) + } + + photoNumberButton.snp.makeConstraints { + $0.centerX.equalToSuperview() + $0.bottom.equalTo(view.safeAreaLayoutGuide).inset(20) + $0.width.equalTo(61) + $0.height.equalTo(25) + } + } + + private func configUI() { + view.backgroundColor = .black.withAlphaComponent(0.9) + setupPanGesture() + } + + private func setupPanGesture() { + let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePanGesture(gesture:))) + panGesture.delegate = self + view.addGestureRecognizer(panGesture) + } + + @objc + private func handlePanGesture(gesture: UIPanGestureRecognizer) { + let transtionY = gesture.translation(in: view).y + switch gesture.state{ + case .changed: + scrolledOffsetSubject.onNext(transtionY) + case .ended: + animateContainerView(yOffset: 0) + default: + break + } + } + + private func animateContainerView(yOffset: CGFloat) { + collectionView.snp.updateConstraints { + $0.top.equalTo(view.safeAreaLayoutGuide).offset(yOffset) + } + } + + private func animateDismissView() { + animator.addAnimations { + self.view.backgroundColor = .clear + self.collectionView.alpha = 0 + } + animator.addCompletion { _ in + self.dismiss(animated: false) + } + animator.startAnimation() + } + + private func bind() { + photoSubject + .bind(to: collectionView.rx.items(cellIdentifier: PostPhotoCVC.className, + cellType: PostPhotoCVC.self)) { row, element, cell in + cell.imageView.contentMode = .scaleAspectFit + cell.setImage(to: element) + }.disposed(by: disposeBag) + + xmarkButton.rx.tap + .asDriver() + .drive(onNext: { [weak self] _ in + self?.dismiss(animated: true, completion: nil) + }).disposed(by: disposeBag) + + bindToViewModel() + } + + private func bindToViewModel() { + let output = viewModel.transform(to: ExpendedImageViewModel.Input(scrolledOffsetSubject: scrolledOffsetSubject), disposeBag: disposeBag) + output.newHeightSubject + .filter { $0 != nil } + .bind(onNext: { yoffset in + yoffset == -1 ? self.animateDismissView() : self.animateContainerView(yOffset: yoffset ?? 0) + }).disposed(by: disposeBag) + } +} + +extension ExpendedImageVC: UIGestureRecognizerDelegate { + func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { + return true + } +} + +extension ExpendedImageVC: UICollectionViewDelegate { + func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { + let currentPage = Int(scrollView.contentOffset.x) / Int(scrollView.frame.width) + photoNumberButton.setTitle("\(currentPage + 1) / \(imageList.count)", for: .normal) + } +} + diff --git a/ChaRo-iOS/ChaRo-iOS/Source/Views/VCs/PostDetailScene/PostDetailVC.swift b/ChaRo-iOS/ChaRo-iOS/Source/Views/VCs/PostDetailScene/PostDetailVC.swift index 151820ed..38686759 100644 --- a/ChaRo-iOS/ChaRo-iOS/Source/Views/VCs/PostDetailScene/PostDetailVC.swift +++ b/ChaRo-iOS/ChaRo-iOS/Source/Views/VCs/PostDetailScene/PostDetailVC.swift @@ -331,7 +331,13 @@ extension PostDetailVC: UITableViewDataSource { case 1: guard let cell = tableView.dequeueReusableCell(withType: PostPhotoTVC.self, for: indexPath) else { return UITableViewCell() } - cell.setContent(imageList: [additionalData.image] + postData.images) + let imageList = [additionalData.image] + postData.images + cell.setContent(imageList: imageList) + cell.presentingClosure = { [weak self] in + let nextVC = ExpendedImageVC(imageList: imageList) + nextVC.modalPresentationStyle = .fullScreen + self?.present(nextVC, animated: true) + } return cell case 2: diff --git a/ChaRo-iOS/ChaRo-iOS/Source/Views/VCs/SignScene/LoginVC.swift b/ChaRo-iOS/ChaRo-iOS/Source/Views/VCs/SignScene/LoginVC.swift index 7117ada2..b27db51f 100644 --- a/ChaRo-iOS/ChaRo-iOS/Source/Views/VCs/SignScene/LoginVC.swift +++ b/ChaRo-iOS/ChaRo-iOS/Source/Views/VCs/SignScene/LoginVC.swift @@ -34,8 +34,13 @@ class LoginVC: UIViewController { configureLoginButtonUI() configureTextfieldUI() configureNotificationCenter() + addTestUserAccount() } + private func addTestUserAccount() { + self.idTextField.text = "gpfud1998@naver.com" + self.pwdTextField.text = "charo0505" + } override func viewDidDisappear(_ animated: Bool) { removeObservers() } diff --git a/ChaRo-iOS/Podfile.lock b/ChaRo-iOS/Podfile.lock index 884ea989..6c03e1c5 100644 --- a/ChaRo-iOS/Podfile.lock +++ b/ChaRo-iOS/Podfile.lock @@ -1,88 +1,92 @@ PODS: - - Alamofire (5.5.0) - - AppAuth (1.4.0): - - AppAuth/Core (= 1.4.0) - - AppAuth/ExternalUserAgent (= 1.4.0) - - AppAuth/Core (1.4.0) - - AppAuth/ExternalUserAgent (1.4.0) - - Firebase/Analytics (8.12.1): + - Alamofire (5.6.1) + - AppAuth (1.5.0): + - AppAuth/Core (= 1.5.0) + - AppAuth/ExternalUserAgent (= 1.5.0) + - AppAuth/Core (1.5.0) + - AppAuth/ExternalUserAgent (1.5.0): + - AppAuth/Core + - Firebase/Analytics (9.1.0): - Firebase/Core - - Firebase/Core (8.12.1): + - Firebase/Core (9.1.0): - Firebase/CoreOnly - - FirebaseAnalytics (~> 8.12.0) - - Firebase/CoreOnly (8.12.1): - - FirebaseCore (= 8.12.1) - - Firebase/Messaging (8.12.1): + - FirebaseAnalytics (~> 9.1.0) + - Firebase/CoreOnly (9.1.0): + - FirebaseCore (= 9.1.0) + - Firebase/Messaging (9.1.0): - Firebase/CoreOnly - - FirebaseMessaging (~> 8.12.0) - - FirebaseAnalytics (8.12.0): - - FirebaseAnalytics/AdIdSupport (= 8.12.0) - - FirebaseCore (~> 8.0) - - FirebaseInstallations (~> 8.0) + - FirebaseMessaging (~> 9.1.0) + - FirebaseAnalytics (9.1.0): + - FirebaseAnalytics/AdIdSupport (= 9.1.0) + - FirebaseCore (~> 9.0) + - FirebaseInstallations (~> 9.0) - GoogleUtilities/AppDelegateSwizzler (~> 7.7) - GoogleUtilities/MethodSwizzler (~> 7.7) - GoogleUtilities/Network (~> 7.7) - "GoogleUtilities/NSData+zlib (~> 7.7)" - - nanopb (~> 2.30908.0) - - FirebaseAnalytics/AdIdSupport (8.12.0): - - FirebaseCore (~> 8.0) - - FirebaseInstallations (~> 8.0) - - GoogleAppMeasurement (= 8.12.0) + - nanopb (< 2.30910.0, >= 2.30908.0) + - FirebaseAnalytics/AdIdSupport (9.1.0): + - FirebaseCore (~> 9.0) + - FirebaseInstallations (~> 9.0) + - GoogleAppMeasurement (= 9.1.0) - GoogleUtilities/AppDelegateSwizzler (~> 7.7) - GoogleUtilities/MethodSwizzler (~> 7.7) - GoogleUtilities/Network (~> 7.7) - "GoogleUtilities/NSData+zlib (~> 7.7)" - - nanopb (~> 2.30908.0) - - FirebaseCore (8.12.1): - - FirebaseCoreDiagnostics (~> 8.0) + - nanopb (< 2.30910.0, >= 2.30908.0) + - FirebaseCore (9.1.0): + - FirebaseCoreDiagnostics (~> 9.0) + - FirebaseCoreInternal (~> 9.0) - GoogleUtilities/Environment (~> 7.7) - GoogleUtilities/Logger (~> 7.7) - - FirebaseCoreDiagnostics (8.12.0): - - GoogleDataTransport (~> 9.1) + - FirebaseCoreDiagnostics (9.1.0): + - GoogleDataTransport (< 10.0.0, >= 9.1.4) - GoogleUtilities/Environment (~> 7.7) - GoogleUtilities/Logger (~> 7.7) - - nanopb (~> 2.30908.0) - - FirebaseInstallations (8.12.0): - - FirebaseCore (~> 8.0) + - nanopb (< 2.30910.0, >= 2.30908.0) + - FirebaseCoreInternal (9.1.0): + - "GoogleUtilities/NSData+zlib (~> 7.7)" + - FirebaseInstallations (9.1.0): + - FirebaseCore (~> 9.0) - GoogleUtilities/Environment (~> 7.7) - GoogleUtilities/UserDefaults (~> 7.7) - - PromisesObjC (< 3.0, >= 1.2) - - FirebaseMessaging (8.12.0): - - FirebaseCore (~> 8.0) - - FirebaseInstallations (~> 8.0) - - GoogleDataTransport (~> 9.1) + - PromisesObjC (~> 2.1) + - FirebaseMessaging (9.1.0): + - FirebaseCore (~> 9.0) + - FirebaseInstallations (~> 9.0) + - GoogleDataTransport (< 10.0.0, >= 9.1.4) - GoogleUtilities/AppDelegateSwizzler (~> 7.7) - GoogleUtilities/Environment (~> 7.7) - GoogleUtilities/Reachability (~> 7.7) - GoogleUtilities/UserDefaults (~> 7.7) - - nanopb (~> 2.30908.0) - - GoogleAppMeasurement (8.12.0): - - GoogleAppMeasurement/AdIdSupport (= 8.12.0) + - nanopb (< 2.30910.0, >= 2.30908.0) + - GoogleAppMeasurement (9.1.0): + - GoogleAppMeasurement/AdIdSupport (= 9.1.0) - GoogleUtilities/AppDelegateSwizzler (~> 7.7) - GoogleUtilities/MethodSwizzler (~> 7.7) - GoogleUtilities/Network (~> 7.7) - "GoogleUtilities/NSData+zlib (~> 7.7)" - - nanopb (~> 2.30908.0) - - GoogleAppMeasurement/AdIdSupport (8.12.0): - - GoogleAppMeasurement/WithoutAdIdSupport (= 8.12.0) + - nanopb (< 2.30910.0, >= 2.30908.0) + - GoogleAppMeasurement/AdIdSupport (9.1.0): + - GoogleAppMeasurement/WithoutAdIdSupport (= 9.1.0) - GoogleUtilities/AppDelegateSwizzler (~> 7.7) - GoogleUtilities/MethodSwizzler (~> 7.7) - GoogleUtilities/Network (~> 7.7) - "GoogleUtilities/NSData+zlib (~> 7.7)" - - nanopb (~> 2.30908.0) - - GoogleAppMeasurement/WithoutAdIdSupport (8.12.0): + - nanopb (< 2.30910.0, >= 2.30908.0) + - GoogleAppMeasurement/WithoutAdIdSupport (9.1.0): - GoogleUtilities/AppDelegateSwizzler (~> 7.7) - GoogleUtilities/MethodSwizzler (~> 7.7) - GoogleUtilities/Network (~> 7.7) - "GoogleUtilities/NSData+zlib (~> 7.7)" - - nanopb (~> 2.30908.0) - - GoogleDataTransport (9.1.2): - - GoogleUtilities/Environment (~> 7.2) - - nanopb (~> 2.30908.0) + - nanopb (< 2.30910.0, >= 2.30908.0) + - GoogleDataTransport (9.1.4): + - GoogleUtilities/Environment (~> 7.7) + - nanopb (< 2.30910.0, >= 2.30908.0) - PromisesObjC (< 3.0, >= 1.2) - - GoogleSignIn (6.1.0): - - AppAuth (~> 1.4) - - GTMAppAuth (~> 1.0) + - GoogleSignIn (6.2.2): + - AppAuth (~> 1.5) + - GTMAppAuth (~> 1.3) - GTMSessionFetcher/Core (~> 1.1) - GoogleUtilities/AppDelegateSwizzler (7.7.0): - GoogleUtilities/Environment @@ -103,29 +107,29 @@ PODS: - GoogleUtilities/Logger - GoogleUtilities/UserDefaults (7.7.0): - GoogleUtilities/Logger - - GTMAppAuth (1.2.2): + - GTMAppAuth (1.3.0): - AppAuth/Core (~> 1.4) - GTMSessionFetcher/Core (~> 1.5) - - GTMSessionFetcher/Core (1.7.0) - - KakaoSDKAuth (2.8.6): - - KakaoSDKCommon (= 2.8.6) - - KakaoSDKCommon (2.8.6): - - KakaoSDKCommon/Common (= 2.8.6) - - KakaoSDKCommon/Network (= 2.8.6) - - KakaoSDKCommon/Common (2.8.6) - - KakaoSDKCommon/Network (2.8.6): + - GTMSessionFetcher/Core (1.7.2) + - KakaoSDKAuth (2.10.1): + - KakaoSDKCommon (= 2.10.1) + - KakaoSDKCommon (2.10.1): + - KakaoSDKCommon/Common (= 2.10.1) + - KakaoSDKCommon/Network (= 2.10.1) + - KakaoSDKCommon/Common (2.10.1) + - KakaoSDKCommon/Network (2.10.1): - Alamofire (~> 5.1) - - KakaoSDKCommon/Common (= 2.8.6) - - KakaoSDKUser (2.8.6): - - KakaoSDKAuth (= 2.8.6) + - KakaoSDKCommon/Common (= 2.10.1) + - KakaoSDKUser (2.10.1): + - KakaoSDKAuth (= 2.10.1) - Kingfisher (6.3.1) - lottie-ios (3.3.0) - - nanopb (2.30908.0): - - nanopb/decode (= 2.30908.0) - - nanopb/encode (= 2.30908.0) - - nanopb/decode (2.30908.0) - - nanopb/encode (2.30908.0) - - PromisesObjC (2.0.0) + - nanopb (2.30909.0): + - nanopb/decode (= 2.30909.0) + - nanopb/encode (= 2.30909.0) + - nanopb/decode (2.30909.0) + - nanopb/encode (2.30909.0) + - PromisesObjC (2.1.0) - RxCocoa (6.2.0): - RxRelay (= 6.2.0) - RxSwift (= 6.2.0) @@ -133,7 +137,7 @@ PODS: - RxSwift (= 6.2.0) - RxSwift (6.2.0) - SnapKit (5.0.1) - - Then (2.7.0) + - Then (3.0.0) DEPENDENCIES: - Alamofire (~> 5.0) @@ -158,6 +162,7 @@ SPEC REPOS: - FirebaseAnalytics - FirebaseCore - FirebaseCoreDiagnostics + - FirebaseCoreInternal - FirebaseInstallations - FirebaseMessaging - GoogleAppMeasurement @@ -180,33 +185,34 @@ SPEC REPOS: - Then SPEC CHECKSUMS: - Alamofire: 1c4fb5369c3fe93d2857c780d8bbe09f06f97e7c - AppAuth: 31bcec809a638d7bd2f86ea8a52bd45f6e81e7c7 - Firebase: 580d09e8edafc3073ebf09c03fd42e4d80d35fe9 - FirebaseAnalytics: bd10d7706ba8d6e01ea2816f8fe9e9b881cb0918 - FirebaseCore: 8138de860a90ca7eec5e324da5788fb0ebf1d93c - FirebaseCoreDiagnostics: 3b40dfadef5b90433a60ae01f01e90fe87aa76aa - FirebaseInstallations: 25764cf322e77f99449395870a65b2bef88e1545 - FirebaseMessaging: 23db8bf05585e929ada8af0f0968933c25252808 - GoogleAppMeasurement: ae033c3aad67e68294369373056b4d74cc8ae0d6 - GoogleDataTransport: 629c20a4d363167143f30ea78320d5a7eb8bd940 - GoogleSignIn: c90b5bec45e780f54c6a8e1e3c182a86e3dda69d + Alamofire: 87bd8c952f9a4454320fce00d9cc3de57bcadaf5 + AppAuth: 80317d99ac7ff2801a2f18ff86b48cd315ed465d + Firebase: 91c243d75573ac6e7c9735ec859b72bffb61347d + FirebaseAnalytics: bf11064790ac96804df1df9ddc0ae45af950d9fc + FirebaseCore: b7bfc258e996eada23b3666bd6b9a22ca092acb8 + FirebaseCoreDiagnostics: 2dabba3412b23b524823325739f45e520f67d1e7 + FirebaseCoreInternal: f3c838ae0b41cd840bbf34f90debfede78d352e5 + FirebaseInstallations: a91c74276b544524ce144c8315d8cdbce2dbe30b + FirebaseMessaging: 0bf5caa621182ccc66ba3be3b15e68d800d98e9f + GoogleAppMeasurement: 8ecc717f2abe3f9ee95a5d38db08827852894acc + GoogleDataTransport: 5fffe35792f8b96ec8d6775f5eccd83c998d5a3b + GoogleSignIn: 3c68388ac221f379676e8f1cb115df3aaf73b93f GoogleUtilities: e0913149f6b0625b553d70dae12b49fc62914fd1 - GTMAppAuth: ad5c2b70b9a8689e1a04033c9369c4915bfcbe89 - GTMSessionFetcher: 43748f93435c2aa068b1cbe39655aaf600652e91 - KakaoSDKAuth: 53e747a3bf343a3f3e87b14478d5a865d6c2acae - KakaoSDKCommon: 7e56600ff4c1bd82bed93fea4299b5a37f47e6a5 - KakaoSDKUser: e79480355fa789f42e628dfba359fc21e9914f4c + GTMAppAuth: 4d8f864896f3646f0c33baf38a28362f4c601e15 + GTMSessionFetcher: 5595ec75acf5be50814f81e9189490412bad82ba + KakaoSDKAuth: b4fec62192c2ac8a9375847f666c0932e38afeb5 + KakaoSDKCommon: 4989e3bae5f4884903bc1df7134e13d0e903d587 + KakaoSDKUser: 5c5fd4b5864e8b5ac9587fdbb473daf2fa675abf Kingfisher: 016c8b653a35add51dd34a3aba36b580041acc74 lottie-ios: 6ac74dcc09904798f59b18cb3075c089d76be9ae - nanopb: a0ba3315591a9ae0a16a309ee504766e90db0c96 - PromisesObjC: 68159ce6952d93e17b2dfe273b8c40907db5ba58 + nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431 + PromisesObjC: 99b6f43f9e1044bd87a95a60beff28c2c44ddb72 RxCocoa: 4baf94bb35f2c0ab31bc0cb9f1900155f646ba42 RxRelay: e72dbfd157807478401ef1982e1c61c945c94b2f RxSwift: d356ab7bee873611322f134c5f9ef379fa183d8f SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb - Then: acfe0be7e98221c6204e12f8161459606d5d822d + Then: 844265ae87834bbe1147d91d5d41a404da2ec27d PODFILE CHECKSUM: 4ba9d1763f0672977ce4568f3decdf3e7f199bc3 -COCOAPODS: 1.11.2 +COCOAPODS: 1.11.3