diff --git a/Gemfile.lock b/Gemfile.lock index 27f19bd4e8..5885b12fd0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -25,8 +25,8 @@ GEM artifactory (3.0.17) atomos (0.1.3) aws-eventstream (1.3.0) - aws-partitions (1.999.0) - aws-sdk-core (3.211.0) + aws-partitions (1.1003.0) + aws-sdk-core (3.212.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.992.0) aws-sigv4 (~> 1.9) @@ -34,7 +34,7 @@ GEM aws-sdk-kms (1.95.0) aws-sdk-core (~> 3, >= 3.210.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.169.0) + aws-sdk-s3 (1.170.0) aws-sdk-core (~> 3, >= 3.210.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) @@ -42,7 +42,7 @@ GEM aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) base64 (0.2.0) - benchmark (0.3.0) + benchmark (0.4.0) bigdecimal (3.1.8) claide (1.1.0) cocoapods (1.16.2) @@ -224,14 +224,14 @@ GEM i18n (1.14.6) concurrent-ruby (~> 1.0) jmespath (1.6.2) - json (2.7.5) + json (2.8.1) jwt (2.9.3) base64 logger (1.6.1) mime-types (3.6.0) logger mime-types-data (~> 3.2015) - mime-types-data (3.2024.1001) + mime-types-data (3.2024.1105) mini_magick (4.13.2) mini_mime (1.1.5) minitest (5.25.1) @@ -245,7 +245,7 @@ GEM nkf (0.2.0) onesky-ruby (1.3.1) rest-client (~> 2.0) - optparse (0.5.0) + optparse (0.6.0) os (1.1.4) plist (3.7.1) public_suffix (4.0.7) diff --git a/godtools.xcodeproj/project.pbxproj b/godtools.xcodeproj/project.pbxproj index 84639c9209..c026d69b15 100644 --- a/godtools.xcodeproj/project.pbxproj +++ b/godtools.xcodeproj/project.pbxproj @@ -594,8 +594,6 @@ 457739ED27A0985A00999270 /* MobileContentFlowRowItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 457739EC27A0985A00999270 /* MobileContentFlowRowItem.swift */; }; 457766E72AD6F3180093B19A /* GetToolDetailsInterfaceStringsRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 457766E62AD6F3180093B19A /* GetToolDetailsInterfaceStringsRepository.swift */; }; 457766E92AD6F3340093B19A /* GetToolDetailsInterfaceStringsRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 457766E82AD6F3340093B19A /* GetToolDetailsInterfaceStringsRepositoryInterface.swift */; }; - 457766EB2AD6FB360093B19A /* GetInterfaceStringForLanguageRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 457766EA2AD6FB350093B19A /* GetInterfaceStringForLanguageRepositoryInterface.swift */; }; - 457766ED2AD6FB3C0093B19A /* GetInterfaceStringForLanguageRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 457766EC2AD6FB3C0093B19A /* GetInterfaceStringForLanguageRepository.swift */; }; 457766EF2AD71BF10093B19A /* GetToolDetailsMediaRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 457766EE2AD71BF10093B19A /* GetToolDetailsMediaRepositoryInterface.swift */; }; 457766F12AD71C070093B19A /* GetToolDetailsMediaRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 457766F02AD71C070093B19A /* GetToolDetailsMediaRepository.swift */; }; 457766F92AD72DF70093B19A /* GetToolDetailsLearnToShareToolIsAvailableUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 457766F82AD72DF70093B19A /* GetToolDetailsLearnToShareToolIsAvailableUseCase.swift */; }; @@ -625,7 +623,6 @@ 4581696F2CDD011600039D03 /* PersistUserToolLanguageSettingsDataLayerDependencies.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4581696C2CDD011600039D03 /* PersistUserToolLanguageSettingsDataLayerDependencies.swift */; }; 458169702CDD011600039D03 /* PersistUserToolLanguageSettingsDiContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4581696D2CDD011600039D03 /* PersistUserToolLanguageSettingsDiContainer.swift */; }; 458169712CDD011600039D03 /* PersistUserToolLanguageSettingsDomainLayerDependencies.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4581696E2CDD011600039D03 /* PersistUserToolLanguageSettingsDomainLayerDependencies.swift */; }; - 4581D97F297AD21E00D056D6 /* JsonApiResponseData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4581D97E297AD21E00D056D6 /* JsonApiResponseData.swift */; }; 4581EAA32BFBE194008115FF /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 4581EAA22BFBE194008115FF /* RealmSwift */; }; 4581EAA52BFBE257008115FF /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 4581EAA42BFBE257008115FF /* RealmSwift */; }; 4581EAA72BFBE2B9008115FF /* RealmSwift in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 4581EAA22BFBE194008115FF /* RealmSwift */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; @@ -818,18 +815,11 @@ 459E27FA2AD8280D008275B3 /* DeleteUserCountersUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459E27F92AD8280D008275B3 /* DeleteUserCountersUseCase.swift */; }; 459E3A062A30BC2600070934 /* MenuItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459E3A032A30BC2600070934 /* MenuItemView.swift */; }; 459E3A072A30BC2600070934 /* MenuSectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459E3A042A30BC2600070934 /* MenuSectionView.swift */; }; - 459E86B528ED1A9B00E197A5 /* AppsFlyer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459E86B328ED1A9B00E197A5 /* AppsFlyer.swift */; }; - 459E86B628ED1A9B00E197A5 /* AppsFlyerConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459E86B428ED1A9B00E197A5 /* AppsFlyerConfiguration.swift */; }; 459E86DB28EDA86C00E197A5 /* GodToolsDeepLinkingManifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459E86B928EDA86C00E197A5 /* GodToolsDeepLinkingManifest.swift */; }; 459E86DC28EDA86C00E197A5 /* DeepLinkParserType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459E86BB28EDA86C00E197A5 /* DeepLinkParserType.swift */; }; 459E86DD28EDA86C00E197A5 /* DeepLinkUrlParserType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459E86BC28EDA86C00E197A5 /* DeepLinkUrlParserType.swift */; }; - 459E86DE28EDA86C00E197A5 /* LegacyAppsFlyerDeepLinkValueParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459E86BE28EDA86C00E197A5 /* LegacyAppsFlyerDeepLinkValueParser.swift */; }; - 459E86E128EDA86C00E197A5 /* AppsFlyerDeepLinkValueComponentsParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459E86C328EDA86C00E197A5 /* AppsFlyerDeepLinkValueComponentsParser.swift */; }; - 459E86E228EDA86C00E197A5 /* AppsFlyerDeepLinkValueParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459E86C428EDA86C00E197A5 /* AppsFlyerDeepLinkValueParser.swift */; }; - 459E86E328EDA86C00E197A5 /* DeepLinkAppsFlyerParserType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459E86C528EDA86C00E197A5 /* DeepLinkAppsFlyerParserType.swift */; }; 459E86EA28EDA86C00E197A5 /* IncomingDeepLinkType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459E86D028EDA86C00E197A5 /* IncomingDeepLinkType.swift */; }; 459E86EB28EDA86C00E197A5 /* DeepLinkingParserManifestType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459E86D228EDA86C00E197A5 /* DeepLinkingParserManifestType.swift */; }; - 459E86EC28EDA86C00E197A5 /* DeepLinkingParserManifestAppsFlyer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459E86D328EDA86C00E197A5 /* DeepLinkingParserManifestAppsFlyer.swift */; }; 459E86ED28EDA86C00E197A5 /* DeepLinkingManifestType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459E86D428EDA86C00E197A5 /* DeepLinkingManifestType.swift */; }; 459E86EE28EDA86C00E197A5 /* DeepLinkingParserManifestUrl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459E86D528EDA86C00E197A5 /* DeepLinkingParserManifestUrl.swift */; }; 459E86EF28EDA86C00E197A5 /* ParsedDeepLinkType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459E86D728EDA86C00E197A5 /* ParsedDeepLinkType.swift */; }; @@ -855,7 +845,6 @@ 45A4161D2A9943E20030E2C7 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F2500611F0C1E8D00364FBC /* AdSupport.framework */; }; 45A464CC2A7BE18800E8BAF0 /* MobileContentRendererUserAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45A464C72A7BE18800E8BAF0 /* MobileContentRendererUserAnalytics.swift */; }; 45A464CD2A7BE18800E8BAF0 /* FirebaseAnalytics+MobileContentRendererAnalyticsSystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45A464C92A7BE18800E8BAF0 /* FirebaseAnalytics+MobileContentRendererAnalyticsSystem.swift */; }; - 45A464CE2A7BE18800E8BAF0 /* AppsFlyerAnalytics+MobileContentRendererAnalyticsSystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45A464CB2A7BE18800E8BAF0 /* AppsFlyerAnalytics+MobileContentRendererAnalyticsSystem.swift */; }; 45A5200E26C481DB009B68D4 /* MobileContentRendererManifestResourcesCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45A5200D26C481DB009B68D4 /* MobileContentRendererManifestResourcesCache.swift */; }; 45A833572ADEC4D3007C8D77 /* InvisibleChooseAppLanguageButtonForNavigationBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45A833562ADEC4D3007C8D77 /* InvisibleChooseAppLanguageButtonForNavigationBar.swift */; }; 45A835102AD1A40D004F5593 /* GetToolDetailsMediaUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45A8350D2AD1A40D004F5593 /* GetToolDetailsMediaUseCase.swift */; }; @@ -956,10 +945,8 @@ 45AD202B25938A9800A096A0 /* CardJumpUserDefaultsCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45AD1EE725938A9800A096A0 /* CardJumpUserDefaultsCache.swift */; }; 45AD202C25938A9800A096A0 /* SharedUserDefaultsCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45AD1EE925938A9800A096A0 /* SharedUserDefaultsCache.swift */; }; 45AD204E25938AC300A096A0 /* TrackActionAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45AD203925938AC300A096A0 /* TrackActionAnalytics.swift */; }; - 45AD205125938AC300A096A0 /* ToolOpenedAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45AD203C25938AC300A096A0 /* ToolOpenedAnalytics.swift */; }; 45AD205625938AC300A096A0 /* AnalyticsConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45AD204225938AC300A096A0 /* AnalyticsConstants.swift */; }; 45AD205825938AC300A096A0 /* FirebaseAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45AD204525938AC300A096A0 /* FirebaseAnalytics.swift */; }; - 45AD205C25938AC300A096A0 /* AppsFlyerAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45AD204B25938AC300A096A0 /* AppsFlyerAnalytics.swift */; }; 45AD205D25938AC300A096A0 /* AnalyticsContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45AD204C25938AC300A096A0 /* AnalyticsContainer.swift */; }; 45AD206425938B1300A096A0 /* AlertMessageType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45AD206225938B1300A096A0 /* AlertMessageType.swift */; }; 45AD206525938B1300A096A0 /* AlertMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45AD206325938B1300A096A0 /* AlertMessage.swift */; }; @@ -1046,7 +1033,6 @@ 45B3F46C2AC3B5DC00D61BFD /* GetInterfaceLayoutDirectionUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45B3F46B2AC3B5DC00D61BFD /* GetInterfaceLayoutDirectionUseCase.swift */; }; 45B3F46E2AC3B61A00D61BFD /* AppInterfaceLayoutDirectionDomainModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45B3F46D2AC3B61A00D61BFD /* AppInterfaceLayoutDirectionDomainModel.swift */; }; 45B4DBE52B449F7800C485C7 /* DashboardTabTypeDomainModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45B4DBE42B449F7800C485C7 /* DashboardTabTypeDomainModel.swift */; }; - 45B4FDBD2BE1787000E5E35B /* AppsFlyerLib-Strict in Frameworks */ = {isa = PBXBuildFile; productRef = 45B4FDBC2BE1787000E5E35B /* AppsFlyerLib-Strict */; }; 45B5389B2A8AB6D90033B34E /* OptionalImageSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45B5389A2A8AB6D90033B34E /* OptionalImageSize.swift */; }; 45B54C572A2641FE0042CD0E /* RealmDatabase+Read.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45B54C542A2641FE0042CD0E /* RealmDatabase+Read.swift */; }; 45B54C582A2641FE0042CD0E /* RealmDatabase+Write.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45B54C552A2641FE0042CD0E /* RealmDatabase+Write.swift */; }; @@ -1079,6 +1065,7 @@ 45B6FF492BAA39DE0037B240 /* SearchAppLanguageInAppLanguagesListRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45B6FF472BAA39DE0037B240 /* SearchAppLanguageInAppLanguagesListRepositoryInterface.swift */; }; 45B8C1A52AEA9FBC0099F8C2 /* GetLessonEvaluatedRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45B8C1A42AEA9FBC0099F8C2 /* GetLessonEvaluatedRepositoryInterface.swift */; }; 45B8C1A72AEA9FC80099F8C2 /* GetLessonEvaluatedRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45B8C1A62AEA9FC80099F8C2 /* GetLessonEvaluatedRepository.swift */; }; + 45B9B07B2CDEB2D6001DF554 /* MobileContentBackgroundImageRendererTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45368A142ABB2D840028A570 /* MobileContentBackgroundImageRendererTests.swift */; }; 45BB427E2CBE9E0D00290F64 /* TractPageModalView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 45BB42702CBE9E0D00290F64 /* TractPageModalView.xib */; }; 45BB427F2CBE9E0D00290F64 /* TractPageView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 45BB42792CBE9E0D00290F64 /* TractPageView.xib */; }; 45BB42802CBE9E0D00290F64 /* TractPageCallToActionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 45BB42542CBE9E0D00290F64 /* TractPageCallToActionView.xib */; }; @@ -1311,7 +1298,6 @@ 45E3476D2A49BE230014CCD1 /* Flow+NavigateToUrl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E347632A49BE220014CCD1 /* Flow+NavigateToUrl.swift */; }; 45E3476E2A49BE230014CCD1 /* Flow+PresentAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E347652A49BE230014CCD1 /* Flow+PresentAlert.swift */; }; 45E3476F2A49BE230014CCD1 /* Flow+PresentError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E347672A49BE230014CCD1 /* Flow+PresentError.swift */; }; - 45E347782A49BFD00014CCD1 /* ActivityIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E347712A49BFD00014CCD1 /* ActivityIndicator.swift */; }; 45E347792A49BFD00014CCD1 /* CloseButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E347732A49BFD00014CCD1 /* CloseButton.swift */; }; 45E3477A2A49BFD00014CCD1 /* AccordionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E347752A49BFD00014CCD1 /* AccordionView.swift */; }; 45E347802A49BFEB0014CCD1 /* GTWhiteButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E3477D2A49BFEB0014CCD1 /* GTWhiteButton.swift */; }; @@ -1340,7 +1326,6 @@ 45E4DBCD2BECFB20006ED2F3 /* AppLanguagesRepositorySyncInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E4DBC52BECFB20006ED2F3 /* AppLanguagesRepositorySyncInterface.swift */; }; 45E4DBCE2BECFB20006ED2F3 /* AppLanguagesRepositorySync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E4DBC62BECFB20006ED2F3 /* AppLanguagesRepositorySync.swift */; }; 45E585222A8E5C7F005B20A6 /* ToolFilterButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E5851D2A8E5C7F005B20A6 /* ToolFilterButtonView.swift */; }; - 45E585262A8E77F3005B20A6 /* TwoRowHStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E585252A8E77F3005B20A6 /* TwoRowHStack.swift */; }; 45E60CFF2AEAE1C300E14BEA /* ScaleValueSliderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E60CFE2AEAE1C300E14BEA /* ScaleValueSliderView.swift */; }; 45E60D022AEAE1E600E14BEA /* CircledTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E60D012AEAE1E600E14BEA /* CircledTextView.swift */; }; 45E62FBA2AFA927B00FFEC61 /* ToolScreenShareFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E62FB92AFA927B00FFEC61 /* ToolScreenShareFlow.swift */; }; @@ -1392,8 +1377,6 @@ 45EB9B8429F16CF200CA74A8 /* Image+OptionalUIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45EB9B6E29F16CF200CA74A8 /* Image+OptionalUIImage.swift */; }; 45EC429B272C87430052F2AA /* PassthroughValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45EC429A272C87430052F2AA /* PassthroughValue.swift */; }; 45EC5CF228CA2A4A0000AA2E /* ResourceModel+LanguageSupportable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45EC5CF128CA2A4A0000AA2E /* ResourceModel+LanguageSupportable.swift */; }; - 45EF23AC2B37314400E49716 /* JsonApiResponseBaseData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45EF23AB2B37314400E49716 /* JsonApiResponseBaseData.swift */; }; - 45EF23AE2B3731A300E49716 /* JsonApiResponseDataArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45EF23AD2B3731A300E49716 /* JsonApiResponseDataArray.swift */; }; 45F1CE212B7D1F210008A3BC /* ToolLanguageDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F1CE202B7D1F210008A3BC /* ToolLanguageDownloader.swift */; }; 45F267A128907F5D006679F2 /* RealmResourcesCacheSync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F267A028907F5D006679F2 /* RealmResourcesCacheSync.swift */; }; 45F267A328907F67006679F2 /* RealmResourcesCacheSyncResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F267A228907F67006679F2 /* RealmResourcesCacheSyncResult.swift */; }; @@ -2284,8 +2267,6 @@ 457739EC27A0985A00999270 /* MobileContentFlowRowItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MobileContentFlowRowItem.swift; sourceTree = ""; }; 457766E62AD6F3180093B19A /* GetToolDetailsInterfaceStringsRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetToolDetailsInterfaceStringsRepository.swift; sourceTree = ""; }; 457766E82AD6F3340093B19A /* GetToolDetailsInterfaceStringsRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetToolDetailsInterfaceStringsRepositoryInterface.swift; sourceTree = ""; }; - 457766EA2AD6FB350093B19A /* GetInterfaceStringForLanguageRepositoryInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GetInterfaceStringForLanguageRepositoryInterface.swift; sourceTree = ""; }; - 457766EC2AD6FB3C0093B19A /* GetInterfaceStringForLanguageRepository.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GetInterfaceStringForLanguageRepository.swift; sourceTree = ""; }; 457766EE2AD71BF10093B19A /* GetToolDetailsMediaRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetToolDetailsMediaRepositoryInterface.swift; sourceTree = ""; }; 457766F02AD71C070093B19A /* GetToolDetailsMediaRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetToolDetailsMediaRepository.swift; sourceTree = ""; }; 457766F82AD72DF70093B19A /* GetToolDetailsLearnToShareToolIsAvailableUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetToolDetailsLearnToShareToolIsAvailableUseCase.swift; sourceTree = ""; }; @@ -2312,7 +2293,6 @@ 4581696C2CDD011600039D03 /* PersistUserToolLanguageSettingsDataLayerDependencies.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersistUserToolLanguageSettingsDataLayerDependencies.swift; sourceTree = ""; }; 4581696D2CDD011600039D03 /* PersistUserToolLanguageSettingsDiContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersistUserToolLanguageSettingsDiContainer.swift; sourceTree = ""; }; 4581696E2CDD011600039D03 /* PersistUserToolLanguageSettingsDomainLayerDependencies.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersistUserToolLanguageSettingsDomainLayerDependencies.swift; sourceTree = ""; }; - 4581D97E297AD21E00D056D6 /* JsonApiResponseData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JsonApiResponseData.swift; sourceTree = ""; }; 45828BC7279CCB5300F6B5F3 /* MobileContentCardView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileContentCardView.swift; sourceTree = ""; }; 45828BC9279CCB6900F6B5F3 /* MobileContentCardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MobileContentCardViewModel.swift; sourceTree = ""; }; 45828BCE279CCBD200F6B5F3 /* MobileContentFlowView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileContentFlowView.swift; sourceTree = ""; }; @@ -2498,18 +2478,11 @@ 459E27F92AD8280D008275B3 /* DeleteUserCountersUseCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeleteUserCountersUseCase.swift; sourceTree = ""; }; 459E3A032A30BC2600070934 /* MenuItemView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MenuItemView.swift; sourceTree = ""; }; 459E3A042A30BC2600070934 /* MenuSectionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MenuSectionView.swift; sourceTree = ""; }; - 459E86B328ED1A9B00E197A5 /* AppsFlyer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppsFlyer.swift; sourceTree = ""; }; - 459E86B428ED1A9B00E197A5 /* AppsFlyerConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppsFlyerConfiguration.swift; sourceTree = ""; }; 459E86B928EDA86C00E197A5 /* GodToolsDeepLinkingManifest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GodToolsDeepLinkingManifest.swift; sourceTree = ""; }; 459E86BB28EDA86C00E197A5 /* DeepLinkParserType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeepLinkParserType.swift; sourceTree = ""; }; 459E86BC28EDA86C00E197A5 /* DeepLinkUrlParserType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeepLinkUrlParserType.swift; sourceTree = ""; }; - 459E86BE28EDA86C00E197A5 /* LegacyAppsFlyerDeepLinkValueParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LegacyAppsFlyerDeepLinkValueParser.swift; sourceTree = ""; }; - 459E86C328EDA86C00E197A5 /* AppsFlyerDeepLinkValueComponentsParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppsFlyerDeepLinkValueComponentsParser.swift; sourceTree = ""; }; - 459E86C428EDA86C00E197A5 /* AppsFlyerDeepLinkValueParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppsFlyerDeepLinkValueParser.swift; sourceTree = ""; }; - 459E86C528EDA86C00E197A5 /* DeepLinkAppsFlyerParserType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeepLinkAppsFlyerParserType.swift; sourceTree = ""; }; 459E86D028EDA86C00E197A5 /* IncomingDeepLinkType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IncomingDeepLinkType.swift; sourceTree = ""; }; 459E86D228EDA86C00E197A5 /* DeepLinkingParserManifestType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeepLinkingParserManifestType.swift; sourceTree = ""; }; - 459E86D328EDA86C00E197A5 /* DeepLinkingParserManifestAppsFlyer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeepLinkingParserManifestAppsFlyer.swift; sourceTree = ""; }; 459E86D428EDA86C00E197A5 /* DeepLinkingManifestType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeepLinkingManifestType.swift; sourceTree = ""; }; 459E86D528EDA86C00E197A5 /* DeepLinkingParserManifestUrl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeepLinkingParserManifestUrl.swift; sourceTree = ""; }; 459E86D728EDA86C00E197A5 /* ParsedDeepLinkType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ParsedDeepLinkType.swift; sourceTree = ""; }; @@ -2523,7 +2496,6 @@ 45A415F22A99429B0030E2C7 /* XCUIApplication+Query.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "XCUIApplication+Query.swift"; sourceTree = ""; }; 45A464C72A7BE18800E8BAF0 /* MobileContentRendererUserAnalytics.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileContentRendererUserAnalytics.swift; sourceTree = ""; }; 45A464C92A7BE18800E8BAF0 /* FirebaseAnalytics+MobileContentRendererAnalyticsSystem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FirebaseAnalytics+MobileContentRendererAnalyticsSystem.swift"; sourceTree = ""; }; - 45A464CB2A7BE18800E8BAF0 /* AppsFlyerAnalytics+MobileContentRendererAnalyticsSystem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AppsFlyerAnalytics+MobileContentRendererAnalyticsSystem.swift"; sourceTree = ""; }; 45A5200D26C481DB009B68D4 /* MobileContentRendererManifestResourcesCache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MobileContentRendererManifestResourcesCache.swift; sourceTree = ""; }; 45A833562ADEC4D3007C8D77 /* InvisibleChooseAppLanguageButtonForNavigationBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvisibleChooseAppLanguageButtonForNavigationBar.swift; sourceTree = ""; }; 45A8350D2AD1A40D004F5593 /* GetToolDetailsMediaUseCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GetToolDetailsMediaUseCase.swift; sourceTree = ""; }; @@ -2626,10 +2598,8 @@ 45AD1EE725938A9800A096A0 /* CardJumpUserDefaultsCache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CardJumpUserDefaultsCache.swift; sourceTree = ""; }; 45AD1EE925938A9800A096A0 /* SharedUserDefaultsCache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SharedUserDefaultsCache.swift; sourceTree = ""; }; 45AD203925938AC300A096A0 /* TrackActionAnalytics.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrackActionAnalytics.swift; sourceTree = ""; }; - 45AD203C25938AC300A096A0 /* ToolOpenedAnalytics.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ToolOpenedAnalytics.swift; sourceTree = ""; }; 45AD204225938AC300A096A0 /* AnalyticsConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnalyticsConstants.swift; sourceTree = ""; }; 45AD204525938AC300A096A0 /* FirebaseAnalytics.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FirebaseAnalytics.swift; sourceTree = ""; }; - 45AD204B25938AC300A096A0 /* AppsFlyerAnalytics.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppsFlyerAnalytics.swift; sourceTree = ""; }; 45AD204C25938AC300A096A0 /* AnalyticsContainer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnalyticsContainer.swift; sourceTree = ""; }; 45AD206225938B1300A096A0 /* AlertMessageType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AlertMessageType.swift; sourceTree = ""; }; 45AD206325938B1300A096A0 /* AlertMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AlertMessage.swift; sourceTree = ""; }; @@ -2977,7 +2947,6 @@ 45E347632A49BE220014CCD1 /* Flow+NavigateToUrl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Flow+NavigateToUrl.swift"; sourceTree = ""; }; 45E347652A49BE230014CCD1 /* Flow+PresentAlert.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Flow+PresentAlert.swift"; sourceTree = ""; }; 45E347672A49BE230014CCD1 /* Flow+PresentError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Flow+PresentError.swift"; sourceTree = ""; }; - 45E347712A49BFD00014CCD1 /* ActivityIndicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActivityIndicator.swift; sourceTree = ""; }; 45E347732A49BFD00014CCD1 /* CloseButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CloseButton.swift; sourceTree = ""; }; 45E347752A49BFD00014CCD1 /* AccordionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccordionView.swift; sourceTree = ""; }; 45E3477D2A49BFEB0014CCD1 /* GTWhiteButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GTWhiteButton.swift; sourceTree = ""; }; @@ -3005,7 +2974,6 @@ 45E4DBC52BECFB20006ED2F3 /* AppLanguagesRepositorySyncInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppLanguagesRepositorySyncInterface.swift; sourceTree = ""; }; 45E4DBC62BECFB20006ED2F3 /* AppLanguagesRepositorySync.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppLanguagesRepositorySync.swift; sourceTree = ""; }; 45E5851D2A8E5C7F005B20A6 /* ToolFilterButtonView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ToolFilterButtonView.swift; sourceTree = ""; }; - 45E585252A8E77F3005B20A6 /* TwoRowHStack.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TwoRowHStack.swift; sourceTree = ""; }; 45E60CFE2AEAE1C300E14BEA /* ScaleValueSliderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScaleValueSliderView.swift; sourceTree = ""; }; 45E60D012AEAE1E600E14BEA /* CircledTextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircledTextView.swift; sourceTree = ""; }; 45E62FB92AFA927B00FFEC61 /* ToolScreenShareFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolScreenShareFlow.swift; sourceTree = ""; }; @@ -3056,8 +3024,6 @@ 45EB9B6E29F16CF200CA74A8 /* Image+OptionalUIImage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Image+OptionalUIImage.swift"; sourceTree = ""; }; 45EC429A272C87430052F2AA /* PassthroughValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PassthroughValue.swift; sourceTree = ""; }; 45EC5CF128CA2A4A0000AA2E /* ResourceModel+LanguageSupportable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ResourceModel+LanguageSupportable.swift"; sourceTree = ""; }; - 45EF23AB2B37314400E49716 /* JsonApiResponseBaseData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JsonApiResponseBaseData.swift; sourceTree = ""; }; - 45EF23AD2B3731A300E49716 /* JsonApiResponseDataArray.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JsonApiResponseDataArray.swift; sourceTree = ""; }; 45F1CE202B7D1F210008A3BC /* ToolLanguageDownloader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolLanguageDownloader.swift; sourceTree = ""; }; 45F267A028907F5D006679F2 /* RealmResourcesCacheSync.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RealmResourcesCacheSync.swift; sourceTree = ""; }; 45F267A228907F67006679F2 /* RealmResourcesCacheSyncResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RealmResourcesCacheSyncResult.swift; sourceTree = ""; }; @@ -3473,7 +3439,6 @@ 45CF09702784B910007F13D3 /* RequestOperation in Frameworks */, 457771B629A00C5C00EA8115 /* FirebaseDynamicLinks in Frameworks */, 45E7D4C42977430A008C7503 /* ZipArchive in Frameworks */, - 45B4FDBD2BE1787000E5E35B /* AppsFlyerLib-Strict in Frameworks */, 1E06EB6DA916BEF9C627866F /* Pods_godtools.framework in Frameworks */, D4997E0E28D4CED800205B4C /* YouTubeiOSPlayerHelper in Frameworks */, 457771B429A00C5C00EA8115 /* FirebaseCrashlytics in Frameworks */, @@ -4012,7 +3977,6 @@ isa = PBXGroup; children = ( 45ACCA552CD2BFB100567AE6 /* AppMessaging */, - 459E86B228ED1A9B00E197A5 /* AppsFlyer */, 45BDA5D32954FE3E007E259B /* ArticlesRepository */, 45D63E79288F75B0009B4610 /* AttachmentsRepository */, D4BC79D6299D6C050040651B /* CompletedTrainingTipRepository */, @@ -6741,16 +6705,6 @@ path = ToolTraining; sourceTree = ""; }; - 4581D97D297AD16300D056D6 /* JsonApi */ = { - isa = PBXGroup; - children = ( - 45EF23AB2B37314400E49716 /* JsonApiResponseBaseData.swift */, - 4581D97E297AD21E00D056D6 /* JsonApiResponseData.swift */, - 45EF23AD2B3731A300E49716 /* JsonApiResponseDataArray.swift */, - ); - path = JsonApi; - sourceTree = ""; - }; 45828BC4279CCB3D00F6B5F3 /* ContentCard */ = { isa = PBXGroup; children = ( @@ -7627,15 +7581,6 @@ path = Subviews; sourceTree = ""; }; - 459E86B228ED1A9B00E197A5 /* AppsFlyer */ = { - isa = PBXGroup; - children = ( - 459E86B328ED1A9B00E197A5 /* AppsFlyer.swift */, - 459E86B428ED1A9B00E197A5 /* AppsFlyerConfiguration.swift */, - ); - path = AppsFlyer; - sourceTree = ""; - }; 459E86B728EDA86C00E197A5 /* DeepLinkingService */ = { isa = PBXGroup; children = ( @@ -7661,44 +7606,23 @@ 459E86BA28EDA86C00E197A5 /* Parsers */ = { isa = PBXGroup; children = ( - 459E86C528EDA86C00E197A5 /* DeepLinkAppsFlyerParserType.swift */, 459E86BB28EDA86C00E197A5 /* DeepLinkParserType.swift */, 459E86BC28EDA86C00E197A5 /* DeepLinkUrlParserType.swift */, - 459E86C228EDA86C00E197A5 /* AppsFlyerDeepLinkValue */, 450EE28329A6648900524F64 /* ArticleAemPath */, 450EE28029A6648900524F64 /* DashboardPath */, 450EE2A829A6719500524F64 /* GodToolsApp */, 450EE28A29A6680800524F64 /* KnowGod */, 4537EBEF2BA1ECE40024793C /* LanguageSettings */, - 459E86BD28EDA86C00E197A5 /* Legacy */, 450EE27D29A6648900524F64 /* ToolPath */, 45DC190D2BB599F8007542A5 /* UITests */, ); path = Parsers; sourceTree = ""; }; - 459E86BD28EDA86C00E197A5 /* Legacy */ = { - isa = PBXGroup; - children = ( - 459E86BE28EDA86C00E197A5 /* LegacyAppsFlyerDeepLinkValueParser.swift */, - ); - path = Legacy; - sourceTree = ""; - }; - 459E86C228EDA86C00E197A5 /* AppsFlyerDeepLinkValue */ = { - isa = PBXGroup; - children = ( - 459E86C328EDA86C00E197A5 /* AppsFlyerDeepLinkValueComponentsParser.swift */, - 459E86C428EDA86C00E197A5 /* AppsFlyerDeepLinkValueParser.swift */, - ); - path = AppsFlyerDeepLinkValue; - sourceTree = ""; - }; 459E86D128EDA86C00E197A5 /* Manifest */ = { isa = PBXGroup; children = ( 459E86D428EDA86C00E197A5 /* DeepLinkingManifestType.swift */, - 459E86D328EDA86C00E197A5 /* DeepLinkingParserManifestAppsFlyer.swift */, 459E86D228EDA86C00E197A5 /* DeepLinkingParserManifestType.swift */, 459E86D528EDA86C00E197A5 /* DeepLinkingParserManifestUrl.swift */, ); @@ -7789,7 +7713,6 @@ 45A464C52A7BE18800E8BAF0 /* Systems */ = { isa = PBXGroup; children = ( - 45A464CA2A7BE18800E8BAF0 /* AppsFlyer */, 45A464C82A7BE18800E8BAF0 /* Firebase */, 45A464C62A7BE18800E8BAF0 /* User */, ); @@ -7812,14 +7735,6 @@ path = Firebase; sourceTree = ""; }; - 45A464CA2A7BE18800E8BAF0 /* AppsFlyer */ = { - isa = PBXGroup; - children = ( - 45A464CB2A7BE18800E8BAF0 /* AppsFlyerAnalytics+MobileContentRendererAnalyticsSystem.swift */, - ); - path = AppsFlyer; - sourceTree = ""; - }; 45A835132AD1A413004F5593 /* Interface */ = { isa = PBXGroup; children = ( @@ -8533,7 +8448,6 @@ 45229C5F2ABF630A009F5D31 /* AnalyticsContainer+TrackExitLinkAnalyticsInterface.swift */, 452259AD2ABCBCA90070F7F3 /* AnalyticsContainer+TrackScreenViewAnalyticsInterface.swift */, 45AD203825938AC300A096A0 /* AnalyticsTracking */, - 45AD204925938AC300A096A0 /* AppsFlyer */, 45AD204325938AC300A096A0 /* Firebase */, ); path = Analytics; @@ -8545,7 +8459,6 @@ D1CE0957273EAC0D00C8832C /* TutorialVideoAnalytics */, D1DD79FB26690C5F000F1351 /* Models */, 45AD203925938AC300A096A0 /* TrackActionAnalytics.swift */, - 45AD203C25938AC300A096A0 /* ToolOpenedAnalytics.swift */, ); path = AnalyticsTracking; sourceTree = ""; @@ -8559,14 +8472,6 @@ path = Firebase; sourceTree = ""; }; - 45AD204925938AC300A096A0 /* AppsFlyer */ = { - isa = PBXGroup; - children = ( - 45AD204B25938AC300A096A0 /* AppsFlyerAnalytics.swift */, - ); - path = AppsFlyer; - sourceTree = ""; - }; 45AD206A25938B4400A096A0 /* OnboardPrimaryButton */ = { isa = PBXGroup; children = ( @@ -8582,7 +8487,6 @@ 4585E4B32B05738600223A9B /* BCP47LanguageIdentifier */, 45AD20AC25938EE500A096A0 /* FileCache */, 45AD20E8259391B000A096A0 /* Json */, - 4581D97D297AD16300D056D6 /* JsonApi */, 45AD207725938B6A00A096A0 /* KeyboardObserver */, 45AF070D2B066266000EACF2 /* LocaleLanguageName */, 453E00052B29FB6B00029402 /* LocaleLanguageRegionName */, @@ -8902,7 +8806,6 @@ 45B3F45B2AC3AD7700D61BFD /* Interface */ = { isa = PBXGroup; children = ( - 457766EA2AD6FB350093B19A /* GetInterfaceStringForLanguageRepositoryInterface.swift */, 45AC9DF52B28AA4000DEEBFE /* GetSearchBarInterfaceStringsRepositoryInterface.swift */, 450D63AE2AC8A87200B90319 /* TrackActionAnalyticsInterface.swift */, 450D63AD2AC8A87200B90319 /* TrackExitLinkAnalyticsInterface.swift */, @@ -8914,7 +8817,6 @@ 45B3F4602AC3AE3C00D61BFD /* Data-DomainInterface */ = { isa = PBXGroup; children = ( - 457766EC2AD6FB3C0093B19A /* GetInterfaceStringForLanguageRepository.swift */, 45AC9DEF2B28A9FB00DEEBFE /* GetSearchBarInterfaceStringsRepository.swift */, 45FB17F72B2A2ED3009D5B32 /* Supporting */, ); @@ -10147,14 +10049,6 @@ path = "Flow+PresentError"; sourceTree = ""; }; - 45E347702A49BFD00014CCD1 /* ActivityIndicator */ = { - isa = PBXGroup; - children = ( - 45E347712A49BFD00014CCD1 /* ActivityIndicator.swift */, - ); - path = ActivityIndicator; - sourceTree = ""; - }; 45E347722A49BFD00014CCD1 /* CloseButton */ = { isa = PBXGroup; children = ( @@ -10302,14 +10196,6 @@ path = ToolFilterButtonView; sourceTree = ""; }; - 45E585242A8E77F3005B20A6 /* TwoRowHStack */ = { - isa = PBXGroup; - children = ( - 45E585252A8E77F3005B20A6 /* TwoRowHStack.swift */, - ); - path = TwoRowHStack; - sourceTree = ""; - }; 45E60CFD2AEAE1B800E14BEA /* ScaleValueSlider */ = { isa = PBXGroup; children = ( @@ -11428,7 +11314,6 @@ isa = PBXGroup; children = ( 45E347742A49BFD00014CCD1 /* AccordionView */, - 45E347702A49BFD00014CCD1 /* ActivityIndicator */, 45325F1B285CF8B40078D932 /* AnimatedSwiftUIView */, D45922DC286A2B0A00904B87 /* BannerView */, 45A880012A8FA85D002B4DBE /* CenteredCircularProgress */, @@ -11453,7 +11338,6 @@ 45325F18285CF8B40078D932 /* SegmentControl */, 45E3478F2A49C04B0014CCD1 /* SeparatorView */, 45325F20285CF8B40078D932 /* TextWithLinks */, - 45E585242A8E77F3005B20A6 /* TwoRowHStack */, 45325F1D285CF8B40078D932 /* VideoView */, ); path = "SwiftUI Views"; @@ -12082,7 +11966,6 @@ 45D48C8529F81324004E92B1 /* SocialAuthentication */, 45D40C672A5315B400E8E4AE /* Starscream */, 45D40C6A2A5315D500E8E4AE /* Fuzi */, - 45B4FDBC2BE1787000E5E35B /* AppsFlyerLib-Strict */, 4581EAA22BFBE194008115FF /* RealmSwift */, 45F671902C3344010017C8C2 /* LocalizationServices */, ); @@ -12247,7 +12130,6 @@ 45D40C692A5315D500E8E4AE /* XCRemoteSwiftPackageReference "Fuzi" */, 45F486ED2B76D500004E0E27 /* XCRemoteSwiftPackageReference "Quick" */, 45F486F02B76D512004E0E27 /* XCRemoteSwiftPackageReference "Nimble" */, - 45B4FDBB2BE1787000E5E35B /* XCRemoteSwiftPackageReference "AppsFlyerFramework-Strict" */, 4581EAA12BFBE194008115FF /* XCRemoteSwiftPackageReference "realm-swift" */, 45F6718F2C3343ED0017C8C2 /* XCRemoteSwiftPackageReference "localization-services-ios" */, ); @@ -12718,7 +12600,6 @@ 45D5EA9A2B7E5B7900745F0D /* ViewConfirmRemoveToolFromFavoritesDomainModel.swift in Sources */, 45A833572ADEC4D3007C8D77 /* InvisibleChooseAppLanguageButtonForNavigationBar.swift in Sources */, 454ADAD52ABDD9D400037C27 /* LanguageSettingsViewModel.swift in Sources */, - 459E86EC28EDA86C00E197A5 /* DeepLinkingParserManifestAppsFlyer.swift in Sources */, 45FB160F27DBDDB60009DF8E /* LanguageSettingsFlow.swift in Sources */, 453A2EFE2B3636E400C8F865 /* DownloadToolLanguageRepositoryInterface.swift in Sources */, 45920D502A8D3D1800E336A8 /* ToolsView.swift in Sources */, @@ -12820,7 +12701,6 @@ 45AD1BD925938A4F00A096A0 /* AlertMessageView.swift in Sources */, 4512D4DD2B29129100DFAFB3 /* ToolSettingsToolLanguagesListItemView.swift in Sources */, 452DFB412B7FB4B4003A4A59 /* AllYourFavoritedToolsInterfaceStringsDomainModel.swift in Sources */, - 45AD205C25938AC300A096A0 /* AppsFlyerAnalytics.swift in Sources */, 45AAC2A82BB30F0A000AE690 /* GlobalAnalyticsRepository.swift in Sources */, 453F84CF2A029FC00005101E /* ArticleAemDownloaderResult.swift in Sources */, 452F27902B83931500844B9A /* ToggleToolFavoritedRepositoryInterface.swift in Sources */, @@ -12895,7 +12775,6 @@ 455583FD269F2DA500C3FF14 /* MobileContentInputViewModel.swift in Sources */, D4BC79E629AFCE870040651B /* TrainingTipDomainModel.swift in Sources */, 453F84C52A029FC00005101E /* RealmArticleJcrContent.swift in Sources */, - 45A464CE2A7BE18800E8BAF0 /* AppsFlyerAnalytics+MobileContentRendererAnalyticsSystem.swift in Sources */, 45EB9B8229F16CF200CA74A8 /* Error+Code.swift in Sources */, 45DAC8CA2B2BBA1200A138C0 /* GetTranslatedLanguageName.swift in Sources */, 4512D4CF2B29127200DFAFB3 /* ToolSettingsToolLanguagesListInterfaceStringsDomainModel.swift in Sources */, @@ -12929,7 +12808,6 @@ D43FC1BE2B62EFD800F8310E /* View+AppLifecycle.swift in Sources */, 4592156A2B82955300387AC5 /* GetSpotlightToolsRepository.swift in Sources */, 45ACBE062B1F64230017D17E /* LessonViewModel.swift in Sources */, - 45AD205125938AC300A096A0 /* ToolOpenedAnalytics.swift in Sources */, 45300B7F2C34282900E6F97D /* LocaleLanguageRegionNameInterface.swift in Sources */, 45C2AF4A2A81764D004958AB /* GTPageControlAttributes.swift in Sources */, 45AE974B27C97A9500C2CB33 /* Animation+MobileContentRenderableModel.swift in Sources */, @@ -13127,7 +13005,6 @@ 4502BD42279F3B72000C544A /* MobileContentFlowItemViewModel.swift in Sources */, 459A668C289B0E3A00DACBF8 /* GetToolTranslationsFilesFilter.swift in Sources */, 45369AD32AFA7FA500BD10F0 /* ToolScreenShareInterfaceStringsDomainModel.swift in Sources */, - 459E86E228EDA86C00E197A5 /* AppsFlyerDeepLinkValueParser.swift in Sources */, 45CCF6922B2269010017EDFE /* ToolSettingsOptionView.swift in Sources */, 45FE82382ACE5BFE00930C39 /* AppViewController.swift in Sources */, 45FC123927A833BF00F4EC4F /* NavBarSelectorView.swift in Sources */, @@ -13153,7 +13030,6 @@ 45C649BC2B31E14D000249E0 /* ViewShareToolUseCase.swift in Sources */, 45FB1CC1295F4184002BACD9 /* UISemanticContentAttribute+LanguageDirectionDomainModel.swift in Sources */, 457FEEF42CBEA3860092E84B /* ConfirmAppLanguageHighlightStringDomainModel.swift in Sources */, - 457766EB2AD6FB360093B19A /* GetInterfaceStringForLanguageRepositoryInterface.swift in Sources */, 45369AC32AFA7FA500BD10F0 /* GetToolScreenShareTutorialRepository.swift in Sources */, 45DF34522A28D41600BB717E /* AppBuild.swift in Sources */, 45C925022B45E7AA005947DB /* AppHomeBarItem.swift in Sources */, @@ -13186,7 +13062,6 @@ 45FB161727DBDDB60009DF8E /* ArticleFlow.swift in Sources */, 45C152302A43D1BD00F2A1E8 /* ToolSettingsChooseLanguageView.swift in Sources */, 45EB9B7729F16CF200CA74A8 /* UIView+DrawBorder.swift in Sources */, - 45E585262A8E77F3005B20A6 /* TwoRowHStack.swift in Sources */, 45D63E6F288F698C009B4610 /* RealmLanguagesCache.swift in Sources */, 45D63E53288F67CE009B4610 /* AppDataLayerDependencies.swift in Sources */, 459E86F028EDA86C00E197A5 /* ToolDeepLink.swift in Sources */, @@ -13468,7 +13343,6 @@ 45BDA6482954FF08007E259B /* HTMLDocumentData.swift in Sources */, 453F84DA2A02A0390005101E /* ArticleManifestAemRepository.swift in Sources */, 45D63E6E288F698C009B4610 /* RealmLanguage.swift in Sources */, - 45EF23AC2B37314400E49716 /* JsonApiResponseBaseData.swift in Sources */, 45043F9F2BFB871400324573 /* ViewDeleteAccountProgressDomainModel.swift in Sources */, 45AD20B225938EE500A096A0 /* FileCache.swift in Sources */, 4556CEA829F2D57800643BBC /* RealmDatabaseProductionConfiguration.swift in Sources */, @@ -13478,7 +13352,6 @@ 45D95CCE271F3F1100263D46 /* MobileContentRendererEventAnalyticsTracking.swift in Sources */, D4C2A58A2C35DA350035AB4D /* UserLessonLanguageFilterDataModel.swift in Sources */, 453D2F802AD88C1D001C44E3 /* GetLanguageSettingsInterfaceStringsRepositoryInterface.swift in Sources */, - 4581D97F297AD21E00D056D6 /* JsonApiResponseData.swift in Sources */, 45920D592A8D4F2800E336A8 /* ToolCardLayout.swift in Sources */, D4AFA44B2BAD0A1B00318023 /* ToolFilterCategoriesInterfaceStringsDomainModel.swift in Sources */, 454ADAD62ABDD9D400037C27 /* AppInterfaceLanguageButtonView.swift in Sources */, @@ -13517,7 +13390,6 @@ 45F7162D290A12D70019B715 /* WebContentView.swift in Sources */, 45AD202B25938A9800A096A0 /* CardJumpUserDefaultsCache.swift in Sources */, 450D63B02AC8A87200B90319 /* TrackExitLinkAnalyticsInterface.swift in Sources */, - 459E86E128EDA86C00E197A5 /* AppsFlyerDeepLinkValueComponentsParser.swift in Sources */, 457102002AB9DDDB00D1BFFC /* MobileContentApiErrorCodable.swift in Sources */, 45931FF72B34C1D1008034C8 /* ViewReviewShareShareableUseCase.swift in Sources */, 45558402269F2DA500C3FF14 /* MobileContentBackgroundImageView.swift in Sources */, @@ -13663,7 +13535,6 @@ 458CFE8C29D4E0B9007B423C /* LoadingArticleViewModel.swift in Sources */, 458B91C62B7D685B00785C6F /* GetFavoritesInterfaceStringsRepository.swift in Sources */, 455583DD269F2DA500C3FF14 /* MobileContentStackView.swift in Sources */, - 459E86B528ED1A9B00E197A5 /* AppsFlyer.swift in Sources */, D4C2A58E2C3C6F0E0035AB4D /* GetUserLessonFiltersUseCase.swift in Sources */, 453A2EFC2B3636E400C8F865 /* RemoveDownloadedToolLanguageRepositoryInterface.swift in Sources */, 45070A832ACF42AD00229EDD /* AppInterfaceStringBarItem.swift in Sources */, @@ -13813,11 +13684,9 @@ 457C36E82A96607F001288D8 /* PageNavigationCollectionViewLayoutType.swift in Sources */, 45EA98F62AFD676900E7EA9A /* CreatingToolScreenShareSessionTimedOutInterfaceStringsDomainModel.swift in Sources */, D43FC1C62B6996D000F8310E /* DownloadedLanguageListItemDomainModel.swift in Sources */, - 45E347782A49BFD00014CCD1 /* ActivityIndicator.swift in Sources */, 45D63E52288F67CE009B4610 /* AppDomainLayerDependencies.swift in Sources */, 458CFE8F29D4E0B9007B423C /* ArticleWebViewModelFlowType.swift in Sources */, 45A835282AD1AE12004F5593 /* ToolDetailsFeatureDiContainer.swift in Sources */, - 45EF23AE2B3731A300E49716 /* JsonApiResponseDataArray.swift in Sources */, 455EE8312AEC576F00C3205C /* DownloadToolProgressViewModel.swift in Sources */, 45192F4C2C470AD4005740E5 /* UserCountersAPIType.swift in Sources */, 45965D4D2B4488BD001C9AA5 /* GetDashboardInterfaceStringsRepositoryInterface.swift in Sources */, @@ -13835,7 +13704,6 @@ 45369ACB2AFA7FA500BD10F0 /* GetToolScreenShareTutorialRepositoryInterface.swift in Sources */, 4564E20C2B1E181000DA4040 /* ToolShortcutLinksDataLayerDependencies.swift in Sources */, D45922D42867973B00904B87 /* BannerView.swift in Sources */, - 459E86DE28EDA86C00E197A5 /* LegacyAppsFlyerDeepLinkValueParser.swift in Sources */, 4573133C28C1821100481640 /* ToolDetailsMediaView.swift in Sources */, 45EB4E732989C94C00231C67 /* FullScreenVideoView.swift in Sources */, 45E3477A2A49BFD00014CCD1 /* AccordionView.swift in Sources */, @@ -13853,7 +13721,6 @@ 45E347952A49C04B0014CCD1 /* SeparatorView.swift in Sources */, 4571020B2AB9E55F00D1BFFC /* MobileContentApiError.swift in Sources */, 45FB161227DBDDB60009DF8E /* ChooseYourOwnAdventureFlow.swift in Sources */, - 459E86E328EDA86C00E197A5 /* DeepLinkAppsFlyerParserType.swift in Sources */, 45E62FBC2AFA9A6800FFEC61 /* ToolScreenShareFlowCompletedState.swift in Sources */, 45FB161627DBDDB60009DF8E /* ArticleFlowCompletedState.swift in Sources */, D4C2A56C2C3333310035AB4D /* LessonFilterLanguageDomainModel.swift in Sources */, @@ -13861,7 +13728,6 @@ 455583F5269F2DA500C3FF14 /* MobileContentImageViewModel.swift in Sources */, 45B3F46C2AC3B5DC00D61BFD /* GetInterfaceLayoutDirectionUseCase.swift in Sources */, 456BB02427C583650087CCA4 /* MobileContentTextLabelAttributes.swift in Sources */, - 459E86B628ED1A9B00E197A5 /* AppsFlyerConfiguration.swift in Sources */, 4518450F2C47F47B004564B9 /* RealmInstanceCreationType.swift in Sources */, 45131A102AB498AD0085AF0D /* ImageCatalog.swift in Sources */, 4512D4CD2B29127200DFAFB3 /* ViewToolSettingsToolLanguagesListDomainModel.swift in Sources */, @@ -13880,7 +13746,6 @@ 458B91B52B7D5D6800785C6F /* FavoritesDiContainer.swift in Sources */, D4BC79DC299D6CBF0040651B /* RealmCompletedTrainingTipCache.swift in Sources */, 45C152472A43D21D00F2A1E8 /* ToolSettingsSeparatorView.swift in Sources */, - 457766ED2AD6FB3C0093B19A /* GetInterfaceStringForLanguageRepository.swift in Sources */, 4534F93D2AE9B11600A7A071 /* LessonEvaluationDataModel.swift in Sources */, 458B91AE2B7D5D6800785C6F /* NoFavoriteToolsView.swift in Sources */, 45BDA6462954FF08007E259B /* WebArchiveQueueResult.swift in Sources */, @@ -14063,6 +13928,7 @@ 45243C5B2C5828C600BD6F49 /* MockRealmTranslation.swift in Sources */, 45CBDA092BA3930B0007DEC8 /* MockLaunchCountRepository.swift in Sources */, 45EB68E12C334D84008A5FF2 /* MockLocalizationServices.swift in Sources */, + 45B9B07B2CDEB2D6001DF554 /* MobileContentBackgroundImageRendererTests.swift in Sources */, 45368A182ABB2D850028A570 /* TestRealmObject.swift in Sources */, 453E2A122BC8C8810047D4C6 /* GetToolsRepositoryTests.swift in Sources */, 45F357B62C52E49200F31EB2 /* GetLessonFilterLanguagesRepositoryTests.swift in Sources */, @@ -15341,14 +15207,6 @@ minimumVersion = 10.50.0; }; }; - 45B4FDBB2BE1787000E5E35B /* XCRemoteSwiftPackageReference "AppsFlyerFramework-Strict" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/AppsFlyerSDK/AppsFlyerFramework-Strict"; - requirement = { - kind = upToNextMinorVersion; - minimumVersion = 6.14.3; - }; - }; 45CF096E2784B910007F13D3 /* XCRemoteSwiftPackageReference "request-operation-ios" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/CruGlobal/request-operation-ios.git"; @@ -15522,11 +15380,6 @@ package = 45D40C692A5315D500E8E4AE /* XCRemoteSwiftPackageReference "Fuzi" */; productName = Fuzi; }; - 45B4FDBC2BE1787000E5E35B /* AppsFlyerLib-Strict */ = { - isa = XCSwiftPackageProductDependency; - package = 45B4FDBB2BE1787000E5E35B /* XCRemoteSwiftPackageReference "AppsFlyerFramework-Strict" */; - productName = "AppsFlyerLib-Strict"; - }; 45CF096F2784B910007F13D3 /* RequestOperation */ = { isa = XCSwiftPackageProductDependency; package = 45CF096E2784B910007F13D3 /* XCRemoteSwiftPackageReference "request-operation-ios" */; diff --git a/godtools.xcworkspace/xcshareddata/swiftpm/Package.resolved b/godtools.xcworkspace/xcshareddata/swiftpm/Package.resolved index 04bbfa77a2..5a7272741c 100644 --- a/godtools.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/godtools.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "01118c20edbf992410dbd18dc8543d268a2c5d52f8d92674de8f87566072017c", + "originHash" : "5e34efb51656fc5e129b4e86acd222181e73d4b2ba93068a2bb8a599a23dde13", "pins" : [ { "identity" : "abseil-cpp-binary", @@ -28,15 +28,6 @@ "version" : "1.7.5" } }, - { - "identity" : "appsflyerframework-strict", - "kind" : "remoteSourceControl", - "location" : "https://github.com/AppsFlyerSDK/AppsFlyerFramework-Strict", - "state" : { - "revision" : "629e2e9873ec3f990b8be9500062b077cef730b9", - "version" : "6.14.6" - } - }, { "identity" : "cwlcatchexception", "kind" : "remoteSourceControl", diff --git a/godtools/App/AppConfig/AppConfig.swift b/godtools/App/AppConfig/AppConfig.swift index 1652b51cfd..bd482f7a34 100644 --- a/godtools/App/AppConfig/AppConfig.swift +++ b/godtools/App/AppConfig/AppConfig.swift @@ -21,20 +21,7 @@ class AppConfig: AppConfigInterface { func getAppleAppId() -> String { return "542773210" } - - func getAppsFlyerConfiguration() -> AppsFlyerConfiguration { - return AppsFlyerConfiguration( - appleAppId: getAppleAppId(), - appsFlyerDevKey: "QdbVaVHi9bHRchUTWtoaij", - shouldUseUninstallSandbox: appBuild.isDebug - ) - } - - func getAppsFlyerDevKey() -> String { - return "QdbVaVHi9bHRchUTWtoaij" - } - func getFacebookConfiguration() -> FacebookConfiguration { return FacebookConfiguration( diff --git a/godtools/App/AppConfig/AppConfigInterface.swift b/godtools/App/AppConfig/AppConfigInterface.swift index 5eb144a249..76fdf9f9c1 100644 --- a/godtools/App/AppConfig/AppConfigInterface.swift +++ b/godtools/App/AppConfig/AppConfigInterface.swift @@ -12,8 +12,6 @@ import SocialAuthentication protocol AppConfigInterface { func getAppleAppId() -> String - func getAppsFlyerConfiguration() -> AppsFlyerConfiguration - func getAppsFlyerDevKey() -> String func getFacebookConfiguration() -> FacebookConfiguration func getFirebaseGoogleServiceFileName() -> String func getGoogleAuthenticationConfiguration() -> GoogleAuthenticationConfiguration diff --git a/godtools/App/AppDelegate.swift b/godtools/App/AppDelegate.swift index bbfd0c04d7..4ec7b4dd84 100644 --- a/godtools/App/AppDelegate.swift +++ b/godtools/App/AppDelegate.swift @@ -7,7 +7,6 @@ // import UIKit -import AppsFlyerLib import SocialAuthentication import FacebookCore import FirebaseDynamicLinks @@ -85,13 +84,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate { if appBuild.configuration == .release { GodToolsParserLogger.shared.start() } - - appDiContainer.dataLayer.getSharedAppsFlyer().configure(configuration: appConfig.getAppsFlyerConfiguration(), deepLinkDelegate: self) - + appDiContainer.dataLayer.getAnalytics().firebaseAnalytics.configure() - - appDiContainer.dataLayer.getAnalytics().appsFlyerAnalytics.configure() - + ConfigureFacebookOnAppLaunch.configure( application: application, launchOptions: launchOptions, @@ -133,8 +128,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func applicationDidBecomeActive(_ application: UIApplication) { reloadShortcutItems(application: application) - - appDiContainer.dataLayer.getAnalytics().appsFlyerAnalytics.trackAppLaunch() } func applicationWillTerminate(_ application: UIApplication) { @@ -168,17 +161,14 @@ extension AppDelegate { func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { - appDiContainer.dataLayer.getSharedAppsFlyer().registerUninstall(deviceToken: deviceToken) } func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) { - appDiContainer.dataLayer.getSharedAppsFlyer().handlePushNotification(userInfo: userInfo) } func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { - appDiContainer.dataLayer.getSharedAppsFlyer().handlePushNotification(userInfo: userInfo) } } @@ -228,9 +218,7 @@ extension AppDelegate { extension AppDelegate { func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { - - appDiContainer.dataLayer.getSharedAppsFlyer().handleOpenUrl(url: url, options: options) - + if let firebaseDynamicLinkUrl = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url)?.url { _ = appDeepLinkingService.parseDeepLinkAndNotify(incomingDeepLink: .url(incomingUrl: IncomingDeepLinkUrl(url: firebaseDynamicLinkUrl))) return true @@ -255,9 +243,7 @@ extension AppDelegate { extension AppDelegate { func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { - - appDiContainer.dataLayer.getSharedAppsFlyer().continueUserActivity(userActivity: userActivity) - + if userActivity.activityType != NSUserActivityTypeBrowsingWeb { return false } @@ -290,17 +276,3 @@ extension AppDelegate { return false } } - -// MARK: - AppsFlyer DeepLinkDelegate - -extension AppDelegate: DeepLinkDelegate { - - func didResolveDeepLink(_ result: DeepLinkResult) { - - guard let data = result.deepLink?.clickEvent else { - return - } - - _ = appDeepLinkingService.parseDeepLinkAndNotify(incomingDeepLink: .appsFlyer(data: data)) - } -} diff --git a/godtools/App/DependencyContainer/AppDataLayerDependencies.swift b/godtools/App/DependencyContainer/AppDataLayerDependencies.swift index de8e34e927..5d7a687158 100644 --- a/godtools/App/DependencyContainer/AppDataLayerDependencies.swift +++ b/godtools/App/DependencyContainer/AppDataLayerDependencies.swift @@ -30,7 +30,6 @@ class AppDataLayerDependencies { self.firebaseEnabled = firebaseEnabled sharedAnalytics = AnalyticsContainer( - appsFlyerAnalytics: AppsFlyerAnalytics(appsFlyer: AppsFlyer.shared, loggingEnabled: appBuild.configuration == .analyticsLogging), firebaseAnalytics: FirebaseAnalytics(appBuild: appBuild, loggingEnabled: appBuild.configuration == .analyticsLogging) ) } @@ -273,10 +272,6 @@ class AppDataLayerDependencies { ) } - func getSharedAppsFlyer() -> AppsFlyer { - return AppsFlyer.shared - } - func getSharedIgnoreCacheSession() -> IgnoreCacheSession { return sharedIgnoreCacheSession } @@ -362,7 +357,6 @@ class AppDataLayerDependencies { func getTranslationsRepository() -> TranslationsRepository { return TranslationsRepository( infoPlist: getInfoPlist(), - appBuild: getAppBuild(), api: MobileContentTranslationsApi(config: getAppConfig(), ignoreCacheSession: sharedIgnoreCacheSession), cache: RealmTranslationsCache(realmDatabase: sharedRealmDatabase), resourcesFileCache: getResourcesFileCache(), diff --git a/godtools/App/DependencyContainer/AppDiContainer.swift b/godtools/App/DependencyContainer/AppDiContainer.swift index e077abc888..2a1a25a9d6 100644 --- a/godtools/App/DependencyContainer/AppDiContainer.swift +++ b/godtools/App/DependencyContainer/AppDiContainer.swift @@ -54,7 +54,7 @@ class AppDiContainer { let toolDetailsDiContainer = ToolDetailsFeatureDiContainer(coreDataLayer: dataLayer) let toolScreenShareDiContainer = ToolScreenShareFeatureDiContainer(coreDataLayer: dataLayer) let toolSettingsDiContainer = ToolSettingsDiContainer(coreDataLayer: dataLayer) - let toolsFilterDiContainer = ToolsFilterFeatureDiContainer(coreDataLayer: dataLayer, coreDomainLayer: domainLayer) + let toolsFilterDiContainer = ToolsFilterFeatureDiContainer(coreDataLayer: dataLayer) let toolShortcutLinks = ToolShortcutLinksDiContainer(coreDataLayer: dataLayer) let tutorialDiContainer = TutorialFeatureDiContainer(coreDataLayer: dataLayer) @@ -150,10 +150,6 @@ class AppDiContainer { ) } - func getToolOpenedAnalytics() -> ToolOpenedAnalytics { - return ToolOpenedAnalytics(appsFlyerAnalytics: dataLayer.getAnalytics().appsFlyerAnalytics) - } - func getToolTrainingTipsOnboardingViews() -> ToolTrainingTipsOnboardingViewsService { return ToolTrainingTipsOnboardingViewsService( cache: ToolTrainingTipsOnboardingViewsUserDefaultsCache( diff --git a/godtools/App/Features/Articles/Presentation/ArticleCategories/ArticleCategoriesView.swift b/godtools/App/Features/Articles/Presentation/ArticleCategories/ArticleCategoriesView.swift index 9401701c3a..47b784b559 100644 --- a/godtools/App/Features/Articles/Presentation/ArticleCategories/ArticleCategoriesView.swift +++ b/godtools/App/Features/Articles/Presentation/ArticleCategories/ArticleCategoriesView.swift @@ -59,11 +59,7 @@ class ArticleCategoriesView: AppViewController { let cellAspectRatio: CGSize = CGSize(width: 15, height: 8) categoriesTableView.rowHeight = floor(UIScreen.main.bounds.size.width / cellAspectRatio.width * cellAspectRatio.height) - if #available(iOS 10.0, *) { - categoriesTableView.refreshControl = refreshArticlesControl - } else { - categoriesTableView.addSubview(refreshArticlesControl) - } + categoriesTableView.refreshControl = refreshArticlesControl } private func setupBinding() { diff --git a/godtools/App/Features/Dashboard/Presentation/Tract/TractViewModel.swift b/godtools/App/Features/Dashboard/Presentation/Tract/TractViewModel.swift index 725254adf4..1505714569 100644 --- a/godtools/App/Features/Dashboard/Presentation/Tract/TractViewModel.swift +++ b/godtools/App/Features/Dashboard/Presentation/Tract/TractViewModel.swift @@ -17,7 +17,6 @@ class TractViewModel: MobileContentPagesViewModel { private let resourceViewsService: ResourceViewsService private let trackActionAnalyticsUseCase: TrackActionAnalyticsUseCase private let persistUserToolLanguageSettingsUseCase: PersistUserToolLanguageSettingsUseCase - private let toolOpenedAnalytics: ToolOpenedAnalytics private let liveShareStream: String? private var cancellables: Set = Set() @@ -32,14 +31,13 @@ class TractViewModel: MobileContentPagesViewModel { @Published var hidesRemoteShareIsActive: Bool = true - init(flowDelegate: FlowDelegate, renderer: MobileContentRenderer, tractRemoteSharePublisher: TractRemoteSharePublisher, tractRemoteShareSubscriber: TractRemoteShareSubscriber, resourceViewsService: ResourceViewsService, trackActionAnalyticsUseCase: TrackActionAnalyticsUseCase, resourcesRepository: ResourcesRepository, translationsRepository: TranslationsRepository, mobileContentEventAnalytics: MobileContentRendererEventAnalyticsTracking, getCurrentAppLanguageUseCase: GetCurrentAppLanguageUseCase, getTranslatedLanguageName: GetTranslatedLanguageName, toolOpenedAnalytics: ToolOpenedAnalytics, liveShareStream: String?, initialPage: MobileContentPagesPage?, trainingTipsEnabled: Bool, incrementUserCounterUseCase: IncrementUserCounterUseCase, selectedLanguageIndex: Int?, persistUserToolLanguageSettingsUseCase: PersistUserToolLanguageSettingsUseCase, shouldPersistToolSettings: Bool) { + init(flowDelegate: FlowDelegate, renderer: MobileContentRenderer, tractRemoteSharePublisher: TractRemoteSharePublisher, tractRemoteShareSubscriber: TractRemoteShareSubscriber, resourceViewsService: ResourceViewsService, trackActionAnalyticsUseCase: TrackActionAnalyticsUseCase, resourcesRepository: ResourcesRepository, translationsRepository: TranslationsRepository, mobileContentEventAnalytics: MobileContentRendererEventAnalyticsTracking, getCurrentAppLanguageUseCase: GetCurrentAppLanguageUseCase, getTranslatedLanguageName: GetTranslatedLanguageName, liveShareStream: String?, initialPage: MobileContentPagesPage?, trainingTipsEnabled: Bool, incrementUserCounterUseCase: IncrementUserCounterUseCase, selectedLanguageIndex: Int?, persistUserToolLanguageSettingsUseCase: PersistUserToolLanguageSettingsUseCase, shouldPersistToolSettings: Bool) { self.flowDelegate = flowDelegate self.tractRemoteSharePublisher = tractRemoteSharePublisher self.tractRemoteShareSubscriber = tractRemoteShareSubscriber self.resourceViewsService = resourceViewsService self.trackActionAnalyticsUseCase = trackActionAnalyticsUseCase - self.toolOpenedAnalytics = toolOpenedAnalytics self.liveShareStream = liveShareStream self.persistUserToolLanguageSettingsUseCase = persistUserToolLanguageSettingsUseCase self.shouldPersistToolSettings = shouldPersistToolSettings @@ -141,9 +139,6 @@ class TractViewModel: MobileContentPagesViewModel { subscribeToLiveShareStreamIfNeeded() _ = resourceViewsService.postNewResourceView(resourceId: resource.id) - - toolOpenedAnalytics.trackFirstToolOpenedIfNeeded(resource: resource) - toolOpenedAnalytics.trackToolOpened(resource: resource) } private func trackLanguageTapped(tappedLanguage: LanguageModel) { diff --git a/godtools/App/Features/ToolDetails/Data-DomainInterface/GetToolDetailsLearnToShareToolIsAvailableRepository.swift b/godtools/App/Features/ToolDetails/Data-DomainInterface/GetToolDetailsLearnToShareToolIsAvailableRepository.swift index d19676639e..676dbd913c 100644 --- a/godtools/App/Features/ToolDetails/Data-DomainInterface/GetToolDetailsLearnToShareToolIsAvailableRepository.swift +++ b/godtools/App/Features/ToolDetails/Data-DomainInterface/GetToolDetailsLearnToShareToolIsAvailableRepository.swift @@ -19,9 +19,22 @@ class GetToolDetailsLearnToShareToolIsAvailableRepository: GetToolDetailsLearnTo self.translationsRepository = translationsRepository } - func getIsAvailablePublisher(toolId: String, language: BCP47LanguageIdentifier) -> AnyPublisher { + func getIsAvailablePublisher(toolId: String, primaryLanguage: BCP47LanguageIdentifier, parallelLanguage: BCP47LanguageIdentifier?) -> AnyPublisher { - guard let translation = translationsRepository.getLatestTranslation(resourceId: toolId, languageCode: language) else { + return Publishers.CombineLatest( + getTranslationHasTipsPublisher(toolId: toolId, language: primaryLanguage), + getTranslationHasTipsPublisher(toolId: toolId, language: parallelLanguage) + ) + .map { (primaryTranslationHasTips: Bool, parallelTranslationHasTips: Bool) in + + return primaryTranslationHasTips || parallelTranslationHasTips + } + .eraseToAnyPublisher() + } + + private func getTranslationHasTipsPublisher(toolId: String, language: BCP47LanguageIdentifier?) -> AnyPublisher { + + guard let language = language, let translation = translationsRepository.getLatestTranslation(resourceId: toolId, languageCode: language) else { return Just(false) .eraseToAnyPublisher() } diff --git a/godtools/App/Features/ToolDetails/Domain/Interface/GetToolDetailsLearnToShareToolIsAvailableRepositoryInterface.swift b/godtools/App/Features/ToolDetails/Domain/Interface/GetToolDetailsLearnToShareToolIsAvailableRepositoryInterface.swift index c880260d7a..20c02114a7 100644 --- a/godtools/App/Features/ToolDetails/Domain/Interface/GetToolDetailsLearnToShareToolIsAvailableRepositoryInterface.swift +++ b/godtools/App/Features/ToolDetails/Domain/Interface/GetToolDetailsLearnToShareToolIsAvailableRepositoryInterface.swift @@ -11,5 +11,5 @@ import Combine protocol GetToolDetailsLearnToShareToolIsAvailableRepositoryInterface { - func getIsAvailablePublisher(toolId: String, language: BCP47LanguageIdentifier) -> AnyPublisher + func getIsAvailablePublisher(toolId: String, primaryLanguage: BCP47LanguageIdentifier, parallelLanguage: BCP47LanguageIdentifier?) -> AnyPublisher } diff --git a/godtools/App/Features/ToolDetails/Domain/UseCases/GetToolDetailsLearnToShareToolIsAvailableUseCase.swift b/godtools/App/Features/ToolDetails/Domain/UseCases/GetToolDetailsLearnToShareToolIsAvailableUseCase.swift index eadeab73c4..970afc7c8c 100644 --- a/godtools/App/Features/ToolDetails/Domain/UseCases/GetToolDetailsLearnToShareToolIsAvailableUseCase.swift +++ b/godtools/App/Features/ToolDetails/Domain/UseCases/GetToolDetailsLearnToShareToolIsAvailableUseCase.swift @@ -18,9 +18,13 @@ class GetToolDetailsLearnToShareToolIsAvailableUseCase { self.getToolDetailsLearnToShareToolIsAvailableRepository = getToolDetailsLearnToShareToolIsAvailableRepository } - func getIsAvailablePublisher(toolId: String, language: BCP47LanguageIdentifier) -> AnyPublisher { + func getIsAvailablePublisher(toolId: String, primaryLanguage: BCP47LanguageIdentifier, parallelLanguage: BCP47LanguageIdentifier?) -> AnyPublisher { - return self.getToolDetailsLearnToShareToolIsAvailableRepository.getIsAvailablePublisher(toolId: toolId, language: language) - .eraseToAnyPublisher() + return self.getToolDetailsLearnToShareToolIsAvailableRepository.getIsAvailablePublisher( + toolId: toolId, + primaryLanguage: primaryLanguage, + parallelLanguage: parallelLanguage + ) + .eraseToAnyPublisher() } } diff --git a/godtools/App/Features/ToolDetails/Presentation/ToolDetails/ToolDetailsViewModel.swift b/godtools/App/Features/ToolDetails/Presentation/ToolDetails/ToolDetailsViewModel.swift index 9bb9b7a180..513dc6fd36 100644 --- a/godtools/App/Features/ToolDetails/Presentation/ToolDetails/ToolDetailsViewModel.swift +++ b/godtools/App/Features/ToolDetails/Presentation/ToolDetails/ToolDetailsViewModel.swift @@ -193,7 +193,11 @@ class ToolDetailsViewModel: ObservableObject { .map { (toolId: String) in getToolDetailsLearnToShareToolIsAvailableUseCase - .getIsAvailablePublisher(toolId: toolId, language: primaryLanguage) + .getIsAvailablePublisher( + toolId: toolId, + primaryLanguage: primaryLanguage, + parallelLanguage: parallelLanguage + ) } .switchToLatest() .receive(on: DispatchQueue.main) diff --git a/godtools/App/Features/ToolsFilter/DependencyContainer/ToolsFilterFeatureDiContainer.swift b/godtools/App/Features/ToolsFilter/DependencyContainer/ToolsFilterFeatureDiContainer.swift index 4d695e770a..13963a80e1 100644 --- a/godtools/App/Features/ToolsFilter/DependencyContainer/ToolsFilterFeatureDiContainer.swift +++ b/godtools/App/Features/ToolsFilter/DependencyContainer/ToolsFilterFeatureDiContainer.swift @@ -13,11 +13,9 @@ class ToolsFilterFeatureDiContainer { let dataLayer: ToolsFilterFeatureDataLayerDependencies let domainLayer: ToolsFilterFeatureDomainLayerDependencies - // TODO: Eventually coreDomainLayer: AppDomainLayerDependencies should not be injected here once ToolsFilterDomainLayer no longer needs to depend on these use cases. ~Levi - init(coreDataLayer: AppDataLayerDependencies, coreDomainLayer: AppDomainLayerDependencies) { + init(coreDataLayer: AppDataLayerDependencies) { dataLayer = ToolsFilterFeatureDataLayerDependencies(coreDataLayer: coreDataLayer) - // TODO: Eventually coreDataLayer: coreDataLayer and coreDomainLayer: AppDomainLayerDependencies should not be injected here. ~Levi - domainLayer = ToolsFilterFeatureDomainLayerDependencies(dataLayer: dataLayer, coreDataLayer: coreDataLayer, coreDomainLayer: coreDomainLayer) + domainLayer = ToolsFilterFeatureDomainLayerDependencies(dataLayer: dataLayer) } } diff --git a/godtools/App/Features/ToolsFilter/DependencyContainer/ToolsFilterFeatureDomainLayerDependencies.swift b/godtools/App/Features/ToolsFilter/DependencyContainer/ToolsFilterFeatureDomainLayerDependencies.swift index 0c796738d5..46d3f5b9ba 100644 --- a/godtools/App/Features/ToolsFilter/DependencyContainer/ToolsFilterFeatureDomainLayerDependencies.swift +++ b/godtools/App/Features/ToolsFilter/DependencyContainer/ToolsFilterFeatureDomainLayerDependencies.swift @@ -11,14 +11,10 @@ import Foundation class ToolsFilterFeatureDomainLayerDependencies { private let dataLayer: ToolsFilterFeatureDataLayerDependencies - private let coreDataLayer: AppDataLayerDependencies // TODO: Eventually this needs to be removed as our UseCases in this feature will instead depend on interfaces. ~Levi - private let coreDomainLayer: AppDomainLayerDependencies // TODO: Eventually this needs to be removed as our UseCases in this feature will not need to depend on UseCases. ~Levi - init(dataLayer: ToolsFilterFeatureDataLayerDependencies, coreDataLayer: AppDataLayerDependencies, coreDomainLayer: AppDomainLayerDependencies) { + init(dataLayer: ToolsFilterFeatureDataLayerDependencies) { self.dataLayer = dataLayer - self.coreDataLayer = coreDataLayer - self.coreDomainLayer = coreDomainLayer } func getUserToolFiltersUseCase() -> GetUserToolFiltersUseCase { diff --git a/godtools/App/Flows/Tract/TractFlow.swift b/godtools/App/Flows/Tract/TractFlow.swift index abc8c1c6cb..d9ad46bd1c 100644 --- a/godtools/App/Flows/Tract/TractFlow.swift +++ b/godtools/App/Flows/Tract/TractFlow.swift @@ -170,7 +170,6 @@ extension TractFlow { mobileContentEventAnalytics: appDiContainer.getMobileContentRendererEventAnalyticsTracking(), getCurrentAppLanguageUseCase: appDiContainer.feature.appLanguage.domainLayer.getCurrentAppLanguageUseCase(), getTranslatedLanguageName: appDiContainer.dataLayer.getTranslatedLanguageName(), - toolOpenedAnalytics: appDiContainer.getToolOpenedAnalytics(), liveShareStream: liveShareStream, initialPage: initialPage, trainingTipsEnabled: trainingTipsEnabled, diff --git a/godtools/App/Services/Analytics/AnalyticsContainer.swift b/godtools/App/Services/Analytics/AnalyticsContainer.swift index a4aabf4fe7..7bd18d591d 100644 --- a/godtools/App/Services/Analytics/AnalyticsContainer.swift +++ b/godtools/App/Services/Analytics/AnalyticsContainer.swift @@ -11,17 +11,15 @@ import Foundation class AnalyticsContainer { // analytics systems - let appsFlyerAnalytics: AppsFlyerAnalytics let firebaseAnalytics: FirebaseAnalytics // shared analytics tracking let trackActionAnalytics: TrackActionAnalytics - init(appsFlyerAnalytics: AppsFlyerAnalytics, firebaseAnalytics: FirebaseAnalytics) { + init(firebaseAnalytics: FirebaseAnalytics) { trackActionAnalytics = TrackActionAnalytics(firebaseAnalytics: firebaseAnalytics) - self.appsFlyerAnalytics = appsFlyerAnalytics self.firebaseAnalytics = firebaseAnalytics } } diff --git a/godtools/App/Services/Analytics/AnalyticsTracking/ToolOpenedAnalytics.swift b/godtools/App/Services/Analytics/AnalyticsTracking/ToolOpenedAnalytics.swift deleted file mode 100644 index 49319f3796..0000000000 --- a/godtools/App/Services/Analytics/AnalyticsTracking/ToolOpenedAnalytics.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// ToolOpenedAnalytics.swift -// godtools -// -// Created by Levi Eggert on 3/6/20. -// Copyright © 2020 Cru. All rights reserved. -// - -import Foundation - -class ToolOpenedAnalytics { - - private let keyFirstToolOpened: String = "toolOpenedAnalytics.keyFirstToolOpened" - private let appsFlyerAnalytics: AppsFlyerAnalytics - - required init(appsFlyerAnalytics: AppsFlyerAnalytics) { - self.appsFlyerAnalytics = appsFlyerAnalytics - } - - func trackToolOpened(resource: ResourceModel) { - appsFlyerAnalytics.trackAction(actionName: "tool-opened", data: nil) - } - - func trackFirstToolOpenedIfNeeded(resource: ResourceModel) { - - if !firstToolOpened { - - appsFlyerAnalytics.trackAction(actionName: "first-tool-opened", data: nil) - - defaults.set(true, forKey: keyFirstToolOpened) - defaults.synchronize() - } - } - - private var defaults: UserDefaults { - return UserDefaults.standard - } - - private var firstToolOpened: Bool { - return (defaults.object(forKey: keyFirstToolOpened) as? Bool) ?? false - } -} diff --git a/godtools/App/Services/Analytics/AppsFlyer/AppsFlyerAnalytics.swift b/godtools/App/Services/Analytics/AppsFlyer/AppsFlyerAnalytics.swift deleted file mode 100644 index ec8f90e0d4..0000000000 --- a/godtools/App/Services/Analytics/AppsFlyer/AppsFlyerAnalytics.swift +++ /dev/null @@ -1,86 +0,0 @@ -// -// AppsFlyer.swift -// godtools -// -// Created by Levi Eggert on 2/12/20. -// Copyright © 2020 Cru. All rights reserved. -// - -import UIKit - -class AppsFlyerAnalytics: NSObject { - - private let serialQueue: DispatchQueue = DispatchQueue(label: "appsflyer.serial.queue") - private let loggingEnabled: Bool - - private var appsFlyer: AppsFlyer - - private var isConfigured: Bool = false - private var isConfiguring: Bool = false - - required init(appsFlyer: AppsFlyer, loggingEnabled: Bool) { - - self.appsFlyer = appsFlyer - self.loggingEnabled = loggingEnabled - - super.init() - } - - func configure() { - - if isConfigured || isConfiguring { - return - } - - isConfiguring = true - - serialQueue.async { [weak self] in - - self?.appsFlyer.appsFlyerLib.customData = [:] - - self?.isConfigured = true - self?.isConfiguring = false - - self?.log(method: "configure()", label: nil, labelValue: nil, data: nil) - } - } - - func trackAppLaunch() { - - serialQueue.async { [weak self] in - - self?.appsFlyer.appsFlyerLib.start() - - self?.log(method: "trackAppLaunch()", label: nil, labelValue: nil, data: nil) - } - } - - func trackAction(actionName: String, data: [String: Any]?) { - - serialQueue.async { [weak self] in - - self?.appsFlyer.appsFlyerLib.logEvent(actionName, withValues: data) - self?.log(method: "trackEvent()", label: "eventName", labelValue: actionName, data: data) - } - } - - private func log(method: String, label: String?, labelValue: String?, data: [String: Any]?) { - - if loggingEnabled { - - print("\nAppsFlyer \(method)") - - if let label = label, let labelValue = labelValue { - print(" \(label): \(labelValue)") - } - - if let data = data { - print(" data: \(data)") - } - - if let customData = appsFlyer.appsFlyerLib.customData { - print(" customData: \(customData)") - } - } - } -} diff --git a/godtools/App/Services/Renderer/Analytics/MobileContentRendererAnalytics.swift b/godtools/App/Services/Renderer/Analytics/MobileContentRendererAnalytics.swift index 1bbf8084da..d174683b60 100644 --- a/godtools/App/Services/Renderer/Analytics/MobileContentRendererAnalytics.swift +++ b/godtools/App/Services/Renderer/Analytics/MobileContentRendererAnalytics.swift @@ -16,7 +16,6 @@ class MobileContentRendererAnalytics { init(analytics: AnalyticsContainer, userAnalytics: MobileContentRendererUserAnalytics) { let analyticsSystems: [AnalyticsEvent.System: MobileContentRendererAnalyticsSystem] = [ - .appsflyer: analytics.appsFlyerAnalytics, .firebase: analytics.firebaseAnalytics, .user: userAnalytics ] diff --git a/godtools/App/Services/Renderer/Analytics/Systems/AppsFlyer/AppsFlyerAnalytics+MobileContentRendererAnalyticsSystem.swift b/godtools/App/Services/Renderer/Analytics/Systems/AppsFlyer/AppsFlyerAnalytics+MobileContentRendererAnalyticsSystem.swift deleted file mode 100644 index 1ac19b97cc..0000000000 --- a/godtools/App/Services/Renderer/Analytics/Systems/AppsFlyer/AppsFlyerAnalytics+MobileContentRendererAnalyticsSystem.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// AppsFlyerAnalytics+MobileContentRendererAnalyticsSystem.swift -// godtools -// -// Created by Levi Eggert on 6/9/21. -// Copyright © 2021 Cru. All rights reserved. -// - -import Foundation - -extension AppsFlyerAnalytics: MobileContentRendererAnalyticsSystem { - - func trackMobileContentAction(context: MobileContentRenderedPageContext, screenName: String, siteSection: String, action: String, data: [String: Any]?) { - trackAction(actionName: action, data: data) - } -} diff --git a/godtools/App/Share/Common/JsonApi/JsonApiResponseBaseData.swift b/godtools/App/Share/Common/JsonApi/JsonApiResponseBaseData.swift deleted file mode 100644 index 06fc40b280..0000000000 --- a/godtools/App/Share/Common/JsonApi/JsonApiResponseBaseData.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// JsonApiResponseBaseData.swift -// godtools -// -// Created by Levi Eggert on 12/23/23. -// Copyright © 2023 Cru. All rights reserved. -// - -import Foundation - -struct JsonApiResponseBaseData: Codable { - - let id: String - let type: String - - enum CodingKeys: String, CodingKey { - case id = "id" - case type = "type" - } -} diff --git a/godtools/App/Share/Common/JsonApi/JsonApiResponseData.swift b/godtools/App/Share/Common/JsonApi/JsonApiResponseData.swift deleted file mode 100644 index fedc637940..0000000000 --- a/godtools/App/Share/Common/JsonApi/JsonApiResponseData.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// JsonApiResponseData.swift -// godtools -// -// Created by Levi Eggert on 1/20/23. -// Copyright © 2023 Cru. All rights reserved. -// - -import Foundation - -struct JsonApiResponseData: Codable { - - let data: T - - enum CodingKeys: String, CodingKey { - case data = "data" - } -} diff --git a/godtools/App/Share/Common/JsonApi/JsonApiResponseDataArray.swift b/godtools/App/Share/Common/JsonApi/JsonApiResponseDataArray.swift deleted file mode 100644 index 2e75ebcfa7..0000000000 --- a/godtools/App/Share/Common/JsonApi/JsonApiResponseDataArray.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// JsonApiResponseDataArray.swift -// godtools -// -// Created by Levi Eggert on 12/23/23. -// Copyright © 2023 Cru. All rights reserved. -// - -import Foundation - -struct JsonApiResponseDataArray: Codable { - - let dataArray: [T] - - enum CodingKeys: String, CodingKey { - case dataArray = "data" - } -} diff --git a/godtools/App/Share/Data-DomainInterface/GetInterfaceStringForLanguageRepository.swift b/godtools/App/Share/Data-DomainInterface/GetInterfaceStringForLanguageRepository.swift deleted file mode 100644 index d52185c9bd..0000000000 --- a/godtools/App/Share/Data-DomainInterface/GetInterfaceStringForLanguageRepository.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// GetInterfaceStringForLanguageRepository.swift -// godtools -// -// Created by Levi Eggert on 9/26/23. -// Copyright © 2023 Cru. All rights reserved. -// - -import Foundation -import Combine -import LocalizationServices - -@available(*, deprecated) -class GetInterfaceStringForLanguageRepository: GetInterfaceStringForLanguageRepositoryInterface { - - private let localizationServices: LocalizationServices - - init(localizationServices: LocalizationServices) { - - self.localizationServices = localizationServices - } - - func getString(languageCode: String, stringId: String) -> String { - - let interfaceString: String = localizationServices.stringForLocaleElseEnglish(localeIdentifier: languageCode, key: stringId) - - return interfaceString - } - - func getStringPublisher(languageCode: String, stringId: String) -> AnyPublisher { - - return Just(getString(languageCode: languageCode, stringId: stringId)) - .eraseToAnyPublisher() - } -} diff --git a/godtools/App/Share/Data/AppsFlyer/AppsFlyer.swift b/godtools/App/Share/Data/AppsFlyer/AppsFlyer.swift deleted file mode 100644 index 7e1cd7e2d5..0000000000 --- a/godtools/App/Share/Data/AppsFlyer/AppsFlyer.swift +++ /dev/null @@ -1,58 +0,0 @@ -// -// AppsFlyer.swift -// godtools -// -// Created by Robert Eldredge on 1/13/21. -// Copyright © 2021 Cru. All rights reserved. -// - -import UIKit -import AppsFlyerLib - -class AppsFlyer { - - static let shared: AppsFlyer = AppsFlyer() - - private let sharedAppsFlyerLib: AppsFlyerLib = AppsFlyerLib.shared() - - private var isConfigured: Bool = false - - private init() { - - } - - var appsFlyerLib: AppsFlyerLib { - return sharedAppsFlyerLib - } - - func configure(configuration: AppsFlyerConfiguration, deepLinkDelegate: DeepLinkDelegate) { - - guard !isConfigured else { - return - } - - isConfigured = true - - appsFlyerLib.appsFlyerDevKey = configuration.appsFlyerDevKey - appsFlyerLib.appleAppID = configuration.appleAppId - appsFlyerLib.oneLinkCustomDomains = ["get.godtoolsapp.com"] - appsFlyerLib.deepLinkDelegate = deepLinkDelegate - appsFlyerLib.useUninstallSandbox = configuration.shouldUseUninstallSandbox - } - - func handleOpenUrl(url: URL, options: [UIApplication.OpenURLOptionsKey: Any]) { - appsFlyerLib.handleOpen(url, options: options) - } - - func continueUserActivity(userActivity: NSUserActivity) { - appsFlyerLib.continue(userActivity) - } - - func registerUninstall(deviceToken: Data) { - appsFlyerLib.registerUninstall(deviceToken) - } - - func handlePushNotification(userInfo: [AnyHashable: Any]) { - appsFlyerLib.handlePushNotification(userInfo) - } -} diff --git a/godtools/App/Share/Data/AppsFlyer/AppsFlyerConfiguration.swift b/godtools/App/Share/Data/AppsFlyer/AppsFlyerConfiguration.swift deleted file mode 100644 index aa69d8c2d2..0000000000 --- a/godtools/App/Share/Data/AppsFlyer/AppsFlyerConfiguration.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// AppsFlyerConfiguration.swift -// godtools -// -// Created by Levi Eggert on 10/4/22. -// Copyright © 2022 Cru. All rights reserved. -// - -import Foundation - -class AppsFlyerConfiguration { - - let appleAppId: String - let appsFlyerDevKey: String - let shouldUseUninstallSandbox: Bool - - init(appleAppId: String, appsFlyerDevKey: String, shouldUseUninstallSandbox: Bool) { - - self.appleAppId = appleAppId - self.appsFlyerDevKey = appsFlyerDevKey - self.shouldUseUninstallSandbox = shouldUseUninstallSandbox - } -} diff --git a/godtools/App/Share/Data/DeepLinkingService/DeepLinkingService.swift b/godtools/App/Share/Data/DeepLinkingService/DeepLinkingService.swift index cde2e1219e..f544d1271e 100644 --- a/godtools/App/Share/Data/DeepLinkingService/DeepLinkingService.swift +++ b/godtools/App/Share/Data/DeepLinkingService/DeepLinkingService.swift @@ -33,14 +33,6 @@ class DeepLinkingService: NSObject { switch incomingDeepLink { - case .appsFlyer(let data): - - guard let appsFlyerParser = parser as? DeepLinkAppsFlyerParserType else { - continue - } - - parsedDeepLink = appsFlyerParser.parse(data: data) - case .url(let incomingUrl): guard let urlParser = parser as? DeepLinkUrlParserType else { diff --git a/godtools/App/Share/Data/DeepLinkingService/GodToolsManifest/GodToolsDeepLinkingManifest.swift b/godtools/App/Share/Data/DeepLinkingService/GodToolsManifest/GodToolsDeepLinkingManifest.swift index 68d99e4194..6a206f5eb9 100644 --- a/godtools/App/Share/Data/DeepLinkingService/GodToolsManifest/GodToolsDeepLinkingManifest.swift +++ b/godtools/App/Share/Data/DeepLinkingService/GodToolsManifest/GodToolsDeepLinkingManifest.swift @@ -75,12 +75,6 @@ class GodToolsDeepLinkingManifest: DeepLinkingManifestType { path: "deeplink/settings/language", parserClass: LanguageSettingsDeepLinkParser.self ), - DeepLinkingParserManifestAppsFlyer( - parserClass: AppsFlyerDeepLinkValueParser.self - ), - DeepLinkingParserManifestAppsFlyer( - parserClass: LegacyAppsFlyerDeepLinkValueParser.self - ), DeepLinkingParserManifestUrl( scheme: "godtools", host: "org.cru.godtools", diff --git a/godtools/App/Share/Data/DeepLinkingService/IncomingDeepLinkType.swift b/godtools/App/Share/Data/DeepLinkingService/IncomingDeepLinkType.swift index 34fa4fd34a..843fa07d9f 100644 --- a/godtools/App/Share/Data/DeepLinkingService/IncomingDeepLinkType.swift +++ b/godtools/App/Share/Data/DeepLinkingService/IncomingDeepLinkType.swift @@ -10,6 +10,5 @@ import Foundation enum IncomingDeepLinkType { - case appsFlyer(data: [AnyHashable: Any]) case url(incomingUrl: IncomingDeepLinkUrl) } diff --git a/godtools/App/Share/Data/DeepLinkingService/Manifest/DeepLinkingParserManifestAppsFlyer.swift b/godtools/App/Share/Data/DeepLinkingService/Manifest/DeepLinkingParserManifestAppsFlyer.swift deleted file mode 100644 index 3fd473a9a1..0000000000 --- a/godtools/App/Share/Data/DeepLinkingService/Manifest/DeepLinkingParserManifestAppsFlyer.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// DeepLinkingParserManifestAppsFlyer.swift -// godtools -// -// Created by Levi Eggert on 4/20/22. -// Copyright © 2022 Cru. All rights reserved. -// - -import Foundation - -class DeepLinkingParserManifestAppsFlyer: DeepLinkingParserManifestType { - - let parserClass: DeepLinkParserType.Type - - required init(parserClass: DeepLinkParserType.Type) { - - self.parserClass = parserClass - } - - func getParserIfValidIncomingDeepLink(incomingDeepLink: IncomingDeepLinkType) -> DeepLinkParserType? { - - return parserClass.init() - } -} diff --git a/godtools/App/Share/Data/DeepLinkingService/Manifest/DeepLinkingParserManifestUrl.swift b/godtools/App/Share/Data/DeepLinkingService/Manifest/DeepLinkingParserManifestUrl.swift index a8ef9c381f..6963b7d9e8 100644 --- a/godtools/App/Share/Data/DeepLinkingService/Manifest/DeepLinkingParserManifestUrl.swift +++ b/godtools/App/Share/Data/DeepLinkingService/Manifest/DeepLinkingParserManifestUrl.swift @@ -42,9 +42,6 @@ class DeepLinkingParserManifestUrl: DeepLinkingParserManifestType { } return parserClass.init() - - default: - return nil } } diff --git a/godtools/App/Share/Data/DeepLinkingService/Parsers/AppsFlyerDeepLinkValue/AppsFlyerDeepLinkValueComponentsParser.swift b/godtools/App/Share/Data/DeepLinkingService/Parsers/AppsFlyerDeepLinkValue/AppsFlyerDeepLinkValueComponentsParser.swift deleted file mode 100644 index a5289002df..0000000000 --- a/godtools/App/Share/Data/DeepLinkingService/Parsers/AppsFlyerDeepLinkValue/AppsFlyerDeepLinkValueComponentsParser.swift +++ /dev/null @@ -1,87 +0,0 @@ -// -// AppsFlyerDeepLinkValueComponentsParser.swift -// godtools -// -// Created by Levi Eggert on 3/28/22. -// Copyright © 2022 Cru. All rights reserved. -// - -import Foundation - -class AppsFlyerDeepLinkValueComponentsParser { - - func getParsedDeepLink(components: [String]) -> ParsedDeepLinkType? { - - guard let rootComponent = components[safe: 0] else { - return nil - } - - guard let locationComponent = components[safe: 1] else { - return nil - } - - switch rootComponent { - case "dashboard": - - switch locationComponent { - case "tools": - return .allToolsList - case "home": - return .favoritedToolsList - case "lessons": - return .lessonsList - default: - return nil - } - - case "tool": - - guard let resourceAbbreviation = components[safe: 2] else { - return nil - } - - guard let language = components[safe: 3] else { - return nil - } - - var pageNumber: Int? - var pageId: String? - - switch locationComponent { - case "tract": - if let pageStringValue = components[safe: 3], let pageIntValue = Int(pageStringValue) { - pageNumber = pageIntValue - } - - case "lesson": - break - - case "cyoa": - if let pageIdValue = components[safe: 3] { - pageId = pageIdValue - } - - case "article": - break - - default: - return nil - } - - return .tool( - toolDeepLink: ToolDeepLink( - resourceAbbreviation: resourceAbbreviation, - primaryLanguageCodes: [language], - parallelLanguageCodes: [], - liveShareStream: nil, - page: pageNumber, - pageId: pageId, - selectedLanguageIndex: nil - ) - ) - - default: - return nil - } - } -} diff --git a/godtools/App/Share/Data/DeepLinkingService/Parsers/AppsFlyerDeepLinkValue/AppsFlyerDeepLinkValueParser.swift b/godtools/App/Share/Data/DeepLinkingService/Parsers/AppsFlyerDeepLinkValue/AppsFlyerDeepLinkValueParser.swift deleted file mode 100644 index 4ec5da8034..0000000000 --- a/godtools/App/Share/Data/DeepLinkingService/Parsers/AppsFlyerDeepLinkValue/AppsFlyerDeepLinkValueParser.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// AppsFlyerDeepLinkValueParser.swift -// godtools -// -// Created by Levi Eggert on 3/16/22. -// Copyright © 2022 Cru. All rights reserved. -// - -import Foundation - -class AppsFlyerDeepLinkValueParser: DeepLinkAppsFlyerParserType { - - private let appsFlyerComponentsParser: AppsFlyerDeepLinkValueComponentsParser = AppsFlyerDeepLinkValueComponentsParser() - - required init() { - - } - - func parse(data: [AnyHashable: Any]) -> ParsedDeepLinkType? { - - guard let deepLinkValue = data["deep_link_value"] as? String else { - return nil - } - - let deepLinkValueComponents: [String] = deepLinkValue.components(separatedBy: "|") - - return appsFlyerComponentsParser.getParsedDeepLink(components: deepLinkValueComponents) - } -} diff --git a/godtools/App/Share/Data/DeepLinkingService/Parsers/DeepLinkAppsFlyerParserType.swift b/godtools/App/Share/Data/DeepLinkingService/Parsers/DeepLinkAppsFlyerParserType.swift deleted file mode 100644 index e9c6d46615..0000000000 --- a/godtools/App/Share/Data/DeepLinkingService/Parsers/DeepLinkAppsFlyerParserType.swift +++ /dev/null @@ -1,14 +0,0 @@ -// -// DeepLinkAppsFlyerParserType.swift -// godtools -// -// Created by Levi Eggert on 4/20/22. -// Copyright © 2022 Cru. All rights reserved. -// - -import Foundation - -protocol DeepLinkAppsFlyerParserType: DeepLinkParserType { - - func parse(data: [AnyHashable: Any]) -> ParsedDeepLinkType? -} diff --git a/godtools/App/Share/Data/DeepLinkingService/Parsers/Legacy/LegacyAppsFlyerDeepLinkValueParser.swift b/godtools/App/Share/Data/DeepLinkingService/Parsers/Legacy/LegacyAppsFlyerDeepLinkValueParser.swift deleted file mode 100644 index 18cad2fda1..0000000000 --- a/godtools/App/Share/Data/DeepLinkingService/Parsers/Legacy/LegacyAppsFlyerDeepLinkValueParser.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// LegacyAppsFlyerDeepLinkValueParser.swift -// godtools -// -// Created by Levi Eggert on 4/20/22. -// Copyright © 2022 Cru. All rights reserved. -// - -import Foundation - -class LegacyAppsFlyerDeepLinkValueParser: DeepLinkAppsFlyerParserType { - - required init() { - - } - - func parse(data: [AnyHashable: Any]) -> ParsedDeepLinkType? { - - let resourceAbbreviation: String? - - if let deepLinkValue = data["deep_link_value"] as? String { - resourceAbbreviation = deepLinkValue - } - else if let link = data["link"] as? String, let linkComponents = URLComponents(string: link), let deepLinkValue = linkComponents.queryItems?.first(where: { $0.name == "deep_link_value" })?.value { - - resourceAbbreviation = deepLinkValue - } - else { - - resourceAbbreviation = nil - } - - guard let resourceAbbreviation = resourceAbbreviation else { - return nil - } - - let toolDeepLink = ToolDeepLink( - resourceAbbreviation: resourceAbbreviation, - primaryLanguageCodes: [], - parallelLanguageCodes: [], - liveShareStream: nil, - page: nil, - pageId: nil, - selectedLanguageIndex: nil - ) - - return .tool(toolDeepLink: toolDeepLink) - } -} diff --git a/godtools/App/Share/Data/LanguagesRepository/JsonFileCache/LanguagesJsonFileCache.swift b/godtools/App/Share/Data/LanguagesRepository/JsonFileCache/LanguagesJsonFileCache.swift index 9791bc03d7..2691cd2025 100644 --- a/godtools/App/Share/Data/LanguagesRepository/JsonFileCache/LanguagesJsonFileCache.swift +++ b/godtools/App/Share/Data/LanguagesRepository/JsonFileCache/LanguagesJsonFileCache.swift @@ -8,6 +8,7 @@ import Foundation import Combine +import RequestOperation class LanguagesJsonFileCache { @@ -36,8 +37,8 @@ class LanguagesJsonFileCache { } do { - let responseData: JsonApiResponseData<[LanguageModel]> = try JSONDecoder().decode(JsonApiResponseData<[LanguageModel]>.self, from: data) - return .success(responseData.data) + let responseData: JsonApiResponseDataArray = try JSONDecoder().decode(JsonApiResponseDataArray.self, from: data) + return .success(responseData.dataArray) } catch let error { return .failure(error) diff --git a/godtools/App/Share/Data/ResourcesRepository/Api/Models/ResourceModel.swift b/godtools/App/Share/Data/ResourcesRepository/Api/Models/ResourceModel.swift index d2b1799faf..cf0c6c0488 100644 --- a/godtools/App/Share/Data/ResourcesRepository/Api/Models/ResourceModel.swift +++ b/godtools/App/Share/Data/ResourcesRepository/Api/Models/ResourceModel.swift @@ -7,6 +7,7 @@ // import Foundation +import RequestOperation struct ResourceModel: ResourceModelType, Decodable, Identifiable { @@ -159,16 +160,16 @@ struct ResourceModel: ResourceModelType, Decodable, Identifiable { attachmentIds = attachments.map({$0.id}) do { - let metatool = try relationshipsContainer?.decodeIfPresent(JsonApiResponseData.self, forKey: .metatool) - metatoolId = metatool?.data.id + let metatool = try relationshipsContainer?.decodeIfPresent(JsonApiResponseDataObject.self, forKey: .metatool) + metatoolId = metatool?.dataObject.id } catch { metatoolId = nil } do { - let defaultVariant = try relationshipsContainer?.decodeIfPresent(JsonApiResponseData.self, forKey: .defaultVariant) - defaultVariantId = defaultVariant?.data.id + let defaultVariant = try relationshipsContainer?.decodeIfPresent(JsonApiResponseDataObject.self, forKey: .defaultVariant) + defaultVariantId = defaultVariant?.dataObject.id } catch { defaultVariantId = nil diff --git a/godtools/App/Share/Data/TranslationsRepository/ManifestParser/ParseTranslationManifestForRenderer.swift b/godtools/App/Share/Data/TranslationsRepository/ManifestParser/ParseTranslationManifestForRenderer.swift index fe0fa15307..e7a3627b25 100644 --- a/godtools/App/Share/Data/TranslationsRepository/ManifestParser/ParseTranslationManifestForRenderer.swift +++ b/godtools/App/Share/Data/TranslationsRepository/ManifestParser/ParseTranslationManifestForRenderer.swift @@ -19,7 +19,7 @@ class ParseTranslationManifestForRenderer: TranslationManifestParser { ParserConfig.companion.FEATURE_MULTISELECT ] - init(infoPlist: InfoPlist, resourcesFileCache: ResourcesSHA256FileCache, appBuild: AppBuild) { + init(infoPlist: InfoPlist, resourcesFileCache: ResourcesSHA256FileCache) { let appVersion: String? = infoPlist.appVersion @@ -35,8 +35,7 @@ class ParseTranslationManifestForRenderer: TranslationManifestParser { super.init( parserConfig: parserConfig, - resourcesFileCache: resourcesFileCache, - appBuild: appBuild + resourcesFileCache: resourcesFileCache ) } } diff --git a/godtools/App/Share/Data/TranslationsRepository/ManifestParser/TranslationManifestParser.swift b/godtools/App/Share/Data/TranslationsRepository/ManifestParser/TranslationManifestParser.swift index ba045736ed..90ad03dfa4 100644 --- a/godtools/App/Share/Data/TranslationsRepository/ManifestParser/TranslationManifestParser.swift +++ b/godtools/App/Share/Data/TranslationsRepository/ManifestParser/TranslationManifestParser.swift @@ -15,22 +15,21 @@ class TranslationManifestParser { private let parser: ManifestParser private let parserConfig: ParserConfig private let resourcesFileCache: ResourcesSHA256FileCache - private let appBuild: AppBuild - static func getManifestParser(type: TranslationManifestParserType, infoPlist: InfoPlist, resourcesFileCache: ResourcesSHA256FileCache, appBuild: AppBuild) -> TranslationManifestParser { + static func getManifestParser(type: TranslationManifestParserType, infoPlist: InfoPlist, resourcesFileCache: ResourcesSHA256FileCache) -> TranslationManifestParser { switch type { case .manifestOnly: let parserConfig = ParserConfig().withParseRelated(enabled: false) - return TranslationManifestParser(parserConfig: parserConfig, resourcesFileCache: resourcesFileCache, appBuild: appBuild) + return TranslationManifestParser(parserConfig: parserConfig, resourcesFileCache: resourcesFileCache) case .renderer: - return ParseTranslationManifestForRenderer(infoPlist: infoPlist, resourcesFileCache: resourcesFileCache, appBuild: appBuild) + return ParseTranslationManifestForRenderer(infoPlist: infoPlist, resourcesFileCache: resourcesFileCache) } } - init(parserConfig: ParserConfig, resourcesFileCache: ResourcesSHA256FileCache, appBuild: AppBuild) { + init(parserConfig: ParserConfig, resourcesFileCache: ResourcesSHA256FileCache) { self.parser = ManifestParser( parserFactory: TranslationManifestParserFactory(resourcesFileCache: resourcesFileCache), @@ -39,7 +38,6 @@ class TranslationManifestParser { self.parserConfig = parserConfig self.resourcesFileCache = resourcesFileCache - self.appBuild = appBuild } func parsePublisher(manifestName: String) -> AnyPublisher { @@ -63,13 +61,6 @@ class TranslationManifestParser { private func parseAsync(manifestName: String, completion: @escaping ((_ result: Result) -> Void)) { - // TODO: Currently this is here to fix a random crash in godtoolsTests (See GT-2047). Is this the best way to prevent this code from running in godtoolsTests? Investigate this more. ~Levi - - guard !appBuild.isTestsTarget else { - completion(.failure(NSError.errorWithDescription(description: "Running tests will not parse manifest."))) - return - } - let location: FileCacheLocation = FileCacheLocation(relativeUrlString: manifestName) switch resourcesFileCache.getFileExists(location: location) { diff --git a/godtools/App/Share/Data/TranslationsRepository/TranslationsRepository.swift b/godtools/App/Share/Data/TranslationsRepository/TranslationsRepository.swift index aa627cb745..d755495b4f 100644 --- a/godtools/App/Share/Data/TranslationsRepository/TranslationsRepository.swift +++ b/godtools/App/Share/Data/TranslationsRepository/TranslationsRepository.swift @@ -14,16 +14,14 @@ import RequestOperation class TranslationsRepository { private let infoPlist: InfoPlist - private let appBuild: AppBuild private let api: MobileContentTranslationsApi private let cache: RealmTranslationsCache private let resourcesFileCache: ResourcesSHA256FileCache private let trackDownloadedTranslationsRepository: TrackDownloadedTranslationsRepository - init(infoPlist: InfoPlist, appBuild: AppBuild, api: MobileContentTranslationsApi, cache: RealmTranslationsCache, resourcesFileCache: ResourcesSHA256FileCache, trackDownloadedTranslationsRepository: TrackDownloadedTranslationsRepository) { + init(infoPlist: InfoPlist, api: MobileContentTranslationsApi, cache: RealmTranslationsCache, resourcesFileCache: ResourcesSHA256FileCache, trackDownloadedTranslationsRepository: TrackDownloadedTranslationsRepository) { self.infoPlist = infoPlist - self.appBuild = appBuild self.api = api self.cache = cache self.resourcesFileCache = resourcesFileCache @@ -47,7 +45,7 @@ extension TranslationsRepository { return cache.getTranslationsSortedByLatestVersion(resourceId: resourceId, languageId: languageId).first } - func getLatestTranslation(resourceId: String, languageCode: String) -> TranslationModel? { + func getLatestTranslation(resourceId: String, languageCode: BCP47LanguageIdentifier) -> TranslationModel? { return cache.getTranslationsSortedByLatestVersion(resourceId: resourceId, languageCode: languageCode).first } } @@ -69,7 +67,7 @@ extension TranslationsRepository { func getTranslationManifestFromCache(translation: TranslationModel, manifestParserType: TranslationManifestParserType, includeRelatedFiles: Bool) -> AnyPublisher { - let manifestParser: TranslationManifestParser = TranslationManifestParser.getManifestParser(type: manifestParserType, infoPlist: infoPlist, resourcesFileCache: resourcesFileCache, appBuild: appBuild) + let manifestParser: TranslationManifestParser = TranslationManifestParser.getManifestParser(type: manifestParserType, infoPlist: infoPlist, resourcesFileCache: resourcesFileCache) return manifestParser.parsePublisher(manifestName: translation.manifestName) .flatMap({ manifest -> AnyPublisher in @@ -199,7 +197,7 @@ extension TranslationsRepository { return getTranslationFileFromCacheElseRemote(translation: translation, fileName: translation.manifestName) .flatMap({ fileCacheLocation -> AnyPublisher in - let manifestParser: TranslationManifestParser = TranslationManifestParser.getManifestParser(type: manifestParserType, infoPlist: self.infoPlist, resourcesFileCache: self.resourcesFileCache, appBuild: self.appBuild) + let manifestParser: TranslationManifestParser = TranslationManifestParser.getManifestParser(type: manifestParserType, infoPlist: self.infoPlist, resourcesFileCache: self.resourcesFileCache) return manifestParser.parsePublisher(manifestName: translation.manifestName) .eraseToAnyPublisher() @@ -324,7 +322,7 @@ extension TranslationsRepository { return getTranslationFileFromCacheElseRemote(translation: translation, fileName: translation.manifestName) .flatMap({ (fileCacheLocation: FileCacheLocation) -> AnyPublisher in - let manifestParser: TranslationManifestParser = TranslationManifestParser.getManifestParser(type: .manifestOnly, infoPlist: self.infoPlist, resourcesFileCache: self.resourcesFileCache, appBuild: self.appBuild) + let manifestParser: TranslationManifestParser = TranslationManifestParser.getManifestParser(type: .manifestOnly, infoPlist: self.infoPlist, resourcesFileCache: self.resourcesFileCache) return manifestParser.parsePublisher(manifestName: translation.manifestName) .eraseToAnyPublisher() diff --git a/godtools/App/Share/Data/UserCountersRepository/Api/UserCountersAPI.swift b/godtools/App/Share/Data/UserCountersRepository/Api/UserCountersAPI.swift index ff96f00d35..ad9567e700 100644 --- a/godtools/App/Share/Data/UserCountersRepository/Api/UserCountersAPI.swift +++ b/godtools/App/Share/Data/UserCountersRepository/Api/UserCountersAPI.swift @@ -29,9 +29,9 @@ class UserCountersAPI: UserCountersAPIType { let fetchRequest = getUserCountersRequest() return authSession.sendAuthenticatedRequest(urlRequest: fetchRequest, urlSession: ignoreCacheSession) - .decode(type: JsonApiResponseData<[UserCounterDecodable]>.self, decoder: JSONDecoder()) + .decode(type: JsonApiResponseDataArray.self, decoder: JSONDecoder()) .map { - return $0.data + return $0.dataArray } .eraseToAnyPublisher() } @@ -41,9 +41,9 @@ class UserCountersAPI: UserCountersAPIType { let incrementRequest = getIncrementUserCountersRequest(id: id, increment: increment) return authSession.sendAuthenticatedRequest(urlRequest: incrementRequest, urlSession: ignoreCacheSession) - .decode(type: JsonApiResponseData.self, decoder: JSONDecoder()) + .decode(type: JsonApiResponseDataObject.self, decoder: JSONDecoder()) .map { - return $0.data + return $0.dataObject } .eraseToAnyPublisher() } diff --git a/godtools/App/Share/Data/UserDetailsRepository/Api/UserDetailsAPI.swift b/godtools/App/Share/Data/UserDetailsRepository/Api/UserDetailsAPI.swift index 9708cbac35..9ce7d18b50 100644 --- a/godtools/App/Share/Data/UserDetailsRepository/Api/UserDetailsAPI.swift +++ b/godtools/App/Share/Data/UserDetailsRepository/Api/UserDetailsAPI.swift @@ -29,9 +29,9 @@ class UserDetailsAPI { let urlRequest: URLRequest = getAuthUserDetailsRequest() return authSession.sendAuthenticatedRequest(urlRequest: urlRequest, urlSession: ignoreCacheSession) - .decode(type: JsonApiResponseData.self, decoder: JSONDecoder()) + .decode(type: JsonApiResponseDataObject.self, decoder: JSONDecoder()) .map { - return $0.data + return $0.dataObject } .eraseToAnyPublisher() } diff --git a/godtools/App/Share/Domain/Interface/GetInterfaceStringForLanguageRepositoryInterface.swift b/godtools/App/Share/Domain/Interface/GetInterfaceStringForLanguageRepositoryInterface.swift deleted file mode 100644 index f607104ab9..0000000000 --- a/godtools/App/Share/Domain/Interface/GetInterfaceStringForLanguageRepositoryInterface.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// GetInterfaceStringForLanguageRepositoryInterface.swift -// godtools -// -// Created by Levi Eggert on 9/26/23. -// Copyright © 2023 Cru. All rights reserved. -// - -import Foundation -import Combine - -@available(*, deprecated) -protocol GetInterfaceStringForLanguageRepositoryInterface { - - func getString(languageCode: String, stringId: String) -> String - func getStringPublisher(languageCode: String, stringId: String) -> AnyPublisher -} diff --git a/godtools/App/Share/SwiftUI Views/ActivityIndicator/ActivityIndicator.swift b/godtools/App/Share/SwiftUI Views/ActivityIndicator/ActivityIndicator.swift deleted file mode 100644 index ec6d6d85e5..0000000000 --- a/godtools/App/Share/SwiftUI Views/ActivityIndicator/ActivityIndicator.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// ActivityIndicator.swift -// godtools -// -// Created by Rachael Skeath on 4/15/22. -// Copyright © 2022 Cru. All rights reserved. -// - -import SwiftUI - -// TODO: - GT-1533: In iOS 14+, we can use SwiftUI's `ProgressView` to get a built-in spinner and delete this one. -@available(*, deprecated) -struct ActivityIndicator: UIViewRepresentable { - - let style: UIActivityIndicatorView.Style - @Binding var isAnimating: Bool - - func makeUIView(context: Context) -> UIActivityIndicatorView { - return UIActivityIndicatorView(style: style) - } - - func updateUIView(_ uiView: UIActivityIndicatorView, context: Context) { - isAnimating ? uiView.startAnimating() : uiView.stopAnimating() - } -} diff --git a/godtools/App/Share/SwiftUI Views/SearchBar/SearchBarLegacy.swift b/godtools/App/Share/SwiftUI Views/SearchBar/SearchBarLegacy.swift index 3197c03f2c..9b44efb2e2 100644 --- a/godtools/App/Share/SwiftUI Views/SearchBar/SearchBarLegacy.swift +++ b/godtools/App/Share/SwiftUI Views/SearchBar/SearchBarLegacy.swift @@ -8,8 +8,7 @@ import SwiftUI -// Replaced by SearchBar for iOS 15+ -@available(*, deprecated) +@available(iOS, deprecated: 14.0, obsoleted: 15.0, message: "For iOS 14 use SearchBarLegacy.swift and iOS 15 and up use SearchBar.swift") struct SearchBarLegacy: View { @ObservedObject private var viewModel: SearchBarViewModel diff --git a/godtools/App/Share/SwiftUI Views/TwoRowHStack/TwoRowHStack.swift b/godtools/App/Share/SwiftUI Views/TwoRowHStack/TwoRowHStack.swift deleted file mode 100644 index fa64af3b37..0000000000 --- a/godtools/App/Share/SwiftUI Views/TwoRowHStack/TwoRowHStack.swift +++ /dev/null @@ -1,67 +0,0 @@ -// -// TwoRowHStack.swift -// godtools -// -// Created by Rachael Skeath on 5/23/22. -// Copyright © 2022 Cru. All rights reserved. -// - -import SwiftUI - -struct TwoRowHStack: View { - - private let itemCount: Int - private let numberOfColumns: Int - private let spacing: CGFloat - private let content: (Int) -> Content - - init(itemCount: Int, spacing: CGFloat, @ViewBuilder content: @escaping (Int) -> Content) { - - self.itemCount = itemCount - self.numberOfColumns = Int(ceil(Double(itemCount) / 2)) - self.spacing = spacing - self.content = content - } - - var body: some View { - - LazyHStack(alignment: .center, spacing: spacing) { - - ForEach(0 ..< numberOfColumns, id: \.self) { columnNumber in - - let topItemIndex = columnNumber * 2 - let bottomItemIndex = topItemIndex + 1 - - VStack(alignment: .center, spacing: spacing) { - - if topItemIndex < itemCount { - content(topItemIndex) - } - else { - Spacer() - } - - if bottomItemIndex < itemCount { - content(bottomItemIndex) - } - else { - Spacer() - } - } - } - } - } -} - -struct TwoRowHGrid_Previews: PreviewProvider { - static var previews: some View { - TwoRowHStack(itemCount: 8, spacing: 10) { itemIndex in - ZStack { - Color.blue - Text("\(itemIndex)") - } - .frame(width: 100, height: 100) - } - .previewLayout(.sizeThatFits) - } -} diff --git a/godtools/App/Share/Views/Navigation/NavigationBar/AppNavigationBar.swift b/godtools/App/Share/Views/Navigation/NavigationBar/AppNavigationBar.swift index 1b9b659702..b90c93643b 100644 --- a/godtools/App/Share/Views/Navigation/NavigationBar/AppNavigationBar.swift +++ b/godtools/App/Share/Views/Navigation/NavigationBar/AppNavigationBar.swift @@ -163,50 +163,29 @@ extension AppNavigationBar { navigationBar.titleTextAttributes = navigationBarAppearance.titleTextAttributes } - if #available(iOS 13, *) { - - let appearance = UINavigationBarAppearance() - - if navigationBarAppearance.isTranslucent { - - appearance.configureWithTransparentBackground() - appearance.backgroundImage = UIImage.createImageWithColor(color: navigationBarAppearance.backgroundColor) - appearance.backgroundColor = .clear - } - else { - - appearance.configureWithOpaqueBackground() - appearance.backgroundImage = nil - appearance.backgroundColor = navigationBarAppearance.backgroundColor - } - - appearance.shadowColor = .clear - - if !navigationBarAppearance.titleTextAttributes.isEmpty { - appearance.titleTextAttributes = navigationBarAppearance.titleTextAttributes - } + let appearance = UINavigationBarAppearance() + + if navigationBarAppearance.isTranslucent { - navigationBar.standardAppearance = appearance - navigationBar.scrollEdgeAppearance = appearance + appearance.configureWithTransparentBackground() + appearance.backgroundImage = UIImage.createImageWithColor(color: navigationBarAppearance.backgroundColor) + appearance.backgroundColor = .clear } else { - if navigationBarAppearance.isTranslucent { - - navigationBar.barTintColor = .clear - - let backgroundImage: UIImage? = navigationBarAppearance.backgroundColor == .clear ? UIImage() : UIImage.createImageWithColor(color: navigationBarAppearance.backgroundColor) - - navigationBar.setBackgroundImage(backgroundImage, for: .default) - } - else { - - navigationBar.barTintColor = navigationBarAppearance.backgroundColor - navigationBar.setBackgroundImage(nil, for: .default) - } - - navigationBar.shadowImage = UIImage() + appearance.configureWithOpaqueBackground() + appearance.backgroundImage = nil + appearance.backgroundColor = navigationBarAppearance.backgroundColor } + + appearance.shadowColor = .clear + + if !navigationBarAppearance.titleTextAttributes.isEmpty { + appearance.titleTextAttributes = navigationBarAppearance.titleTextAttributes + } + + navigationBar.standardAppearance = appearance + navigationBar.scrollEdgeAppearance = appearance } } diff --git a/godtoolsTests/App/Share/Services/Renderer/MobileContentViews/BackgroundImage/MobileContentBackgroundImageRendererTests.swift b/godtoolsTests/App/Share/Services/Renderer/MobileContentViews/BackgroundImage/MobileContentBackgroundImageRendererTests.swift index e10cadb56d..961ff8c2c5 100644 --- a/godtoolsTests/App/Share/Services/Renderer/MobileContentViews/BackgroundImage/MobileContentBackgroundImageRendererTests.swift +++ b/godtoolsTests/App/Share/Services/Renderer/MobileContentViews/BackgroundImage/MobileContentBackgroundImageRendererTests.swift @@ -40,7 +40,7 @@ class MobileContentBackgroundImageRendererTests: XCTestCase { let scale: ImageScaleType = .fit let horizontal: Gravity.Horizontal = .center let vertical: Gravity.Vertical = .center - let languageDirection: LanguageDirection = .leftToRight + let languageDirection: LanguageDirectionDomainModel = .leftToRight let container: CGRect = CGRect(x: 0, y: 0, width: 320, height: 568) @@ -137,7 +137,7 @@ class MobileContentBackgroundImageRendererTests: XCTestCase { let scale: ImageScaleType = .fill let horizontal: Gravity.Horizontal = .center let vertical: Gravity.Vertical = .center - let languageDirection: LanguageDirection = .leftToRight + let languageDirection: LanguageDirectionDomainModel = .leftToRight let container: CGRect = CGRect(x: 0, y: 0, width: 320, height: 568) @@ -234,7 +234,7 @@ class MobileContentBackgroundImageRendererTests: XCTestCase { let scale: ImageScaleType = .fillX let horizontal: Gravity.Horizontal = .center let vertical: Gravity.Vertical = .bottom - let languageDirection: LanguageDirection = .leftToRight + let languageDirection: LanguageDirectionDomainModel = .leftToRight let container: CGRect = CGRect(x: 0, y: 0, width: 414, height: 896)