diff --git a/Podfile b/Podfile index 3941659b..fa2982b4 100644 --- a/Podfile +++ b/Podfile @@ -10,7 +10,7 @@ target 'Steps4Impact' do pod 'FBSDKLoginKit', '~> 5.6.0' pod 'FBSDKShareKit', '~> 5.6.0' pod 'SnapKit', '~> 5.0.1' - pod 'SwiftLint', '~> 0.35.0' + pod 'SwiftLint', '~> 0.38.2' pod 'FirebaseMessaging', '~> 4.1.4' pod 'AppCenter', '~> 2.3.0' pod 'SDWebImage', '~> 5.1.1' diff --git a/Podfile.lock b/Podfile.lock index 07fbe2fe..e35622c6 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -101,7 +101,7 @@ PODS: - SDWebImage/Core (5.1.1) - SnapKit (5.0.1) - Sourcery (0.17.0) - - SwiftLint (0.35.0) + - SwiftLint (0.38.2) DEPENDENCIES: - AppCenter (~> 2.3.0) @@ -123,7 +123,7 @@ DEPENDENCIES: - SDWebImage (~> 5.1.1) - SnapKit (~> 5.0.1) - Sourcery (~> 0.17.0) - - SwiftLint (~> 0.35.0) + - SwiftLint (~> 0.38.2) SPEC REPOS: trunk: @@ -190,8 +190,8 @@ SPEC CHECKSUMS: SDWebImage: 96d7f03415ccb28d299d765f93557ff8a617abd8 SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb Sourcery: 3ed61be7c8a1218fce349266139379dba477efe0 - SwiftLint: 5553187048b900c91aa03552807681bb6b027846 + SwiftLint: 8f5d2f903e1c9bcbc832fd16771e80a263ac6cbb -PODFILE CHECKSUM: f830b25b078bd36405ec2bfd37760619938c8f91 +PODFILE CHECKSUM: 28aa85d7b93a27c9f9f6b1b8cad678e239cbd65a COCOAPODS: 1.8.4 diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index 07fbe2fe..e35622c6 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -101,7 +101,7 @@ PODS: - SDWebImage/Core (5.1.1) - SnapKit (5.0.1) - Sourcery (0.17.0) - - SwiftLint (0.35.0) + - SwiftLint (0.38.2) DEPENDENCIES: - AppCenter (~> 2.3.0) @@ -123,7 +123,7 @@ DEPENDENCIES: - SDWebImage (~> 5.1.1) - SnapKit (~> 5.0.1) - Sourcery (~> 0.17.0) - - SwiftLint (~> 0.35.0) + - SwiftLint (~> 0.38.2) SPEC REPOS: trunk: @@ -190,8 +190,8 @@ SPEC CHECKSUMS: SDWebImage: 96d7f03415ccb28d299d765f93557ff8a617abd8 SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb Sourcery: 3ed61be7c8a1218fce349266139379dba477efe0 - SwiftLint: 5553187048b900c91aa03552807681bb6b027846 + SwiftLint: 8f5d2f903e1c9bcbc832fd16771e80a263ac6cbb -PODFILE CHECKSUM: f830b25b078bd36405ec2bfd37760619938c8f91 +PODFILE CHECKSUM: 28aa85d7b93a27c9f9f6b1b8cad678e239cbd65a COCOAPODS: 1.8.4 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 8c4ab72f..5c324962 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -15,7 +15,6 @@ dependencies = ( ); name = Sourcery; - productName = Sourcery; }; 52B60EC2A583F24ACBB69C113F5488B9 /* SwiftLint */ = { isa = PBXAggregateTarget; @@ -25,7 +24,6 @@ dependencies = ( ); name = SwiftLint; - productName = SwiftLint; }; 5EB4B0B6DA6D5C0C3365733BEAA1C485 /* FirebaseCoreDiagnosticsInterop */ = { isa = PBXAggregateTarget; @@ -35,7 +33,6 @@ dependencies = ( ); name = FirebaseCoreDiagnosticsInterop; - productName = FirebaseCoreDiagnosticsInterop; }; A3282A5B2437E609EEB85861D7ECE717 /* AppCenter */ = { isa = PBXAggregateTarget; @@ -45,7 +42,6 @@ dependencies = ( ); name = AppCenter; - productName = AppCenter; }; D372E53E2E8FEAA06A0439FB85E65767 /* FirebaseAnalyticsInterop */ = { isa = PBXAggregateTarget; @@ -55,7 +51,6 @@ dependencies = ( ); name = FirebaseAnalyticsInterop; - productName = FirebaseAnalyticsInterop; }; /* End PBXAggregateTarget section */ @@ -2006,7 +2001,7 @@ 0245A83CF9C7275A1235ECCDB8801E7E /* GPBMessage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GPBMessage.m; path = objectivec/GPBMessage.m; sourceTree = ""; }; 024E6828DB5C1EF9DBFAA237886FF3C5 /* GoogleDataTransport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GoogleDataTransport.h; path = GoogleDataTransport/GDTLibrary/Public/GoogleDataTransport.h; sourceTree = ""; }; 02FC9837D55841DA5211A8E637A077D3 /* FBSDKShareUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKShareUtility.h; path = FBSDKShareKit/FBSDKShareKit/Internal/FBSDKShareUtility.h; sourceTree = ""; }; - 031893FD3D882E436EC541DF783B1276 /* RxTest.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxTest.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 031893FD3D882E436EC541DF783B1276 /* RxTest.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RxTest.framework; path = RxTest.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 031BA3509BDDF7FBB0CEC9330EB8788E /* AZSSharedAccessPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AZSSharedAccessPolicy.m; path = "Lib/Azure Storage Client Library/Azure Storage Client Library/AZSSharedAccessPolicy.m"; sourceTree = ""; }; 031CF964F24A838C31E0A4CBA8C285FF /* pb_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_common.h; sourceTree = ""; }; 0321A0AB3AFCC24A71B71D3909DE3461 /* TestSchedulerVirtualTimeConverter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestSchedulerVirtualTimeConverter.swift; path = RxTest/Schedulers/TestSchedulerVirtualTimeConverter.swift; sourceTree = ""; }; @@ -2024,12 +2019,12 @@ 04A9F2BBC69C6B3413DC1E9DBBA9B4A2 /* FIRMessagingPacketQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingPacketQueue.h; path = Firebase/Messaging/FIRMessagingPacketQueue.h; sourceTree = ""; }; 0512A4B6F1AC4694326A305EE7FCEFA3 /* BehaviorRelay+Driver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "BehaviorRelay+Driver.swift"; path = "RxCocoa/Traits/Driver/BehaviorRelay+Driver.swift"; sourceTree = ""; }; 05BC87019EE6B71118FFF4D1AFAB87F8 /* UITextField+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITextField+Rx.swift"; path = "RxCocoa/iOS/UITextField+Rx.swift"; sourceTree = ""; }; - 0632C757D5A050B322674E8D18483DEE /* Pods_Steps4ImpactTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Steps4ImpactTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0632C757D5A050B322674E8D18483DEE /* Pods_Steps4ImpactTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Steps4ImpactTests.framework; path = "Pods-Steps4ImpactTests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 066F763081A6D1579B5EB1658CAC9BF3 /* AZSServiceProperties.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AZSServiceProperties.m; path = "Lib/Azure Storage Client Library/Azure Storage Client Library/AZSServiceProperties.m"; sourceTree = ""; }; 069CA0EFE2CFE5457C35966A8341E467 /* GDTPlatform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTPlatform.m; path = GoogleDataTransport/GDTLibrary/GDTPlatform.m; sourceTree = ""; }; 06B3BAC20552090FBDF19047D37D8E9E /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/Core/SDWebImagePrefetcher.m; sourceTree = ""; }; 06D698C1B6873C69F7627408F981B16F /* FBSDKBase64.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBase64.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.m; sourceTree = ""; }; - 06FC5C9CF96D60C50FCD47D339C91951 /* nanopb.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = nanopb.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 06FC5C9CF96D60C50FCD47D339C91951 /* nanopb.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = nanopb.framework; path = nanopb.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 06FE5688BBCAE40B5CAF99F11E8568D3 /* FIRInstanceIDKeyPairStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDKeyPairStore.m; path = Firebase/InstanceID/FIRInstanceIDKeyPairStore.m; sourceTree = ""; }; 078F8B0D4040337C4FEE688008C3B3AE /* FIRVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVersion.m; path = Firebase/Core/FIRVersion.m; sourceTree = ""; }; 07B75B5DF20B393FD0AA8C9773ACF433 /* HotObservable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HotObservable.swift; path = RxTest/HotObservable.swift; sourceTree = ""; }; @@ -2058,8 +2053,8 @@ 0D00A66B358AE2980921064EEF3A245C /* FIRInstanceIDURLQueryItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDURLQueryItem.h; path = Firebase/InstanceID/FIRInstanceIDURLQueryItem.h; sourceTree = ""; }; 0D1951CB17CF82CCBDBB8F4AE44B4CC7 /* FBSDKAccessToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessToken.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.h; sourceTree = ""; }; 0D4A1EB93473FB2EFA6A18C320BE8A2A /* Stringers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Stringers.swift; path = Sources/Nimble/Utils/Stringers.swift; sourceTree = ""; }; - 0D631E9908483F9525A6B3F36F16CC61 /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0D8F64E108E669D0B6EC6229DB3967A9 /* FacebookLogin.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FacebookLogin.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0D631E9908483F9525A6B3F36F16CC61 /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Quick.framework; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0D8F64E108E669D0B6EC6229DB3967A9 /* FacebookLogin.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FacebookLogin.framework; path = FacebookLogin.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 0E4AA230462DB29F6CA02CD9CD4A221C /* FBSDKGraphRequestBody.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestBody.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.h; sourceTree = ""; }; 0E4D14C8AEAE26711B1A716B6405063E /* ColdObservable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ColdObservable.swift; path = RxTest/ColdObservable.swift; sourceTree = ""; }; 0E4D58E5D47127F5515381395A45956D /* FIRMessagingDataMessageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRMessagingDataMessageManager.h; path = Firebase/Messaging/FIRMessagingDataMessageManager.h; sourceTree = ""; }; @@ -2132,7 +2127,7 @@ 19460DCA8C76054D2602849C1E07C97A /* FIRInteropParameterNames.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInteropParameterNames.h; path = Interop/Analytics/Public/FIRInteropParameterNames.h; sourceTree = ""; }; 1988B15618A993714A02B274BB4609A3 /* ObservableConvertibleType+SharedSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableConvertibleType+SharedSequence.swift"; path = "RxCocoa/Traits/SharedSequence/ObservableConvertibleType+SharedSequence.swift"; sourceTree = ""; }; 19989BD9CAF8EA8D86CAE425D840E79A /* FirebaseMessaging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseMessaging.h; path = Firebase/Messaging/FirebaseMessaging.h; sourceTree = ""; }; - 199B9DEB29D05E1115849EC49879BD90 /* pb_decode.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; path = pb_decode.c; sourceTree = ""; }; + 199B9DEB29D05E1115849EC49879BD90 /* pb_decode.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pb_decode.c; sourceTree = ""; }; 19AEE41535BDF29130F602C86BC08562 /* FBSDKTriStateBOOL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTriStateBOOL.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.m; sourceTree = ""; }; 19BB39A12A23ED2BD43456C0D1684B5E /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/Core/SDImageCache.h; sourceTree = ""; }; 19C53CC756EC061A4C804517CA8E143A /* GDTCCTUploader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTUploader.h; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTUploader.h; sourceTree = ""; }; @@ -2210,7 +2205,7 @@ 25B10BA323A13BA9B5E145AD03BC4F10 /* AZSBlobProperties.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AZSBlobProperties.h; path = "Lib/Azure Storage Client Library/Azure Storage Client Library/AZSBlobProperties.h"; sourceTree = ""; }; 25B46693A52008C682B823A751ABE9BA /* FIRInstanceIDTokenDeleteOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDTokenDeleteOperation.h; path = Firebase/InstanceID/FIRInstanceIDTokenDeleteOperation.h; sourceTree = ""; }; 25D88431F438CF27BDF6958C26CA76C6 /* UIImageView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImageView+Rx.swift"; path = "RxCocoa/iOS/UIImageView+Rx.swift"; sourceTree = ""; }; - 25F63A531105CD4E1E4CCF5B918C5494 /* RxBlocking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxBlocking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 25F63A531105CD4E1E4CCF5B918C5494 /* RxBlocking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RxBlocking.framework; path = RxBlocking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 264784F18D264CED417988B710DC4057 /* AZSCloudPageBlob.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AZSCloudPageBlob.h; path = "Lib/Azure Storage Client Library/Azure Storage Client Library/AZSCloudPageBlob.h"; sourceTree = ""; }; 265DD75461D612DE68FE4F105186194A /* NMBExceptionCapture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NMBExceptionCapture.m; path = Sources/NimbleObjectiveC/NMBExceptionCapture.m; sourceTree = ""; }; 26B2626699801CB13B0C9EE8CD6BDEFD /* FBSDKServerConfigurationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKServerConfigurationManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.h; sourceTree = ""; }; @@ -2226,7 +2221,7 @@ 27C1CB2A83A6EA7AE48E3463EA1D4466 /* nanopb-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "nanopb-dummy.m"; sourceTree = ""; }; 27C347F65DB91536CDBC46612BB40A1A /* SDAnimatedImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageView.m; path = SDWebImage/Core/SDAnimatedImageView.m; sourceTree = ""; }; 27E2C0D7FE2BD3BCA8893954459FAC09 /* Any.pbobjc.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Any.pbobjc.m; path = objectivec/google/protobuf/Any.pbobjc.m; sourceTree = ""; }; - 2841AEF52E29FA3509917881FAAF0B39 /* FacebookCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FacebookCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2841AEF52E29FA3509917881FAAF0B39 /* FacebookCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FacebookCore.framework; path = FacebookCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 285CFE5024A4EDDC07387D489450ABE3 /* GULAppDelegateSwizzler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULAppDelegateSwizzler.h; path = GoogleUtilities/AppDelegateSwizzler/Private/GULAppDelegateSwizzler.h; sourceTree = ""; }; 286853003828C16BDD8A2B1B70053DD7 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/Core/UIImageView+WebCache.m"; sourceTree = ""; }; 2880748290A29482C28AEF1D5F212306 /* SDMemoryCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDMemoryCache.h; path = SDWebImage/Core/SDMemoryCache.h; sourceTree = ""; }; @@ -2261,7 +2256,7 @@ 2D17889FDDB1FD4C98D0533B6E7E8B5E /* GPBDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBDictionary.h; path = objectivec/GPBDictionary.h; sourceTree = ""; }; 2D3FACB72202832C84A699D95D018FB7 /* FBSDKHashtag.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKHashtag.h; path = FBSDKShareKit/FBSDKShareKit/FBSDKHashtag.h; sourceTree = ""; }; 2D84F450A1B95BC21B5B6621B3BC9C82 /* AZSCloudBlobDirectory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AZSCloudBlobDirectory.h; path = "Lib/Azure Storage Client Library/Azure Storage Client Library/AZSCloudBlobDirectory.h"; sourceTree = ""; }; - 2DA0D814DFCB860D31D7BCD63D795858 /* FirebaseInstanceID.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseInstanceID.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2DA0D814DFCB860D31D7BCD63D795858 /* FirebaseInstanceID.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseInstanceID.framework; path = FirebaseInstanceID.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 2DA4D08917B85A40920B66447250E3C7 /* FBSDKViewImpressionTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKViewImpressionTracker.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.h; sourceTree = ""; }; 2DB166A50375B854C74B4DE1BA10F428 /* ConstraintInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsetTarget.swift; path = Source/ConstraintInsetTarget.swift; sourceTree = ""; }; 2DCE5F14B8CFD14EFF9527C458CA7420 /* FIRInstanceID_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceID_Private.h; path = Firebase/InstanceID/Private/FIRInstanceID_Private.h; sourceTree = ""; }; @@ -2271,7 +2266,7 @@ 2E750EEA93A15E138DDBEE17395BA492 /* AZSClient-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AZSClient-prefix.pch"; sourceTree = ""; }; 2EB962201052AAD4C54311A8C8A52F67 /* DistinctUntilChanged.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DistinctUntilChanged.swift; path = RxSwift/Observables/DistinctUntilChanged.swift; sourceTree = ""; }; 2F12EED1151E9B28D8185DF9F8EC12F2 /* GDTPlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTPlatform.h; path = GoogleDataTransport/GDTLibrary/Public/GDTPlatform.h; sourceTree = ""; }; - 2F9C1C914E2B09E02F09CA123D521ED9 /* cct.nanopb.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = cct.nanopb.c; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c; sourceTree = ""; }; + 2F9C1C914E2B09E02F09CA123D521ED9 /* cct.nanopb.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cct.nanopb.c; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c; sourceTree = ""; }; 2FAD488A169B66BB2791E9DF0832A119 /* Signal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Signal.swift; path = RxCocoa/Traits/Signal/Signal.swift; sourceTree = ""; }; 2FCC3DB8C0067CC80718264B8CAB6E8C /* pb_decode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_decode.h; sourceTree = ""; }; 2FE49F63119D3928670BA8FBDF3F5DAD /* FBSDKButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKButton.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.m; sourceTree = ""; }; @@ -2389,7 +2384,7 @@ 40BCC64E00A9F82441CC4E5CEF10A2A9 /* FIRMessagingCodedInputStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingCodedInputStream.m; path = Firebase/Messaging/FIRMessagingCodedInputStream.m; sourceTree = ""; }; 40FD08F56D696BA4C7A4EE6033433AA0 /* FBSDKShareOpenGraphObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKShareOpenGraphObject.h; path = FBSDKShareKit/FBSDKShareKit/FBSDKShareOpenGraphObject.h; sourceTree = ""; }; 4108963BE126FD0AC16FBAFCA8020E15 /* SerialDispatchQueueScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SerialDispatchQueueScheduler.swift; path = RxSwift/Schedulers/SerialDispatchQueueScheduler.swift; sourceTree = ""; }; - 411E9B2BA2A61ADDB983D48252C73CBF /* OAuthSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OAuthSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 411E9B2BA2A61ADDB983D48252C73CBF /* OAuthSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = OAuthSwift.framework; path = OAuthSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 413A649D2A1BBC6D73F34F42A93855F5 /* FIRCoreDiagnostics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCoreDiagnostics.m; path = Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m; sourceTree = ""; }; 415294125B1187B2D7C3BA5E3C5275AA /* FacebookShare-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FacebookShare-prefix.pch"; sourceTree = ""; }; 41CEFE9123C425530471011F949BC75D /* OAuthSwiftCredential.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuthSwiftCredential.swift; path = Sources/OAuthSwiftCredential.swift; sourceTree = ""; }; @@ -2487,7 +2482,7 @@ 4DC04508E365D85C85B4233218695E31 /* NSImage+Compatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSImage+Compatibility.h"; path = "SDWebImage/Core/NSImage+Compatibility.h"; sourceTree = ""; }; 4DC5A3A31C9A541E0172C59C3C33E4C7 /* FirebaseCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseCore-umbrella.h"; sourceTree = ""; }; 4DD6E3D34BCB8278403FA8712578F0A3 /* GULReachabilityChecker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULReachabilityChecker.m; path = GoogleUtilities/Reachability/GULReachabilityChecker.m; sourceTree = ""; }; - 4DD7A4B744BD914F1169CBDBFC78F1E8 /* Pods_Steps4Impact.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Steps4Impact.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4DD7A4B744BD914F1169CBDBFC78F1E8 /* Pods_Steps4Impact.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Steps4Impact.framework; path = "Pods-Steps4Impact.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 4DDFAD2752B2CFE97FF7E1EB496622E1 /* AppCenterCrashes.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppCenterCrashes.framework; path = "AppCenter-SDK-Apple/iOS/AppCenterCrashes.framework"; sourceTree = ""; }; 4DE470E7D9276F55546E66A1C8EB7C79 /* FIRMessagingSyncMessageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingSyncMessageManager.m; path = Firebase/Messaging/FIRMessagingSyncMessageManager.m; sourceTree = ""; }; 4DE528BFF9458C1B3996C5E870EA9CBD /* AZSServiceProperties.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AZSServiceProperties.h; path = "Lib/Azure Storage Client Library/Azure Storage Client Library/AZSServiceProperties.h"; sourceTree = ""; }; @@ -2509,9 +2504,9 @@ 503A5BBA023093405416161A6EC47BDA /* ReplaySubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReplaySubject.swift; path = RxSwift/Subjects/ReplaySubject.swift; sourceTree = ""; }; 504ACA60366610609E91813173A0E024 /* RxSearchBarDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxSearchBarDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxSearchBarDelegateProxy.swift; sourceTree = ""; }; 5066A0408900B49690AF9D1A31CE8F09 /* Platform.Linux.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.Linux.swift; path = Platform/Platform.Linux.swift; sourceTree = ""; }; - 50A36B47C41E29A092B429ABE89DDBDE /* AZSClient.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AZSClient.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 50A36B47C41E29A092B429ABE89DDBDE /* AZSClient.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = AZSClient.framework; path = AZSClient.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 50BACB4E8321BEA4FD51B28E97561DB4 /* Collection+OAuthSwift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Collection+OAuthSwift.swift"; path = "Sources/Collection+OAuthSwift.swift"; sourceTree = ""; }; - 50E1A04309B907D33CDC4BAF3679BB8E /* pb_encode.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; path = pb_encode.c; sourceTree = ""; }; + 50E1A04309B907D33CDC4BAF3679BB8E /* pb_encode.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pb_encode.c; sourceTree = ""; }; 5125DBE61E16DE766A2356D3DC7878C9 /* Platform.Linux.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.Linux.swift; path = Platform/Platform.Linux.swift; sourceTree = ""; }; 513575B92E8C17A3EDB0D4E01914A9D1 /* FBSDKGraphRequestDataAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestDataAttachment.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequestDataAttachment.m; sourceTree = ""; }; 51484B41CB75BA35A1C1B6B6F4DA266F /* firebasecore.nanopb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = firebasecore.nanopb.h; path = Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h; sourceTree = ""; }; @@ -2576,7 +2571,7 @@ 5B4DEC1E653D33EC0D62B7B98391D4DA /* FBSDKLikeActionController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLikeActionController.m; path = FBSDKShareKit/FBSDKShareKit/Internal/FBSDKLikeActionController.m; sourceTree = ""; }; 5B603C3D4E86420F23E051F9F00A6E38 /* UITabBarController+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITabBarController+Rx.swift"; path = "RxCocoa/iOS/UITabBarController+Rx.swift"; sourceTree = ""; }; 5B63455F3474AB92C21C880CB88DC291 /* FBSDKBridgeAPIProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocol.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocol.h; sourceTree = ""; }; - 5B654B4B042BA7DC93766943A643E42B /* FirebaseMessaging.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseMessaging.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5B654B4B042BA7DC93766943A643E42B /* FirebaseMessaging.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseMessaging.framework; path = FirebaseMessaging.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 5B696BC37FD9E35B587CE6D132472DEF /* FIRMessagingReceiver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingReceiver.m; path = Firebase/Messaging/FIRMessagingReceiver.m; sourceTree = ""; }; 5B900432F472E0FD02F537D2CB0B520B /* BlockingObservable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockingObservable.swift; path = RxBlocking/BlockingObservable.swift; sourceTree = ""; }; 5BA11F0B6D22135E194546CA15BA69EF /* ControlProperty+Driver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ControlProperty+Driver.swift"; path = "RxCocoa/Traits/Driver/ControlProperty+Driver.swift"; sourceTree = ""; }; @@ -2594,7 +2589,7 @@ 5D782D53AC2DC36CB67915DC435AAB43 /* FIRInstanceIDStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDStore.m; path = Firebase/InstanceID/FIRInstanceIDStore.m; sourceTree = ""; }; 5D9671D75958E6C62AD686134B3B8A4A /* TestableObservable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestableObservable.swift; path = RxTest/TestableObservable.swift; sourceTree = ""; }; 5DC6B4A54E3DF9C2D12A4DA7D7B096AF /* FirebaseMessaging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseMessaging.h; path = Firebase/Messaging/Public/FirebaseMessaging.h; sourceTree = ""; }; - 5DE0FEFC3995E740EC1AE2611D0AEFB0 /* FBSDKLoginKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBSDKLoginKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5DE0FEFC3995E740EC1AE2611D0AEFB0 /* FBSDKLoginKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FBSDKLoginKit.framework; path = FBSDKLoginKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 5DF425EF4A773333103ED5456D3B0533 /* GPBWellKnownTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GPBWellKnownTypes.m; path = objectivec/GPBWellKnownTypes.m; sourceTree = ""; }; 5DFD3307D14EFFA940B8C8CA4CE994D1 /* FBSDKGraphRequestConnection+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKGraphRequestConnection+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestConnection+Internal.h"; sourceTree = ""; }; 5E2AAA88D62B3C17A9FB116117B3CD77 /* SDWebImageOptionsProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOptionsProcessor.h; path = SDWebImage/Core/SDWebImageOptionsProcessor.h; sourceTree = ""; }; @@ -2674,7 +2669,7 @@ 689DE8F9AB85CF82E042EDD9B661100C /* FIRErrors.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRErrors.m; path = Firebase/Core/FIRErrors.m; sourceTree = ""; }; 68B0B7C2113BC7723AEAAF108BB5A1F9 /* NSControl+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSControl+Rx.swift"; path = "RxCocoa/macOS/NSControl+Rx.swift"; sourceTree = ""; }; 692492F099DCD261142D1C840D33292F /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/Core/UIImage+GIF.h"; sourceTree = ""; }; - 6942351307BC1F54575D9853307EAE0E /* GoogleDataTransportCCTSupport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GoogleDataTransportCCTSupport.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6942351307BC1F54575D9853307EAE0E /* GoogleDataTransportCCTSupport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GoogleDataTransportCCTSupport.framework; path = GoogleDataTransportCCTSupport.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 69523C8E19B1FBDE3E66B808B619FBD2 /* Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utils.swift; path = Sources/Utils.swift; sourceTree = ""; }; 69A6440FA55E247B76D5BB85F7475F1C /* FirebaseCoreDiagnostics-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FirebaseCoreDiagnostics-Info.plist"; sourceTree = ""; }; 69AAC5CDFDA5FC4F05B084FF77B940A3 /* Timeout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timeout.swift; path = RxSwift/Observables/Timeout.swift; sourceTree = ""; }; @@ -2844,7 +2839,7 @@ 8009CA4CBFE6C12DC8EE09F10305433A /* Concat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Concat.swift; path = RxSwift/Observables/Concat.swift; sourceTree = ""; }; 80988857862DAC7B9F07CB369970F897 /* Wrappers.pbobjc.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Wrappers.pbobjc.m; path = objectivec/google/protobuf/Wrappers.pbobjc.m; sourceTree = ""; }; 809AA2A52885EFFF0FB84235AD455730 /* UITextView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITextView+Rx.swift"; path = "RxCocoa/iOS/UITextView+Rx.swift"; sourceTree = ""; }; - 809C5FAB588354C9BA37DC3EAB8CB45C /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 809C5FAB588354C9BA37DC3EAB8CB45C /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RxSwift.framework; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 80C7F6D774ADDE9FD89D3AEC9F446A2C /* FBSDKApplicationObserving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKApplicationObserving.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationObserving.h; sourceTree = ""; }; 80DDB8E4589DBCA3B57DC2708408DF00 /* RxCollectionViewDataSourceProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewDataSourceProxy.swift; path = RxCocoa/iOS/Proxies/RxCollectionViewDataSourceProxy.swift; sourceTree = ""; }; 80DF1B69B9E7BD655D73F3CA563A4238 /* FBSDKLoginCompletion+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginCompletion+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion+Internal.h"; sourceTree = ""; }; @@ -2880,10 +2875,10 @@ 84D9FA1F71609D20508B005F07F96380 /* Pods-Steps4Impact-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Steps4Impact-acknowledgements.plist"; sourceTree = ""; }; 84F0A92F1992937E139F4F3306CE476A /* NSError+FIRMessaging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSError+FIRMessaging.h"; path = "Firebase/Messaging/NSError+FIRMessaging.h"; sourceTree = ""; }; 8501D0325EB17B61262DFB1033A67BF9 /* FBSDKShareOpenGraphValueContainer+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKShareOpenGraphValueContainer+Internal.h"; path = "FBSDKShareKit/FBSDKShareKit/Internal/FBSDKShareOpenGraphValueContainer+Internal.h"; sourceTree = ""; }; - 85128AF76199890A6DD56FE81089D883 /* FBSDKShareKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBSDKShareKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 85128AF76199890A6DD56FE81089D883 /* FBSDKShareKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FBSDKShareKit.framework; path = FBSDKShareKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 852777F6640E6628B309FC65CA37A559 /* Observable+Bind.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Observable+Bind.swift"; path = "RxCocoa/Common/Observable+Bind.swift"; sourceTree = ""; }; 85624E2438C853E940DA4E191B0C1AEA /* Recorded.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Recorded.swift; path = RxTest/Recorded.swift; sourceTree = ""; }; - 856B5CD56F194FAD26EA91620B66D614 /* GoogleDataTransport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GoogleDataTransport.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 856B5CD56F194FAD26EA91620B66D614 /* GoogleDataTransport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GoogleDataTransport.framework; path = GoogleDataTransport.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 856D09758952D5B341B25417FF07D873 /* FacebookShare.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FacebookShare.xcconfig; sourceTree = ""; }; 859627B33195A25E19D8C2C4DA7C6D95 /* Async.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Async.swift; path = Sources/Nimble/Matchers/Async.swift; sourceTree = ""; }; 85A392F5DB9540E1385664B46FBD8CD5 /* AppCenter.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AppCenter.xcconfig; sourceTree = ""; }; @@ -2892,7 +2887,7 @@ 8653AC1A869B73FAA9C8AC7D61FBFFD3 /* SDImageGIFCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGIFCoder.m; path = SDWebImage/Core/SDImageGIFCoder.m; sourceTree = ""; }; 868C2270404E16334D03D7A68D4BDE1D /* GoogleDataTransportCCTSupport-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GoogleDataTransportCCTSupport-Info.plist"; sourceTree = ""; }; 869D864D74CA4ACB9176270186521420 /* GDTEvent_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTEvent_Private.h; path = GoogleDataTransport/GDTLibrary/Private/GDTEvent_Private.h; sourceTree = ""; }; - 86B65838541EE72629A0EF4D74FACF92 /* mach_excServer.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = mach_excServer.c; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/mach_excServer.c; sourceTree = ""; }; + 86B65838541EE72629A0EF4D74FACF92 /* mach_excServer.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mach_excServer.c; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/mach_excServer.c; sourceTree = ""; }; 86B923BE3A809E010D04E6327EE27026 /* FBSDKAppLinkNavigation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkNavigation.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.m; sourceTree = ""; }; 86DD66E7E0B0EEF6733B131E8691191E /* RxBlocking-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxBlocking-umbrella.h"; sourceTree = ""; }; 86EBC36ED277F5DB92B377E6950413B7 /* FBSDKShareLinkContent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKShareLinkContent.m; path = FBSDKShareKit/FBSDKShareKit/FBSDKShareLinkContent.m; sourceTree = ""; }; @@ -2926,7 +2921,7 @@ 8C36D68C4EC83B4FAFD538E36540C65D /* SDWebImageDownloaderRequestModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderRequestModifier.h; path = SDWebImage/Core/SDWebImageDownloaderRequestModifier.h; sourceTree = ""; }; 8C8814D41B9ED8E3990811F5B18665C5 /* CompositeDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompositeDisposable.swift; path = RxSwift/Disposables/CompositeDisposable.swift; sourceTree = ""; }; 8C9EFFA71BD12D864A9D2AD300EF199D /* FBSDKCrashObserving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCrashObserving.h; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKCrashObserving.h; sourceTree = ""; }; - 8CC9178C366942FD6FF6A115604EAD58 /* FirebaseCoreDiagnostics.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseCoreDiagnostics.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8CC9178C366942FD6FF6A115604EAD58 /* FirebaseCoreDiagnostics.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseCoreDiagnostics.framework; path = FirebaseCoreDiagnostics.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 8CCA1FCEDCB484357229D0DF35C61EDB /* UISegmentedControl+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UISegmentedControl+Rx.swift"; path = "RxCocoa/iOS/UISegmentedControl+Rx.swift"; sourceTree = ""; }; 8CECD39C3F4D86372D3E023164BF1485 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/Core/UIView+WebCacheOperation.h"; sourceTree = ""; }; 8D41942F4907797425FEDC4C4ECC429C /* FBSDKCoreKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBSDKCoreKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -2943,7 +2938,7 @@ 8F25DC4EE8B8CB800F75D09DF25EEDC5 /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; 8F3403CFB74C78C0FBFD19C8B795F9EF /* FIRInstanceIDCheckinPreferences.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDCheckinPreferences.m; path = Firebase/InstanceID/FIRInstanceIDCheckinPreferences.m; sourceTree = ""; }; 8F44C6CA0ECAA5F90E25A7E6D4745FCC /* Pods-Steps4ImpactTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Steps4ImpactTests-dummy.m"; sourceTree = ""; }; - 8FA85C691FE86D8C0503CEC8E3285F8D /* FacebookShare.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FacebookShare.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8FA85C691FE86D8C0503CEC8E3285F8D /* FacebookShare.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FacebookShare.framework; path = FacebookShare.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 8FCED52D6DC93DDC2B217516FFEE3280 /* FacebookCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FacebookCore-Info.plist"; sourceTree = ""; }; 900018A30869C7D539D62FC0D8DBAFD3 /* FBSDKLoginKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBSDKLoginKit.xcconfig; sourceTree = ""; }; 90194A50D149F23EC2A3EF09583AD8B2 /* FBSDKDialogConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDialogConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.m; sourceTree = ""; }; @@ -2984,7 +2979,7 @@ 95E3C9C7C13BE03240D3EFA3C7F02416 /* AZSCopyState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AZSCopyState.h; path = "Lib/Azure Storage Client Library/Azure Storage Client Library/AZSCopyState.h"; sourceTree = ""; }; 95E4A8104DB9CA8E5A7B05295FDD02DC /* GDTTransport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTTransport.h; path = GoogleDataTransport/GDTLibrary/Public/GDTTransport.h; sourceTree = ""; }; 95EB759ACEE84C802FCB5D6667F877C3 /* ConstraintInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsets.swift; path = Source/ConstraintInsets.swift; sourceTree = ""; }; - 9624FCEEA80392849DBD851A122CCBE5 /* pb_common.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; path = pb_common.c; sourceTree = ""; }; + 9624FCEEA80392849DBD851A122CCBE5 /* pb_common.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pb_common.c; sourceTree = ""; }; 9636F450E7D9FE3F43C9DE949ED3F299 /* OAuth2Swift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuth2Swift.swift; path = Sources/OAuth2Swift.swift; sourceTree = ""; }; 964A32BFC4884D3FF6EBC09181D87E38 /* FBSDKShareKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FBSDKShareKit-dummy.m"; sourceTree = ""; }; 965CC766DD30A4AB7A0DABE5E21F88B8 /* FBSDKCoreKit+Typealiases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FBSDKCoreKit+Typealiases.swift"; path = "Sources/Core/FBSDKCoreKit+Typealiases.swift"; sourceTree = ""; }; @@ -2997,7 +2992,7 @@ 971B2B3B8228EC7A7EB23B0045935714 /* RxCollectionViewReactiveArrayDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewReactiveArrayDataSource.swift; path = RxCocoa/iOS/DataSources/RxCollectionViewReactiveArrayDataSource.swift; sourceTree = ""; }; 973EAD5B3676365D8BCD5F253A0A9C53 /* FirebaseCoreDiagnostics-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseCoreDiagnostics-dummy.m"; sourceTree = ""; }; 976BC861580AFBEECCB6BDF348FC713F /* SDWebImageCacheKeyFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheKeyFilter.m; path = SDWebImage/Core/SDWebImageCacheKeyFilter.m; sourceTree = ""; }; - 979486118B3E90C08386079D57962701 /* SnapKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 979486118B3E90C08386079D57962701 /* SnapKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapKit.framework; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9797B88BFCE2DFB70FFC1765C6AE8C5E /* ControlEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ControlEvent.swift; path = RxCocoa/Traits/ControlEvent.swift; sourceTree = ""; }; 9797CA54F1094414F2C74E34CFC30709 /* FIRMessagingClient.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingClient.m; path = Firebase/Messaging/FIRMessagingClient.m; sourceTree = ""; }; 97D375F74DFFC3E7D051CC3E7CAEEA70 /* FBSDKShareConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKShareConstants.h; path = FBSDKShareKit/FBSDKShareKit/FBSDKShareConstants.h; sourceTree = ""; }; @@ -3029,7 +3024,7 @@ 9D2ECCD1A830F759FB1347E5FBB8E5A9 /* VirtualTimeConverterType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VirtualTimeConverterType.swift; path = RxSwift/Schedulers/VirtualTimeConverterType.swift; sourceTree = ""; }; 9D584E75CA2975F9E155B74B4F92498E /* MainScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MainScheduler.swift; path = RxSwift/Schedulers/MainScheduler.swift; sourceTree = ""; }; 9D89BFDAEC68AEB782F7567EDD284046 /* GPBMessage_PackagePrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBMessage_PackagePrivate.h; path = objectivec/GPBMessage_PackagePrivate.h; sourceTree = ""; }; - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 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; }; 9DF2B3EA87AAB629C60C2DAF77C29E9B /* DSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DSL.m; path = Sources/NimbleObjectiveC/DSL.m; sourceTree = ""; }; 9E084D30DA818E483CFA0FAE3BF701F5 /* Zip+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Zip+arity.swift"; path = "RxSwift/Observables/Zip+arity.swift"; sourceTree = ""; }; 9E4157C26219DE5DB80F8E589E6A8B31 /* AZSULLRange.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AZSULLRange.h; path = "Lib/Azure Storage Client Library/Azure Storage Client Library/AZSULLRange.h"; sourceTree = ""; }; @@ -3128,7 +3123,7 @@ B09910B973F047C4479BE2AC26563D81 /* FBSDKGameRequestFrictionlessRecipientCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGameRequestFrictionlessRecipientCache.m; path = FBSDKShareKit/FBSDKShareKit/Internal/FBSDKGameRequestFrictionlessRecipientCache.m; sourceTree = ""; }; B0A4B204D6EA76F03828338E21283DF2 /* ToArray.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ToArray.swift; path = RxSwift/Observables/ToArray.swift; sourceTree = ""; }; B0ADB72D7D1A798123E43111072B2576 /* RxTableViewDataSourceType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTableViewDataSourceType.swift; path = RxCocoa/iOS/Protocols/RxTableViewDataSourceType.swift; sourceTree = ""; }; - B0B214D775196BA7CA8E17E53048A493 /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B0B214D775196BA7CA8E17E53048A493 /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SDWebImage.framework; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B0C2DB6904C0E6881B01FF6E02C6A484 /* FacebookSDKStrings.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; path = FacebookSDKStrings.bundle; sourceTree = ""; }; B0D587F2D5835BC0D96F14D220067E5C /* GULReachabilityChecker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULReachabilityChecker.h; path = GoogleUtilities/Reachability/Private/GULReachabilityChecker.h; sourceTree = ""; }; B0EE0005D9AEBDA4452104E91B33370F /* SourceLocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SourceLocation.swift; path = Sources/Nimble/Utils/SourceLocation.swift; sourceTree = ""; }; @@ -3151,7 +3146,7 @@ B372AEF2B3E503766824F1252E033E9B /* String+C99ExtendedIdentifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+C99ExtendedIdentifier.swift"; path = "Sources/Quick/String+C99ExtendedIdentifier.swift"; sourceTree = ""; }; B3CC10A1FD52184C1314E7CB0D501321 /* Sink.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sink.swift; path = RxSwift/Observables/Sink.swift; sourceTree = ""; }; B3F495DAB6B6312C9C91285C8CF26568 /* UIColor+HexString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+HexString.h"; path = "SDWebImage/Private/UIColor+HexString.h"; sourceTree = ""; }; - B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GoogleUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GoogleUtilities.framework; path = GoogleUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B45663BDFEBA60CB7A9EDA911E83D173 /* ExampleHooks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleHooks.swift; path = Sources/Quick/Hooks/ExampleHooks.swift; sourceTree = ""; }; B493E86E8B134CBBF9B1D79AD45512C2 /* FIRInstanceIDCheckinPreferences.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstanceIDCheckinPreferences.h; path = Firebase/InstanceID/Private/FIRInstanceIDCheckinPreferences.h; sourceTree = ""; }; B497BA2992382E951D4D7BB15F9E5CC5 /* AZSRequestFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AZSRequestFactory.h; path = "Lib/Azure Storage Client Library/Azure Storage Client Library/AZSRequestFactory.h"; sourceTree = ""; }; @@ -3194,7 +3189,7 @@ BA6730B7D3F87C3D7F6D769C6F713412 /* FBSDKShareDialogMode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKShareDialogMode.m; path = FBSDKShareKit/FBSDKShareKit/FBSDKShareDialogMode.m; sourceTree = ""; }; BA6FE92D8866D35326545CBE5E05A3A4 /* FBSDKCopying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCopying.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKCopying.h; sourceTree = ""; }; BA7464AF3EF4059AD0D9FBEE22FDC3B8 /* AZSSharedAccessSignatureHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AZSSharedAccessSignatureHelper.m; path = "Lib/Azure Storage Client Library/Azure Storage Client Library/AZSSharedAccessSignatureHelper.m"; sourceTree = ""; }; - BAE263041362D074978BB3B577DF0A05 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BAE263041362D074978BB3B577DF0A05 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Nimble.framework; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BB1A51D3133A7006CA6107D7C5C564F1 /* FIRMessagingPubSub.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingPubSub.m; path = Firebase/Messaging/FIRMessagingPubSub.m; sourceTree = ""; }; BB5256185D04BBB233F3AC8A0D4BB8C9 /* RxSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxSwift-prefix.pch"; sourceTree = ""; }; BB676FFC66CB2FE683F0149514A66D51 /* NMBExceptionCapture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NMBExceptionCapture.h; path = Sources/NimbleObjectiveC/NMBExceptionCapture.h; sourceTree = ""; }; @@ -3203,7 +3198,7 @@ BBE6F9BB4B5431BCD11FA973953A722E /* UINavigationController+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UINavigationController+Rx.swift"; path = "RxCocoa/iOS/UINavigationController+Rx.swift"; sourceTree = ""; }; BBF1F4B89753B033E4F919349BA354B1 /* ObservableConvertibleType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObservableConvertibleType.swift; path = RxSwift/ObservableConvertibleType.swift; sourceTree = ""; }; BC0FDAB7D8C6A31BF81DE4F6F2CF30B8 /* FBSDKLikeActionControllerCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLikeActionControllerCache.m; path = FBSDKShareKit/FBSDKShareKit/Internal/FBSDKLikeActionControllerCache.m; sourceTree = ""; }; - BC432FD48A5932251F1CAFBC4BF74894 /* RxCocoa.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BC432FD48A5932251F1CAFBC4BF74894 /* RxCocoa.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RxCocoa.framework; path = RxCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BC6295B47D0B2D28A4F9DF24928462A3 /* SnapKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.xcconfig; sourceTree = ""; }; BC81ADFC4692776DCC5AC083CA83144A /* GULLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULLogger.m; path = GoogleUtilities/Logger/GULLogger.m; sourceTree = ""; }; BC824B2A9C6BC6E62F2CDF656509094D /* FBSDKTypeUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTypeUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKTypeUtility.m; sourceTree = ""; }; @@ -3235,7 +3230,7 @@ C189E1D1A5E32F020C2D25A4802F827F /* FBSDKProfile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKProfile.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.h; sourceTree = ""; }; C1B97005CD655F5E5F998B8DF612DAA7 /* AZSResultSegment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AZSResultSegment.m; path = "Lib/Azure Storage Client Library/Azure Storage Client Library/AZSResultSegment.m"; sourceTree = ""; }; C1CE24026ADE6C82344441702A3FA0AA /* FIRInstanceIDTokenStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstanceIDTokenStore.m; path = Firebase/InstanceID/FIRInstanceIDTokenStore.m; sourceTree = ""; }; - C2105C94812B6214B154F54DCEDB72AC /* Protobuf.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Protobuf.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C2105C94812B6214B154F54DCEDB72AC /* Protobuf.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Protobuf.framework; path = Protobuf.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C2337FA2ABB0C99A9255953BA1D10149 /* Catch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Catch.swift; path = RxSwift/Observables/Catch.swift; sourceTree = ""; }; C246A4579E5C65A8F432111B9C2655F3 /* SDImageGraphics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGraphics.h; path = SDWebImage/Core/SDImageGraphics.h; sourceTree = ""; }; C272AC5B55A82DE6FD1F2FC43F882DFB /* Protobuf-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Protobuf-dummy.m"; sourceTree = ""; }; @@ -3417,7 +3412,7 @@ E24B35116B93E25C3AA94ED3471CAC62 /* Disposables.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Disposables.swift; path = RxSwift/Disposables/Disposables.swift; sourceTree = ""; }; E24BEA80B1C62C8591F0A29BC9BA6C5F /* FBSDKViewImpressionTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKViewImpressionTracker.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.m; sourceTree = ""; }; E254EEB2DE6ECF6D68A3032FA252B0FC /* FirebaseMessaging.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseMessaging.modulemap; sourceTree = ""; }; - E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseCore.framework; path = FirebaseCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; E2B7E0C64E08F5FBFC06C26E7678FB75 /* _RX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _RX.h; path = RxCocoa/Runtime/include/_RX.h; sourceTree = ""; }; E302C13E6CC566CAD4433F79576883CF /* GDTAssert.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTAssert.m; path = GoogleDataTransport/GDTLibrary/GDTAssert.m; sourceTree = ""; }; E30CE8960D709F2B7B246F974C824AAA /* Predicate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Predicate.swift; path = Sources/Nimble/Matchers/Predicate.swift; sourceTree = ""; }; @@ -3490,7 +3485,7 @@ EBE18A1C80A9920A9FBBF52B2EC68929 /* Any.pbobjc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Any.pbobjc.h; path = objectivec/google/protobuf/Any.pbobjc.h; sourceTree = ""; }; EC322389B825779FC9AA9EC2345DA8A6 /* FBSDKGraphRequestPiggybackManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestPiggybackManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.h; sourceTree = ""; }; EC5CFA3A5BBAF41ACA4329BFD1EFD786 /* FIRMessagingConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRMessagingConstants.m; path = Firebase/Messaging/FIRMessagingConstants.m; sourceTree = ""; }; - EC8F4D0BE3B0C192EBA4A93F8887D89F /* FBSDKCoreKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBSDKCoreKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EC8F4D0BE3B0C192EBA4A93F8887D89F /* FBSDKCoreKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FBSDKCoreKit.framework; path = FBSDKCoreKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; EC982A40CD7A8B8F40784B4F3EB3F53F /* Pods-Steps4Impact.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Steps4Impact.debug.xcconfig"; sourceTree = ""; }; EC9E523675F3079E72E321BA0C62D85E /* FBSDKShareConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKShareConstants.m; path = FBSDKShareKit/FBSDKShareKit/FBSDKShareConstants.m; sourceTree = ""; }; ECC73F6CEF469F24659F462F4806E7D3 /* FBSDKShareMediaContent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKShareMediaContent.h; path = FBSDKShareKit/FBSDKShareKit/FBSDKShareMediaContent.h; sourceTree = ""; }; @@ -3514,7 +3509,7 @@ F0058CAB4FD169A313379E840560F87B /* FBSDKGraphRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequest.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKGraphRequest.h; sourceTree = ""; }; F04CB38658724EB6CBEC3FB27A54FAFC /* RxBlocking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxBlocking-prefix.pch"; sourceTree = ""; }; F06A82610D11863E0BA6DB44506357E2 /* GoogleDataTransport-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleDataTransport-dummy.m"; sourceTree = ""; }; - F06D85BD7B4F2037724581C9BD1A5442 /* firebasecore.nanopb.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = firebasecore.nanopb.c; path = Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c; sourceTree = ""; }; + F06D85BD7B4F2037724581C9BD1A5442 /* firebasecore.nanopb.c */ = {isa = PBXFileReference; includeInIndex = 1; name = firebasecore.nanopb.c; path = Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c; sourceTree = ""; }; F0BF2B7E00E8A3FB9A00B1039A4E56A6 /* SDWeakProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWeakProxy.m; path = SDWebImage/Private/SDWeakProxy.m; sourceTree = ""; }; F1B55BE6217E655EB11AEEB492684DB2 /* SDWebImageCacheSerializer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCacheSerializer.h; path = SDWebImage/Core/SDWebImageCacheSerializer.h; sourceTree = ""; }; F1B6ABB685BE509F6F1F40387E8F3673 /* HooksPhase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HooksPhase.swift; path = Sources/Quick/Hooks/HooksPhase.swift; sourceTree = ""; }; @@ -3584,7 +3579,7 @@ FF6742B4F5D51F7B806C7B92B3F20E33 /* SuiteHooks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SuiteHooks.swift; path = Sources/Quick/Hooks/SuiteHooks.swift; sourceTree = ""; }; FF6847C116A6E72BA92813C02464AA64 /* GPBCodedOutputStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GPBCodedOutputStream.h; path = objectivec/GPBCodedOutputStream.h; sourceTree = ""; }; FF777EA5907E8DE991383CBFAB9F7228 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/Core/UIImageView+WebCache.h"; sourceTree = ""; }; - FF8B264DFE802855D5D67E7CDDABFC3C /* RxRelay.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxRelay.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FF8B264DFE802855D5D67E7CDDABFC3C /* RxRelay.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RxRelay.framework; path = RxRelay.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -3850,6 +3845,7 @@ 9E11F65A9674C51D4636E5C1403CA009 /* Crashes */, FA2FD013172801C4F17D4469619F94E4 /* Support Files */, ); + name = AppCenter; path = AppCenter; sourceTree = ""; }; @@ -4020,6 +4016,7 @@ 08335FFE72151D9805D90B2F07531A62 /* FIRCoreDiagnosticsInterop.h */, 1C51E2996FE4A02F6AADFF5D94E89C9E /* Support Files */, ); + name = FirebaseCoreDiagnosticsInterop; path = FirebaseCoreDiagnosticsInterop; sourceTree = ""; }; @@ -4092,6 +4089,7 @@ C801B4F66209E000F686A2D7851DF5D6 /* NSError+FIRInstanceID.m */, 4F1EC72BB60EA18BF78FA050CBCFAAAD /* Support Files */, ); + name = FirebaseInstanceID; path = FirebaseInstanceID; sourceTree = ""; }; @@ -4116,6 +4114,7 @@ 19460DCA8C76054D2602849C1E07C97A /* FIRInteropParameterNames.h */, C36BF3D2BDD4001BF2A92E6DE2E8B135 /* Support Files */, ); + name = FirebaseAnalyticsInterop; path = FirebaseAnalyticsInterop; sourceTree = ""; }; @@ -4139,6 +4138,7 @@ 1574CD72414CCEFC85070AF4ACB51E84 /* Share */, F16948C65D831EF3554F8A5994A49300 /* Support Files */, ); + name = FBSDKShareKit; path = FBSDKShareKit; sourceTree = ""; }; @@ -4284,6 +4284,7 @@ 6131E23BF52AB72ED57A55D7D0DF74A1 /* URLSession+Rx.swift */, 246368EBCCC322BDA2EB1751A86DDA45 /* Support Files */, ); + name = RxCocoa; path = RxCocoa; sourceTree = ""; }; @@ -4397,6 +4398,7 @@ 81B14E3DCD9811B839090EA2367A3DF8 /* XCTestObservationCenter+Register.m */, 60644C9608F9CB4DEE06DCAD8BEA1570 /* Support Files */, ); + name = Nimble; path = Nimble; sourceTree = ""; }; @@ -4407,6 +4409,7 @@ CA350DCE0FBAE75A680FD434D8B015BD /* FBSDKShareKit+Typealiases.swift */, 7FF1714F748E95042587C7C12D58689D /* Support Files */, ); + name = FacebookShare; path = FacebookShare; sourceTree = ""; }; @@ -4478,6 +4481,7 @@ 024E6828DB5C1EF9DBFAA237886FF3C5 /* GoogleDataTransport.h */, 1A727B8C0A1DFB8672D75FF0A12C21D8 /* Support Files */, ); + name = GoogleDataTransport; path = GoogleDataTransport; sourceTree = ""; }; @@ -4509,6 +4513,7 @@ 6856CAB81D97CD030898FA925FA74826 /* Core */, EB101B419EACA5E9873FF1A60DB5D9F5 /* Support Files */, ); + name = FBSDKCoreKit; path = FBSDKCoreKit; sourceTree = ""; }; @@ -4563,6 +4568,7 @@ 7FEB75A8CDF0331DAE3F7942684161D6 /* Login */, D501562C9626E43E10B5C43110BF64BF /* Support Files */, ); + name = FBSDKLoginKit; path = FBSDKLoginKit; sourceTree = ""; }; @@ -4577,6 +4583,7 @@ 083532DD1BFF81F0E7A84BD3826A193F /* Settings.swift */, AABD82D04EAB0B2DB7BE4DA04A6D39CC /* Support Files */, ); + name = FacebookCore; path = FacebookCore; sourceTree = ""; }; @@ -4858,6 +4865,7 @@ 51484B41CB75BA35A1C1B6B6F4DA266F /* firebasecore.nanopb.h */, B3760612A4E8E18D509C4B0482BD8AEB /* Support Files */, ); + name = FirebaseCoreDiagnostics; path = FirebaseCoreDiagnostics; sourceTree = ""; }; @@ -5034,6 +5042,7 @@ F7DD9D655B7889E90D991407CA6ACD45 /* Zip+Collection.swift */, 1A492F793189D47B7F1B0A6217872D17 /* Support Files */, ); + name = RxSwift; path = RxSwift; sourceTree = ""; }; @@ -5065,6 +5074,7 @@ 11AF0324F5BA3170AC1D11978FADC69C /* XCTest+Rx.swift */, C921D6064A99C5D13B6058D4A464963B /* Support Files */, ); + name = RxTest; path = RxTest; sourceTree = ""; }; @@ -5138,6 +5148,7 @@ children = ( 665C8D0EEE36CADD979786BBB35783E8 /* Support Files */, ); + name = Sourcery; path = Sourcery; sourceTree = ""; }; @@ -5178,6 +5189,7 @@ EDAEAFE25DA6621AA2BDA32E97395AB1 /* Core */, E2F5ABBCD76C09DC3968F3B635C09D8F /* Support Files */, ); + name = SDWebImage; path = SDWebImage; sourceTree = ""; }; @@ -5213,6 +5225,7 @@ 8A3D98BD1163DD180C5AFDDE2E4850C9 /* Utils.swift */, AC8631EB16C560373EF0958FFA21A889 /* Support Files */, ); + name = RxRelay; path = RxRelay; sourceTree = ""; }; @@ -5278,6 +5291,7 @@ 7774D1E6A5D148BB413C9E5E7738DCBF /* UILayoutSupport+Extensions.swift */, 27BBBBF321C91B4673677608C7D8DD72 /* Support Files */, ); + name = SnapKit; path = SnapKit; sourceTree = ""; }; @@ -5408,6 +5422,7 @@ C9E998E2F247DD2C4B9443BB8524849D /* AZSUtil.m */, CD8DD90BB7F2A6E6973AA7CD6B29F79E /* Support Files */, ); + name = AZSClient; path = AZSClient; sourceTree = ""; }; @@ -5438,6 +5453,7 @@ C75266F8F8E6FE87A47709EB4F990CF4 /* GDTCCTUploader.m */, BF0FF7B26E473C5D993C524430CCCBA2 /* Support Files */, ); + name = GoogleDataTransportCCTSupport; path = GoogleDataTransportCCTSupport; sourceTree = ""; }; @@ -5484,6 +5500,7 @@ 078F8B0D4040337C4FEE688008C3B3AE /* FIRVersion.m */, 9E96BBD04C18CCB8A70BE2738BF71E4B /* Support Files */, ); + name = FirebaseCore; path = FirebaseCore; sourceTree = ""; }; @@ -5559,6 +5576,7 @@ E0DE4C0636E3E90D9A24035D605A9A8F /* XCTestSuite+QuickTestSuiteBuilder.m */, C20E56B5CA1DC2FCF05E933DD4D95935 /* Support Files */, ); + name = Quick; path = Quick; sourceTree = ""; }; @@ -5674,6 +5692,7 @@ 80988857862DAC7B9F07CB369970F897 /* Wrappers.pbobjc.m */, F8714C934540292C11331BAC8FE37EFD /* Support Files */, ); + name = Protobuf; path = Protobuf; sourceTree = ""; }; @@ -5705,6 +5724,7 @@ children = ( E3EF2C4D637B54FEF46E9768CAC53524 /* Support Files */, ); + name = SwiftLint; path = SwiftLint; sourceTree = ""; }; @@ -5791,6 +5811,7 @@ 9CC5E1EBA643471A22A69D2F3D453130 /* NSError+FIRMessaging.m */, CF2BD67AD91D5FE1858413516399BD75 /* Support Files */, ); + name = FirebaseMessaging; path = FirebaseMessaging; sourceTree = ""; }; @@ -5837,6 +5858,7 @@ 69523C8E19B1FBDE3E66B808B619FBD2 /* Utils.swift */, ED14026816BD2B0DFC9392C5E57F697F /* Support Files */, ); + name = OAuthSwift; path = OAuthSwift; sourceTree = ""; }; @@ -5859,6 +5881,7 @@ 22AB38E7C3AAEA1B81C99D6147C96C9B /* RunLoopLock.swift */, AEA6FA5F3C6A80483E120163473F5E5F /* Support Files */, ); + name = RxBlocking; path = RxBlocking; sourceTree = ""; }; @@ -5898,6 +5921,7 @@ 5A009121101F8D9CE557B594C2B29E03 /* Support Files */, 817823FA12C8838C720963A9618386B5 /* UserDefaults */, ); + name = GoogleUtilities; path = GoogleUtilities; sourceTree = ""; }; @@ -5941,6 +5965,7 @@ 66C75B993880A09477D489FFE1EDF628 /* encode */, C3EC45B20526C804B7D4CFAF29FE255C /* Support Files */, ); + name = nanopb; path = nanopb; sourceTree = ""; }; @@ -6175,6 +6200,7 @@ 78E650F3440716DCD86E0AE63FE9D942 /* LoginManager.swift */, 8B7148266F580A7C84635B08AF9F16A4 /* Support Files */, ); + name = FacebookLogin; path = FacebookLogin; sourceTree = ""; }; @@ -7519,7 +7545,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 1100; - LastUpgradeCheck = 1130; + LastUpgradeCheck = 1100; }; buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 3.2"; @@ -9236,6 +9262,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 1DFD1D4523F2BB7AF2F905949BE86E0C /* SwiftLint.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; @@ -9249,6 +9276,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = CFB5448838941B54FD7629CCD9881123 /* OAuthSwift.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9280,6 +9308,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = AA557CEFA6554B5FB01BA2960D109AE4 /* Sourcery.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; @@ -9293,6 +9322,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 900018A30869C7D539D62FC0D8DBAFD3 /* FBSDKLoginKit.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9325,6 +9355,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 7EC4ED546CE77C8E21B6B7AEFEAD40F7 /* FBSDKShareKit.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9357,6 +9388,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 85A392F5DB9540E1385664B46FBD8CD5 /* AppCenter.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; @@ -9370,6 +9402,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = ADB5411F46E1BCE781859FB1866E2F86 /* FacebookCore.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9401,6 +9434,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 85A392F5DB9540E1385664B46FBD8CD5 /* AppCenter.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; @@ -9415,6 +9449,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 81082EC43091478500EEE8015A87E66E /* GoogleDataTransportCCTSupport.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9446,6 +9481,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = FCC90DC121A9E526F240DCE5EF46AB44 /* FacebookLogin.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9477,6 +9513,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = AA557CEFA6554B5FB01BA2960D109AE4 /* Sourcery.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; @@ -9491,6 +9528,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 800085E6516B6687E4BB5DC2C6AC76AB /* GoogleUtilities.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9523,6 +9561,7 @@ baseConfigurationReference = 41D4BAB17B082EB1E92F5EA0BE8F1316 /* Pods-Steps4Impact.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -9557,6 +9596,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = AEE7B4A013372A9C1A933C01C770A850 /* Nimble.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9636,7 +9676,8 @@ MTL_FAST_MATH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; SWIFT_VERSION = 5.0; SYMROOT = "${SRCROOT}/../build"; }; @@ -9646,6 +9687,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 856D09758952D5B341B25417FF07D873 /* FacebookShare.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9678,6 +9720,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 6A41A428D752EA91EAF2521686856A05 /* FBSDKCoreKit.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9709,6 +9752,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = AF33EFA435159BBF9849C0D54FF187F9 /* nanopb.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9740,6 +9784,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 6F15D370087DA58C613C8BFFEF6C909D /* RxTest.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9771,6 +9816,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 7EC4ED546CE77C8E21B6B7AEFEAD40F7 /* FBSDKShareKit.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9802,6 +9848,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 158DEB58B0D8A77A69612137E90E7F4F /* FirebaseCore.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9834,6 +9881,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 4EA82B5F502E72E8075E5294B7E65236 /* AZSClient.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9865,6 +9913,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 8EC6679FA97E57211312DE8AF4F53D90 /* Protobuf.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9897,6 +9946,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 0FC7FEB883CCBA708E814065C07C700B /* RxSwift.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -9928,6 +9978,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 24EB4D22E2E96DF613D38E51655316EB /* FirebaseCoreDiagnosticsInterop.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; @@ -9941,6 +9992,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = BC6295B47D0B2D28A4F9DF24928462A3 /* SnapKit.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -9973,6 +10025,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5EA58D18D0753662A43EA5CE6D69E0B4 /* RxCocoa.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10004,6 +10057,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = ADB5411F46E1BCE781859FB1866E2F86 /* FacebookCore.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10036,6 +10090,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 81082EC43091478500EEE8015A87E66E /* GoogleDataTransportCCTSupport.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10068,6 +10123,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 20802463C5BF7EDF93BEAF6144DC5E7C /* FirebaseAnalyticsInterop.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; @@ -10082,6 +10138,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 3BC8DA29B9CAA81A91A6CC271CBA4C16 /* RxBlocking.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10113,6 +10170,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = BC6295B47D0B2D28A4F9DF24928462A3 /* SnapKit.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -10146,6 +10204,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = E762CD064ACD6EE8785CC44F004529D6 /* RxRelay.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10178,6 +10237,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 900018A30869C7D539D62FC0D8DBAFD3 /* FBSDKLoginKit.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10209,6 +10269,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 20C93FEE13AEC71227F203C417AE4B88 /* FirebaseInstanceID.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10240,6 +10301,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 0FC7FEB883CCBA708E814065C07C700B /* RxSwift.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10272,6 +10334,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = FCC90DC121A9E526F240DCE5EF46AB44 /* FacebookLogin.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10305,6 +10368,7 @@ baseConfigurationReference = 747195F2974C8D5179711FFFEE0A87BE /* Pods-Steps4ImpactTests.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -10339,6 +10403,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 3BC8DA29B9CAA81A91A6CC271CBA4C16 /* RxBlocking.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10371,6 +10436,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 20802463C5BF7EDF93BEAF6144DC5E7C /* FirebaseAnalyticsInterop.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; @@ -10384,6 +10450,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 1DFD1D4523F2BB7AF2F905949BE86E0C /* SwiftLint.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; @@ -10398,6 +10465,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = BFF5E1376B8D78A16EB065940018D69F /* FirebaseMessaging.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10430,6 +10498,7 @@ baseConfigurationReference = EC982A40CD7A8B8F40784B4F3EB3F53F /* Pods-Steps4Impact.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -10463,6 +10532,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = E762CD064ACD6EE8785CC44F004529D6 /* RxRelay.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10494,6 +10564,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 9181E11480A62F399D2F50FAD3F2C2CA /* Quick.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10526,6 +10597,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 24EB4D22E2E96DF613D38E51655316EB /* FirebaseCoreDiagnosticsInterop.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; @@ -10540,6 +10612,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = D8B30308592456312EBAFE29AEB4C290 /* GoogleDataTransport.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10571,6 +10644,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5EA58D18D0753662A43EA5CE6D69E0B4 /* RxCocoa.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10603,6 +10677,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 158DEB58B0D8A77A69612137E90E7F4F /* FirebaseCore.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10635,6 +10710,7 @@ baseConfigurationReference = 6FA3A70AE41BF53DE76DC25413CC48A4 /* Pods-Steps4ImpactTests.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -10668,6 +10744,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 4EA82B5F502E72E8075E5294B7E65236 /* AZSClient.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10700,6 +10777,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 6A41A428D752EA91EAF2521686856A05 /* FBSDKCoreKit.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10732,6 +10810,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 800085E6516B6687E4BB5DC2C6AC76AB /* GoogleUtilities.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10764,6 +10843,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = D8B30308592456312EBAFE29AEB4C290 /* GoogleDataTransport.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10796,6 +10876,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = AEE7B4A013372A9C1A933C01C770A850 /* Nimble.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10891,6 +10972,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = BFF5E1376B8D78A16EB065940018D69F /* FirebaseMessaging.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10923,6 +11005,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 8EC6679FA97E57211312DE8AF4F53D90 /* Protobuf.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10954,6 +11037,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = EFFF7096A8B85760967AE643F8F3CEE0 /* SDWebImage.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -10985,6 +11069,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = AF33EFA435159BBF9849C0D54FF187F9 /* nanopb.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -11017,6 +11102,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 9181E11480A62F399D2F50FAD3F2C2CA /* Quick.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -11048,6 +11134,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 20C93FEE13AEC71227F203C417AE4B88 /* FirebaseInstanceID.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -11080,6 +11167,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = A8D10985BDF078D1B936F6DB094E9135 /* FirebaseCoreDiagnostics.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -11112,6 +11200,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = EFFF7096A8B85760967AE643F8F3CEE0 /* SDWebImage.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -11144,6 +11233,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 856D09758952D5B341B25417FF07D873 /* FacebookShare.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -11175,6 +11265,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = CFB5448838941B54FD7629CCD9881123 /* OAuthSwift.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -11207,6 +11298,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 6F15D370087DA58C613C8BFFEF6C909D /* RxTest.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -11239,6 +11331,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = A8D10985BDF078D1B936F6DB094E9135 /* FirebaseCoreDiagnostics.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; diff --git a/Pods/SwiftLint/LICENSE b/Pods/SwiftLint/LICENSE index a029e457..04203762 100644 --- a/Pods/SwiftLint/LICENSE +++ b/Pods/SwiftLint/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2015 Realm Inc. +Copyright (c) 2020 Realm Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Pods/SwiftLint/swiftlint b/Pods/SwiftLint/swiftlint index eb4e5e9b..7cfa8864 100755 Binary files a/Pods/SwiftLint/swiftlint and b/Pods/SwiftLint/swiftlint differ diff --git a/Pods/Target Support Files/Pods-steps4impact/Pods-steps4impact-acknowledgements.markdown b/Pods/Target Support Files/Pods-steps4impact/Pods-steps4impact-acknowledgements.markdown index f3787691..132a86b5 100644 --- a/Pods/Target Support Files/Pods-steps4impact/Pods-steps4impact-acknowledgements.markdown +++ b/Pods/Target Support Files/Pods-steps4impact/Pods-steps4impact-acknowledgements.markdown @@ -2204,7 +2204,7 @@ SOFTWARE. The MIT License (MIT) -Copyright (c) 2015 Realm Inc. +Copyright (c) 2020 Realm Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Pods/Target Support Files/Pods-steps4impact/Pods-steps4impact-acknowledgements.plist b/Pods/Target Support Files/Pods-steps4impact/Pods-steps4impact-acknowledgements.plist index 39a2d6bd..8c048c14 100644 --- a/Pods/Target Support Files/Pods-steps4impact/Pods-steps4impact-acknowledgements.plist +++ b/Pods/Target Support Files/Pods-steps4impact/Pods-steps4impact-acknowledgements.plist @@ -2365,7 +2365,7 @@ SOFTWARE. FooterText The MIT License (MIT) -Copyright (c) 2015 Realm Inc. +Copyright (c) 2020 Realm Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Steps4Impact.xcodeproj/project.pbxproj b/Steps4Impact.xcodeproj/project.pbxproj index 62600693..9d68db3d 100644 --- a/Steps4Impact.xcodeproj/project.pbxproj +++ b/Steps4Impact.xcodeproj/project.pbxproj @@ -107,7 +107,10 @@ 26FE2451232231FB00E01B9B /* TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26FE2450232231FB00E01B9B /* TableViewController.swift */; }; 26FE24532322332D00E01B9B /* UITableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26FE24522322332D00E01B9B /* UITableView.swift */; }; 26FE2455232234A300E01B9B /* EmptyCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26FE2454232234A300E01B9B /* EmptyCell.swift */; }; + 3A1AB4E623D812A000088D75 /* Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A1AB4E523D812A000088D75 /* Notification.swift */; }; + 3A1AB4E823D95D1600088D75 /* NotificationCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A1AB4E723D95D1600088D75 /* NotificationCell.swift */; }; 3AAA32A023655CB5002B7479 /* LoginButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AAA329F23655CB5002B7479 /* LoginButton.swift */; }; + 3AFD516923774C4300CD3989 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3AFD516823774C4300CD3989 /* GoogleService-Info.plist */; }; 7A7C5B5BCE64FE425FE48D17 /* Pods_Steps4ImpactTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 644A965BB27AB6174A19603E /* Pods_Steps4ImpactTests.framework */; }; 885A50211F181C0FFD544AAA /* Pods_Steps4Impact.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E04420449F9B74A2501CBBEA /* Pods_Steps4Impact.framework */; }; A5123F1F2381B51E00C3E9DE /* JourneyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5123F1E2381B51E00C3E9DE /* JourneyViewController.swift */; }; @@ -304,7 +307,10 @@ 26FE2454232234A300E01B9B /* EmptyCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyCell.swift; sourceTree = ""; }; 307EFC69C033D08671C5E6C6 /* Pods-steps4impact.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-steps4impact.release.xcconfig"; path = "Target Support Files/Pods-steps4impact/Pods-steps4impact.release.xcconfig"; sourceTree = ""; }; 31082B36DD919D9631B44E5E /* Pods-Steps4Impact.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Steps4Impact.debug.xcconfig"; path = "Target Support Files/Pods-Steps4Impact/Pods-Steps4Impact.debug.xcconfig"; sourceTree = ""; }; + 3A1AB4E523D812A000088D75 /* Notification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notification.swift; sourceTree = ""; }; + 3A1AB4E723D95D1600088D75 /* NotificationCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationCell.swift; sourceTree = ""; }; 3AAA329F23655CB5002B7479 /* LoginButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginButton.swift; sourceTree = ""; }; + 3AFD516823774C4300CD3989 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 644A965BB27AB6174A19603E /* Pods_Steps4ImpactTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Steps4ImpactTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7D885FB78222CE09537F0C6A /* Pods-steps4impact.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-steps4impact.debug.xcconfig"; path = "Target Support Files/Pods-steps4impact/Pods-steps4impact.debug.xcconfig"; sourceTree = ""; }; A5123F1E2381B51E00C3E9DE /* JourneyViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JourneyViewController.swift; sourceTree = ""; }; @@ -536,6 +542,7 @@ 2611A50B2335FF930030E77E /* Supporting Files */ = { isa = PBXGroup; children = ( + 3AFD516823774C4300CD3989 /* GoogleService-Info.plist */, 26388A6A2348293700C83AC2 /* Localizable.strings */, 262BE89D2338817D0087DDDF /* Steps4Impact.entitlements */, 269E34D51E765828000726C2 /* Info.plist */, @@ -572,6 +579,7 @@ 2622C0952324A0490092B145 /* TableViewCell.swift */, 26A9829623CABABF00A5BD35 /* ImageButtonCell.swift */, A53E7B40236F59F0006BD6D9 /* CollectionViewCell.swift */, + 3A1AB4E723D95D1600088D75 /* NotificationCell.swift */, ); path = Cells; sourceTree = ""; @@ -838,6 +846,7 @@ C9BAEECF235D5C4E00A8D7AF /* FitbitStep.swift */, A594DC8C238B6DBA003B5EF7 /* Leaderboard.swift */, 26A9829A23CABAE800A5BD35 /* Milestone.swift */, + 3A1AB4E523D812A000088D75 /* Notification.swift */, ); path = Models; sourceTree = ""; @@ -1032,6 +1041,7 @@ buildActionMask = 2147483647; files = ( 269E34D11E765828000726C2 /* Assets.xcassets in Resources */, + 3AFD516923774C4300CD3989 /* GoogleService-Info.plist in Resources */, 269E34FD1E7658F2000726C2 /* Launch.storyboard in Resources */, 26388A682348293700C83AC2 /* Localizable.strings in Resources */, ); @@ -1310,6 +1320,7 @@ F0F8EDD32210C68E00321A6D /* ProfileCard.swift in Sources */, 260BF5B02324FD31005F0882 /* SettingsViewController.swift in Sources */, F0A0A5FE2210EC3600F20315 /* Navigation.swift in Sources */, + 3A1AB4E823D95D1600088D75 /* NotificationCell.swift in Sources */, 265DE5682332D66E009DDA5A /* BadgesDataSource.swift in Sources */, F03D77DE1EA83B0800A70230 /* Event.swift in Sources */, F0C6D50D1EA3071A008E3B82 /* SelectionButton.swift in Sources */, @@ -1333,6 +1344,7 @@ F078D9D52333EC3000EF0BAD /* AKFLogin.swift in Sources */, 2668B06B2361936300309B9D /* AppSecrets.generated.swift in Sources */, F0F8EDD92210C7FA00321A6D /* ChallengeCard.swift in Sources */, + 3A1AB4E623D812A000088D75 /* Notification.swift in Sources */, 26A9829B23CABAE800A5BD35 /* Milestone.swift in Sources */, 2676B3CA2331F18B00CB0A31 /* TeamSettingsHeaderCell.swift in Sources */, 2611A5082335FF290030E77E /* Service.swift in Sources */, diff --git a/Steps4Impact/App/AppController.swift b/Steps4Impact/App/AppController.swift index 66b5e0d0..56ac1482 100644 --- a/Steps4Impact/App/AppController.swift +++ b/Steps4Impact/App/AppController.swift @@ -34,11 +34,15 @@ import AppCenter import AppCenterAnalytics import AppCenterCrashes import HealthKit +import FirebaseCore +import FirebaseMessaging +import FirebaseInstanceID -class AppController { +class AppController: NSObject { static let shared = AppController() static let isTestRun = true + private override init() { } var window: UIWindow? var navigation: UITabBarController = Navigation() @@ -58,6 +62,9 @@ class AppController { // Setup Telemetry AppEvents.activateApp() + // Initialize Firebase + FirebaseApp.configure() + // Setup Window window?.frame = UIScreen.main.bounds window?.rootViewController = UIViewController() @@ -249,4 +256,31 @@ class AppController { activityVC.popoverPresentationController?.sourceView = shareButton viewController.present(activityVC, animated: true, completion: nil) } + + func registerForRemoteNotifications() { + UIApplication.shared.registerForRemoteNotifications() + UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { granted, _ in + print("Permission granted: \(granted)") + } + Messaging.messaging().delegate = self + } + + func didReceivePushNotification(deviceToken: Data) { + Messaging.messaging().apnsToken = deviceToken + // TODO Faisal: Save Messaging.messaging().fcmToken to current user's profile + } + + func didReceivePushNotification(with userInfo: [AnyHashable: Any]) { + NotificationCenter.default.post(name: .receivedNotification, object: nil, userInfo: userInfo) + } +} + +extension AppController: MessagingDelegate { + func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) { + // TODO: Save to current user's profile + } + + func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) { + NotificationCenter.default.post(name: .receivedNotification, object: nil, userInfo: remoteMessage.appData) + } } diff --git a/Steps4Impact/App/AppDelegate.swift b/Steps4Impact/App/AppDelegate.swift index d12e9501..568943c2 100644 --- a/Steps4Impact/App/AppDelegate.swift +++ b/Steps4Impact/App/AppDelegate.swift @@ -47,4 +47,19 @@ class AppDelegate: UIResponder, UIApplicationDelegate { options: [UIApplication.OpenURLOptionsKey:Any]) -> Bool { // swiftlint:disable:this colon line_length return appController.can(app, open: url, with: options) } + + func application(_ app: UIApplication, + didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { + appController.didReceivePushNotification(deviceToken: deviceToken) + } + + func application(_ app: UIApplication, + didFailToRegisterForRemoteNotificationsWithError error: Error) { + print("Failed to register remote notifications", error) + } + + func application(_ app: UIApplication, + didReceiveRemoteNotification userInfo: [AnyHashable: Any]) { + appController.didReceivePushNotification(with: userInfo) + } } diff --git a/Steps4Impact/App/Navigation.swift b/Steps4Impact/App/Navigation.swift index 3af6f44a..4f95cb93 100644 --- a/Steps4Impact/App/Navigation.swift +++ b/Steps4Impact/App/Navigation.swift @@ -60,10 +60,19 @@ class Navigation: UITabBarController { image: Assets.tabbarNotificationsUnselected.image, selectedImage: Assets.tabbarNotificationsSelected.image) - // FIXME(compnerd) enumerate the notifications - self.notifications.tabBarItem.badgeValue = "0" + if let controller = notifications.viewControllers.first as? NotificationsViewController { + controller.fetchSavedNotifications() + } self.viewControllers = [dashboard, challenge, leaderboard, notifications] + + _ = NotificationCenter.default.addObserver(forName: .receivedNotification, + object: nil, + queue: nil) { [weak self] (_) in + guard let `self` = self else { return } + let oldValue = Int(self.notifications.tabBarItem.badgeValue ?? "0") ?? 0 + self.notifications.tabBarItem.badgeValue = "\(oldValue + 1)" + } } required init?(coder aDecoder: NSCoder) { diff --git a/Steps4Impact/App/Strings.swift b/Steps4Impact/App/Strings.swift index ae65f3ec..35c79cb5 100644 --- a/Steps4Impact/App/Strings.swift +++ b/Steps4Impact/App/Strings.swift @@ -168,6 +168,13 @@ struct Strings { static let youHaveNoNotifications = NSLocalizedString("Notifications.youHaveNoNotifications", comment: "") } + struct NotificationsPermission { + static let title = NSLocalizedString("Notifications.Permission.title", comment: "") + static let message = NSLocalizedString("Notifications.Permission.message", comment: "") + static let proceed = NSLocalizedString("Notifications.Permission.proceed", comment: "") + static let cancel = NSLocalizedString("Notifications.Permission.cancel", comment: "") + } + struct Settings { static let title = NSLocalizedString("Settings.title", comment: "") static let delete = NSLocalizedString("Settings.delete", comment: "") diff --git a/Steps4Impact/CommonUI/Cells/NotificationCell.swift b/Steps4Impact/CommonUI/Cells/NotificationCell.swift new file mode 100644 index 00000000..59885296 --- /dev/null +++ b/Steps4Impact/CommonUI/Cells/NotificationCell.swift @@ -0,0 +1,93 @@ +/** + * Copyright © 2019 Aga Khan Foundation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + **/ + +import UIKit +import SnapKit + +protocol NotificationCellDelegate: class { + func notificationCellTapped(context: Context?) +} + +struct NotificationCellContext: CellContext { + let identifier: String = NotificationCell.identifier + let message: String + let timeDelta: String + let backgroundColor: UIColor + let context: NotificationContext + + init(message: String, timeDelta: String, backgroundColor: UIColor, context: NotificationContext) { + self.message = message + self.timeDelta = timeDelta + self.backgroundColor = backgroundColor + self.context = context + } +} + +enum NotificationContext: Context { + case none + case markRead(identifier: Int) +} + +class NotificationCell: ConfigurableTableViewCell, Contextable { + static let identifier = "NotificationCell" + + private let cardView = CardViewV2() + private let messageLabel = UILabel(typography: .bodyRegular) + private let timeDeltaLabel = UILabel(typography: .footnote) + internal var context: Context? + + override func commonInit() { + super.commonInit() + timeDeltaLabel.textColor = .gray + + contentView.addSubview(cardView) { + $0.leading.trailing.equalToSuperview().inset(Style.Padding.p24) + $0.top.bottom.equalToSuperview().inset(Style.Padding.p12) + } + + cardView.addSubview(messageLabel) { + $0.top.equalToSuperview().inset(Style.Padding.p32) + $0.leading.trailing.equalToSuperview().inset(Style.Padding.p16) + } + + cardView.addSubview(timeDeltaLabel) { + $0.leading.trailing.equalToSuperview().inset(Style.Padding.p16) + $0.top.equalTo(messageLabel.snp.bottom).offset(Style.Padding.p32) + $0.bottom.equalToSuperview().inset(Style.Padding.p32) + } + } + + func configure(context: CellContext) { + guard let context = context as? NotificationCellContext else { return } + messageLabel.text = context.message + timeDeltaLabel.text = context.timeDelta + cardView.backgroundColor = context.backgroundColor + self.context = context.context + } +} diff --git a/Steps4Impact/DashboardV2/DashboardViewController.swift b/Steps4Impact/DashboardV2/DashboardViewController.swift index 144cce8c..eb6741f5 100644 --- a/Steps4Impact/DashboardV2/DashboardViewController.swift +++ b/Steps4Impact/DashboardV2/DashboardViewController.swift @@ -37,6 +37,8 @@ extension NSNotification.Name { NSNotification.Name(rawValue: "steps4impact.event-changed") static let commitmentChanged: NSNotification.Name = NSNotification.Name(rawValue: "steps4impact.commitment-changed") + static let receivedNotification: NSNotification.Name = + NSNotification.Name(rawValue: "steps4impact.received-notification") } class DashboardViewController: TableViewController { @@ -62,10 +64,40 @@ class DashboardViewController: TableViewController { } } + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + askForNotificationPermission() + } + deinit { NotificationCenter.default.removeObserver(self) } + private func askForNotificationPermission() { + UNUserNotificationCenter.current().getNotificationSettings { (settings) in + DispatchQueue.main.async { + if settings.authorizationStatus == .authorized { + AppController.shared.registerForRemoteNotifications() + } + guard settings.authorizationStatus == .notDetermined else { + return + } + let controller = UIAlertController( + title: Strings.NotificationsPermission.title, + message: Strings.NotificationsPermission.message, preferredStyle: .alert) + controller.addAction(UIAlertAction( + title: Strings.NotificationsPermission.proceed, style: .default, + handler: { (_) in + AppController.shared.registerForRemoteNotifications() + })) + controller.addAction(UIAlertAction( + title: Strings.NotificationsPermission.cancel, + style: .cancel, handler: nil)) + self.present(controller, animated: true, completion: nil) + } + } + } + override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { super.tableView(tableView, willDisplay: cell, forRowAt: indexPath) if let cell = cell as? ProfileCardCell { diff --git a/Steps4Impact/Journey/Cells/CurrentMilestoneCell.swift b/Steps4Impact/Journey/Cells/CurrentMilestoneCell.swift index 327a927d..281a598a 100644 --- a/Steps4Impact/Journey/Cells/CurrentMilestoneCell.swift +++ b/Steps4Impact/Journey/Cells/CurrentMilestoneCell.swift @@ -108,6 +108,11 @@ class CurrentMilestoneCell: ConfigurableTableViewCell { $0.trailing.equalToSuperview().inset(Style.Padding.p12) $0.height.width.equalTo(Style.Size.s128) } + + initContentView() + } + + private func initContentView() { contentView.addSubview(containerRectangle) { $0.top.equalToSuperview() $0.leading.equalTo(circle.snp.trailing).offset(Style.Padding.p8) @@ -161,7 +166,10 @@ class CurrentMilestoneCell: ConfigurableTableViewCell { milestoneNameButton.setTitle("\(currentMilestone.name)", for: .normal) milestoneNameButton.tag = currentMilestone.sequence // swiftlint:disable:next line_length - journeyMapImageView.fadeInImage(imageURL: URL(string: currentMilestone.journeyMap), placeHolderImage: Assets.journeyEmpty.image) + journeyMapImageView.fadeInImage( + imageURL: URL(string: currentMilestone.journeyMap), + placeHolderImage: Assets.journeyEmpty.image + ) UIView.animate(withDuration: 1) { self.progressCircle.snp.remakeConstraints { (make) in diff --git a/Steps4Impact/Journey/JourneyViewController.swift b/Steps4Impact/Journey/JourneyViewController.swift index bc55d266..eaa64cd5 100644 --- a/Steps4Impact/Journey/JourneyViewController.swift +++ b/Steps4Impact/Journey/JourneyViewController.swift @@ -55,10 +55,9 @@ class JourneyViewController: TableViewController { dataSource?.reload { [weak self] in if let dataSource = self?.dataSource as? JourneyDataSource { if let nextMilestone = dataSource.nameOfNextMilestone { - let nextMilestoneDistance = dataSource.distanceToNextMilestone - let distanceRemaining = nextMilestoneDistance - dataSource.distanceCoveredToNextMilestone - // swiftlint:disable:next line_length - let progressLabelText = "\(Int(distanceRemaining/2000)) / \(Int(nextMilestoneDistance/2000)) mi remaining to reach \(nextMilestone)" + let nextMilestoneDist = dataSource.distanceToNextMilestone + let distRemain = nextMilestoneDist - dataSource.distanceCoveredToNextMilestone + let progressLabelText = "\(distRemain) / \(nextMilestoneDist) mi remaining to reach \(nextMilestone)" self?.progressLabel.text = progressLabelText } else { self?.progressLabel.text = "All Milestones Completed" @@ -89,4 +88,3 @@ extension JourneyViewController: MilestoneNameButtonDelegate { } } } - diff --git a/Steps4Impact/Models/Notification.swift b/Steps4Impact/Models/Notification.swift new file mode 100644 index 00000000..a0ae8215 --- /dev/null +++ b/Steps4Impact/Models/Notification.swift @@ -0,0 +1,67 @@ +// +// Notification.swift +// Steps4Impact +// +// Created by Faisal Ali on 1/21/20. +// Copyright © 2020 AKDN. All rights reserved. +// + +import UIKit + +struct Notification { + let identifier: Int + let notificationId: Int + let message: String + let messageDate: Date + let priority: Int + let eventId: Int + let expiryDate: Date + var readFlag: Bool + + init?(json: JSON?) { + guard let json = json else { return nil } + guard let identifier = json["id"]?.intValue, + let notificationId = json["notification_id"]?.intValue, + let message = json["message"]?.stringValue, + let priority = json["priority"]?.intValue, + let eventId = json["event_id"]?.intValue, + let readFlag = json["read_flag"]?.boolVaue, + let messageDateStr = json["message_date"]?.stringValue, + let expiryDateStr = json["expiry_date"]?.stringValue else { return nil } + let dateFormatter = ISO8601DateFormatter() + guard let messageDate = dateFormatter.date(from: messageDateStr), + let expiryDate = dateFormatter.date(from: expiryDateStr) else { return nil } + self.identifier = identifier + self.notificationId = notificationId + self.message = message + self.messageDate = messageDate + self.priority = priority + self.eventId = eventId + self.expiryDate = expiryDate + self.readFlag = readFlag + } + + var formattedMessageDate: String { + let difference = Date().timeIntervalSince(messageDate) + switch difference { + case 0..<60: + return "Now" + case 60..<3600: + return "\(Int(difference)/60)m" + case 3600..<86400: + return "\(Int(difference)/3600)h" + case 86400..<604800: + return "\(Int(difference)/86400)d" + default: + return "\(Int(difference)/604800)w" + } + } + + var backgroundColor: UIColor { + return readFlag ? .read : .unread + } + + var context: NotificationContext { + return readFlag ? .none : .markRead(identifier: identifier) + } +} diff --git a/Steps4Impact/Networking/AKFCausesService.swift b/Steps4Impact/Networking/AKFCausesService.swift index e8fecf40..f1192206 100644 --- a/Steps4Impact/Networking/AKFCausesService.swift +++ b/Steps4Impact/Networking/AKFCausesService.swift @@ -45,6 +45,8 @@ enum AKFCausesEndPoint { case commitment case commitments(id: Int) // swiftlint:disable:this identifier_name case achievement + case notifications(fbId: String, eventId: Int) + case notification(identifier: Int) } extension AKFCausesEndPoint { @@ -80,6 +82,10 @@ extension AKFCausesEndPoint { return "/commitments/\(cid)" case .achievement: return "/achievement" + case .notifications(let fbId, let eventId): + return "notifications/participant/\(fbId)/event/\(eventId)" + case .notification(let identifier): + return "notifications/participant/\(identifier)" } } } @@ -217,6 +223,15 @@ class AKFCausesService: Service { parameters: JSON(["commitment": steps]), completion: completion) } + + static func getNotifications(fbId: String, eventId: Int, completion: ServiceRequestCompletion? = nil) { + shared.request(endpoint: .notifications(fbId: fbId, eventId: eventId), completion: completion) + } + + static func updateNotification(identifier: Int, readFlag: Bool, completion: ServiceRequestCompletion? = nil) { + shared.request(endpoint: .notification(identifier: identifier), + parameters: JSON(["read_flag": readFlag]), completion: completion) + } } extension AKFCausesService { diff --git a/Steps4Impact/Notifications/Notifications.swift b/Steps4Impact/Notifications/Notifications.swift index 0a346fbd..da9626b1 100644 --- a/Steps4Impact/Notifications/Notifications.swift +++ b/Steps4Impact/Notifications/Notifications.swift @@ -66,14 +66,14 @@ class NotificationView: UITableViewCell { } func render(_ context: Any) { - guard let data = context as? Notification else { return } + guard let data = context as? NotificationV1 else { return } lblMessage.text = data.message // FIXME(compnerd) render this according to the UX style lblDate.text = data.date.description } } -struct Notification { +struct NotificationV1 { var renderer: String { return NotificationView.identifier } var date: Date @@ -84,7 +84,7 @@ class Notifications: UIViewController { private let lblTitle: UILabel = UILabel(typography: .headerTitle) private let tblNotifications: UITableView = UITableView(frame: .zero) private let uvwNotificationsBackground: UIView = UIView(frame: .zero) - private var arrNotifications: [Notification] = [] + private var arrNotifications: [NotificationV1] = [] override func viewDidLoad() { super.viewDidLoad() diff --git a/Steps4Impact/NotificationsV2/NotificationsViewController.swift b/Steps4Impact/NotificationsV2/NotificationsViewController.swift index 7c7d7a3f..9658d4f1 100644 --- a/Steps4Impact/NotificationsV2/NotificationsViewController.swift +++ b/Steps4Impact/NotificationsV2/NotificationsViewController.swift @@ -30,22 +30,222 @@ import UIKit class NotificationsViewController: TableViewController { + private let filename = "notifications.plist" + + private lazy var plistURL: URL? = { + do { + var documentURL = try FileManager.default.url( + for: .documentDirectory, in: .userDomainMask, + appropriateFor: nil, create: false) + return documentURL.appendingPathComponent(filename) + } catch { + print(error) + } + return nil + }() + override func commonInit() { super.commonInit() title = Strings.Notifications.title dataSource = NotificationsDataSource() + + _ = NotificationCenter.default.addObserver( + forName: .receivedNotification, object: nil, queue: nil) { [weak self] (notification) in + self?.didReceive(notification: notification.userInfo) + } + + fetchNotifications() + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + guard let dataSource = dataSource as? NotificationsDataSourceV2 else { return } + dataSource.notifications.forEach({ $0.seen = true }) + self.navigationController?.tabBarItem.badgeValue = nil + saveToPlist() + } + + private func didReceive(notification userInfo: [AnyHashable: Any]?) { + guard let aps = userInfo?["aps"] as? [AnyHashable: Any], + let alert = aps["alert"] as? [AnyHashable: Any], + let title = alert["title"] as? String, + let body = alert["body"] as? String, + let dataSource = dataSource as? NotificationsDataSourceV2 else { return } + let notification = NotificationV2(title: title, body: body, seen: false) + dataSource.notifications.insert(notification, at: 0) + saveToPlist() + reload() + } + + private func readFromPlist() -> [NotificationV2] { + guard let plistURL = plistURL else { return [] } + var plistData: [String]? + do { + let data = try Data(contentsOf: plistURL) + plistData = try PropertyListSerialization.propertyList( + from: data, format: nil) as? [String] + } catch { + print("Error reading plist: ", error) + } + guard let data = plistData else { return [] } + return data.compactMap { return NotificationV2.instance(from: $0) } + } + + private func saveToPlist() { + guard let plistURL = plistURL, + let dataSource = dataSource as? NotificationsDataSourceV2 else { + return + } + do { + let plist = dataSource.notifications.compactMap { $0.jsonString() } + let plistData = try PropertyListSerialization.data( + fromPropertyList: plist, format: .xml, options: 0) + try plistData.write(to: plistURL) + } catch { + print("Error writing plist: ", error) + } + } + + func fetchSavedNotifications() { + guard let dataSource = dataSource as? NotificationsDataSourceV2 else { return } + let notifications = readFromPlist() + dataSource.notifications = notifications + let unseenCount = notifications.filter({ !$0.seen }).count + if unseenCount > 0 { + self.navigationController?.tabBarItem.badgeValue = "\(unseenCount)" + } else { + self.navigationController?.tabBarItem.badgeValue = nil + } + reload() + } + + func fetchNotifications() { + AKFCausesService.getNotifications(fbId: Facebook.id, eventId: 0) { (result) in + guard let notificationsJSON = result.response?.arrayValue else { return } + var notifications = [Notification]() + for json in notificationsJSON { + guard let notification = Notification(json: json) else { continue } + notifications.append(notification) + } + + guard let dataSource = self.dataSource as? NotificationsDataSource else { return } + dataSource.notifications = notifications + let unseenCount = notifications.filter({ !$0.readFlag }).count + if unseenCount > 0 { + self.navigationController?.tabBarItem.badgeValue = "\(unseenCount)" + } else { + self.navigationController?.tabBarItem.badgeValue = nil + } + self.reload() + } + } + + override func handle(context: Context) { + guard let context = context as? NotificationContext else { return } + switch context { + case .none: + return + case .markRead(let identifier): + AKFCausesService.updateNotification(identifier: identifier, readFlag: true) + guard let dataSource = self.dataSource as? NotificationsDataSource else { return } + guard let index = dataSource.notifications.firstIndex(where: { $0.identifier == identifier }) else { return } + dataSource.notifications[index].readFlag = true + self.reload() + } } } -class NotificationsDataSource: TableViewDataSource { +class NotificationV2: NSObject, Codable { + var title: String + var body: String + var seen: Bool + + init(title: String, body: String, seen: Bool = false) { + self.title = title + self.body = body + self.seen = seen + super.init() + } + + func jsonString() -> String? { + let jsonEncoder = JSONEncoder() + do { + let object = try jsonEncoder.encode(self) + return String(data: object, encoding: .utf8) + } catch { + return nil + } + } + + static func instance(from jsonString: String) -> NotificationV2? { + let jsonDecoder = JSONDecoder() + guard let jsonData = jsonString.data(using: .utf8) else { return nil } + do { + return try jsonDecoder.decode(NotificationV2.self, from: jsonData) + } catch { + return nil + } + } +} + +class NotificationsDataSourceV2: TableViewDataSource { var cells: [[CellContext]] = [] + var notifications = [NotificationV2]() + + func configure() { + guard notifications.count > 0 else { + configureNoNotificationCells() + return + } + var notificationCells = [InfoCellContext]() + for notification in notifications { + notificationCells.append( + InfoCellContext(title: notification.title, body: notification.body) + ) + } + cells = [notificationCells] + } + private func configureNoNotificationCells() { + cells = [[ + InfoCellContext( + title: Strings.Notifications.title, + body: Strings.Notifications.youHaveNoNotifications) + ]] + } +} + +class NotificationsDataSource: TableViewDataSource { + var cells: [[CellContext]] = [] + var notifications = [Notification]() + func configure() { + guard notifications.count > 0 else { + configureNoNotificationCells() + return + } + var notificationCells = [NotificationCellContext]() + for notification in notifications { + notificationCells.append( + NotificationCellContext( + message: notification.message, + timeDelta: notification.formattedMessageDate, + backgroundColor: notification.backgroundColor, + context: notification.context + ) + ) + } + cells = [notificationCells] + } + + private func configureNoNotificationCells() { cells = [[ - InfoCellContext( - title: Strings.Notifications.title, - body: Strings.Notifications.youHaveNoNotifications) - ]] + NotificationCellContext( + message: Strings.Notifications.title, + timeDelta: Strings.Notifications.youHaveNoNotifications, + backgroundColor: .read, + context: .none) + ]] } } diff --git a/Steps4Impact/Support/UIColor.swift b/Steps4Impact/Support/UIColor.swift index 31be2659..ab5ef43f 100644 --- a/Steps4Impact/Support/UIColor.swift +++ b/Steps4Impact/Support/UIColor.swift @@ -64,6 +64,18 @@ extension UIColor { return (red, green, blue, alpha) } + static var read: UIColor { + get { + return UIColor.init(displayP3Red: 246.0/255.0, green: 248.0/255.0, blue: 250.0/255.0, alpha: 1.0) + } + } + + static var unread: UIColor { + get { + return UIColor.init(displayP3Red: 234.0/255.0, green: 244.0/255.0, blue: 239.0/255.0, alpha: 1.0) + } + } + /** Init a color with a hex value Format: 0xXXXXXX diff --git a/Steps4Impact/Support/UITableView.swift b/Steps4Impact/Support/UITableView.swift index 33ab4bb4..6cd7ad6c 100644 --- a/Steps4Impact/Support/UITableView.swift +++ b/Steps4Impact/Support/UITableView.swift @@ -71,7 +71,8 @@ extension UITableView { ActivityCardCell.self, TeamBreakdownHeaderCell.self, TeamBreakdownMemberCell.self, - MiniChallengeProgressCell.self + MiniChallengeProgressCell.self, + NotificationCell.self ].forEach { register($0) } } diff --git a/Steps4Impact/Supporting Files/GoogleService-Info.plist b/Steps4Impact/Supporting Files/GoogleService-Info.plist new file mode 100644 index 00000000..f532e880 --- /dev/null +++ b/Steps4Impact/Supporting Files/GoogleService-Info.plist @@ -0,0 +1,36 @@ + + + + + CLIENT_ID + 312206975123-v1nel13i562ir77rpr0690lnfrst278n.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.312206975123-v1nel13i562ir77rpr0690lnfrst278n + API_KEY + AIzaSyBxMzOX4HYOzz6ZqKLp-J75Hqk0no9NbpE + GCM_SENDER_ID + 312206975123 + PLIST_VERSION + 1 + BUNDLE_ID + com.akf.WalkingChallenge + PROJECT_ID + steps4impact-15f2a + STORAGE_BUCKET + steps4impact-15f2a.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:312206975123:ios:99daa77ff0039316956d66 + DATABASE_URL + https://steps4impact-15f2a.firebaseio.com + + \ No newline at end of file diff --git a/Steps4Impact/Supporting Files/Info.plist b/Steps4Impact/Supporting Files/Info.plist index 85746fd2..8adceffe 100644 --- a/Steps4Impact/Supporting Files/Info.plist +++ b/Steps4Impact/Supporting Files/Info.plist @@ -37,6 +37,8 @@ FacebookDisplayName steps4impact + FirebaseAppDelegateProxyEnabled + LSApplicationCategoryType public.app-category.lifestyle LSApplicationQueriesSchemes diff --git a/Steps4Impact/Supporting Files/Launch.storyboard b/Steps4Impact/Supporting Files/Launch.storyboard index c12844cb..d306e473 100644 --- a/Steps4Impact/Supporting Files/Launch.storyboard +++ b/Steps4Impact/Supporting Files/Launch.storyboard @@ -1,9 +1,9 @@ - + - + @@ -13,10 +13,10 @@ - + - + diff --git a/Steps4Impact/Supporting Files/en.lproj/Localizable.strings b/Steps4Impact/Supporting Files/en.lproj/Localizable.strings index c19191c4..0f89f21b 100644 --- a/Steps4Impact/Supporting Files/en.lproj/Localizable.strings +++ b/Steps4Impact/Supporting Files/en.lproj/Localizable.strings @@ -126,6 +126,10 @@ // Notifications "Notifications.title" = "Notifications"; "Notifications.youHaveNoNotifications" = "You don't have any notifications right now."; +"Notifications.Permission.title" = "Push Notifications"; +"Notifications.Permission.message" = "Would you like to receive push notifications?"; +"Notifications.Permission.proceed" = "Proceed"; +"Notifications.Permission.cancel" = "Later"; // Settings "Settings.title" = "Settings";