diff --git a/NADA-iOS-forRelease.xcodeproj/project.pbxproj b/NADA-iOS-forRelease.xcodeproj/project.pbxproj index a7a7da83..fef5c2ee 100644 --- a/NADA-iOS-forRelease.xcodeproj/project.pbxproj +++ b/NADA-iOS-forRelease.xcodeproj/project.pbxproj @@ -97,6 +97,7 @@ 77F2C0ED27632AA7007641E3 /* CardHarmony.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 77F2C0EC27632AA7007641E3 /* CardHarmony.storyboard */; }; 77F47D93276C79B600414659 /* Header.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77F47D92276C79B600414659 /* Header.swift */; }; DBBB91E1639641F40C5B4416 /* Pods_NADA_iOS_forRelease.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A2183AE0E469153221624A0 /* Pods_NADA_iOS_forRelease.framework */; }; + F805588529C993E7002E8EA3 /* UpdateViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F805588429C993E7002E8EA3 /* UpdateViewController.swift */; }; F80975E92990A27400075B93 /* Widgets.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = F838B66A298E5C5300D84340 /* Widgets.intentdefinition */; }; F80975EA2990A27900075B93 /* Widgets.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = F838B66A298E5C5300D84340 /* Widgets.intentdefinition */; }; F811720027383097002742CF /* ChangeGroupRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F81171FF27383097002742CF /* ChangeGroupRequest.swift */; }; @@ -320,6 +321,7 @@ 77F2C0EC27632AA7007641E3 /* CardHarmony.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = CardHarmony.storyboard; sourceTree = ""; }; 77F47D92276C79B600414659 /* Header.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Header.swift; sourceTree = ""; }; 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 = ""; }; + F805588429C993E7002E8EA3 /* UpdateViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateViewController.swift; sourceTree = ""; }; F81171FF27383097002742CF /* ChangeGroupRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeGroupRequest.swift; sourceTree = ""; }; F822E7A82709CEB60020452C /* Notification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notification.swift; sourceTree = ""; }; F8268DB827730B0100BF114B /* FirstCardAlertBottomSheetViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstCardAlertBottomSheetViewController.swift; sourceTree = ""; }; @@ -761,6 +763,22 @@ path = VC; sourceTree = ""; }; + F805588329C993D0002E8EA3 /* Update */ = { + isa = PBXGroup; + children = ( + F805588629C993EF002E8EA3 /* VC */, + ); + path = Update; + sourceTree = ""; + }; + F805588629C993EF002E8EA3 /* VC */ = { + isa = PBXGroup; + children = ( + F805588429C993E7002E8EA3 /* UpdateViewController.swift */, + ); + path = VC; + sourceTree = ""; + }; F82FF8222701FFE300E57F8B /* RequiredFlavor */ = { isa = PBXGroup; children = ( @@ -1139,6 +1157,7 @@ F8FC43A026C01F040033E151 /* ViewControllers */ = { isa = PBXGroup; children = ( + F805588329C993D0002E8EA3 /* Update */, 77B4E7492990E4FC006098DC /* Home */, 397B750E2763A5DD004AEB03 /* OpenSource */, 397B75182763B5DA004AEB03 /* TeamNADA */, @@ -1608,6 +1627,7 @@ 77703157275005AA002CBD19 /* CardResultBottomSheetViewController.swift in Sources */, F8D74DD8276C7FB60071E5FC /* UIImageView+Extension.swift in Sources */, 39D13565273FDB9C00B1A148 /* User.swift in Sources */, + F805588529C993E7002E8EA3 /* UpdateViewController.swift in Sources */, 77812947275F6EA3004B34F4 /* CardDetailViewController.swift in Sources */, F822E7A92709CEB60020452C /* Notification.swift in Sources */, F8C83FC5272FA2940009DF0D /* CardAPI.swift in Sources */, diff --git a/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/btnMainGoUpdate.imageset/Contents.json b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/btnMainGoUpdate.imageset/Contents.json new file mode 100644 index 00000000..e46f76a6 --- /dev/null +++ b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/btnMainGoUpdate.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "btnMainGoUpdate.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "btnMainGoUpdate@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "btnMainGoUpdate@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/btnMainGoUpdate.imageset/btnMainGoUpdate.png b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/btnMainGoUpdate.imageset/btnMainGoUpdate.png new file mode 100644 index 00000000..a028f62b Binary files /dev/null and b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/btnMainGoUpdate.imageset/btnMainGoUpdate.png differ diff --git a/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/btnMainGoUpdate.imageset/btnMainGoUpdate@2x.png b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/btnMainGoUpdate.imageset/btnMainGoUpdate@2x.png new file mode 100644 index 00000000..9a922816 Binary files /dev/null and b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/btnMainGoUpdate.imageset/btnMainGoUpdate@2x.png differ diff --git a/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/btnMainGoUpdate.imageset/btnMainGoUpdate@3x.png b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/btnMainGoUpdate.imageset/btnMainGoUpdate@3x.png new file mode 100644 index 00000000..5f609bc5 Binary files /dev/null and b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/btnMainGoUpdate.imageset/btnMainGoUpdate@3x.png differ diff --git a/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxFilled.imageset/Contents.json b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxFilled.imageset/Contents.json new file mode 100644 index 00000000..f5663a8a --- /dev/null +++ b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxFilled.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "scale" : "1x", + "filename" : "icnCheckboxFilled.png", + "idiom" : "universal" + }, + { + "scale" : "2x", + "filename" : "icnCheckboxFilled@2x.png", + "idiom" : "universal" + }, + { + "scale" : "3x", + "idiom" : "universal", + "filename" : "icnCheckboxFilled@3x.png" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxFilled.imageset/icnCheckboxFilled.png b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxFilled.imageset/icnCheckboxFilled.png new file mode 100644 index 00000000..80a5d9f9 Binary files /dev/null and b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxFilled.imageset/icnCheckboxFilled.png differ diff --git a/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxFilled.imageset/icnCheckboxFilled@2x.png b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxFilled.imageset/icnCheckboxFilled@2x.png new file mode 100644 index 00000000..37d9f3b6 Binary files /dev/null and b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxFilled.imageset/icnCheckboxFilled@2x.png differ diff --git a/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxFilled.imageset/icnCheckboxFilled@3x.png b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxFilled.imageset/icnCheckboxFilled@3x.png new file mode 100644 index 00000000..16aae69b Binary files /dev/null and b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxFilled.imageset/icnCheckboxFilled@3x.png differ diff --git a/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxUnfilled.imageset/Contents.json b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxUnfilled.imageset/Contents.json new file mode 100644 index 00000000..b81f6d5b --- /dev/null +++ b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxUnfilled.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "icnCheckboxUnfilled.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "icnCheckboxUnfilled@2x.png" + }, + { + "scale" : "3x", + "idiom" : "universal", + "filename" : "icnCheckboxUnfilled@3x.png" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxUnfilled.imageset/icnCheckboxUnfilled.png b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxUnfilled.imageset/icnCheckboxUnfilled.png new file mode 100644 index 00000000..d1435e0b Binary files /dev/null and b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxUnfilled.imageset/icnCheckboxUnfilled.png differ diff --git a/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxUnfilled.imageset/icnCheckboxUnfilled@2x.png b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxUnfilled.imageset/icnCheckboxUnfilled@2x.png new file mode 100644 index 00000000..d2a51e87 Binary files /dev/null and b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxUnfilled.imageset/icnCheckboxUnfilled@2x.png differ diff --git a/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxUnfilled.imageset/icnCheckboxUnfilled@3x.png b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxUnfilled.imageset/icnCheckboxUnfilled@3x.png new file mode 100644 index 00000000..178b54a0 Binary files /dev/null and b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/icnCheckboxUnfilled.imageset/icnCheckboxUnfilled@3x.png differ diff --git a/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/imgUpdate.imageset/Contents.json b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/imgUpdate.imageset/Contents.json new file mode 100644 index 00000000..159a7541 --- /dev/null +++ b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/imgUpdate.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "imgUpdate.png", + "scale" : "1x", + "idiom" : "universal" + }, + { + "idiom" : "universal", + "filename" : "imgUpdate@2x.png", + "scale" : "2x" + }, + { + "scale" : "3x", + "idiom" : "universal", + "filename" : "imgUpdate@3x.png" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/imgUpdate.imageset/imgUpdate.png b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/imgUpdate.imageset/imgUpdate.png new file mode 100644 index 00000000..3d4ad258 Binary files /dev/null and b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/imgUpdate.imageset/imgUpdate.png differ diff --git a/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/imgUpdate.imageset/imgUpdate@2x.png b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/imgUpdate.imageset/imgUpdate@2x.png new file mode 100644 index 00000000..3f54eb7b Binary files /dev/null and b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/imgUpdate.imageset/imgUpdate@2x.png differ diff --git a/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/imgUpdate.imageset/imgUpdate@3x.png b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/imgUpdate.imageset/imgUpdate@3x.png new file mode 100644 index 00000000..40cc66e6 Binary files /dev/null and b/NADA-iOS-forRelease/Resouces/Assets/Assets.xcassets/imgUpdate.imageset/imgUpdate@3x.png differ diff --git a/NADA-iOS-forRelease/Sources/ViewControllers/Update/VC/UpdateViewController.swift b/NADA-iOS-forRelease/Sources/ViewControllers/Update/VC/UpdateViewController.swift new file mode 100644 index 00000000..01c84f2f --- /dev/null +++ b/NADA-iOS-forRelease/Sources/ViewControllers/Update/VC/UpdateViewController.swift @@ -0,0 +1,130 @@ +// +// UpdateViewController.swift +// NADA-iOS-forRelease +// +// Created by kimhyungyu on 2023/03/21. +// + +import UIKit + +import FlexLayout +import PinLayout + +class UpdateViewController: UIViewController { + + // MARK: - Components + + private let rootFlexContainer = UIView() + private let updateCardImageView = UIImageView() + private let cancelButton = UIButton() + private let updateContentLabel = UILabel() + private let checkBoxButton = UIButton() + private let checkLabel = UILabel() + private let updateButton = UIButton() + + // MARK: - View Life Cycle + + override func viewDidLoad() { + super.viewDidLoad() + + setUI() + addTargets() + setLayout() + } + + override func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + + rootFlexContainer.pin.vCenter().hCenter().height(487).width(327) + rootFlexContainer.flex.layout() + } +} + +// MARK: - Extension + +extension UpdateViewController { + private func setUI() { + view.backgroundColor = .black.withAlphaComponent(0.4) + + rootFlexContainer.backgroundColor = .background + rootFlexContainer.layer.cornerRadius = 20 + + updateCardImageView.image = UIImage(named: "imgUpdate") + + cancelButton.setImage(UIImage(named: "iconClear"), for: .normal) + + updateContentLabel.numberOfLines = 10 + updateContentLabel.font = .textRegular04 + updateContentLabel.textColor = .secondary + updateContentLabel.lineBreakMode = .byCharWrapping + updateContentLabel.text = """ + 안녕하세요, 나다입니다. + 이번 업데이트에서는 아래와 같은 내용이 개선되었습니다. + 안녕하세융 + 나다에요 + -명함을 위젯으로 추가할 수 있어요 + -내 주변의 명함을 검색할 수 있어요 + ㅇㅇㅇ + 앱스토어에서 최신 버전을 확인해 보세요! + 이정도면 10줄! + """ + + checkBoxButton.setImage(UIImage(named: "icnCheckboxUnfilled"), for: .normal) + checkBoxButton.setImage(UIImage(named: "icnCheckboxFilled"), for: .selected) + + checkLabel.font = .textRegular05 + checkLabel.textColor = .tertiary + checkLabel.text = "확인했어요!" + + updateButton.setImage(UIImage(named: "btnMainGoUpdate"), for: .normal) + } + + private func addTargets() { + cancelButton.addTarget(self, action: #selector(touchCancelButton), for: .touchUpInside) + updateButton.addTarget(self, action: #selector(touchUpdateButton), for: .touchUpInside) + checkBoxButton.addTarget(self, action: #selector(touchCheckBox), for: .touchUpInside) + } + + // MARK: - Objc Methods + + @objc + private func touchCancelButton() { + // TODO: - 비강제 업데이트는 창 닫기. 강제 업데이트는 앱 종료. + } + + @objc + private func touchUpdateButton() { + // TODO: - 앱스토어로 연결 혹은 홈으로 연결하는 액션 구현. + } + + @objc + private func touchCheckBox(_ sender: UIButton) { + // TODO: - 체크하게 되면 다시 띄어주지 않음 + checkBoxButton.isSelected.toggle() + } +} + +// MARK: - Layout + +extension UpdateViewController { + private func setLayout() { + view.addSubview(rootFlexContainer) + + rootFlexContainer.flex.direction(.column).justifyContent(.spaceBetween).define { flex in + flex.addItem().direction(.column).define { flex in + flex.addItem().direction(.column).alignItems(.center).define { flex in + flex.addItem(updateCardImageView).marginTop(20) + flex.addItem(cancelButton).position(.absolute).top(20).right(20) + } + flex.addItem(updateContentLabel).marginTop(16).marginBottom(18).marginHorizontal(16) + } + flex.addItem().direction(.column).define { flex in + flex.addItem().direction(.row).alignItems(.center).marginBottom(20).define { flex in + flex.addItem(checkBoxButton).marginLeft(16).size(16) + flex.addItem(checkLabel).marginLeft(2) + } + flex.addItem(updateButton).marginBottom(16).marginHorizontal(17) + } + } + } +} diff --git a/Podfile b/Podfile index e0f1e6e3..4dd18281 100644 --- a/Podfile +++ b/Podfile @@ -6,21 +6,23 @@ target 'NADA-iOS-forRelease' do use_frameworks! # Pods for NADA-iOS-forRelease -pod 'Moya' -pod 'SkeletonView' -pod 'SwiftLint' -pod 'VerticalCardSwiper' -pod 'KakaoSDKCommon' -pod 'KakaoSDKUser' -pod 'KakaoSDKAuth' -pod 'IQKeyboardManagerSwift' -pod 'Kingfisher' -pod 'NVActivityIndicatorView' -pod 'Firebase/DynamicLinks' -pod 'lottie-ios' -pod 'Then' -pod 'SnapKit' -pod 'RxSwift' -pod 'RxCocoa' -pod 'Moya/RxSwift' + pod 'Moya' + pod 'SkeletonView' + pod 'SwiftLint' + pod 'VerticalCardSwiper' + pod 'KakaoSDKCommon' + pod 'KakaoSDKUser' + pod 'KakaoSDKAuth' + pod 'IQKeyboardManagerSwift' + pod 'Kingfisher' + pod 'NVActivityIndicatorView' + pod 'Firebase/DynamicLinks' + pod 'lottie-ios' + pod 'Then' + pod 'SnapKit' + pod 'RxSwift' + pod 'RxCocoa' + pod 'Moya/RxSwift' + pod 'FlexLayout' + pod 'PinLayout' end diff --git a/Podfile.lock b/Podfile.lock index b4db65f2..dd865ff6 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -13,6 +13,7 @@ PODS: - "GoogleUtilities/NSData+zlib (~> 7.8)" - FirebaseDynamicLinks (10.6.0): - FirebaseCore (~> 10.0) + - FlexLayout (1.3.30) - GoogleUtilities/Environment (7.11.0): - PromisesObjC (< 3.0, >= 1.2) - GoogleUtilities/Logger (7.11.0): @@ -42,6 +43,7 @@ PODS: - NVActivityIndicatorView (5.1.1): - NVActivityIndicatorView/Base (= 5.1.1) - NVActivityIndicatorView/Base (5.1.1) + - PinLayout (1.10.4) - PromisesObjC (2.2.0) - RxCocoa (6.5.0): - RxRelay (= 6.5.0) @@ -57,6 +59,7 @@ PODS: DEPENDENCIES: - Firebase/DynamicLinks + - FlexLayout - IQKeyboardManagerSwift - KakaoSDKAuth - KakaoSDKCommon @@ -66,6 +69,7 @@ DEPENDENCIES: - Moya - Moya/RxSwift - NVActivityIndicatorView + - PinLayout - RxCocoa - RxSwift - SkeletonView @@ -81,6 +85,7 @@ SPEC REPOS: - FirebaseCore - FirebaseCoreInternal - FirebaseDynamicLinks + - FlexLayout - GoogleUtilities - IQKeyboardManagerSwift - KakaoSDKAuth @@ -90,6 +95,7 @@ SPEC REPOS: - lottie-ios - Moya - NVActivityIndicatorView + - PinLayout - PromisesObjC - RxCocoa - RxRelay @@ -106,6 +112,7 @@ SPEC CHECKSUMS: FirebaseCore: fa80ad16a62d52f67274b5b88304c3a318bbf9a4 FirebaseCoreInternal: c7cd505e2136811096b225ac388d6254a2622362 FirebaseDynamicLinks: 99c501143953e925681a37aade96bb2db34b30ca + FlexLayout: 6651ad721f521c29d50bc724788488c84e0bc32a GoogleUtilities: c2bdc4cf2ce786c4d2e6b3bcfd599a25ca78f06f IQKeyboardManagerSwift: c7955c0bdbf7b2eb29bb7daaa44e3d90f55a9a85 KakaoSDKAuth: 8fca87815de22062a23297983f327613b087b8bb @@ -115,6 +122,7 @@ SPEC CHECKSUMS: lottie-ios: d0954d3150061f662ed0adf96ef98d7421864c47 Moya: 138f0573e53411fb3dc17016add0b748dfbd78ee NVActivityIndicatorView: 1f6c5687f1171810aa27a3296814dc2d7dec3667 + PinLayout: f8a677ce0cd1cfe96b58435d029b4ceb4ce9c04c PromisesObjC: 09985d6d70fbe7878040aa746d78236e6946d2ef RxCocoa: 94f817b71c07517321eb4f9ad299112ca8af743b RxRelay: 1de1523e604c72b6c68feadedd1af3b1b4d0ecbd @@ -125,6 +133,6 @@ SPEC CHECKSUMS: Then: 844265ae87834bbe1147d91d5d41a404da2ec27d VerticalCardSwiper: 68df635b354500f86934ea044ade37a264c044c6 -PODFILE CHECKSUM: 5ebc024c28ae32feda47b0ba7819929a4d97ca6c +PODFILE CHECKSUM: bc179a77a6e2b3bd5e2b878e4f4b9eca55d127ce -COCOAPODS: 1.11.3 +COCOAPODS: 1.12.0