From d28ac5fbd943c9fbb989035e0e8a0667e7669d50 Mon Sep 17 00:00:00 2001 From: Daniel Green Date: Wed, 30 Oct 2024 10:43:02 +0200 Subject: [PATCH] Feat/iternal app testing (#7) * style: Rename file key * chore: Changed getting value Feat/iternal app testing (#8) * style: Rename file key * chore: Changed getting value * fix: Corrected action type indication chore(common): remove pods from git chore(deps): upgrade REES46 pod to v3.6.58 fix(notifications): clean up deprecated SDK methods fix(sdk): update sdk initialization feat(github): action feat(github): action feat(github): action refactor(github): useless refactor(github): useless refactor(github): useless refactor(github): useless refactor(github): useless feat(github): secrets feat(github): secrets feat(github): secrets refactor(github): useless refactor(github): useless fix(sdk): remove feature and core from targets fix(sdk): disable signing for pods feat(common): gitignore fix(common): exportoptions method fix(sdk): add provisioning profile to ExportOptions.plist refactor(github): useless refactor(github): useless refactor(github): useless refactor(github): useless refactor(github): useless refactor(github): useless refactor(github): useless refactor(github): useless --- .github/workflows/publish.yaml | 23 +- .github/workflows/sync.yaml | 20 + .gitignore | 2 + App/Info.plist | 4 + Core/Presentation/ViewModel/SdkManager.swift | 4 +- ExportOptions.plist | 23 +- .../NotificationWidgetController.swift | 9 - Info.plist | 6 +- Podfile | 5 +- Podfile.lock | 16 +- Pods/Local Podspecs/REES46.podspec.json | 31 - Pods/Manifest.lock | 31 - Pods/Pods.xcodeproj/project.pbxproj | 1614 ----------------- Pods/REES46/LICENSE | 19 - Pods/REES46/README.md | 26 - .../Classes/Button/ProductsButton.swift | 185 -- .../REES46/Classes/Button/PromoCodeView.swift | 183 -- .../REES46/Classes/Button/ReloadButton.swift | 31 - .../REES46/Classes/Button/StoryButton.swift | 132 -- .../VideoDownloadManager.swift | 256 --- .../DownloadManager/VideoDownloadObject.swift | 24 - .../DownloadManager/VideoFileUtils.swift | 44 - .../Classes/Extensions/InitService.swift | 100 - .../NetworkStatusObserver.swift | 25 - .../NetworkStatusObserverUI.swift | 48 - .../NetworkConnectionStatus.swift | 6 - .../NetworkConnectionType.swift | 21 - .../NetworkRadioType.swift | 24 - .../Extensions/NetworkStatus/Navigation.swift | 34 - .../NetworkStatus/NetworkStatus.swift | 126 -- .../NetworkStatus/SdkGlobalHelper.swift | 239 --- .../ManagedViewConfig/ManagedViewConfig.swift | 63 - .../SettingsManageable.swift | 125 -- .../ManagedViewConfig/ViewConfigPlain.swift | 46 - .../ManagedViewConfig/ViewConfigService.swift | 42 - .../PromocodeBanner/PromocodeBanner.swift | 174 -- .../PromocodeBanner/SdkPopupAlertView.swift | 377 ---- .../UIViewController+PromocodeBanner.swift | 149 -- .../Coverable+UIKit.swift | 54 - .../PromocodeImagePlaceholder/Coverable.swift | 59 - .../LoadingPlaceholderView.swift | 211 --- .../UIBezierPath+ImagePlaceholder.swift | 28 - .../RecommendationsStarsView.swift | 728 -------- .../SdkConfiguration/SdkConfiguration.swift | 1333 -------------- .../RawRepresentable+FontInjector.swift | 22 - .../SdkFontInjector/SdkDynamicFont.swift | 15 - .../SdkFontInjector/SdkFontInjector.swift | 135 -- .../SdkFontInjector/UIFont+FontInjector.swift | 64 - .../SdkFontInjector/UISdkWrapLabel.swift | 93 - .../SdkStyle/SdkApperanceViewScheme.swift | 13 - .../SdkConfiguration/SdkStyle/SdkStyle.swift | 180 -- .../SdkStyleAdditional/FontFamily.swift | 96 - .../SdkStyleAdditional/SdkFontInstaller.swift | 34 - .../SdkStyleUIApplication.swift | 160 -- .../UIFontDescriptorUsage.swift | 1 - .../SdkStyleColorScheme.swift | 65 - .../SdkStyleColorSchemeAwareView.swift | 192 -- ...kStyleColorSchemeAwareViewController.swift | 145 -- .../SdkStyleCustomColorScheme.swift | 14 - .../SdkStyleCustomColorSchemeAwareView.swift | 15 - ...CustomColorSchemeAwareViewController.swift | 5 - .../SdkStyleCustomFontSizeAwareView.swift | 5 - ...yleCustomFontSizeAwareViewController.swift | 34 - .../SdkStyleFonts/SdkStyleCustomFonts.swift | 18 - .../SessionQueue/GenericDataTask.swift | 54 - .../SessionQueue/RequestOperation.swift | 132 -- .../SessionQueue/SdkQueryBuilder.swift | 17 - .../SessionDataTaskProtocol.swift | 25 - .../SessionQueue/SessionOperation.swift | 69 - .../SessionQueue/SessionQueue.swift | 99 - .../SessionQueue/URLSessionQueue.swift | 108 -- .../StoriesImageLoader/Core/Disk.swift | 104 -- .../StoriesImageLoader/Core/HashStorage.swift | 30 - .../StoriesImageLoader/Core/Loader.swift | 78 - .../StoriesImageLoader/Core/Operative.swift | 41 - .../StoriesImageLoader/Core/Option.swift | 13 - .../Core/SdkImageReloader.swift | 26 - .../Core/StoriesImageLoader.swift | 97 - .../Core/URLLiteralConvertible.swift | 29 - .../Extension/CGImageSource+ImageLoader.swift | 28 - .../Extension/Data+ImageLoader.swift | 43 - .../Extension/UIColor+Extension.swift | 24 - .../Extension/UIImage+ImageLoader.swift | 84 - .../Extension/UIImageView+ImageLoader.swift | 82 - .../StoryBlockImageCache.swift | 166 -- .../CAPropertyAnimation+Key.swift | 19 - .../CGRect+Center.swift | 7 - .../CGSize+Min.swift | 7 - .../UIBezierPath+Circle.swift | 7 - .../StoriesPreload/SdkActivityIndicator.swift | 146 -- .../StoriesSlideReloadIndicator.swift | 147 -- .../Extensions/UserDefaultsExtension.swift | 63 - .../REES46/Classes/Model/CartItem.swift | 16 - .../REES46/Classes/Model/InitResponse.swift | 57 - .../Classes/Model/ProductsResponse.swift | 114 -- .../Classes/Model/RecommendResponse.swift | 199 -- .../REES46/Classes/Model/SearchResponse.swift | 287 --- .../REES46/REES46/Classes/Model/Stories.swift | 447 ----- .../REES46/Classes/Model/UserSettings.swift | 96 - .../REES46/Classes/Resources/Assets.swift | 1 - .../Resources/Assets.xcassets/Contents.json | 6 - .../angleDownBlack.imageset/Contents.json | 21 - .../angleDownBlack_1x.png | Bin 2968 -> 0 bytes .../angleDownWhite.imageset/Contents.json | 21 - .../angleDownWhite_1x.png | Bin 1494 -> 0 bytes .../angleUpBlack.imageset/Contents.json | 21 - .../angleUpBlack.imageset/angleUpBlack_1x.png | Bin 2941 -> 0 bytes .../angleUpWhite.imageset/Contents.json | 21 - .../angleUpWhite.imageset/angleUpWhite_1x.png | Bin 1689 -> 0 bytes .../iconCopyDark.imageset/Contents.json | 21 - .../iconCopyDark.imageset/iconCopyDark.png | Bin 1162 -> 0 bytes .../iconCopyLight.imageset/Contents.json | 21 - .../iconCopyLight.imageset/iconCopyLight.png | Bin 1234 -> 0 bytes .../iconError.imageset/Contents.json | 21 - .../iconError.imageset/iconError.png | Bin 9326 -> 0 bytes .../iconLikeHeartDark.imageset/Contents.json | 21 - .../iconLikeHeartDark.png | Bin 1034 -> 0 bytes .../Contents.json | 21 - .../iconLikeHeartFillDark.png | Bin 2196 -> 0 bytes .../Contents.json | 21 - .../iconLikeHeartFillLight.png | Bin 2708 -> 0 bytes .../iconLikeHeartLight.imageset/Contents.json | 21 - .../iconLikeHeartLight.png | Bin 2593 -> 0 bytes .../iconReload.imageset/Contents.json | 21 - .../iconReload.imageset/iconReload.png | Bin 10146 -> 0 bytes .../iconSearch.imageset/Contents.json | 22 - .../iconSearch.imageset/search@2x.png | Bin 716 -> 0 bytes .../iconSearch.imageset/search@3x.png | Bin 2554 -> 0 bytes .../iconSearchClose.imageset/Contents.json | 21 - .../iconSearchClose.png | Bin 781 -> 0 bytes .../iconStoryClose.imageset/Contents.json | 22 - .../iconStoryClose_1x.png | Bin 2413 -> 0 bytes .../iconStoryClose_2x.png | Bin 2539 -> 0 bytes .../iconStoryMute.imageset/Contents.json | 21 - .../iconStorySoundMute_1x.png | Bin 3288 -> 0 bytes .../iconStoryVolumeUp.imageset/Contents.json | 21 - .../iconStorySoundeVolumeUp_1x.png | Bin 3775 -> 0 bytes .../iconWebKitClose.imageset/Contents.json | 26 - .../iconWebKitClose_1x.png | Bin 176 -> 0 bytes .../iconWebKitClose_2x.png | Bin 253 -> 0 bytes .../iconWebKitClose_3x.png | Bin 311 -> 0 bytes .../StoriesCollectionViewPreviewCell.xib | 88 - .../REES46/Classes/Resources/StoriesView.xib | 53 - .../Resources/StoryCollectionViewCell.xib | 87 - .../Classes/Shared/ColorExtensions.swift | 32 - .../StoriesCollectionViewPreviewCell.swift | 395 ---- .../Data/ImageLoader.swift | 33 - .../Entities/ImageData.swift | 8 - .../ErrorHandler/ImageLoaderError.swift | 21 - .../UseCases/ImageLoading.swift | 6 - .../Views/SlideView.swift | 9 - .../Views/SlideViewController.swift | 143 -- .../REES46/Classes/Stories/StoriesView.swift | 373 ---- .../StoryCollectionViewCell.swift | 1121 ------------ .../CarouselCollectionView.swift | 243 --- .../CarouselCollectionViewCell.swift | 137 -- .../ProductsCarousel/CarouselConstants.swift | 16 - .../RecommendationsWidgetConstants.swift | 10 - .../RecommendationsWidgetView.swift | 464 ----- .../RecommendationsWidgetViewCell.swift | 272 --- .../StoryViewController.swift | 1160 ------------ .../TBAppearanceConfiguration.swift | 32 - .../TBFontConfiguration.swift | 51 - .../TBTextConfiguration.swift | 36 - .../TexBlockConfiguration.swift | 14 - .../TextBlockView/TextBlockConstants.swift | 20 - .../Stories/TextBlockView/TextBlockView.swift | 54 - .../Stories/WebKit/RView_Extensions.swift | 37 - .../Stories/WebKit/RWebViewController.swift | 286 --- .../RWebViewController_Extensions.swift | 19 - .../Pods-demo-store-ios-Info.plist | 26 - ...s-demo-store-ios-acknowledgements.markdown | 51 - ...Pods-demo-store-ios-acknowledgements.plist | 89 - .../Pods-demo-store-ios-dummy.m | 5 - ...os-frameworks-Debug-input-files.xcfilelist | 3 - ...s-frameworks-Debug-output-files.xcfilelist | 2 - ...-frameworks-Release-input-files.xcfilelist | 3 - ...frameworks-Release-output-files.xcfilelist | 2 - .../Pods-demo-store-ios-frameworks.sh | 188 -- .../Pods-demo-store-ios-umbrella.h | 16 - .../Pods-demo-store-ios.debug.xcconfig | 15 - .../Pods-demo-store-ios.modulemap | 6 - .../Pods-demo-store-ios.release.xcconfig | 15 - .../REES46/REES46-Info.plist | 26 - .../REES46/REES46-dummy.m | 5 - .../REES46/REES46-prefix.pch | 12 - .../REES46/REES46-umbrella.h | 16 - .../REES46/REES46.debug.xcconfig | 14 - .../REES46/REES46.modulemap | 6 - .../REES46/REES46.release.xcconfig | 14 - demo-store-ios.xcodeproj/project.pbxproj | 423 ----- .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcschemes/xcschememanagement.plist | 52 - .../contents.xcworkspacedata | 10 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - version.properties | 4 +- 197 files changed, 76 insertions(+), 17529 deletions(-) create mode 100644 .github/workflows/sync.yaml delete mode 100644 Pods/Local Podspecs/REES46.podspec.json delete mode 100644 Pods/Manifest.lock delete mode 100644 Pods/Pods.xcodeproj/project.pbxproj delete mode 100644 Pods/REES46/LICENSE delete mode 100644 Pods/REES46/README.md delete mode 100644 Pods/REES46/REES46/Classes/Button/ProductsButton.swift delete mode 100644 Pods/REES46/REES46/Classes/Button/PromoCodeView.swift delete mode 100644 Pods/REES46/REES46/Classes/Button/ReloadButton.swift delete mode 100644 Pods/REES46/REES46/Classes/Button/StoryButton.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/DownloadManager/VideoDownloadManager.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/DownloadManager/VideoDownloadObject.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/DownloadManager/VideoFileUtils.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/InitService.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/NetworkStatus/ConnectionObservers/NetworkStatusObserver.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/NetworkStatus/ConnectionObservers/NetworkStatusObserverUI.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/NetworkStatus/ConnectionProperties/NetworkConnectionStatus.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/NetworkStatus/ConnectionProperties/NetworkConnectionType.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/NetworkStatus/ConnectionProperties/NetworkRadioType.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/NetworkStatus/Navigation.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/NetworkStatus/NetworkStatus.swift delete mode 100755 Pods/REES46/REES46/Classes/Extensions/NetworkStatus/SdkGlobalHelper.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/ManagedViewConfig/ManagedViewConfig.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/ManagedViewConfig/SettingsManageable.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/ManagedViewConfig/ViewConfigPlain.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/ManagedViewConfig/ViewConfigService.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeBanner/PromocodeBanner.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeBanner/SdkPopupAlertView.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeBanner/UIViewController+PromocodeBanner.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeImagePlaceholder/Coverable+UIKit.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeImagePlaceholder/Coverable.swift delete mode 100755 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeImagePlaceholder/LoadingPlaceholderView.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeImagePlaceholder/UIBezierPath+ImagePlaceholder.swift delete mode 100755 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/RecommendationsStars/RecommendationsStarsView.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkConfiguration.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/RawRepresentable+FontInjector.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/SdkDynamicFont.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/SdkFontInjector.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/UIFont+FontInjector.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/UISdkWrapLabel.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkApperanceViewScheme.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyle.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleAdditional/FontFamily.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleAdditional/SdkFontInstaller.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleAdditional/SdkStyleUIApplication.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleAdditional/UIFontDescriptorUsage.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleColorScheme.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleColorSchemeAwareView.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleColorSchemeAwareViewController.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleCustomColorScheme.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleCustomColorSchemeAwareView.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleCustomColorSchemeAwareViewController.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleFonts/SdkStyleCustomFontSizeAwareView.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleFonts/SdkStyleCustomFontSizeAwareViewController.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleFonts/SdkStyleCustomFonts.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SessionQueue/GenericDataTask.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SessionQueue/RequestOperation.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SessionQueue/SdkQueryBuilder.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SessionQueue/SessionDataTaskProtocol.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SessionQueue/SessionOperation.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SessionQueue/SessionQueue.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/SessionQueue/URLSessionQueue.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/Disk.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/HashStorage.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/Loader.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/Operative.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/Option.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/SdkImageReloader.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/StoriesImageLoader.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/URLLiteralConvertible.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Extension/CGImageSource+ImageLoader.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Extension/Data+ImageLoader.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Extension/UIColor+Extension.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Extension/UIImage+ImageLoader.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Extension/UIImageView+ImageLoader.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/StoryBlockImageCache.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/StoriesPreload/PreloadIndicatorProperties/CAPropertyAnimation+Key.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/StoriesPreload/PreloadIndicatorProperties/CGRect+Center.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/StoriesPreload/PreloadIndicatorProperties/CGSize+Min.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/StoriesPreload/PreloadIndicatorProperties/UIBezierPath+Circle.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/StoriesPreload/SdkActivityIndicator.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/StoriesPreload/StoriesSlideReloadIndicator.swift delete mode 100644 Pods/REES46/REES46/Classes/Extensions/UserDefaultsExtension.swift delete mode 100644 Pods/REES46/REES46/Classes/Model/CartItem.swift delete mode 100644 Pods/REES46/REES46/Classes/Model/InitResponse.swift delete mode 100644 Pods/REES46/REES46/Classes/Model/ProductsResponse.swift delete mode 100644 Pods/REES46/REES46/Classes/Model/RecommendResponse.swift delete mode 100644 Pods/REES46/REES46/Classes/Model/SearchResponse.swift delete mode 100644 Pods/REES46/REES46/Classes/Model/Stories.swift delete mode 100644 Pods/REES46/REES46/Classes/Model/UserSettings.swift delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.swift delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/Contents.json delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleDownBlack.imageset/Contents.json delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleDownBlack.imageset/angleDownBlack_1x.png delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleDownWhite.imageset/Contents.json delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleDownWhite.imageset/angleDownWhite_1x.png delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleUpBlack.imageset/Contents.json delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleUpBlack.imageset/angleUpBlack_1x.png delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleUpWhite.imageset/Contents.json delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleUpWhite.imageset/angleUpWhite_1x.png delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconCopyDark.imageset/Contents.json delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconCopyDark.imageset/iconCopyDark.png delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconCopyLight.imageset/Contents.json delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconCopyLight.imageset/iconCopyLight.png delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconError.imageset/Contents.json delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconError.imageset/iconError.png delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartDark.imageset/Contents.json delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartDark.imageset/iconLikeHeartDark.png delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartFillDark.imageset/Contents.json delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartFillDark.imageset/iconLikeHeartFillDark.png delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartFillLight.imageset/Contents.json delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartFillLight.imageset/iconLikeHeartFillLight.png delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartLight.imageset/Contents.json delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartLight.imageset/iconLikeHeartLight.png delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconReload.imageset/Contents.json delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconReload.imageset/iconReload.png delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconSearch.imageset/Contents.json delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconSearch.imageset/search@2x.png delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconSearch.imageset/search@3x.png delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconSearchClose.imageset/Contents.json delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconSearchClose.imageset/iconSearchClose.png delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconStoryClose.imageset/Contents.json delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconStoryClose.imageset/iconStoryClose_1x.png delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconStoryClose.imageset/iconStoryClose_2x.png delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconStoryMute.imageset/Contents.json delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconStoryMute.imageset/iconStorySoundMute_1x.png delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconStoryVolumeUp.imageset/Contents.json delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconStoryVolumeUp.imageset/iconStorySoundeVolumeUp_1x.png delete mode 100755 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconWebKitClose.imageset/Contents.json delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconWebKitClose.imageset/iconWebKitClose_1x.png delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconWebKitClose.imageset/iconWebKitClose_2x.png delete mode 100644 Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconWebKitClose.imageset/iconWebKitClose_3x.png delete mode 100644 Pods/REES46/REES46/Classes/Resources/StoriesCollectionViewPreviewCell.xib delete mode 100644 Pods/REES46/REES46/Classes/Resources/StoriesView.xib delete mode 100644 Pods/REES46/REES46/Classes/Resources/StoryCollectionViewCell.xib delete mode 100644 Pods/REES46/REES46/Classes/Shared/ColorExtensions.swift delete mode 100644 Pods/REES46/REES46/Classes/Stories/CollectionCell/StoriesCollectionViewPreviewCell.swift delete mode 100644 Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/Data/ImageLoader.swift delete mode 100644 Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/Entities/ImageData.swift delete mode 100644 Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/ErrorHandler/ImageLoaderError.swift delete mode 100644 Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/UseCases/ImageLoading.swift delete mode 100644 Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/Views/SlideView.swift delete mode 100644 Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/Views/SlideViewController.swift delete mode 100644 Pods/REES46/REES46/Classes/Stories/StoriesView.swift delete mode 100644 Pods/REES46/REES46/Classes/Stories/StoryViewController/CollectionViewCell/StoryCollectionViewCell.swift delete mode 100755 Pods/REES46/REES46/Classes/Stories/StoryViewController/ProductsCarousel/CarouselCollectionView.swift delete mode 100755 Pods/REES46/REES46/Classes/Stories/StoryViewController/ProductsCarousel/CarouselCollectionViewCell.swift delete mode 100755 Pods/REES46/REES46/Classes/Stories/StoryViewController/ProductsCarousel/CarouselConstants.swift delete mode 100755 Pods/REES46/REES46/Classes/Stories/StoryViewController/RecommendationsWidget/RecommendationsWidgetConstants.swift delete mode 100755 Pods/REES46/REES46/Classes/Stories/StoryViewController/RecommendationsWidget/RecommendationsWidgetView.swift delete mode 100755 Pods/REES46/REES46/Classes/Stories/StoryViewController/RecommendationsWidget/RecommendationsWidgetViewCell.swift delete mode 100644 Pods/REES46/REES46/Classes/Stories/StoryViewController/StoryViewController.swift delete mode 100644 Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockConfiguration/TBSubConfigurations/TBAppearanceConfiguration.swift delete mode 100644 Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockConfiguration/TBSubConfigurations/TBFontConfiguration.swift delete mode 100644 Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockConfiguration/TBSubConfigurations/TBTextConfiguration.swift delete mode 100644 Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockConfiguration/TexBlockConfiguration.swift delete mode 100644 Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockConstants.swift delete mode 100644 Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockView.swift delete mode 100644 Pods/REES46/REES46/Classes/Stories/WebKit/RView_Extensions.swift delete mode 100644 Pods/REES46/REES46/Classes/Stories/WebKit/RWebViewController.swift delete mode 100644 Pods/REES46/REES46/Classes/Stories/WebKit/RWebViewController_Extensions.swift delete mode 100644 Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-Info.plist delete mode 100644 Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-acknowledgements.markdown delete mode 100644 Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-acknowledgements.plist delete mode 100644 Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-dummy.m delete mode 100644 Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-frameworks-Debug-input-files.xcfilelist delete mode 100644 Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-frameworks-Debug-output-files.xcfilelist delete mode 100644 Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-frameworks-Release-input-files.xcfilelist delete mode 100644 Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-frameworks-Release-output-files.xcfilelist delete mode 100755 Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-frameworks.sh delete mode 100644 Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-umbrella.h delete mode 100644 Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios.debug.xcconfig delete mode 100644 Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios.modulemap delete mode 100644 Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios.release.xcconfig delete mode 100644 Pods/Target Support Files/REES46/REES46-Info.plist delete mode 100644 Pods/Target Support Files/REES46/REES46-dummy.m delete mode 100644 Pods/Target Support Files/REES46/REES46-prefix.pch delete mode 100644 Pods/Target Support Files/REES46/REES46-umbrella.h delete mode 100644 Pods/Target Support Files/REES46/REES46.debug.xcconfig delete mode 100644 Pods/Target Support Files/REES46/REES46.modulemap delete mode 100644 Pods/Target Support Files/REES46/REES46.release.xcconfig delete mode 100644 demo-store-ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 demo-store-ios.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 demo-store-ios.xcodeproj/xcuserdata/borystrubitsun.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 demo-store-ios.xcworkspace/contents.xcworkspacedata delete mode 100644 demo-store-ios.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 2782860..47e50d8 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -1,23 +1,28 @@ name: Publish to TestFlight and Bump Version on: - push: + pull_request: + types: + - closed branches: - master jobs: publish_and_version_bump: - uses: rees46/workflow/.github/workflows/reusable-ios-testflight-publish.yml@master + if: github.event.pull_request.merged == true + uses: rees46/workflow/.github/workflows/reusable-ios-testflight-publish.yaml@master with: - app_identifier: "com.rees46.demo-shop" - ipa_file: "build/demo-store-ios.ipa" - PROPERTIES_FILE: "version.properties" - xcworkspace: "demo-store-ios.xcworkspace" scheme: "demo-store-ios" - export_options_plist: "ExportOptions.plist" + xcworkspace: "demo-store-ios.xcworkspace" + codeSignIdentity: "Apple Distribution: M.Kechinov's web-development studio, LLC (MYA32EHWN4)" + developmentTeam: "MYA32EHWN4" + provisioningProfileSpecifier: "demo-ios" secrets: + GITHUB_APP_ID: ${{ vars.PUBLIVERSIONER_ID }} + GITHUB_APP_PRIVATE_KEY: ${{ secrets.PUBLIVERSIONER_SECRET }} APP_STORE_CONNECT_API_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ID }} APP_STORE_CONNECT_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_ISSUER_ID }} APP_STORE_CONNECT_API_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY_AS_BASE64_STRING }} - GITHUB_APP_ID: ${{ secrets.PUBLIVERSIONER_ID }} - GITHUB_APP_PRIVATE_KEY: ${{ secrets.PUBLIVERSIONER_SECRET }} + IOS_CERTIFICATE_P12: ${{ secrets.IOS_CERTIFICATE_P12 }} + IOS_CERTIFICATE_PASSWORD: ${{ secrets.IOS_CERTIFICATE_PASSWORD }} + IOS_PROVISIONING_PROFILE: ${{ secrets.IOS_PROVISIONING_PROFILE }} diff --git a/.github/workflows/sync.yaml b/.github/workflows/sync.yaml new file mode 100644 index 0000000..448d9ab --- /dev/null +++ b/.github/workflows/sync.yaml @@ -0,0 +1,20 @@ +name: Sync repositories + +on: + pull_request: + workflow_run: + workflows: + - "Bump version, create release and publish" + types: + - completed + workflow_dispatch: + +jobs: + run: + if: github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch' + uses: rees46/workflow/.github/workflows/reusable-ios-synchronization.yaml@master + permissions: write-all + secrets: + token: ${{ secrets.JADE_SMITH_BOT_TOKEN }} + with: + targetRepository: personaclick/ios-sdk diff --git a/.gitignore b/.gitignore index bd0a823..67713b3 100644 --- a/.gitignore +++ b/.gitignore @@ -140,3 +140,5 @@ Pods/ # End of https://www.gitignore.io/api/xcode,swift,macos,objective-c /fastlane/fastlane/Appfile /Gemfile.lock + +.local/ diff --git a/App/Info.plist b/App/Info.plist index bbc9ed8..a6542b3 100644 --- a/App/Info.plist +++ b/App/Info.plist @@ -2,6 +2,10 @@ + CFBundleVersion + 3 + CFBundleShortVersionString + 1.0.0 NSAppTransportSecurity NSAllowsArbitraryLoads diff --git a/Core/Presentation/ViewModel/SdkManager.swift b/Core/Presentation/ViewModel/SdkManager.swift index 1726991..d8e706f 100644 --- a/Core/Presentation/ViewModel/SdkManager.swift +++ b/Core/Presentation/ViewModel/SdkManager.swift @@ -13,7 +13,9 @@ class SDKManager: SDKManaging { apiDomain: AppConfigVariables.apiDomain, stream: AppConfigVariables.sdkStream, enableLogs: true, - autoSendPushToken: true + autoSendPushToken: true, + parentViewController: UIApplication.shared.windows.first?.rootViewController, + needReInitialization: true ) { error in if let error = error { print("SDK Initialization failed: \(error.localizedDescription)") diff --git a/ExportOptions.plist b/ExportOptions.plist index c35c443..cd90a80 100644 --- a/ExportOptions.plist +++ b/ExportOptions.plist @@ -1,12 +1,17 @@ - + - - method - app-store - uploadSymbols - - uploadBitcode - - + + method + app-store + uploadSymbols + + uploadBitcode + + provisioningProfiles + + com.rees46.demo-shop + demo-ios + + diff --git a/Feature/Home/Presentation/View/InAppNotification/Controller/NotificationWidgetController.swift b/Feature/Home/Presentation/View/InAppNotification/Controller/NotificationWidgetController.swift index 1680c17..d6a63ad 100644 --- a/Feature/Home/Presentation/View/InAppNotification/Controller/NotificationWidgetController.swift +++ b/Feature/Home/Presentation/View/InAppNotification/Controller/NotificationWidgetController.swift @@ -18,9 +18,6 @@ class NotificationWidgetController: ObservableObject { negativeButtonText: NSLocalizedString("notification_decline_button", comment: ""), onPositiveButtonClick: { print("Alert Accepted") - }, - onNegativeButtonClick: { - print("Alert Declined") } ) } @@ -34,9 +31,6 @@ class NotificationWidgetController: ObservableObject { negativeButtonText: NSLocalizedString("notification_decline_button", comment: ""), onPositiveButtonClick: { print("Bottom Sheet Accepted") - }, - onNegativeButtonClick: { - print("Bottom Sheet Declined") } ) } @@ -50,9 +44,6 @@ class NotificationWidgetController: ObservableObject { negativeButtonText: NSLocalizedString("notification_decline_button", comment: ""), onPositiveButtonClick: { print("Full Screen Alert Accepted") - }, - onNegativeButtonClick: { - print("Full Screen Alert Declined") } ) } diff --git a/Info.plist b/Info.plist index 935565a..909bde2 100644 --- a/Info.plist +++ b/Info.plist @@ -2,7 +2,11 @@ - + + CFBundleVersion + 3 + CFBundleShortVersionString + 1.0.0 NSAppTransportSecurity diff --git a/Podfile b/Podfile index 0290927..c102dff 100644 --- a/Podfile +++ b/Podfile @@ -3,7 +3,7 @@ platform :ios, '13.0' target 'demo-store-ios' do use_frameworks! - pod 'REES46', :git => 'https://github.com/rees46/ios-sdk.git', :branch => 'master', :tag => '3.6.40' + pod 'REES46', :git => 'https://github.com/rees46/ios-sdk.git', :branch => 'master', :tag => '3.6.58' pod "Resolver" end @@ -11,6 +11,9 @@ end post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| + config.build_settings['EXPANDED_CODE_SIGN_IDENTITY'] = "" + config.build_settings['CODE_SIGNING_REQUIRED'] = "NO" + config.build_settings['CODE_SIGNING_ALLOWED'] = "NO" config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0' xcconfig_path = config.base_configuration_reference.real_path xcconfig = File.read(xcconfig_path) diff --git a/Podfile.lock b/Podfile.lock index 2275573..a658f23 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,9 +1,9 @@ PODS: - - REES46 (3.6.40) + - REES46 (3.6.58) - Resolver (1.5.1) DEPENDENCIES: - - REES46 (from `https://github.com/rees46/ios-sdk.git`, branch `master`, tag `3.6.40`) + - REES46 (from `https://github.com/rees46/ios-sdk.git`, branch `master`, tag `3.6.58`) - Resolver SPEC REPOS: @@ -14,18 +14,18 @@ EXTERNAL SOURCES: REES46: :branch: master :git: https://github.com/rees46/ios-sdk.git - :tag: 3.6.40 + :tag: 3.6.58 CHECKOUT OPTIONS: REES46: - :commit: c4871cef4787f191d6afbdce6daedf43f1a65b8a + :commit: 24b33c87e73dec2eb8e82b641fc2a7712bccb5d7 :git: https://github.com/rees46/ios-sdk.git - :tag: 3.6.40 + :tag: 3.6.58 SPEC CHECKSUMS: - REES46: a10ed6d2091d2a44572ec7df65bec632d0e8fa3e + REES46: aaf11c8ef6382ca6eb649d0919875d100151e5bc Resolver: 0e2ce51257e9366c54afe1b9e9be25059e9b9300 -PODFILE CHECKSUM: c6a54df364be4afbc94df09d59602e9b9f5e1c33 +PODFILE CHECKSUM: 2e8983ec0dff4d9166fb49e27b81e36cbd77b11e -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/Pods/Local Podspecs/REES46.podspec.json b/Pods/Local Podspecs/REES46.podspec.json deleted file mode 100644 index 1b19861..0000000 --- a/Pods/Local Podspecs/REES46.podspec.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "REES46", - "version": "3.6.40", - "summary": "REES46 SDK for iOS platform - the wide toolset for eCommerce apps. This SDK can be used to integrate in your own app for iOS in few steps.", - "readme": "https://reference.api.rees46.com/#{spec.version.to_s}/README.md", - "description": "REES46 SDK for iOS platform - the wide toolset for eCommerce apps:\n\n- Personalization engine.\n- Product recommendations.\n- Personalized products search engine.\n- Bulk emails, push-notifications, SMS and Telegram messages.\n- Transactional emails, push-notifications, Telegram and SMS.\n- Drip campaigns (email, push, Telegram, SMS).\n- Customizable on-site popups.\n- CRM, CDP and customer segments.\n- Net Promoter Score tool for any goal.\n- Stories.\n- In-app push.\n- Loyalty program.\n\nYou can integrate all REES46 tools into your iOS app.", - "homepage": "https://reference.api.rees46.com/", - "social_media_url": "https://rees46.com/", - "license": { - "type": "MIT", - "file": "LICENSE" - }, - "authors": { - "REES46": "«desk@rees46.com»" - }, - "screenshots": [ - "https://rees46.com/static-images/cocoapods/r46_ios_sdk_cocoapods_cover.png" - ], - "source": { - "git": "https://github.com/rees46/ios-sdk.git", - "branch": "master", - "tag": "3.6.40" - }, - "platforms": { - "ios": "12.0" - }, - "source_files": "REES46/Classes/**/*.{swift}", - "resources": "REES46/Classes/Resources/*.{xcassets,xib,storyboard,json,png}", - "swift_versions": "5", - "swift_version": "5" -} diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock deleted file mode 100644 index 2275573..0000000 --- a/Pods/Manifest.lock +++ /dev/null @@ -1,31 +0,0 @@ -PODS: - - REES46 (3.6.40) - - Resolver (1.5.1) - -DEPENDENCIES: - - REES46 (from `https://github.com/rees46/ios-sdk.git`, branch `master`, tag `3.6.40`) - - Resolver - -SPEC REPOS: - trunk: - - Resolver - -EXTERNAL SOURCES: - REES46: - :branch: master - :git: https://github.com/rees46/ios-sdk.git - :tag: 3.6.40 - -CHECKOUT OPTIONS: - REES46: - :commit: c4871cef4787f191d6afbdce6daedf43f1a65b8a - :git: https://github.com/rees46/ios-sdk.git - :tag: 3.6.40 - -SPEC CHECKSUMS: - REES46: a10ed6d2091d2a44572ec7df65bec632d0e8fa3e - Resolver: 0e2ce51257e9366c54afe1b9e9be25059e9b9300 - -PODFILE CHECKSUM: c6a54df364be4afbc94df09d59602e9b9f5e1c33 - -COCOAPODS: 1.15.2 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj deleted file mode 100644 index fa9d66a..0000000 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1614 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 56; - objects = { - -/* Begin PBXBuildFile section */ - 02E2478D92FE7A7C24BB90D99376601D /* FullScreenAlertViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBEC2BF245477C2378B362C15D722114 /* FullScreenAlertViewController.swift */; }; - 03057BAAF29E2B92EC73DFFFBEA56F21 /* UIColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = E03FF3A474BEF204E9B058F9BEC8AF0F /* UIColor+Extension.swift */; }; - 035085202F1290748B6901610A1C3803 /* SearchFilterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3F8FCA196376DA17FEA2E2BDBF046A9 /* SearchFilterViewController.swift */; }; - 046F56FBFB3E62D9BDFE2F3F600E0240 /* NotificationServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A97C46A25BA871E2A74785BD0EE845C /* NotificationServiceProtocol.swift */; }; - 059A4CB37349C45E7B83274EEF19CB2E /* URLLiteralConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59EE8BEB552E8E97FF401C44F4A363BC /* URLLiteralConvertible.swift */; }; - 06B56393C01CFF9A08D4900408340123 /* UIFontDescriptorUsage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BC0D87A8F0E96D172C372234E6C4103 /* UIFontDescriptorUsage.swift */; }; - 06DD40F3E87ACC1416FB5C9E9F198A54 /* StoryButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD59689C6235B3DA48E60F475DB58695 /* StoryButton.swift */; }; - 0A74D9D730CBB0EB8006A37171A3C23C /* TBTextConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BC55C3F000602219892FCA879D5407C /* TBTextConfiguration.swift */; }; - 0BFA700DA95C293E073E033E581F6B39 /* SearchWidgetCategoriesButtonType.enum.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8451CA2C53715D5B0DD5CE41E05F7FD /* SearchWidgetCategoriesButtonType.enum.swift */; }; - 0C22917220F67DC97118533040ED80F8 /* RequestOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FFC635ADA8A7ACC92EC30B37E8F64E1 /* RequestOperation.swift */; }; - 0D521BD2D6F90D63ED1FA6B1A06F6809 /* TextBlockView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E17436330BCEE63A539000149B3FC905 /* TextBlockView.swift */; }; - 10D55E0061EA79EB25B75054D35CE7E0 /* VideoDownloadManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A70B50D35B2B9B3A31F1F409DE457FD9 /* VideoDownloadManager.swift */; }; - 116AE95379F84575815C29772F7C4767 /* StoryCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7E130DB6AB3E0694F39029ED32A40B24 /* StoryCollectionViewCell.xib */; }; - 13272AF91620D621EA26E24549070797 /* SearchResultsView.extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C08FB967998343257D5EA821A037AB49 /* SearchResultsView.extension.swift */; }; - 14BA05544BB424EE741A3BA3AAF6E814 /* SearchWidgetViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07C57013358099BBB1F2F2710948C4D3 /* SearchWidgetViewController.swift */; }; - 151503D01817AC6C5C3C75E094A73414 /* UIViewController+PromocodeBanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9C1FFB53C490A0851C7F98661EC97B5 /* UIViewController+PromocodeBanner.swift */; }; - 1849D7AC9D5FA57BC42FE3A1E5A1E719 /* Coverable+UIKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = F44B853C14709871B4A37AA3B6FC6D79 /* Coverable+UIKit.swift */; }; - 18C88A9A18911E9E843E65C5797A8B49 /* SearchFilterActionButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5466A9CB4DC4C1EB3C36A7A8A9319C6C /* SearchFilterActionButtons.swift */; }; - 198D6923F00991CADBE7B959EF32564F /* InitService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DEE2348E19A18A74DEB6B8F13EB4298 /* InitService.swift */; }; - 19EE246BAB5F55010A04C34800BC2216 /* CarouselCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 788C2A9D4DFDD52FF34AD205D98B9CA0 /* CarouselCollectionView.swift */; }; - 1AEC8D195103941D56BEE4026601AA6F /* SearchResultsButton.protocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1036BCD8E22451E7247A50804CCF3424 /* SearchResultsButton.protocol.swift */; }; - 1DC10CB8CA475B10F29482EEF0166C91 /* Disk.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39246EA56A130C44AB2EC6BEFFB2E8DA /* Disk.swift */; }; - 1EE6879433A4974B423294E242AE1F82 /* Data+ImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21FDED85555E1BC51F5C6860D283BF8B /* Data+ImageLoader.swift */; }; - 21C5236B0A2082EEC1DA024B194EDAF0 /* Pods-demo-store-ios-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7116768E9395945F655A57DAECC1A933 /* Pods-demo-store-ios-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 22773E0B9D04DBE57F04ACC84A275C6C /* UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2260CD7597693BE70413E8ADEE57CEEC /* UIView.swift */; }; - 23186245A9B4413F09D8E39E04604654 /* Operative.swift in Sources */ = {isa = PBXBuildFile; fileRef = 731049353C889C0D61BD8B8E0707FA62 /* Operative.swift */; }; - 2448A33CBB4D2BB29E3BA45F3785C1DF /* SearchResultsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB19587C4995F001680939FB62D07656 /* SearchResultsView.swift */; }; - 25AE14E5BC9CEADF12875C9A04DA7137 /* UIImageView+ImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 182C88327201223192007A1C559D5461 /* UIImageView+ImageLoader.swift */; }; - 2698CAF1CB3C90F15DEE54EF55C9E953 /* SearchResultHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B4492E85CA71A29BD7AC704F4B8864F /* SearchResultHeaderView.swift */; }; - 2840E0DD7FD1D3C01A5C04BC4801FA19 /* TexBlockConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8208744A96B3694133B19170DE843A0E /* TexBlockConfiguration.swift */; }; - 29127AE32397D281363E86BD02A1D1B2 /* SdkErrorDescription.protocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CB8AF5B112465220BE4170953B5822D /* SdkErrorDescription.protocol.swift */; }; - 2B0E90772BF973739BB0A975F4A25DAD /* SearchFilterPickerViewDelegate.protocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 815A307ED7AAEE9D77609BBFE54483A8 /* SearchFilterPickerViewDelegate.protocol.swift */; }; - 2B8F5E4C61F8449068912DC64D160E64 /* Pods-demo-store-ios-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F0D4FB2CBD68E89DAE39DADAE996D715 /* Pods-demo-store-ios-dummy.m */; }; - 2BDEB05457ADAD73B54F8A1CFF970C24 /* SimplePersonalizationSDK.extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 772AA1BEC14898CDEB7594D412C8AF7F /* SimplePersonalizationSDK.extension.swift */; }; - 2C95261FC306B978B2F167F16E8BD3DB /* ImageData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A29417D8A15996608EB6B0B4A3080DE /* ImageData.swift */; }; - 2E59E0D53B32793C44CCC200197FEF0C /* URLSession.extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86FDDF0FD61FCC829E6B01B01303A55C /* URLSession.extension.swift */; }; - 3033C2F2BC567F6C2A504819E8ADCE13 /* ProfileDataProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14C9DAA0ABDC2A64DB8D7E649A52AFC8 /* ProfileDataProtocol.swift */; }; - 312E873813F91729D9D8E27C7486371D /* PersonalizationSDK.protocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803169BEF6F584FC3E5F440B19888634 /* PersonalizationSDK.protocol.swift */; }; - 3162F55D66DA1BEFFEC76FCF7F0C1F77 /* NetworkStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09FE3444E3F15428CC14BBBA656BFDF8 /* NetworkStatus.swift */; }; - 318C34BE2626A200186F81CB02C76424 /* SlideView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69FA3AA42C7B1BF521C2B11388260985 /* SlideView.swift */; }; - 32393A24A0869CF7CC52E3D71519247C /* VideoFileUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1A478978AA75701BBF375107A482A2 /* VideoFileUtils.swift */; }; - 325C748D32E081C380C64143ADE312D7 /* HashStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 759FEF5B1682A4FB5138EFAD2BE2E20A /* HashStorage.swift */; }; - 32E8BF53CD4F2CF660AA1EDCFEC9B996 /* SearchWidgetExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 575C75F9140BC5BAA3251E9F23B7F9AB /* SearchWidgetExtension.swift */; }; - 3318889A52FB9A938685BC28E330949A /* ProfileDataConstants.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D757151E1F9C0A4B5365504783B3FD1 /* ProfileDataConstants.struct.swift */; }; - 35B3AAAEB14AF69DC256E347FA9A37B1 /* ProfileDataImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 158AE481E2227C1FCED02FF237A8C0DF /* ProfileDataImpl.swift */; }; - 36BFF56DAE89D4B705A72F0B7B3E2C45 /* SearchWidgetObjectificationType.enum.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8BAD68CE4BF4CB414E2DF7033C5D5AD /* SearchWidgetObjectificationType.enum.swift */; }; - 3834506A52ADEA62B0A77FC5967E6CB8 /* ViewConfigService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6BE31F8174352C8E7C7B2884DD4325A /* ViewConfigService.swift */; }; - 3961DF7C4269161ED6BD0023F76BCA4F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */; }; - 3DA3089316E791CC241C3B0F19CD9DD3 /* SearchWidgetCategoriesButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E6D6AAA1AB3C87C91C79CC66554E951 /* SearchWidgetCategoriesButton.swift */; }; - 402D9D68DDA59F7E89A8A9118C05E55E /* Navigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A11021FE08AD4B7374835DDED2FE6C06 /* Navigation.swift */; }; - 41B4183646E6ECA21BDCCBFEE5953B1A /* NotificationWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 486911824EFDB46BFC5E5301A1AF272E /* NotificationWidget.swift */; }; - 41D017503655B4E150EBB695A3D9CCCA /* SearchFilterViewController.extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35BEC6E27F2D36BFF0A1E0FAB21191BB /* SearchFilterViewController.extension.swift */; }; - 434F90048BE40B680133F0879FDBD5AF /* SdkActivityIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 016F0F9EC817BA0D115D86AB981BB2EC /* SdkActivityIndicator.swift */; }; - 447B09B37F3125C148F2F87D8E3FF3FE /* PushTokenHandlerImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53B2E3271227E3B19B4164E14C1E4AF4 /* PushTokenHandlerImpl.swift */; }; - 49FFC142348EF1C1E57E93DD6E8014B0 /* CheckBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EB9610EDC52BD59AB0EC6AC8CD88F63 /* CheckBox.swift */; }; - 4EB471AA58678D18E586DCDCA46704B5 /* NetworkConnectionStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE66A79DEACB9755E82DA9607E71923 /* NetworkConnectionStatus.swift */; }; - 4F8482D5E03619D0BF470585CC65A21E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */; }; - 516B12AA550BE795B6D891ACBBA2272F /* CGImageSource+ImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D62509BDD7AEA8C544B7567E89186C4 /* CGImageSource+ImageLoader.swift */; }; - 517ACA9E75E8140D2FE86BEE09874C7D /* SearchWidgetObjectification.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA7D544EC7540DD9CEB9E5EDFCAF04AC /* SearchWidgetObjectification.swift */; }; - 51CD9BCEB709FD2B580AEF97BF85C796 /* Assets.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBAEDF4A9847EFCD3EE435F22F8BE274 /* Assets.swift */; }; - 5352192BB2E12C809436BAB92A33B08C /* Resolver-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EEE335E6EDE88669E0B523688C789250 /* Resolver-dummy.m */; }; - 54298611DD3103E6BD9F8545C3EFBECA /* SdkStyleColorSchemeAwareView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A9987EB80F7154F339874BB9E264B48 /* SdkStyleColorSchemeAwareView.swift */; }; - 5496D106C1FB445251E84BF0EC539F9F /* DialogImageVeiw.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD00B154A42566ED1485D078DDA04163 /* DialogImageVeiw.swift */; }; - 5707D0D8B3B0956C5830DA994334AC28 /* UIBezierPath+Circle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E17C83DC8BBDCACD742D84DD18B9F75 /* UIBezierPath+Circle.swift */; }; - 57ACD227CF537AF191DF5B229A2FDAEF /* SearchResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 432E543F30D5AF9EA8FA41E1EC4C9605 /* SearchResponse.swift */; }; - 592837C73ACD0C223615BB72B19FF713 /* SimplePersonalizationSDK.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7AC8234E6FFC3343534A652C266FED1 /* SimplePersonalizationSDK.swift */; }; - 59B89B2A803A67EE3F0C103EC5458A5E /* UIImageView.extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C98AFC2C3693C36257ED08C769B06AE8 /* UIImageView.extension.swift */; }; - 5B25BC49BD3496F2621827DAAAA30425 /* SdkStyleCustomColorSchemeAwareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B1B861F7911E97B3C8EDA23EF05030E /* SdkStyleCustomColorSchemeAwareViewController.swift */; }; - 5E380191AE481C787D95E61B30263B50 /* SearchWidgetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B2930617367EF2EAA39103346CF00FF /* SearchWidgetView.swift */; }; - 5EE910225DDB14F9798D972879CB28E6 /* CarouselConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45DBCDD6992581C1D45B8CCADB9A06A3 /* CarouselConstants.swift */; }; - 60014773B4BF1AA22061962819BECB9F /* UISdkWrapLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5458AE6F88BE43C72AE9C0384984CD6E /* UISdkWrapLabel.swift */; }; - 60AAB9054E902DE42B702ACA4D1B735C /* UIFont+FontInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2355111CF381DA8CAC6682774E723B75 /* UIFont+FontInjector.swift */; }; - 614E757CF52890C2B43E92A8F52A7D04 /* ManagedViewConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39D0501CB5A2B49D76CA2C8C1D31D170 /* ManagedViewConfig.swift */; }; - 650E1D17541DEE6BF5660CAE44F49B14 /* Stories.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B415F6966120590B93FA376FE5C36A8 /* Stories.swift */; }; - 657E3A8F2E31225BF6738743BEB5040A /* SdkStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE808C627CFADE4AB1538577394780FB /* SdkStyle.swift */; }; - 658954193136BC5E919A86DA4201D1A1 /* ReloadButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26719E4D9E8B4D7DCB1DC4C324C6DDB8 /* ReloadButton.swift */; }; - 65F3142D6929F57304CB558206767413 /* InitResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7B5157E5BB99620512BC74D7E215E8 /* InitResponse.swift */; }; - 665DBF785E441B0FBB3B6F2B521BBE14 /* StoriesImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E2B97E4C31C868F8196BABC3DAEDF81 /* StoriesImageLoader.swift */; }; - 67EEAEEBF2F87C0EFE29362E1D7A1778 /* TBAppearanceConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F686A842B05100930B43FAFFC8D96F6 /* TBAppearanceConfiguration.swift */; }; - 6966EE50EA8122FFA740A8223B4740B9 /* CarouselCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3216D0D49E23F55FD543A4334CB738B6 /* CarouselCollectionViewCell.swift */; }; - 6AB8491E0354D63E2179E60F89825618 /* SessionQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE4EDE52C72CA5088F24B09078FF6339 /* SessionQueue.swift */; }; - 6B3A7319951E3B31112C6638BABB2C0A /* URLSessionQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A29BF30D6B9ABB6F15F10F027FC014 /* URLSessionQueue.swift */; }; - 6CA11BFED28BFD7F5E271650017DEC3D /* FontFamily.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4E5CA602565A7664722E13FEB6725BA /* FontFamily.swift */; }; - 6DB57B9B041C8CCCEF3912E47FB5D717 /* StoriesCollectionViewPreviewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8C571D19980F021FD05AE43AD79D1E6B /* StoriesCollectionViewPreviewCell.xib */; }; - 6E416F0D4EC5EDBAB0D30F979D5F3CD3 /* ImageLoaderError.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA27A02B1F02716C68695FF8915B49BD /* ImageLoaderError.swift */; }; - 6EC76DC8A79007FF669B1B418A4EEF9C /* StoriesView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B6AFECFD50135B923C1FD084BDBE7C22 /* StoriesView.xib */; }; - 6F12E4B8E5E0C9E87004B0C9A46F04C1 /* RecommendationsWidgetCommunicationProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D2EEEE02F7CE2DF84FD73F3E0C9594C /* RecommendationsWidgetCommunicationProtocol.swift */; }; - 6FF6BB68CAB360D665D3B01B20624EA5 /* SdkFontInstaller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 977C5525E1767E705D276AD55D7B4B8D /* SdkFontInstaller.swift */; }; - 705272F73D15E6CFEE6BCB5ED0FDEADF /* SdkStyleCustomColorScheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = B11141CC95E350F69CF33D29E35196C8 /* SdkStyleCustomColorScheme.swift */; }; - 7077DA13FB79569119FA30CAA794DE48 /* RWebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80805D1B22B4DCD521B6789A8F376A7E /* RWebViewController.swift */; }; - 710F96442DD247E5CC8A1E1C858491E7 /* SessionDataTaskProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = E922B6A1CC41CC7966455E70EF7A3E25 /* SessionDataTaskProtocol.swift */; }; - 715EB402D5B075A56E1F119789870211 /* ProductsButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A261DE6E66BB5AC707FD2045103635B /* ProductsButton.swift */; }; - 718BFC6E5826831F763468C1C2AB9DCC /* PushTokenNotificationServiceImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3CA02DCFC82E51B595A6C9C974F12F8 /* PushTokenNotificationServiceImpl.swift */; }; - 71E863F8B222DF0D7C854D6D4BB019FF /* SdkApperanceViewScheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 259FB2B268B8064E547DA60F9983458E /* SdkApperanceViewScheme.swift */; }; - 73858371B126A55EDE10CCEDA1206112 /* DialogText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EC5602B843F342E4E78439D0B7480F3 /* DialogText.swift */; }; - 745EDDB344D53D226B0C4D1A589D8AB5 /* SearchFilterCheckBoxes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27B0CF48BC3AE77E2EBD6BBAFA69C79F /* SearchFilterCheckBoxes.swift */; }; - 754A1F1E31FF970DBDC8668D7DA6C830 /* AppDimensions.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 435462282132C7EFBFF3EB4F563812D7 /* AppDimensions.struct.swift */; }; - 7716D25C4B3CDEF8760CF11FFAECE65E /* ImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44605B7DC530B589146C031D523ED7B2 /* ImageLoader.swift */; }; - 79DCED4A6E1EC3E85C12149AF7FC8008 /* TBFontConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95768DCCF6FAC4EACFC481DCD291E0B7 /* TBFontConfiguration.swift */; }; - 7AB63EC8A770F08F8D225E4ACF284C12 /* SearchFilterPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B5B27ACBE221252A480E9E304830351 /* SearchFilterPickerView.swift */; }; - 7BFA3CE16863A29AE523634B64866E34 /* CartItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FB0165F42019E524651969B76166061 /* CartItem.swift */; }; - 7F311D0CDE41D6DE5AEB20706D7C3FDE /* CheckBoxDelegate.protocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6597618AE0ED5CAB1BFC3EDB30971237 /* CheckBoxDelegate.protocol.swift */; }; - 7F4B60B07F12D6D9B00AC710898BC3E6 /* SdkStyleColorSchemeAwareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9D0171D5C09EA67FBD0CFEE356B4722 /* SdkStyleColorSchemeAwareViewController.swift */; }; - 8049FD3EB5EC4C33710EC4877FBC4909 /* SdkStyleCustomFontSizeAwareView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4B2B9CC118C7C9F02751F55F0E67B8A /* SdkStyleCustomFontSizeAwareView.swift */; }; - 80E92C0F07F8247812453F623E646BB8 /* NetworkStatusObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEEB29A3BC9215243BE1503FDAFBDAA7 /* NetworkStatusObserver.swift */; }; - 835C2FBD1965723EC71ED4019433DC42 /* ColorExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 009DE1B98484F6DED3A3048154FDA05E /* ColorExtensions.swift */; }; - 853E917E81EF70FBDA1C0EAB19016E7A /* SdkFontInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6941707D3143955F2F433352803E4E54 /* SdkFontInjector.swift */; }; - 87045DA860ACF72B195FD6528F6C9FF3 /* AlertDialog.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2629A7AFE365218F754615CE7871130 /* AlertDialog.swift */; }; - 87AF8F757C19F3FA49377F8C3CD4486D /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 6056B319C04CAAB1F9A0E58B2461FB1E /* PrivacyInfo.xcprivacy */; }; - 88D8EA3B5D3D67A83B26CFF726A4F6DA /* SearchWidgetListViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 350F060D6A7E0016A49B8A116DE4BA2A /* SearchWidgetListViewCell.swift */; }; - 89041DE5E198D3A5FD946320097A0172 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E54503771C2A4035A9DB6D8890A0BB3 /* NotificationService.swift */; }; - 89946A70E65C27E5B8404B3A5A9FB0AE /* CheckBoxCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44E5056D31D4D600ECDC0A325FAA160 /* CheckBoxCollectionViewCell.swift */; }; - 8B5D22F5AF68F57A02B73B0DBA043438 /* SDKConfigProvider.protocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6C8B4DFB96AB18111E5A7B51063FAB3 /* SDKConfigProvider.protocol.swift */; }; - 8B6AD6B70AEA4D2D63742F304E51A098 /* RWebViewController_Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 358895623BC46579129A73CC141DB50C /* RWebViewController_Extensions.swift */; }; - 8D032530F84E135C3F2A4B05CEFD5D35 /* AllSearchResultsViewController.extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F81DE88F6D6A8CF0A26F200A2E17AFA /* AllSearchResultsViewController.extension.swift */; }; - 8EC13D530673067992EFE5C59BA07CF7 /* Resolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = D15BCBF5CFD104046A1DA3B5A34E00A8 /* Resolver.swift */; }; - 907BE7D15B2744A8C1D1BF1D3FCE6464 /* LoadingPlaceholderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EC18F84F7BBF9EFE3B6B1D3EAF88854 /* LoadingPlaceholderView.swift */; }; - 9133D2BEF9EB9FB39271C4E4270CB163 /* CAPropertyAnimation+Key.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13C0949607FBDB0FB68206AA17BA3F2C /* CAPropertyAnimation+Key.swift */; }; - 920D1BBA15A019F588D0DA4CF4FD411C /* StoriesSlideReloadIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BF346E9A542598D68E38D944597E361 /* StoriesSlideReloadIndicator.swift */; }; - 93822B3E9BE2E6D5A67B73AA8980340B /* RView_Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9209215EC6A93DBD6A69B984A8CE6DF3 /* RView_Extensions.swift */; }; - 9411100FC11E50C813F79F45007E7626 /* NetworkRadioType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4415BC38266126F4B700AEA9F71CF696 /* NetworkRadioType.swift */; }; - 95772C7E80A8968269D99ADEA3FCC28E /* RecommendationsWidgetViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBD9FFE737594A23B2CCDE466FB4ABFA /* RecommendationsWidgetViewCell.swift */; }; - 95B12F0F2FF9D32DEFCBD8652E2A6022 /* SdkGlobalHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CF3D9DC2BF18E8B6F11CA081ED724AA /* SdkGlobalHelper.swift */; }; - 978B328B3CC172E9069AC31E5A7825E8 /* SearchWidgetTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CFE2A551669B8A838A6CA0E86D61103 /* SearchWidgetTextField.swift */; }; - 993014E78B54097345FE373EE7EE75FA /* RawRepresentable+FontInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B8B117BFC6F91DA4B7C856020D5CC0D /* RawRepresentable+FontInjector.swift */; }; - 998012C7CF7765EECF2FF61E030235F5 /* FullScreenDialog.swift in Sources */ = {isa = PBXBuildFile; fileRef = C15DFEA5FF8FA471A8183D427E1A0FBB /* FullScreenDialog.swift */; }; - 99FE013F4C8D2BF496D1E7F6A0CDA7CA /* Option.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E55DF044CDCC05BD80460D7093A2EFF /* Option.swift */; }; - 9B0A27626814831DFA23A1555EDFC02D /* DialogButtonClose.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90770A61EDC2960609C2348F74659710 /* DialogButtonClose.swift */; }; - 9CFED3B9724C4BA6E2404155153E2709 /* SdkStyleColorScheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = F435A9CB29918E4E7434FE94EC1C4AAC /* SdkStyleColorScheme.swift */; }; - 9E6DE4D50FDE286E1830224162E9EC31 /* NetworkConnectionType.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC7C148C29C9A120D5B37435C7D15BE4 /* NetworkConnectionType.swift */; }; - 9E84FB5815AEBBBBF6A0E32FCA6A2BF7 /* SdkStyleCustomFontSizeAwareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D92507FE448724F044E715B67CF95C06 /* SdkStyleCustomFontSizeAwareViewController.swift */; }; - 9F48E8D1EC8C0A5FD269BD2DA51FCE27 /* SdkStyleUIApplication.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21F6929B4CF43A985D682E77AB4F914A /* SdkStyleUIApplication.swift */; }; - A1233B4E880C680523951D47977E5E57 /* SDKError.enum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79D4214BC6EDAD7137E32FEA7B30CC56 /* SDKError.enum.swift */; }; - A26DE048CABB3908786DFE0CA1C3CF72 /* SearchServiceImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAF9B47891DAF76D57A7D9981B7C8BD4 /* SearchServiceImpl.swift */; }; - A38B208FF20463E838B18A38619CC554 /* SettingsManageable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A43397969E55FB65BB618FD416A0D22C /* SettingsManageable.swift */; }; - A53B4271B2AE822C99E88F8D32CA382F /* Coverable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C26A4ED3C72505990EE482F43156729E /* Coverable.swift */; }; - A8B3FA4EF3318BC471BB7BACAEB0A50E /* StoryBlockImageCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47E41B7C4DF498C217BF3DD90891349E /* StoryBlockImageCache.swift */; }; - ABF2375F52832F53A519355A8B58B224 /* StoriesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5BC180E7FAB9B2C0E94242BECD3E020 /* StoriesView.swift */; }; - ACF7B22310219A909CE2015E503F7103 /* SdkStyleCustomFonts.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF2DDD551DD92261DA1595866D41BDF4 /* SdkStyleCustomFonts.swift */; }; - B03E79310B0463DE2699E2E38C41FF4C /* SearchWidgetListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D749263F25A546578DEFBC3BF0E5AF32 /* SearchWidgetListView.swift */; }; - B1744077EDCB9820488E3C6458E76D8E /* RegisterNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92468C652D69E938D5D9B410B13D3EE5 /* RegisterNotification.swift */; }; - B1DE22D8EBCD77946D139662ACB90514 /* Event.enum.swift in Sources */ = {isa = PBXBuildFile; fileRef = E05DD0B0F759FD011507499783965F59 /* Event.enum.swift */; }; - B31F991069E28F52DBBFB35089C003C2 /* SearchFilterCheckBoxViewDelegate.protocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E32578452E50BED38C1A8A475095F44 /* SearchFilterCheckBoxViewDelegate.protocol.swift */; }; - B42149F2BAF470685E5B7F1FA06AB9A0 /* PickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65367794E2F514DFF5F34D6E28F104F6 /* PickerViewController.swift */; }; - B68BE1A4F974E6AC799F705970D190AE /* PersonalizationSDK.extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D9A3D5D79A14402DEEA96F2CA218FDD /* PersonalizationSDK.extension.swift */; }; - B6B5C712594D448F75A4BA0443C19878 /* NetworkStatusObserverUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 592632DCC3CDDE9D6D53F76FB6E3BDA3 /* NetworkStatusObserverUI.swift */; }; - B6F8A4FC0B01199D77C3E16BDC1DA41E /* UIImage+ImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C952F8AA3CE46D0F0D72B16BB0BB149 /* UIImage+ImageLoader.swift */; }; - B709464F9F7A5C6854C390ADD1BBDA69 /* UIBezierPath+ImagePlaceholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73D9C671F0F88E1BB49524FB432E32F /* UIBezierPath+ImagePlaceholder.swift */; }; - B73F229E04684F619BF3B96D266141C5 /* TrackServiceImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A6E25FF6CBD9E06A7CC07EA5A85EAB /* TrackServiceImpl.swift */; }; - B89B3C4D8378ADC2B7B9FB9F76C0EB17 /* NotificationHandlerServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AA2F349ACA5EB17D8B8861044125D44 /* NotificationHandlerServiceProtocol.swift */; }; - B93B0EFDE371F3DC5ED40329AAFFB373 /* StoryCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38326D3D9A803FCCAFE990B1E3F571E1 /* StoryCollectionViewCell.swift */; }; - BA3E96DEFF8DB7B12B83D242E13750FF /* NotificationActionsProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD0401CA471643A1600C0136DD52ABC1 /* NotificationActionsProtocol.swift */; }; - BD566F1B58DC06A7E9C5C2B781DA533A /* DialogActionButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8137E554377AAC1F49BFAF00DAF08BC /* DialogActionButton.swift */; }; - BE48A5C472094F8DF00FD468D1BFAB58 /* UserSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECA393B75FCA80E3D7EDFBD4F0AC86FF /* UserSettings.swift */; }; - BF7CCE1F5A8CFD34FD4847AE63E1580E /* TrackSourceServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD2289A6A34FCC1228F63846A4022326 /* TrackSourceServiceProtocol.swift */; }; - C2A16B1BAC3896A9D19B25504E710127 /* RecommendationsStarsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91A2DC7B25149C82C14B1CC0AB9FD1FD /* RecommendationsStarsView.swift */; }; - C4C9ABA7D00B0945AA88710901E36A71 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */; }; - C50268BFA57A3DD610C7B402FAEA48B6 /* SdkDynamicFont.swift in Sources */ = {isa = PBXBuildFile; fileRef = 350D026E2D40B3B196DDA470D1FF485A /* SdkDynamicFont.swift */; }; - C5AF8503D873ED39856D2E172C78B80A /* SearchWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 342EEF9F50F20852882BA766245EFB9C /* SearchWidget.swift */; }; - C6A9B9DEB56BE375CCC95FE0E07A804D /* RecommendResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = E15EF1AFC704430EF4ED29FD84AD0B1B /* RecommendResponse.swift */; }; - C76C2C051FD42105EAEDF905E6029F76 /* InAppNotificationProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D6D7F2BA03955D96AAE62B23E3CE50 /* InAppNotificationProtocol.swift */; }; - C8FE32DE682C0CE147FA575EAAA9F7FE /* SearchResultsListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7006CE82B5202B766282B3812336F72 /* SearchResultsListView.swift */; }; - CCA15A03858AC7F4324C13F15FAD3064 /* PromoCodeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84BF725CCE9D881924142F4AF27B9F14 /* PromoCodeView.swift */; }; - CD47838DAFC124E920661640B81550DC /* SearchWidgetMainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE5BAF43B59DEF502377E7A1A20B070D /* SearchWidgetMainView.swift */; }; - CDDB17009796217BBD6D45482E884EFE /* CGSize+Min.swift in Sources */ = {isa = PBXBuildFile; fileRef = C082E6681E8F3C120D29488626D6F4CB /* CGSize+Min.swift */; }; - CE1AB0A27B2BE22DAB219335193E79E7 /* PushEventType.enum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15CFADA69D9A49B411E21D6AAA67BC7D /* PushEventType.enum.swift */; }; - CFCA4AB2B18CA7A2242AC58D2A545393 /* VideoDownloadObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82F3929666950A32E141014066974D0C /* VideoDownloadObject.swift */; }; - D1557481044FA8679CDCBC49ED6FBFB8 /* BottomSheetDialog.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC08B3029A4539A902DBE555A723D214 /* BottomSheetDialog.swift */; }; - D21B560E76D72A4632AC3F04FFBF9EB6 /* Loader.swift in Sources */ = {isa = PBXBuildFile; fileRef = D54D025D69DA902E1E2DA3AEC4E64611 /* Loader.swift */; }; - D2D1DFBDD05ED5029D9836581FFB6FA8 /* SdkError.extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B898E3DA2F7379F3DE72C9BB1C28ABD /* SdkError.extension.swift */; }; - D3BC3D7BC94821FDADC504D6283552C8 /* GenericDataTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = D96C175CC246059496AB9BDA6E1BE9DE /* GenericDataTask.swift */; }; - D4E1DAA19CBF9E4091987688236ED619 /* SearchWidgetModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A51CE373335ED412ADE26F9B5FCD19F /* SearchWidgetModel.swift */; }; - D6296D84D29702BE57E83FE43D72FEBD /* Data.extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1A6C5890F4CBA2F6FED61D568336C2E /* Data.extension.swift */; }; - D66783C5DB98E8438DD5EE15016D9061 /* CGRect+Center.swift in Sources */ = {isa = PBXBuildFile; fileRef = C14B31FAE823B1D642564247B44E3045 /* CGRect+Center.swift */; }; - D71A5826B28868F4032F11A23EA2A688 /* PushTokenNotificationServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F84C3481F6F7D75B53EC45352D50FB2 /* PushTokenNotificationServiceProtocol.swift */; }; - D7BC005369E2DB4FFB538E1A1CD390EF /* String.extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370342C74E92696C786A02F64CEAD564 /* String.extension.swift */; }; - D9E1039269642B1E7D6010CDA249D8C2 /* StoryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 155DFCDC6DD609A0D33E0AB77F0CB02C /* StoryViewController.swift */; }; - DA3323271E7A7E10734AFFCE6141FB6F /* SdkPopupAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8293EF3E3C991BEAEC27C995DBDFACBC /* SdkPopupAlertView.swift */; }; - DA644E7C7F854AE0BBDB910F004D24BE /* SessionOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A89ECD79BDF07640163E543CAA161CB /* SessionOperation.swift */; }; - DB610DFC784EE7AB91C0B4E23B8F89CC /* SlideViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D5D86DF14CE6B63C2687383504D9505 /* SlideViewController.swift */; }; - DB6A701DBE1D4A479D8017DC4EE502FD /* SearchServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB6B9374AD2C3ECC406231D46D5AB91 /* SearchServiceProtocol.swift */; }; - DBF6439D753C4DB1A7565DF07C559EA7 /* SdkConstants.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7C5609937F1BC1C6374FDD23555110D /* SdkConstants.struct.swift */; }; - DD582BAFCE2F4690253783C5201B4D9D /* ProductsResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9258CF2194E766E7D171A6D423736B2E /* ProductsResponse.swift */; }; - DFE1404F36B46BDBF00FD441425B7CDE /* AllSearchResultsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA4EDC5E1CCB8E4BE13912A8EF77BD4C /* AllSearchResultsViewController.swift */; }; - E1953493E7BC57680742EC15ED4CD81D /* SearchResult.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = F568E664F045A3CC93E5CDD6C3BE48FA /* SearchResult.struct.swift */; }; - E2D8750485C54EA1234928061426B057 /* AppColors.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A3CDCA691D6BE7995232748A16373C /* AppColors.struct.swift */; }; - E376227043AE68F0819F01C767C4400C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CA30F5379A80F4262AD63D11008CA2C3 /* Assets.xcassets */; }; - E3AA9F3B7793B2DB01E311A9DDC40827 /* SdkImageReloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C3923E2B0E9872E0059B9A7E3A754F5 /* SdkImageReloader.swift */; }; - E5E9A7240CF77CB527D60B79C017C28B /* TextBlockConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E533A7F2482BA925DBC2147F3273A1D /* TextBlockConstants.swift */; }; - E90EB8F8F9A719CDC13C84725C75C15D /* SearchWidgetHistoryButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DAF063553B59888530EB0D29E1C809A /* SearchWidgetHistoryButton.swift */; }; - EA14653F4A93DDC4CBAE110557C64BD8 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D245E0514AAC1A2B9A6D5EA2F383E90F /* UIKit.framework */; }; - EB6CA4EDFD204298CEB1E56B91046CD6 /* Bundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = BACC770FED697B77A931D5E99E960739 /* Bundle.swift */; }; - EC646905239F970EF42F6B5CA51C824F /* RecommendationsWidgetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 119A1B88D81767BFBB1C3099FC8CEB55 /* RecommendationsWidgetView.swift */; }; - ECB1A46A0E72D39C9E6C252B30331981 /* ImageLoading.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42F25F5D38064A11AEFC1B349E3BB9D8 /* ImageLoading.swift */; }; - ED6ED9F6615DBEB30CC6B89130F4960A /* RecommendationsWidgetConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 661E14AD82A20B9B3779366E481D8C8F /* RecommendationsWidgetConstants.swift */; }; - EE37B42734D1D3B13BF1930003338134 /* REES46-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E737E38BB1C701DA6F9C8F5A414D1E61 /* REES46-dummy.m */; }; - EFD8F45C4CFA61345C78244130DCE50A /* REES46-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 467E46E05D2D0EBF71D35566E63ACBC7 /* REES46-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F0B44704D60D03EF8819AAF4A4A66BDB /* UserDefaultsExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5761E4476C88C2DAF70417EEB7A153F /* UserDefaultsExtension.swift */; }; - F2F482DEC888F01D6B41F846D1791276 /* ProfileData.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649273684EFA0169BA73F307A15869FD /* ProfileData.struct.swift */; }; - F556770333F7205C9C825416D1547069 /* TrackEventServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 714A828F8F30B6F602452EC53F42F03C /* TrackEventServiceProtocol.swift */; }; - F596463D2EBD27544AC60B558DE04F5B /* ViewConfigPlain.swift in Sources */ = {isa = PBXBuildFile; fileRef = F28F9F09B9E2843B7C0D10357A329B85 /* ViewConfigPlain.swift */; }; - F7578F27D974C5D158FFFE1E7BD6E7E8 /* SdkStyleCustomColorSchemeAwareView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30E5B97774FB539C1DC3F87570665F1B /* SdkStyleCustomColorSchemeAwareView.swift */; }; - F8191B0BB1A4C58686BB3598305F47DC /* StoriesCollectionViewPreviewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB2ED77352637596B690C07F655773F6 /* StoriesCollectionViewPreviewCell.swift */; }; - F8A1DE9AC264D48F28C6B2CA7CBCD447 /* NotificationHandlerServiceImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B0FF75A8A6ECEC156C91344D33762BF /* NotificationHandlerServiceImpl.swift */; }; - F8CA3169463D5840A2F3D3D038F79A04 /* PromocodeBanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F84E23E3AA75BDC6CB30A46E04CAD8 /* PromocodeBanner.swift */; }; - F935E4FC6248E21039FD42D98AE25418 /* SearchWidgetDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D143127F3D486DE331EA70AFC0A9CA69 /* SearchWidgetDelegate.swift */; }; - F9BF25827EECDF676394C8207B3A7A38 /* SearchFilterHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CC436DB5A51150AD32F1093A1D63C0C /* SearchFilterHeaderView.swift */; }; - FA0353B57B9E752F966A16FD57B8A8BD /* Resolver-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D7CCD8D060AC465281FADCA913D7CE2 /* Resolver-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FA6B453F3C071D9B49C944C95BE8E352 /* SubscriptionServiceImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B07F3860CE3E3A8D7FFE20AD4FD64E0 /* SubscriptionServiceImpl.swift */; }; - FB02BD452F32C691FCCAFB4960B50164 /* SdkConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 763B98E872CD0DC06F6304CE45ED4FA7 /* SdkConfiguration.swift */; }; - FC1A956653E9ECC5DB2B7E75A25FE742 /* SubscriptionServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18E979877AB6E04CF5268AE968D97609 /* SubscriptionServiceProtocol.swift */; }; - FE139F9FB6511B5C0B1CCC3A92154CFD /* SdkQueryBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = E22BAF276FC2E10D90D30CECC6065BC1 /* SdkQueryBuilder.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 3937D943A6532951EE926E8B95AAB871 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0C03A6912D025B497528F2C7FFE2F1D5; - remoteInfo = REES46; - }; - 5B017EA963DCB80AC457047352564C1C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 3AF1A4FE1808CDAE51281F7A31DB2A13; - remoteInfo = Resolver; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 009DE1B98484F6DED3A3048154FDA05E /* ColorExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ColorExtensions.swift; path = REES46/Classes/Shared/ColorExtensions.swift; sourceTree = ""; }; - 016F0F9EC817BA0D115D86AB981BB2EC /* SdkActivityIndicator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkActivityIndicator.swift; path = REES46/Classes/Extensions/StoriesPreload/SdkActivityIndicator.swift; sourceTree = ""; }; - 07C57013358099BBB1F2F2710948C4D3 /* SearchWidgetViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchWidgetViewController.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Presentation/View/Controller/SearchWidgetViewController.swift; sourceTree = ""; }; - 09FE3444E3F15428CC14BBBA656BFDF8 /* NetworkStatus.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkStatus.swift; path = REES46/Classes/Extensions/NetworkStatus/NetworkStatus.swift; sourceTree = ""; }; - 0A51CE373335ED412ADE26F9B5FCD19F /* SearchWidgetModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchWidgetModel.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Model/SearchWidgetModel.swift; sourceTree = ""; }; - 0B07F3860CE3E3A8D7FFE20AD4FD64E0 /* SubscriptionServiceImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubscriptionServiceImpl.swift; path = REES46/Classes/Subscription/Services/impl/SubscriptionServiceImpl.swift; sourceTree = ""; }; - 0B1B861F7911E97B3C8EDA23EF05030E /* SdkStyleCustomColorSchemeAwareViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkStyleCustomColorSchemeAwareViewController.swift; path = REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleCustomColorSchemeAwareViewController.swift; sourceTree = ""; }; - 0E32578452E50BED38C1A8A475095F44 /* SearchFilterCheckBoxViewDelegate.protocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchFilterCheckBoxViewDelegate.protocol.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Protocol/SearchFilterCheckBoxViewDelegate.protocol.swift; sourceTree = ""; }; - 0FB0165F42019E524651969B76166061 /* CartItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CartItem.swift; path = REES46/Classes/Model/CartItem.swift; sourceTree = ""; }; - 1036BCD8E22451E7247A50804CCF3424 /* SearchResultsButton.protocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchResultsButton.protocol.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Protocol/SearchResultsButton.protocol.swift; sourceTree = ""; }; - 119A1B88D81767BFBB1C3099FC8CEB55 /* RecommendationsWidgetView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecommendationsWidgetView.swift; path = REES46/Classes/Stories/StoryViewController/RecommendationsWidget/RecommendationsWidgetView.swift; sourceTree = ""; }; - 13C0949607FBDB0FB68206AA17BA3F2C /* CAPropertyAnimation+Key.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CAPropertyAnimation+Key.swift"; path = "REES46/Classes/Extensions/StoriesPreload/PreloadIndicatorProperties/CAPropertyAnimation+Key.swift"; sourceTree = ""; }; - 14C9DAA0ABDC2A64DB8D7E649A52AFC8 /* ProfileDataProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ProfileDataProtocol.swift; path = REES46/Classes/Profile/Service/protocol/ProfileDataProtocol.swift; sourceTree = ""; }; - 155DFCDC6DD609A0D33E0AB77F0CB02C /* StoryViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoryViewController.swift; path = REES46/Classes/Stories/StoryViewController/StoryViewController.swift; sourceTree = ""; }; - 158AE481E2227C1FCED02FF237A8C0DF /* ProfileDataImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ProfileDataImpl.swift; path = REES46/Classes/Profile/Service/impl/ProfileDataImpl.swift; sourceTree = ""; }; - 15CFADA69D9A49B411E21D6AAA67BC7D /* PushEventType.enum.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PushEventType.enum.swift; path = REES46/Classes/Sdk/Model/PushEventType.enum.swift; sourceTree = ""; }; - 182C88327201223192007A1C559D5461 /* UIImageView+ImageLoader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImageView+ImageLoader.swift"; path = "REES46/Classes/Extensions/StoriesImageLoader/Extension/UIImageView+ImageLoader.swift"; sourceTree = ""; }; - 18E979877AB6E04CF5268AE968D97609 /* SubscriptionServiceProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubscriptionServiceProtocol.swift; path = REES46/Classes/Subscription/Services/protocol/SubscriptionServiceProtocol.swift; sourceTree = ""; }; - 1B415F6966120590B93FA376FE5C36A8 /* Stories.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Stories.swift; path = REES46/Classes/Model/Stories.swift; sourceTree = ""; }; - 1B8B117BFC6F91DA4B7C856020D5CC0D /* RawRepresentable+FontInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "RawRepresentable+FontInjector.swift"; path = "REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/RawRepresentable+FontInjector.swift"; sourceTree = ""; }; - 1CB8AF5B112465220BE4170953B5822D /* SdkErrorDescription.protocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkErrorDescription.protocol.swift; path = REES46/Classes/Errors/protocol/SdkErrorDescription.protocol.swift; sourceTree = ""; }; - 21F6929B4CF43A985D682E77AB4F914A /* SdkStyleUIApplication.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkStyleUIApplication.swift; path = REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleAdditional/SdkStyleUIApplication.swift; sourceTree = ""; }; - 21FDED85555E1BC51F5C6860D283BF8B /* Data+ImageLoader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+ImageLoader.swift"; path = "REES46/Classes/Extensions/StoriesImageLoader/Extension/Data+ImageLoader.swift"; sourceTree = ""; }; - 2260CD7597693BE70413E8ADEE57CEEC /* UIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIView.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Extensions/UIView.swift; sourceTree = ""; }; - 2355111CF381DA8CAC6682774E723B75 /* UIFont+FontInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIFont+FontInjector.swift"; path = "REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/UIFont+FontInjector.swift"; sourceTree = ""; }; - 259FB2B268B8064E547DA60F9983458E /* SdkApperanceViewScheme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkApperanceViewScheme.swift; path = REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkApperanceViewScheme.swift; sourceTree = ""; }; - 26719E4D9E8B4D7DCB1DC4C324C6DDB8 /* ReloadButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReloadButton.swift; path = REES46/Classes/Button/ReloadButton.swift; sourceTree = ""; }; - 27B0CF48BC3AE77E2EBD6BBAFA69C79F /* SearchFilterCheckBoxes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchFilterCheckBoxes.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Presentation/View/CheckBox/SearchFilterCheckBoxes.swift; sourceTree = ""; }; - 2A261DE6E66BB5AC707FD2045103635B /* ProductsButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ProductsButton.swift; path = REES46/Classes/Button/ProductsButton.swift; sourceTree = ""; }; - 2B2930617367EF2EAA39103346CF00FF /* SearchWidgetView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchWidgetView.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Presentation/View/SearchWidgetView.swift; sourceTree = ""; }; - 2BC0D87A8F0E96D172C372234E6C4103 /* UIFontDescriptorUsage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIFontDescriptorUsage.swift; path = REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleAdditional/UIFontDescriptorUsage.swift; sourceTree = ""; }; - 2BF346E9A542598D68E38D944597E361 /* StoriesSlideReloadIndicator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoriesSlideReloadIndicator.swift; path = REES46/Classes/Extensions/StoriesPreload/StoriesSlideReloadIndicator.swift; sourceTree = ""; }; - 2DEE2348E19A18A74DEB6B8F13EB4298 /* InitService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InitService.swift; path = REES46/Classes/Extensions/InitService.swift; sourceTree = ""; }; - 30E5B97774FB539C1DC3F87570665F1B /* SdkStyleCustomColorSchemeAwareView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkStyleCustomColorSchemeAwareView.swift; path = REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleCustomColorSchemeAwareView.swift; sourceTree = ""; }; - 3216D0D49E23F55FD543A4334CB738B6 /* CarouselCollectionViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CarouselCollectionViewCell.swift; path = REES46/Classes/Stories/StoryViewController/ProductsCarousel/CarouselCollectionViewCell.swift; sourceTree = ""; }; - 342EEF9F50F20852882BA766245EFB9C /* SearchWidget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchWidget.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Presentation/View/SearchWidget.swift; sourceTree = ""; }; - 350D026E2D40B3B196DDA470D1FF485A /* SdkDynamicFont.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkDynamicFont.swift; path = REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/SdkDynamicFont.swift; sourceTree = ""; }; - 350F060D6A7E0016A49B8A116DE4BA2A /* SearchWidgetListViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchWidgetListViewCell.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Presentation/View/List/SearchWidgetListViewCell.swift; sourceTree = ""; }; - 358895623BC46579129A73CC141DB50C /* RWebViewController_Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RWebViewController_Extensions.swift; path = REES46/Classes/Stories/WebKit/RWebViewController_Extensions.swift; sourceTree = ""; }; - 35A9112B3BC7B00E18A2400AA6D80FA6 /* REES46.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = REES46.debug.xcconfig; sourceTree = ""; }; - 35BEC6E27F2D36BFF0A1E0FAB21191BB /* SearchFilterViewController.extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchFilterViewController.extension.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Extensions/SearchFilterViewController.extension.swift; sourceTree = ""; }; - 3671B3C220D01E22000CF41146C2B4AB /* REES46 */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = REES46; path = REES46.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 370342C74E92696C786A02F64CEAD564 /* String.extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = String.extension.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Extensions/String.extension.swift; sourceTree = ""; }; - 38326D3D9A803FCCAFE990B1E3F571E1 /* StoryCollectionViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoryCollectionViewCell.swift; path = REES46/Classes/Stories/StoryViewController/CollectionViewCell/StoryCollectionViewCell.swift; sourceTree = ""; }; - 39246EA56A130C44AB2EC6BEFFB2E8DA /* Disk.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Disk.swift; path = REES46/Classes/Extensions/StoriesImageLoader/Core/Disk.swift; sourceTree = ""; }; - 39D0501CB5A2B49D76CA2C8C1D31D170 /* ManagedViewConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ManagedViewConfig.swift; path = REES46/Classes/Extensions/SdkConfiguration/ManagedViewConfig/ManagedViewConfig.swift; sourceTree = ""; }; - 3AA2F349ACA5EB17D8B8861044125D44 /* NotificationHandlerServiceProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NotificationHandlerServiceProtocol.swift; path = REES46/Classes/Notifications/Service/protocol/NotificationHandlerServiceProtocol.swift; sourceTree = ""; }; - 3B0FF75A8A6ECEC156C91344D33762BF /* NotificationHandlerServiceImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NotificationHandlerServiceImpl.swift; path = REES46/Classes/Notifications/Service/impl/NotificationHandlerServiceImpl.swift; sourceTree = ""; }; - 3BC55C3F000602219892FCA879D5407C /* TBTextConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TBTextConfiguration.swift; path = REES46/Classes/Stories/TextBlockView/TextBlockConfiguration/TBSubConfigurations/TBTextConfiguration.swift; sourceTree = ""; }; - 3D2EEEE02F7CE2DF84FD73F3E0C9594C /* RecommendationsWidgetCommunicationProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecommendationsWidgetCommunicationProtocol.swift; path = REES46/Classes/Stories/StoryViewController/RecommendationsWidget/protocol/RecommendationsWidgetCommunicationProtocol.swift; sourceTree = ""; }; - 3D5D86DF14CE6B63C2687383504D9505 /* SlideViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SlideViewController.swift; path = REES46/Classes/Stories/ConnectionAwareLoader/Views/SlideViewController.swift; sourceTree = ""; }; - 3D62509BDD7AEA8C544B7567E89186C4 /* CGImageSource+ImageLoader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CGImageSource+ImageLoader.swift"; path = "REES46/Classes/Extensions/StoriesImageLoader/Extension/CGImageSource+ImageLoader.swift"; sourceTree = ""; }; - 3D757151E1F9C0A4B5365504783B3FD1 /* ProfileDataConstants.struct.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ProfileDataConstants.struct.swift; path = REES46/Classes/Profile/Service/Model/ProfileDataConstants.struct.swift; sourceTree = ""; }; - 3D7CCD8D060AC465281FADCA913D7CE2 /* Resolver-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Resolver-umbrella.h"; sourceTree = ""; }; - 3D9A3D5D79A14402DEEA96F2CA218FDD /* PersonalizationSDK.extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PersonalizationSDK.extension.swift; path = REES46/Classes/Sdk/Extensions/PersonalizationSDK.extension.swift; sourceTree = ""; }; - 3DAF063553B59888530EB0D29E1C809A /* SearchWidgetHistoryButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchWidgetHistoryButton.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Presentation/View/Button/SearchWidgetHistoryButton.swift; sourceTree = ""; }; - 3EC5602B843F342E4E78439D0B7480F3 /* DialogText.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DialogText.swift; path = REES46/Classes/InAppNotification/view/component/text/DialogText.swift; sourceTree = ""; }; - 3F81DE88F6D6A8CF0A26F200A2E17AFA /* AllSearchResultsViewController.extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllSearchResultsViewController.extension.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Extensions/AllSearchResultsViewController.extension.swift; sourceTree = ""; }; - 3FE45031A73056A2CFA8E93BF0A50596 /* Pods-demo-store-ios.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-demo-store-ios.modulemap"; sourceTree = ""; }; - 42F25F5D38064A11AEFC1B349E3BB9D8 /* ImageLoading.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageLoading.swift; path = REES46/Classes/Stories/ConnectionAwareLoader/UseCases/ImageLoading.swift; sourceTree = ""; }; - 432E543F30D5AF9EA8FA41E1EC4C9605 /* SearchResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchResponse.swift; path = REES46/Classes/Model/SearchResponse.swift; sourceTree = ""; }; - 435462282132C7EFBFF3EB4F563812D7 /* AppDimensions.struct.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AppDimensions.struct.swift; path = REES46/Classes/Resources/AppDimensions.struct.swift; sourceTree = ""; }; - 4415BC38266126F4B700AEA9F71CF696 /* NetworkRadioType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkRadioType.swift; path = REES46/Classes/Extensions/NetworkStatus/ConnectionProperties/NetworkRadioType.swift; sourceTree = ""; }; - 441A7938A47469581080367545182CAA /* REES46.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = REES46.modulemap; sourceTree = ""; }; - 44605B7DC530B589146C031D523ED7B2 /* ImageLoader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageLoader.swift; path = REES46/Classes/Stories/ConnectionAwareLoader/Data/ImageLoader.swift; sourceTree = ""; }; - 452AF409E3A7679850A94364FEF83BA4 /* Pods-demo-store-ios-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-demo-store-ios-Info.plist"; sourceTree = ""; }; - 45DBCDD6992581C1D45B8CCADB9A06A3 /* CarouselConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CarouselConstants.swift; path = REES46/Classes/Stories/StoryViewController/ProductsCarousel/CarouselConstants.swift; sourceTree = ""; }; - 467E46E05D2D0EBF71D35566E63ACBC7 /* REES46-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "REES46-umbrella.h"; sourceTree = ""; }; - 47E41B7C4DF498C217BF3DD90891349E /* StoryBlockImageCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoryBlockImageCache.swift; path = REES46/Classes/Extensions/StoriesImageLoader/StoryBlockImageCache.swift; sourceTree = ""; }; - 486911824EFDB46BFC5E5301A1AF272E /* NotificationWidget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NotificationWidget.swift; path = REES46/Classes/InAppNotification/view/NotificationWidget.swift; sourceTree = ""; }; - 4A29417D8A15996608EB6B0B4A3080DE /* ImageData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageData.swift; path = REES46/Classes/Stories/ConnectionAwareLoader/Entities/ImageData.swift; sourceTree = ""; }; - 4C1A478978AA75701BBF375107A482A2 /* VideoFileUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoFileUtils.swift; path = REES46/Classes/Extensions/DownloadManager/VideoFileUtils.swift; sourceTree = ""; }; - 4CE66A79DEACB9755E82DA9607E71923 /* NetworkConnectionStatus.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkConnectionStatus.swift; path = REES46/Classes/Extensions/NetworkStatus/ConnectionProperties/NetworkConnectionStatus.swift; sourceTree = ""; }; - 4E54503771C2A4035A9DB6D8890A0BB3 /* NotificationService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NotificationService.swift; path = REES46/Classes/Notifications/NotificationService.swift; sourceTree = ""; }; - 4E55DF044CDCC05BD80460D7093A2EFF /* Option.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Option.swift; path = REES46/Classes/Extensions/StoriesImageLoader/Core/Option.swift; sourceTree = ""; }; - 4F686A842B05100930B43FAFFC8D96F6 /* TBAppearanceConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TBAppearanceConfiguration.swift; path = REES46/Classes/Stories/TextBlockView/TextBlockConfiguration/TBSubConfigurations/TBAppearanceConfiguration.swift; sourceTree = ""; }; - 50465458BCAA44AC95DBE06992E4C1F1 /* REES46-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "REES46-prefix.pch"; sourceTree = ""; }; - 51BADA0045FDF9D08F587320E702DD5D /* Pods-demo-store-ios-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-demo-store-ios-frameworks.sh"; sourceTree = ""; }; - 53B2E3271227E3B19B4164E14C1E4AF4 /* PushTokenHandlerImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PushTokenHandlerImpl.swift; path = REES46/Classes/Notifications/Service/impl/PushTokenHandlerImpl.swift; sourceTree = ""; }; - 5458AE6F88BE43C72AE9C0384984CD6E /* UISdkWrapLabel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UISdkWrapLabel.swift; path = REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/UISdkWrapLabel.swift; sourceTree = ""; }; - 5466A9CB4DC4C1EB3C36A7A8A9319C6C /* SearchFilterActionButtons.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchFilterActionButtons.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Presentation/View/Button/SearchFilterActionButtons.swift; sourceTree = ""; }; - 575C75F9140BC5BAA3251E9F23B7F9AB /* SearchWidgetExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchWidgetExtension.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Extensions/SearchWidgetExtension.swift; sourceTree = ""; }; - 592632DCC3CDDE9D6D53F76FB6E3BDA3 /* NetworkStatusObserverUI.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkStatusObserverUI.swift; path = REES46/Classes/Extensions/NetworkStatus/ConnectionObservers/NetworkStatusObserverUI.swift; sourceTree = ""; }; - 59EE8BEB552E8E97FF401C44F4A363BC /* URLLiteralConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLLiteralConvertible.swift; path = REES46/Classes/Extensions/StoriesImageLoader/Core/URLLiteralConvertible.swift; sourceTree = ""; }; - 5B898E3DA2F7379F3DE72C9BB1C28ABD /* SdkError.extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkError.extension.swift; path = REES46/Classes/Errors/Extension/SdkError.extension.swift; sourceTree = ""; }; - 5CC436DB5A51150AD32F1093A1D63C0C /* SearchFilterHeaderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchFilterHeaderView.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Presentation/View/Header/SearchFilterHeaderView.swift; sourceTree = ""; }; - 6056B319C04CAAB1F9A0E58B2461FB1E /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 649273684EFA0169BA73F307A15869FD /* ProfileData.struct.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ProfileData.struct.swift; path = REES46/Classes/Profile/Service/Model/ProfileData.struct.swift; sourceTree = ""; }; - 65367794E2F514DFF5F34D6E28F104F6 /* PickerViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerViewController.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Presentation/View/Controller/PickerViewController.swift; sourceTree = ""; }; - 6597618AE0ED5CAB1BFC3EDB30971237 /* CheckBoxDelegate.protocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CheckBoxDelegate.protocol.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Protocol/CheckBoxDelegate.protocol.swift; sourceTree = ""; }; - 661E14AD82A20B9B3779366E481D8C8F /* RecommendationsWidgetConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecommendationsWidgetConstants.swift; path = REES46/Classes/Stories/StoryViewController/RecommendationsWidget/RecommendationsWidgetConstants.swift; sourceTree = ""; }; - 67A3CDCA691D6BE7995232748A16373C /* AppColors.struct.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AppColors.struct.swift; path = REES46/Classes/Resources/AppColors.struct.swift; sourceTree = ""; }; - 67A6E25FF6CBD9E06A7CC07EA5A85EAB /* TrackServiceImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TrackServiceImpl.swift; path = REES46/Classes/Tracking/Service/impl/TrackServiceImpl.swift; sourceTree = ""; }; - 6941707D3143955F2F433352803E4E54 /* SdkFontInjector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkFontInjector.swift; path = REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/SdkFontInjector.swift; sourceTree = ""; }; - 69FA3AA42C7B1BF521C2B11388260985 /* SlideView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SlideView.swift; path = REES46/Classes/Stories/ConnectionAwareLoader/Views/SlideView.swift; sourceTree = ""; }; - 6C3923E2B0E9872E0059B9A7E3A754F5 /* SdkImageReloader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkImageReloader.swift; path = REES46/Classes/Extensions/StoriesImageLoader/Core/SdkImageReloader.swift; sourceTree = ""; }; - 6E2B97E4C31C868F8196BABC3DAEDF81 /* StoriesImageLoader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoriesImageLoader.swift; path = REES46/Classes/Extensions/StoriesImageLoader/Core/StoriesImageLoader.swift; sourceTree = ""; }; - 6F84C3481F6F7D75B53EC45352D50FB2 /* PushTokenNotificationServiceProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PushTokenNotificationServiceProtocol.swift; path = REES46/Classes/Notifications/Service/protocol/PushTokenNotificationServiceProtocol.swift; sourceTree = ""; }; - 7116768E9395945F655A57DAECC1A933 /* Pods-demo-store-ios-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-demo-store-ios-umbrella.h"; sourceTree = ""; }; - 711CCF8AFA98AC5676B42688D664CA30 /* Pods-demo-store-ios-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-demo-store-ios-acknowledgements.markdown"; sourceTree = ""; }; - 714A828F8F30B6F602452EC53F42F03C /* TrackEventServiceProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TrackEventServiceProtocol.swift; path = REES46/Classes/Tracking/Service/protocol/TrackEventServiceProtocol.swift; sourceTree = ""; }; - 731049353C889C0D61BD8B8E0707FA62 /* Operative.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operative.swift; path = REES46/Classes/Extensions/StoriesImageLoader/Core/Operative.swift; sourceTree = ""; }; - 759FEF5B1682A4FB5138EFAD2BE2E20A /* HashStorage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HashStorage.swift; path = REES46/Classes/Extensions/StoriesImageLoader/Core/HashStorage.swift; sourceTree = ""; }; - 763B98E872CD0DC06F6304CE45ED4FA7 /* SdkConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkConfiguration.swift; path = REES46/Classes/Extensions/SdkConfiguration/SdkConfiguration.swift; sourceTree = ""; }; - 772AA1BEC14898CDEB7594D412C8AF7F /* SimplePersonalizationSDK.extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SimplePersonalizationSDK.extension.swift; path = REES46/Classes/Config/extension/SimplePersonalizationSDK.extension.swift; sourceTree = ""; }; - 776EE19C45FAD579CF1EB79558094C72 /* Resolver.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Resolver.modulemap; sourceTree = ""; }; - 788C2A9D4DFDD52FF34AD205D98B9CA0 /* CarouselCollectionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CarouselCollectionView.swift; path = REES46/Classes/Stories/StoryViewController/ProductsCarousel/CarouselCollectionView.swift; sourceTree = ""; }; - 79A29BF30D6B9ABB6F15F10F027FC014 /* URLSessionQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLSessionQueue.swift; path = REES46/Classes/Extensions/SessionQueue/URLSessionQueue.swift; sourceTree = ""; }; - 79D4214BC6EDAD7137E32FEA7B30CC56 /* SDKError.enum.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SDKError.enum.swift; path = REES46/Classes/Errors/Model/SDKError.enum.swift; sourceTree = ""; }; - 7A89ECD79BDF07640163E543CAA161CB /* SessionOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionOperation.swift; path = REES46/Classes/Extensions/SessionQueue/SessionOperation.swift; sourceTree = ""; }; - 7A97C46A25BA871E2A74785BD0EE845C /* NotificationServiceProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NotificationServiceProtocol.swift; path = REES46/Classes/Notifications/Service/protocol/NotificationServiceProtocol.swift; sourceTree = ""; }; - 7BEF61FF2E9643EA7FE1AC354096F8EF /* REES46-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "REES46-Info.plist"; sourceTree = ""; }; - 7C952F8AA3CE46D0F0D72B16BB0BB149 /* UIImage+ImageLoader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImage+ImageLoader.swift"; path = "REES46/Classes/Extensions/StoriesImageLoader/Extension/UIImage+ImageLoader.swift"; sourceTree = ""; }; - 7CF3D9DC2BF18E8B6F11CA081ED724AA /* SdkGlobalHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkGlobalHelper.swift; path = REES46/Classes/Extensions/NetworkStatus/SdkGlobalHelper.swift; sourceTree = ""; }; - 7E130DB6AB3E0694F39029ED32A40B24 /* StoryCollectionViewCell.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = StoryCollectionViewCell.xib; path = REES46/Classes/Resources/StoryCollectionViewCell.xib; sourceTree = ""; }; - 7EB9610EDC52BD59AB0EC6AC8CD88F63 /* CheckBox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CheckBox.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Presentation/View/CheckBox/CheckBox.swift; sourceTree = ""; }; - 7EC18F84F7BBF9EFE3B6B1D3EAF88854 /* LoadingPlaceholderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LoadingPlaceholderView.swift; path = REES46/Classes/Extensions/SdkConfiguration/PromocodeImagePlaceholder/LoadingPlaceholderView.swift; sourceTree = ""; }; - 803169BEF6F584FC3E5F440B19888634 /* PersonalizationSDK.protocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PersonalizationSDK.protocol.swift; path = REES46/Classes/Sdk/protocol/PersonalizationSDK.protocol.swift; sourceTree = ""; }; - 80805D1B22B4DCD521B6789A8F376A7E /* RWebViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RWebViewController.swift; path = REES46/Classes/Stories/WebKit/RWebViewController.swift; sourceTree = ""; }; - 815A307ED7AAEE9D77609BBFE54483A8 /* SearchFilterPickerViewDelegate.protocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchFilterPickerViewDelegate.protocol.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Protocol/SearchFilterPickerViewDelegate.protocol.swift; sourceTree = ""; }; - 8208744A96B3694133B19170DE843A0E /* TexBlockConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TexBlockConfiguration.swift; path = REES46/Classes/Stories/TextBlockView/TextBlockConfiguration/TexBlockConfiguration.swift; sourceTree = ""; }; - 8293EF3E3C991BEAEC27C995DBDFACBC /* SdkPopupAlertView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkPopupAlertView.swift; path = REES46/Classes/Extensions/SdkConfiguration/PromocodeBanner/SdkPopupAlertView.swift; sourceTree = ""; }; - 82F3929666950A32E141014066974D0C /* VideoDownloadObject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoDownloadObject.swift; path = REES46/Classes/Extensions/DownloadManager/VideoDownloadObject.swift; sourceTree = ""; }; - 83BFD6AC752D1918CF4AD241F5ED17A6 /* Resolver.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Resolver.debug.xcconfig; sourceTree = ""; }; - 84BF725CCE9D881924142F4AF27B9F14 /* PromoCodeView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PromoCodeView.swift; path = REES46/Classes/Button/PromoCodeView.swift; sourceTree = ""; }; - 86FDDF0FD61FCC829E6B01B01303A55C /* URLSession.extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLSession.extension.swift; path = REES46/Classes/Sdk/Extensions/URLSession.extension.swift; sourceTree = ""; }; - 8B5B27ACBE221252A480E9E304830351 /* SearchFilterPickerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchFilterPickerView.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Presentation/View/PickerView/SearchFilterPickerView.swift; sourceTree = ""; }; - 8C571D19980F021FD05AE43AD79D1E6B /* StoriesCollectionViewPreviewCell.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = StoriesCollectionViewPreviewCell.xib; path = REES46/Classes/Resources/StoriesCollectionViewPreviewCell.xib; sourceTree = ""; }; - 8E17C83DC8BBDCACD742D84DD18B9F75 /* UIBezierPath+Circle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIBezierPath+Circle.swift"; path = "REES46/Classes/Extensions/StoriesPreload/PreloadIndicatorProperties/UIBezierPath+Circle.swift"; sourceTree = ""; }; - 8E533A7F2482BA925DBC2147F3273A1D /* TextBlockConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextBlockConstants.swift; path = REES46/Classes/Stories/TextBlockView/TextBlockConstants.swift; sourceTree = ""; }; - 8E6D6AAA1AB3C87C91C79CC66554E951 /* SearchWidgetCategoriesButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchWidgetCategoriesButton.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Presentation/View/Button/SearchWidgetCategoriesButton.swift; sourceTree = ""; }; - 8FFC635ADA8A7ACC92EC30B37E8F64E1 /* RequestOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestOperation.swift; path = REES46/Classes/Extensions/SessionQueue/RequestOperation.swift; sourceTree = ""; }; - 90770A61EDC2960609C2348F74659710 /* DialogButtonClose.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DialogButtonClose.swift; path = REES46/Classes/InAppNotification/view/component/button/DialogButtonClose.swift; sourceTree = ""; }; - 91A2DC7B25149C82C14B1CC0AB9FD1FD /* RecommendationsStarsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecommendationsStarsView.swift; path = REES46/Classes/Extensions/SdkConfiguration/RecommendationsStars/RecommendationsStarsView.swift; sourceTree = ""; }; - 9209215EC6A93DBD6A69B984A8CE6DF3 /* RView_Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RView_Extensions.swift; path = REES46/Classes/Stories/WebKit/RView_Extensions.swift; sourceTree = ""; }; - 92468C652D69E938D5D9B410B13D3EE5 /* RegisterNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RegisterNotification.swift; path = REES46/Classes/Notifications/RegisterNotification.swift; sourceTree = ""; }; - 9258CF2194E766E7D171A6D423736B2E /* ProductsResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ProductsResponse.swift; path = REES46/Classes/Model/ProductsResponse.swift; sourceTree = ""; }; - 94D6D7F2BA03955D96AAE62B23E3CE50 /* InAppNotificationProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InAppNotificationProtocol.swift; path = REES46/Classes/InAppNotification/protocol/InAppNotificationProtocol.swift; sourceTree = ""; }; - 95768DCCF6FAC4EACFC481DCD291E0B7 /* TBFontConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TBFontConfiguration.swift; path = REES46/Classes/Stories/TextBlockView/TextBlockConfiguration/TBSubConfigurations/TBFontConfiguration.swift; sourceTree = ""; }; - 977C5525E1767E705D276AD55D7B4B8D /* SdkFontInstaller.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkFontInstaller.swift; path = REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleAdditional/SdkFontInstaller.swift; sourceTree = ""; }; - 9A9987EB80F7154F339874BB9E264B48 /* SdkStyleColorSchemeAwareView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkStyleColorSchemeAwareView.swift; path = REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleColorSchemeAwareView.swift; sourceTree = ""; }; - 9B4492E85CA71A29BD7AC704F4B8864F /* SearchResultHeaderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchResultHeaderView.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Presentation/View/Header/SearchResultHeaderView.swift; sourceTree = ""; }; - 9CFE2A551669B8A838A6CA0E86D61103 /* SearchWidgetTextField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchWidgetTextField.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Presentation/View/TextField/SearchWidgetTextField.swift; sourceTree = ""; }; - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - A05E795ECA6FF0F5767E433F8FE8625C /* Pods-demo-store-ios */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-demo-store-ios"; path = Pods_demo_store_ios.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A11021FE08AD4B7374835DDED2FE6C06 /* Navigation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Navigation.swift; path = REES46/Classes/Extensions/NetworkStatus/Navigation.swift; sourceTree = ""; }; - A2629A7AFE365218F754615CE7871130 /* AlertDialog.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlertDialog.swift; path = REES46/Classes/InAppNotification/view/component/dialog/AlertDialog.swift; sourceTree = ""; }; - A3BC4DCD1D930788E65681442B043C28 /* Pods-demo-store-ios.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-demo-store-ios.debug.xcconfig"; sourceTree = ""; }; - A43397969E55FB65BB618FD416A0D22C /* SettingsManageable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SettingsManageable.swift; path = REES46/Classes/Extensions/SdkConfiguration/ManagedViewConfig/SettingsManageable.swift; sourceTree = ""; }; - A6C8B4DFB96AB18111E5A7B51063FAB3 /* SDKConfigProvider.protocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SDKConfigProvider.protocol.swift; path = REES46/Classes/Config/protocol/SDKConfigProvider.protocol.swift; sourceTree = ""; }; - A70B50D35B2B9B3A31F1F409DE457FD9 /* VideoDownloadManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoDownloadManager.swift; path = REES46/Classes/Extensions/DownloadManager/VideoDownloadManager.swift; sourceTree = ""; }; - AE7B5157E5BB99620512BC74D7E215E8 /* InitResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InitResponse.swift; path = REES46/Classes/Model/InitResponse.swift; sourceTree = ""; }; - AE808C627CFADE4AB1538577394780FB /* SdkStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkStyle.swift; path = REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyle.swift; sourceTree = ""; }; - B11141CC95E350F69CF33D29E35196C8 /* SdkStyleCustomColorScheme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkStyleCustomColorScheme.swift; path = REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleCustomColorScheme.swift; sourceTree = ""; }; - B44E5056D31D4D600ECDC0A325FAA160 /* CheckBoxCollectionViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CheckBoxCollectionViewCell.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Presentation/View/List/CheckBoxCollectionViewCell.swift; sourceTree = ""; }; - B6AFECFD50135B923C1FD084BDBE7C22 /* StoriesView.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = StoriesView.xib; path = REES46/Classes/Resources/StoriesView.xib; sourceTree = ""; }; - B7C5609937F1BC1C6374FDD23555110D /* SdkConstants.struct.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkConstants.struct.swift; path = REES46/Classes/Model/SdkConstants.struct.swift; sourceTree = ""; }; - B8451CA2C53715D5B0DD5CE41E05F7FD /* SearchWidgetCategoriesButtonType.enum.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchWidgetCategoriesButtonType.enum.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Model/SearchWidgetCategoriesButtonType.enum.swift; sourceTree = ""; }; - BACC770FED697B77A931D5E99E960739 /* Bundle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Bundle.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Extensions/Bundle.swift; sourceTree = ""; }; - BBAEDF4A9847EFCD3EE435F22F8BE274 /* Assets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Assets.swift; path = REES46/Classes/Resources/Assets.swift; sourceTree = ""; }; - BBB6B9374AD2C3ECC406231D46D5AB91 /* SearchServiceProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchServiceProtocol.swift; path = REES46/Classes/Search/Service/protocol/SearchServiceProtocol.swift; sourceTree = ""; }; - BD59689C6235B3DA48E60F475DB58695 /* StoryButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoryButton.swift; path = REES46/Classes/Button/StoryButton.swift; sourceTree = ""; }; - C082E6681E8F3C120D29488626D6F4CB /* CGSize+Min.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CGSize+Min.swift"; path = "REES46/Classes/Extensions/StoriesPreload/PreloadIndicatorProperties/CGSize+Min.swift"; sourceTree = ""; }; - C08FB967998343257D5EA821A037AB49 /* SearchResultsView.extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchResultsView.extension.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Extensions/SearchResultsView.extension.swift; sourceTree = ""; }; - C14B31FAE823B1D642564247B44E3045 /* CGRect+Center.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CGRect+Center.swift"; path = "REES46/Classes/Extensions/StoriesPreload/PreloadIndicatorProperties/CGRect+Center.swift"; sourceTree = ""; }; - C15DFEA5FF8FA471A8183D427E1A0FBB /* FullScreenDialog.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FullScreenDialog.swift; path = REES46/Classes/InAppNotification/view/component/dialog/FullScreenDialog.swift; sourceTree = ""; }; - C26A4ED3C72505990EE482F43156729E /* Coverable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Coverable.swift; path = REES46/Classes/Extensions/SdkConfiguration/PromocodeImagePlaceholder/Coverable.swift; sourceTree = ""; }; - C2CFBF87EB78E30CC4A10E9641F99C7E /* Pods-demo-store-ios.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-demo-store-ios.release.xcconfig"; sourceTree = ""; }; - C363387664200FA2F71D3A2CDC7280DB /* Resolver.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Resolver.release.xcconfig; sourceTree = ""; }; - C3CA02DCFC82E51B595A6C9C974F12F8 /* PushTokenNotificationServiceImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PushTokenNotificationServiceImpl.swift; path = REES46/Classes/Notifications/Service/impl/PushTokenNotificationServiceImpl.swift; sourceTree = ""; }; - C3F8FCA196376DA17FEA2E2BDBF046A9 /* SearchFilterViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchFilterViewController.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Presentation/View/Controller/SearchFilterViewController.swift; sourceTree = ""; }; - C4F84E23E3AA75BDC6CB30A46E04CAD8 /* PromocodeBanner.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PromocodeBanner.swift; path = REES46/Classes/Extensions/SdkConfiguration/PromocodeBanner/PromocodeBanner.swift; sourceTree = ""; }; - C5761E4476C88C2DAF70417EEB7A153F /* UserDefaultsExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UserDefaultsExtension.swift; path = REES46/Classes/Extensions/UserDefaultsExtension.swift; sourceTree = ""; }; - C5FAAB3F2D2D385CCD027E57B174E29F /* Resolver-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Resolver-Info.plist"; sourceTree = ""; }; - C98AFC2C3693C36257ED08C769B06AE8 /* UIImageView.extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIImageView.extension.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Extensions/UIImageView.extension.swift; sourceTree = ""; }; - CA30F5379A80F4262AD63D11008CA2C3 /* Assets.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = REES46/Classes/Resources/Assets.xcassets; sourceTree = ""; }; - CBD9FFE737594A23B2CCDE466FB4ABFA /* RecommendationsWidgetViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecommendationsWidgetViewCell.swift; path = REES46/Classes/Stories/StoryViewController/RecommendationsWidget/RecommendationsWidgetViewCell.swift; sourceTree = ""; }; - CE4EDE52C72CA5088F24B09078FF6339 /* SessionQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionQueue.swift; path = REES46/Classes/Extensions/SessionQueue/SessionQueue.swift; sourceTree = ""; }; - CF2DDD551DD92261DA1595866D41BDF4 /* SdkStyleCustomFonts.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkStyleCustomFonts.swift; path = REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleFonts/SdkStyleCustomFonts.swift; sourceTree = ""; }; - D143127F3D486DE331EA70AFC0A9CA69 /* SearchWidgetDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchWidgetDelegate.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Protocol/SearchWidgetDelegate.swift; sourceTree = ""; }; - D15BCBF5CFD104046A1DA3B5A34E00A8 /* Resolver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Resolver.swift; path = Sources/Resolver/Resolver.swift; sourceTree = ""; }; - D1A6C5890F4CBA2F6FED61D568336C2E /* Data.extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Data.extension.swift; path = REES46/Classes/Sdk/Extensions/Data.extension.swift; sourceTree = ""; }; - D245E0514AAC1A2B9A6D5EA2F383E90F /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - D4B2B9CC118C7C9F02751F55F0E67B8A /* SdkStyleCustomFontSizeAwareView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkStyleCustomFontSizeAwareView.swift; path = REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleFonts/SdkStyleCustomFontSizeAwareView.swift; sourceTree = ""; }; - D4E5CA602565A7664722E13FEB6725BA /* FontFamily.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FontFamily.swift; path = REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleAdditional/FontFamily.swift; sourceTree = ""; }; - D54D025D69DA902E1E2DA3AEC4E64611 /* Loader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Loader.swift; path = REES46/Classes/Extensions/StoriesImageLoader/Core/Loader.swift; sourceTree = ""; }; - D73D9C671F0F88E1BB49524FB432E32F /* UIBezierPath+ImagePlaceholder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIBezierPath+ImagePlaceholder.swift"; path = "REES46/Classes/Extensions/SdkConfiguration/PromocodeImagePlaceholder/UIBezierPath+ImagePlaceholder.swift"; sourceTree = ""; }; - D749263F25A546578DEFBC3BF0E5AF32 /* SearchWidgetListView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchWidgetListView.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Presentation/View/List/SearchWidgetListView.swift; sourceTree = ""; }; - D7C080260E1CE9F3014EAC5192925E48 /* Pods-demo-store-ios-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-demo-store-ios-acknowledgements.plist"; sourceTree = ""; }; - D92507FE448724F044E715B67CF95C06 /* SdkStyleCustomFontSizeAwareViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkStyleCustomFontSizeAwareViewController.swift; path = REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleFonts/SdkStyleCustomFontSizeAwareViewController.swift; sourceTree = ""; }; - D96C175CC246059496AB9BDA6E1BE9DE /* GenericDataTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GenericDataTask.swift; path = REES46/Classes/Extensions/SessionQueue/GenericDataTask.swift; sourceTree = ""; }; - DAF9B47891DAF76D57A7D9981B7C8BD4 /* SearchServiceImpl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchServiceImpl.swift; path = REES46/Classes/Search/Service/impl/SearchServiceImpl.swift; sourceTree = ""; }; - DDFD6E1EE7FB75CC6E6CEB7213F706BD /* Resolver */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Resolver; path = Resolver.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - DE5BAF43B59DEF502377E7A1A20B070D /* SearchWidgetMainView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchWidgetMainView.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Presentation/View/SearchWidgetMainView.swift; sourceTree = ""; }; - DEEB29A3BC9215243BE1503FDAFBDAA7 /* NetworkStatusObserver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkStatusObserver.swift; path = REES46/Classes/Extensions/NetworkStatus/ConnectionObservers/NetworkStatusObserver.swift; sourceTree = ""; }; - E03FF3A474BEF204E9B058F9BEC8AF0F /* UIColor+Extension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIColor+Extension.swift"; path = "REES46/Classes/Extensions/StoriesImageLoader/Extension/UIColor+Extension.swift"; sourceTree = ""; }; - E05DD0B0F759FD011507499783965F59 /* Event.enum.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Event.enum.swift; path = REES46/Classes/Sdk/Model/Event.enum.swift; sourceTree = ""; }; - E11C76E6B2D8299D444C41F85B5EE9B1 /* Resolver-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Resolver-prefix.pch"; sourceTree = ""; }; - E15EF1AFC704430EF4ED29FD84AD0B1B /* RecommendResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecommendResponse.swift; path = REES46/Classes/Model/RecommendResponse.swift; sourceTree = ""; }; - E17436330BCEE63A539000149B3FC905 /* TextBlockView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextBlockView.swift; path = REES46/Classes/Stories/TextBlockView/TextBlockView.swift; sourceTree = ""; }; - E22BAF276FC2E10D90D30CECC6065BC1 /* SdkQueryBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkQueryBuilder.swift; path = REES46/Classes/Extensions/SessionQueue/SdkQueryBuilder.swift; sourceTree = ""; }; - E737E38BB1C701DA6F9C8F5A414D1E61 /* REES46-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "REES46-dummy.m"; sourceTree = ""; }; - E7AC8234E6FFC3343534A652C266FED1 /* SimplePersonalizationSDK.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SimplePersonalizationSDK.swift; path = REES46/Classes/Sdk/impl/SimplePersonalizationSDK.swift; sourceTree = ""; }; - E8137E554377AAC1F49BFAF00DAF08BC /* DialogActionButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DialogActionButton.swift; path = REES46/Classes/InAppNotification/view/component/button/DialogActionButton.swift; sourceTree = ""; }; - E8BAD68CE4BF4CB414E2DF7033C5D5AD /* SearchWidgetObjectificationType.enum.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchWidgetObjectificationType.enum.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Model/SearchWidgetObjectificationType.enum.swift; sourceTree = ""; }; - E922B6A1CC41CC7966455E70EF7A3E25 /* SessionDataTaskProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDataTaskProtocol.swift; path = REES46/Classes/Extensions/SessionQueue/SessionDataTaskProtocol.swift; sourceTree = ""; }; - E9D0171D5C09EA67FBD0CFEE356B4722 /* SdkStyleColorSchemeAwareViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkStyleColorSchemeAwareViewController.swift; path = REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleColorSchemeAwareViewController.swift; sourceTree = ""; }; - EA4EDC5E1CCB8E4BE13912A8EF77BD4C /* AllSearchResultsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllSearchResultsViewController.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Presentation/View/Controller/AllSearchResultsViewController.swift; sourceTree = ""; }; - EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - EB19587C4995F001680939FB62D07656 /* SearchResultsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchResultsView.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Presentation/View/List/SearchResultsView.swift; sourceTree = ""; }; - EB2ED77352637596B690C07F655773F6 /* StoriesCollectionViewPreviewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoriesCollectionViewPreviewCell.swift; path = REES46/Classes/Stories/CollectionCell/StoriesCollectionViewPreviewCell.swift; sourceTree = ""; }; - EBEC2BF245477C2378B362C15D722114 /* FullScreenAlertViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FullScreenAlertViewController.swift; path = REES46/Classes/InAppNotification/controller/FullScreenAlertViewController.swift; sourceTree = ""; }; - EC08B3029A4539A902DBE555A723D214 /* BottomSheetDialog.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BottomSheetDialog.swift; path = REES46/Classes/InAppNotification/view/component/dialog/BottomSheetDialog.swift; sourceTree = ""; }; - EC7C148C29C9A120D5B37435C7D15BE4 /* NetworkConnectionType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkConnectionType.swift; path = REES46/Classes/Extensions/NetworkStatus/ConnectionProperties/NetworkConnectionType.swift; sourceTree = ""; }; - ECA393B75FCA80E3D7EDFBD4F0AC86FF /* UserSettings.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UserSettings.swift; path = REES46/Classes/Model/UserSettings.swift; sourceTree = ""; }; - EEE335E6EDE88669E0B523688C789250 /* Resolver-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Resolver-dummy.m"; sourceTree = ""; }; - F0D4FB2CBD68E89DAE39DADAE996D715 /* Pods-demo-store-ios-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-demo-store-ios-dummy.m"; sourceTree = ""; }; - F28F9F09B9E2843B7C0D10357A329B85 /* ViewConfigPlain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewConfigPlain.swift; path = REES46/Classes/Extensions/SdkConfiguration/ManagedViewConfig/ViewConfigPlain.swift; sourceTree = ""; }; - F435A9CB29918E4E7434FE94EC1C4AAC /* SdkStyleColorScheme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SdkStyleColorScheme.swift; path = REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleColorScheme.swift; sourceTree = ""; }; - F44B853C14709871B4A37AA3B6FC6D79 /* Coverable+UIKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Coverable+UIKit.swift"; path = "REES46/Classes/Extensions/SdkConfiguration/PromocodeImagePlaceholder/Coverable+UIKit.swift"; sourceTree = ""; }; - F568E664F045A3CC93E5CDD6C3BE48FA /* SearchResult.struct.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchResult.struct.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Model/SearchResult.struct.swift; sourceTree = ""; }; - F5BC180E7FAB9B2C0E94242BECD3E020 /* StoriesView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoriesView.swift; path = REES46/Classes/Stories/StoriesView.swift; sourceTree = ""; }; - F61DEA91A6E99993225677504409D9CF /* REES46.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = REES46.release.xcconfig; sourceTree = ""; }; - F6BE31F8174352C8E7C7B2884DD4325A /* ViewConfigService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewConfigService.swift; path = REES46/Classes/Extensions/SdkConfiguration/ManagedViewConfig/ViewConfigService.swift; sourceTree = ""; }; - F7006CE82B5202B766282B3812336F72 /* SearchResultsListView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchResultsListView.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Presentation/View/List/SearchResultsListView.swift; sourceTree = ""; }; - F9C1FFB53C490A0851C7F98661EC97B5 /* UIViewController+PromocodeBanner.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIViewController+PromocodeBanner.swift"; path = "REES46/Classes/Extensions/SdkConfiguration/PromocodeBanner/UIViewController+PromocodeBanner.swift"; sourceTree = ""; }; - FA27A02B1F02716C68695FF8915B49BD /* ImageLoaderError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageLoaderError.swift; path = REES46/Classes/Stories/ConnectionAwareLoader/ErrorHandler/ImageLoaderError.swift; sourceTree = ""; }; - FA7D544EC7540DD9CEB9E5EDFCAF04AC /* SearchWidgetObjectification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SearchWidgetObjectification.swift; path = REES46/Classes/Stories/StoryViewController/SearchWidget/Presentation/View/SearchWidgetObjectification.swift; sourceTree = ""; }; - FD00B154A42566ED1485D078DDA04163 /* DialogImageVeiw.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DialogImageVeiw.swift; path = REES46/Classes/InAppNotification/view/component/image/DialogImageVeiw.swift; sourceTree = ""; }; - FD0401CA471643A1600C0136DD52ABC1 /* NotificationActionsProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NotificationActionsProtocol.swift; path = REES46/Classes/Notifications/Service/protocol/NotificationActionsProtocol.swift; sourceTree = ""; }; - FD2289A6A34FCC1228F63846A4022326 /* TrackSourceServiceProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TrackSourceServiceProtocol.swift; path = REES46/Classes/Tracking/Service/protocol/TrackSourceServiceProtocol.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 36A9DB085C67755D2E9AA97FC45927BA /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 4F8482D5E03619D0BF470585CC65A21E /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7A15CEA6728C6B3F853FFEBFA1D5D984 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C4C9ABA7D00B0945AA88710901E36A71 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9BC2B94B990845DD960C90D01A71D386 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 3961DF7C4269161ED6BD0023F76BCA4F /* Foundation.framework in Frameworks */, - EA14653F4A93DDC4CBAE110557C64BD8 /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 0028BA3DD84DC17238D1B489826BD4F0 /* Pods */ = { - isa = PBXGroup; - children = ( - A7D0908B28B01083332486115C5A02FF /* REES46 */, - 78440AD01FC479B2664E2BEAC8FFF590 /* Resolver */, - ); - name = Pods; - sourceTree = ""; - }; - 0F64ECD0B2F028E75C990B73FC47D950 /* Resources */ = { - isa = PBXGroup; - children = ( - 6056B319C04CAAB1F9A0E58B2461FB1E /* PrivacyInfo.xcprivacy */, - ); - name = Resources; - sourceTree = ""; - }; - 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 59DA5C1F72E1D5BABC43EACBA672C3BA /* iOS */, - ); - name = Frameworks; - sourceTree = ""; - }; - 1EDB74872C951A47836419A3A8CF1CF3 /* Products */ = { - isa = PBXGroup; - children = ( - A05E795ECA6FF0F5767E433F8FE8625C /* Pods-demo-store-ios */, - 3671B3C220D01E22000CF41146C2B4AB /* REES46 */, - DDFD6E1EE7FB75CC6E6CEB7213F706BD /* Resolver */, - ); - name = Products; - sourceTree = ""; - }; - 54B44E4960940F6283E5BE08B84C2EC2 /* Targets Support Files */ = { - isa = PBXGroup; - children = ( - 954B01C74F670F14C780EC5EE723E738 /* Pods-demo-store-ios */, - ); - name = "Targets Support Files"; - sourceTree = ""; - }; - 589AC12E6DC51714958408B08E510415 /* Support Files */ = { - isa = PBXGroup; - children = ( - 441A7938A47469581080367545182CAA /* REES46.modulemap */, - E737E38BB1C701DA6F9C8F5A414D1E61 /* REES46-dummy.m */, - 7BEF61FF2E9643EA7FE1AC354096F8EF /* REES46-Info.plist */, - 50465458BCAA44AC95DBE06992E4C1F1 /* REES46-prefix.pch */, - 467E46E05D2D0EBF71D35566E63ACBC7 /* REES46-umbrella.h */, - 35A9112B3BC7B00E18A2400AA6D80FA6 /* REES46.debug.xcconfig */, - F61DEA91A6E99993225677504409D9CF /* REES46.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/REES46"; - sourceTree = ""; - }; - 59DA5C1F72E1D5BABC43EACBA672C3BA /* iOS */ = { - isa = PBXGroup; - children = ( - EAB6F611E86A4758835A715E4B4184F6 /* Foundation.framework */, - D245E0514AAC1A2B9A6D5EA2F383E90F /* UIKit.framework */, - ); - name = iOS; - sourceTree = ""; - }; - 78440AD01FC479B2664E2BEAC8FFF590 /* Resolver */ = { - isa = PBXGroup; - children = ( - D15BCBF5CFD104046A1DA3B5A34E00A8 /* Resolver.swift */, - 0F64ECD0B2F028E75C990B73FC47D950 /* Resources */, - F1A98E9C797671E348B320E39F973BBE /* Support Files */, - ); - name = Resolver; - path = Resolver; - sourceTree = ""; - }; - 954B01C74F670F14C780EC5EE723E738 /* Pods-demo-store-ios */ = { - isa = PBXGroup; - children = ( - 3FE45031A73056A2CFA8E93BF0A50596 /* Pods-demo-store-ios.modulemap */, - 711CCF8AFA98AC5676B42688D664CA30 /* Pods-demo-store-ios-acknowledgements.markdown */, - D7C080260E1CE9F3014EAC5192925E48 /* Pods-demo-store-ios-acknowledgements.plist */, - F0D4FB2CBD68E89DAE39DADAE996D715 /* Pods-demo-store-ios-dummy.m */, - 51BADA0045FDF9D08F587320E702DD5D /* Pods-demo-store-ios-frameworks.sh */, - 452AF409E3A7679850A94364FEF83BA4 /* Pods-demo-store-ios-Info.plist */, - 7116768E9395945F655A57DAECC1A933 /* Pods-demo-store-ios-umbrella.h */, - A3BC4DCD1D930788E65681442B043C28 /* Pods-demo-store-ios.debug.xcconfig */, - C2CFBF87EB78E30CC4A10E9641F99C7E /* Pods-demo-store-ios.release.xcconfig */, - ); - name = "Pods-demo-store-ios"; - path = "Target Support Files/Pods-demo-store-ios"; - sourceTree = ""; - }; - A7D0908B28B01083332486115C5A02FF /* REES46 */ = { - isa = PBXGroup; - children = ( - A2629A7AFE365218F754615CE7871130 /* AlertDialog.swift */, - EA4EDC5E1CCB8E4BE13912A8EF77BD4C /* AllSearchResultsViewController.swift */, - 3F81DE88F6D6A8CF0A26F200A2E17AFA /* AllSearchResultsViewController.extension.swift */, - 67A3CDCA691D6BE7995232748A16373C /* AppColors.struct.swift */, - 435462282132C7EFBFF3EB4F563812D7 /* AppDimensions.struct.swift */, - BBAEDF4A9847EFCD3EE435F22F8BE274 /* Assets.swift */, - EC08B3029A4539A902DBE555A723D214 /* BottomSheetDialog.swift */, - BACC770FED697B77A931D5E99E960739 /* Bundle.swift */, - 13C0949607FBDB0FB68206AA17BA3F2C /* CAPropertyAnimation+Key.swift */, - 788C2A9D4DFDD52FF34AD205D98B9CA0 /* CarouselCollectionView.swift */, - 3216D0D49E23F55FD543A4334CB738B6 /* CarouselCollectionViewCell.swift */, - 45DBCDD6992581C1D45B8CCADB9A06A3 /* CarouselConstants.swift */, - 0FB0165F42019E524651969B76166061 /* CartItem.swift */, - 3D62509BDD7AEA8C544B7567E89186C4 /* CGImageSource+ImageLoader.swift */, - C14B31FAE823B1D642564247B44E3045 /* CGRect+Center.swift */, - C082E6681E8F3C120D29488626D6F4CB /* CGSize+Min.swift */, - 7EB9610EDC52BD59AB0EC6AC8CD88F63 /* CheckBox.swift */, - B44E5056D31D4D600ECDC0A325FAA160 /* CheckBoxCollectionViewCell.swift */, - 6597618AE0ED5CAB1BFC3EDB30971237 /* CheckBoxDelegate.protocol.swift */, - 009DE1B98484F6DED3A3048154FDA05E /* ColorExtensions.swift */, - C26A4ED3C72505990EE482F43156729E /* Coverable.swift */, - F44B853C14709871B4A37AA3B6FC6D79 /* Coverable+UIKit.swift */, - 21FDED85555E1BC51F5C6860D283BF8B /* Data+ImageLoader.swift */, - D1A6C5890F4CBA2F6FED61D568336C2E /* Data.extension.swift */, - E8137E554377AAC1F49BFAF00DAF08BC /* DialogActionButton.swift */, - 90770A61EDC2960609C2348F74659710 /* DialogButtonClose.swift */, - FD00B154A42566ED1485D078DDA04163 /* DialogImageVeiw.swift */, - 3EC5602B843F342E4E78439D0B7480F3 /* DialogText.swift */, - 39246EA56A130C44AB2EC6BEFFB2E8DA /* Disk.swift */, - E05DD0B0F759FD011507499783965F59 /* Event.enum.swift */, - D4E5CA602565A7664722E13FEB6725BA /* FontFamily.swift */, - EBEC2BF245477C2378B362C15D722114 /* FullScreenAlertViewController.swift */, - C15DFEA5FF8FA471A8183D427E1A0FBB /* FullScreenDialog.swift */, - D96C175CC246059496AB9BDA6E1BE9DE /* GenericDataTask.swift */, - 759FEF5B1682A4FB5138EFAD2BE2E20A /* HashStorage.swift */, - 4A29417D8A15996608EB6B0B4A3080DE /* ImageData.swift */, - 44605B7DC530B589146C031D523ED7B2 /* ImageLoader.swift */, - FA27A02B1F02716C68695FF8915B49BD /* ImageLoaderError.swift */, - 42F25F5D38064A11AEFC1B349E3BB9D8 /* ImageLoading.swift */, - 94D6D7F2BA03955D96AAE62B23E3CE50 /* InAppNotificationProtocol.swift */, - AE7B5157E5BB99620512BC74D7E215E8 /* InitResponse.swift */, - 2DEE2348E19A18A74DEB6B8F13EB4298 /* InitService.swift */, - D54D025D69DA902E1E2DA3AEC4E64611 /* Loader.swift */, - 7EC18F84F7BBF9EFE3B6B1D3EAF88854 /* LoadingPlaceholderView.swift */, - 39D0501CB5A2B49D76CA2C8C1D31D170 /* ManagedViewConfig.swift */, - A11021FE08AD4B7374835DDED2FE6C06 /* Navigation.swift */, - 4CE66A79DEACB9755E82DA9607E71923 /* NetworkConnectionStatus.swift */, - EC7C148C29C9A120D5B37435C7D15BE4 /* NetworkConnectionType.swift */, - 4415BC38266126F4B700AEA9F71CF696 /* NetworkRadioType.swift */, - 09FE3444E3F15428CC14BBBA656BFDF8 /* NetworkStatus.swift */, - DEEB29A3BC9215243BE1503FDAFBDAA7 /* NetworkStatusObserver.swift */, - 592632DCC3CDDE9D6D53F76FB6E3BDA3 /* NetworkStatusObserverUI.swift */, - FD0401CA471643A1600C0136DD52ABC1 /* NotificationActionsProtocol.swift */, - 3B0FF75A8A6ECEC156C91344D33762BF /* NotificationHandlerServiceImpl.swift */, - 3AA2F349ACA5EB17D8B8861044125D44 /* NotificationHandlerServiceProtocol.swift */, - 4E54503771C2A4035A9DB6D8890A0BB3 /* NotificationService.swift */, - 7A97C46A25BA871E2A74785BD0EE845C /* NotificationServiceProtocol.swift */, - 486911824EFDB46BFC5E5301A1AF272E /* NotificationWidget.swift */, - 731049353C889C0D61BD8B8E0707FA62 /* Operative.swift */, - 4E55DF044CDCC05BD80460D7093A2EFF /* Option.swift */, - 3D9A3D5D79A14402DEEA96F2CA218FDD /* PersonalizationSDK.extension.swift */, - 803169BEF6F584FC3E5F440B19888634 /* PersonalizationSDK.protocol.swift */, - 65367794E2F514DFF5F34D6E28F104F6 /* PickerViewController.swift */, - 2A261DE6E66BB5AC707FD2045103635B /* ProductsButton.swift */, - 9258CF2194E766E7D171A6D423736B2E /* ProductsResponse.swift */, - 649273684EFA0169BA73F307A15869FD /* ProfileData.struct.swift */, - 3D757151E1F9C0A4B5365504783B3FD1 /* ProfileDataConstants.struct.swift */, - 158AE481E2227C1FCED02FF237A8C0DF /* ProfileDataImpl.swift */, - 14C9DAA0ABDC2A64DB8D7E649A52AFC8 /* ProfileDataProtocol.swift */, - C4F84E23E3AA75BDC6CB30A46E04CAD8 /* PromocodeBanner.swift */, - 84BF725CCE9D881924142F4AF27B9F14 /* PromoCodeView.swift */, - 15CFADA69D9A49B411E21D6AAA67BC7D /* PushEventType.enum.swift */, - 53B2E3271227E3B19B4164E14C1E4AF4 /* PushTokenHandlerImpl.swift */, - C3CA02DCFC82E51B595A6C9C974F12F8 /* PushTokenNotificationServiceImpl.swift */, - 6F84C3481F6F7D75B53EC45352D50FB2 /* PushTokenNotificationServiceProtocol.swift */, - 1B8B117BFC6F91DA4B7C856020D5CC0D /* RawRepresentable+FontInjector.swift */, - 91A2DC7B25149C82C14B1CC0AB9FD1FD /* RecommendationsStarsView.swift */, - 3D2EEEE02F7CE2DF84FD73F3E0C9594C /* RecommendationsWidgetCommunicationProtocol.swift */, - 661E14AD82A20B9B3779366E481D8C8F /* RecommendationsWidgetConstants.swift */, - 119A1B88D81767BFBB1C3099FC8CEB55 /* RecommendationsWidgetView.swift */, - CBD9FFE737594A23B2CCDE466FB4ABFA /* RecommendationsWidgetViewCell.swift */, - E15EF1AFC704430EF4ED29FD84AD0B1B /* RecommendResponse.swift */, - 92468C652D69E938D5D9B410B13D3EE5 /* RegisterNotification.swift */, - 26719E4D9E8B4D7DCB1DC4C324C6DDB8 /* ReloadButton.swift */, - 8FFC635ADA8A7ACC92EC30B37E8F64E1 /* RequestOperation.swift */, - 9209215EC6A93DBD6A69B984A8CE6DF3 /* RView_Extensions.swift */, - 80805D1B22B4DCD521B6789A8F376A7E /* RWebViewController.swift */, - 358895623BC46579129A73CC141DB50C /* RWebViewController_Extensions.swift */, - 016F0F9EC817BA0D115D86AB981BB2EC /* SdkActivityIndicator.swift */, - 259FB2B268B8064E547DA60F9983458E /* SdkApperanceViewScheme.swift */, - A6C8B4DFB96AB18111E5A7B51063FAB3 /* SDKConfigProvider.protocol.swift */, - 763B98E872CD0DC06F6304CE45ED4FA7 /* SdkConfiguration.swift */, - B7C5609937F1BC1C6374FDD23555110D /* SdkConstants.struct.swift */, - 350D026E2D40B3B196DDA470D1FF485A /* SdkDynamicFont.swift */, - 79D4214BC6EDAD7137E32FEA7B30CC56 /* SDKError.enum.swift */, - 5B898E3DA2F7379F3DE72C9BB1C28ABD /* SdkError.extension.swift */, - 1CB8AF5B112465220BE4170953B5822D /* SdkErrorDescription.protocol.swift */, - 6941707D3143955F2F433352803E4E54 /* SdkFontInjector.swift */, - 977C5525E1767E705D276AD55D7B4B8D /* SdkFontInstaller.swift */, - 7CF3D9DC2BF18E8B6F11CA081ED724AA /* SdkGlobalHelper.swift */, - 6C3923E2B0E9872E0059B9A7E3A754F5 /* SdkImageReloader.swift */, - 8293EF3E3C991BEAEC27C995DBDFACBC /* SdkPopupAlertView.swift */, - E22BAF276FC2E10D90D30CECC6065BC1 /* SdkQueryBuilder.swift */, - AE808C627CFADE4AB1538577394780FB /* SdkStyle.swift */, - F435A9CB29918E4E7434FE94EC1C4AAC /* SdkStyleColorScheme.swift */, - 9A9987EB80F7154F339874BB9E264B48 /* SdkStyleColorSchemeAwareView.swift */, - E9D0171D5C09EA67FBD0CFEE356B4722 /* SdkStyleColorSchemeAwareViewController.swift */, - B11141CC95E350F69CF33D29E35196C8 /* SdkStyleCustomColorScheme.swift */, - 30E5B97774FB539C1DC3F87570665F1B /* SdkStyleCustomColorSchemeAwareView.swift */, - 0B1B861F7911E97B3C8EDA23EF05030E /* SdkStyleCustomColorSchemeAwareViewController.swift */, - CF2DDD551DD92261DA1595866D41BDF4 /* SdkStyleCustomFonts.swift */, - D4B2B9CC118C7C9F02751F55F0E67B8A /* SdkStyleCustomFontSizeAwareView.swift */, - D92507FE448724F044E715B67CF95C06 /* SdkStyleCustomFontSizeAwareViewController.swift */, - 21F6929B4CF43A985D682E77AB4F914A /* SdkStyleUIApplication.swift */, - 5466A9CB4DC4C1EB3C36A7A8A9319C6C /* SearchFilterActionButtons.swift */, - 27B0CF48BC3AE77E2EBD6BBAFA69C79F /* SearchFilterCheckBoxes.swift */, - 0E32578452E50BED38C1A8A475095F44 /* SearchFilterCheckBoxViewDelegate.protocol.swift */, - 5CC436DB5A51150AD32F1093A1D63C0C /* SearchFilterHeaderView.swift */, - 8B5B27ACBE221252A480E9E304830351 /* SearchFilterPickerView.swift */, - 815A307ED7AAEE9D77609BBFE54483A8 /* SearchFilterPickerViewDelegate.protocol.swift */, - C3F8FCA196376DA17FEA2E2BDBF046A9 /* SearchFilterViewController.swift */, - 35BEC6E27F2D36BFF0A1E0FAB21191BB /* SearchFilterViewController.extension.swift */, - 432E543F30D5AF9EA8FA41E1EC4C9605 /* SearchResponse.swift */, - F568E664F045A3CC93E5CDD6C3BE48FA /* SearchResult.struct.swift */, - 9B4492E85CA71A29BD7AC704F4B8864F /* SearchResultHeaderView.swift */, - 1036BCD8E22451E7247A50804CCF3424 /* SearchResultsButton.protocol.swift */, - F7006CE82B5202B766282B3812336F72 /* SearchResultsListView.swift */, - EB19587C4995F001680939FB62D07656 /* SearchResultsView.swift */, - C08FB967998343257D5EA821A037AB49 /* SearchResultsView.extension.swift */, - DAF9B47891DAF76D57A7D9981B7C8BD4 /* SearchServiceImpl.swift */, - BBB6B9374AD2C3ECC406231D46D5AB91 /* SearchServiceProtocol.swift */, - 342EEF9F50F20852882BA766245EFB9C /* SearchWidget.swift */, - 8E6D6AAA1AB3C87C91C79CC66554E951 /* SearchWidgetCategoriesButton.swift */, - B8451CA2C53715D5B0DD5CE41E05F7FD /* SearchWidgetCategoriesButtonType.enum.swift */, - D143127F3D486DE331EA70AFC0A9CA69 /* SearchWidgetDelegate.swift */, - 575C75F9140BC5BAA3251E9F23B7F9AB /* SearchWidgetExtension.swift */, - 3DAF063553B59888530EB0D29E1C809A /* SearchWidgetHistoryButton.swift */, - D749263F25A546578DEFBC3BF0E5AF32 /* SearchWidgetListView.swift */, - 350F060D6A7E0016A49B8A116DE4BA2A /* SearchWidgetListViewCell.swift */, - DE5BAF43B59DEF502377E7A1A20B070D /* SearchWidgetMainView.swift */, - 0A51CE373335ED412ADE26F9B5FCD19F /* SearchWidgetModel.swift */, - FA7D544EC7540DD9CEB9E5EDFCAF04AC /* SearchWidgetObjectification.swift */, - E8BAD68CE4BF4CB414E2DF7033C5D5AD /* SearchWidgetObjectificationType.enum.swift */, - 9CFE2A551669B8A838A6CA0E86D61103 /* SearchWidgetTextField.swift */, - 2B2930617367EF2EAA39103346CF00FF /* SearchWidgetView.swift */, - 07C57013358099BBB1F2F2710948C4D3 /* SearchWidgetViewController.swift */, - E922B6A1CC41CC7966455E70EF7A3E25 /* SessionDataTaskProtocol.swift */, - 7A89ECD79BDF07640163E543CAA161CB /* SessionOperation.swift */, - CE4EDE52C72CA5088F24B09078FF6339 /* SessionQueue.swift */, - A43397969E55FB65BB618FD416A0D22C /* SettingsManageable.swift */, - E7AC8234E6FFC3343534A652C266FED1 /* SimplePersonalizationSDK.swift */, - 772AA1BEC14898CDEB7594D412C8AF7F /* SimplePersonalizationSDK.extension.swift */, - 69FA3AA42C7B1BF521C2B11388260985 /* SlideView.swift */, - 3D5D86DF14CE6B63C2687383504D9505 /* SlideViewController.swift */, - 1B415F6966120590B93FA376FE5C36A8 /* Stories.swift */, - EB2ED77352637596B690C07F655773F6 /* StoriesCollectionViewPreviewCell.swift */, - 6E2B97E4C31C868F8196BABC3DAEDF81 /* StoriesImageLoader.swift */, - 2BF346E9A542598D68E38D944597E361 /* StoriesSlideReloadIndicator.swift */, - F5BC180E7FAB9B2C0E94242BECD3E020 /* StoriesView.swift */, - 47E41B7C4DF498C217BF3DD90891349E /* StoryBlockImageCache.swift */, - BD59689C6235B3DA48E60F475DB58695 /* StoryButton.swift */, - 38326D3D9A803FCCAFE990B1E3F571E1 /* StoryCollectionViewCell.swift */, - 155DFCDC6DD609A0D33E0AB77F0CB02C /* StoryViewController.swift */, - 370342C74E92696C786A02F64CEAD564 /* String.extension.swift */, - 0B07F3860CE3E3A8D7FFE20AD4FD64E0 /* SubscriptionServiceImpl.swift */, - 18E979877AB6E04CF5268AE968D97609 /* SubscriptionServiceProtocol.swift */, - 4F686A842B05100930B43FAFFC8D96F6 /* TBAppearanceConfiguration.swift */, - 95768DCCF6FAC4EACFC481DCD291E0B7 /* TBFontConfiguration.swift */, - 3BC55C3F000602219892FCA879D5407C /* TBTextConfiguration.swift */, - 8208744A96B3694133B19170DE843A0E /* TexBlockConfiguration.swift */, - 8E533A7F2482BA925DBC2147F3273A1D /* TextBlockConstants.swift */, - E17436330BCEE63A539000149B3FC905 /* TextBlockView.swift */, - 714A828F8F30B6F602452EC53F42F03C /* TrackEventServiceProtocol.swift */, - 67A6E25FF6CBD9E06A7CC07EA5A85EAB /* TrackServiceImpl.swift */, - FD2289A6A34FCC1228F63846A4022326 /* TrackSourceServiceProtocol.swift */, - 8E17C83DC8BBDCACD742D84DD18B9F75 /* UIBezierPath+Circle.swift */, - D73D9C671F0F88E1BB49524FB432E32F /* UIBezierPath+ImagePlaceholder.swift */, - E03FF3A474BEF204E9B058F9BEC8AF0F /* UIColor+Extension.swift */, - 2355111CF381DA8CAC6682774E723B75 /* UIFont+FontInjector.swift */, - 2BC0D87A8F0E96D172C372234E6C4103 /* UIFontDescriptorUsage.swift */, - 7C952F8AA3CE46D0F0D72B16BB0BB149 /* UIImage+ImageLoader.swift */, - 182C88327201223192007A1C559D5461 /* UIImageView+ImageLoader.swift */, - C98AFC2C3693C36257ED08C769B06AE8 /* UIImageView.extension.swift */, - 5458AE6F88BE43C72AE9C0384984CD6E /* UISdkWrapLabel.swift */, - 2260CD7597693BE70413E8ADEE57CEEC /* UIView.swift */, - F9C1FFB53C490A0851C7F98661EC97B5 /* UIViewController+PromocodeBanner.swift */, - 59EE8BEB552E8E97FF401C44F4A363BC /* URLLiteralConvertible.swift */, - 86FDDF0FD61FCC829E6B01B01303A55C /* URLSession.extension.swift */, - 79A29BF30D6B9ABB6F15F10F027FC014 /* URLSessionQueue.swift */, - C5761E4476C88C2DAF70417EEB7A153F /* UserDefaultsExtension.swift */, - ECA393B75FCA80E3D7EDFBD4F0AC86FF /* UserSettings.swift */, - A70B50D35B2B9B3A31F1F409DE457FD9 /* VideoDownloadManager.swift */, - 82F3929666950A32E141014066974D0C /* VideoDownloadObject.swift */, - 4C1A478978AA75701BBF375107A482A2 /* VideoFileUtils.swift */, - F28F9F09B9E2843B7C0D10357A329B85 /* ViewConfigPlain.swift */, - F6BE31F8174352C8E7C7B2884DD4325A /* ViewConfigService.swift */, - FF2C92F539739A93C29DA9BD53335A7C /* Resources */, - 589AC12E6DC51714958408B08E510415 /* Support Files */, - ); - name = REES46; - path = REES46; - sourceTree = ""; - }; - CF1408CF629C7361332E53B88F7BD30C = { - isa = PBXGroup; - children = ( - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */, - 0028BA3DD84DC17238D1B489826BD4F0 /* Pods */, - 1EDB74872C951A47836419A3A8CF1CF3 /* Products */, - 54B44E4960940F6283E5BE08B84C2EC2 /* Targets Support Files */, - ); - sourceTree = ""; - }; - F1A98E9C797671E348B320E39F973BBE /* Support Files */ = { - isa = PBXGroup; - children = ( - 776EE19C45FAD579CF1EB79558094C72 /* Resolver.modulemap */, - EEE335E6EDE88669E0B523688C789250 /* Resolver-dummy.m */, - C5FAAB3F2D2D385CCD027E57B174E29F /* Resolver-Info.plist */, - E11C76E6B2D8299D444C41F85B5EE9B1 /* Resolver-prefix.pch */, - 3D7CCD8D060AC465281FADCA913D7CE2 /* Resolver-umbrella.h */, - 83BFD6AC752D1918CF4AD241F5ED17A6 /* Resolver.debug.xcconfig */, - C363387664200FA2F71D3A2CDC7280DB /* Resolver.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Resolver"; - sourceTree = ""; - }; - FF2C92F539739A93C29DA9BD53335A7C /* Resources */ = { - isa = PBXGroup; - children = ( - CA30F5379A80F4262AD63D11008CA2C3 /* Assets.xcassets */, - 8C571D19980F021FD05AE43AD79D1E6B /* StoriesCollectionViewPreviewCell.xib */, - B6AFECFD50135B923C1FD084BDBE7C22 /* StoriesView.xib */, - 7E130DB6AB3E0694F39029ED32A40B24 /* StoryCollectionViewCell.xib */, - ); - name = Resources; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 0497B8209A7C42239CBA678B6D7555CE /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - EFD8F45C4CFA61345C78244130DCE50A /* REES46-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4F781D09EF6CEEA323B2D4153E43B10A /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - FA0353B57B9E752F966A16FD57B8A8BD /* Resolver-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 57157C5440687E95F38BA34598934166 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 21C5236B0A2082EEC1DA024B194EDAF0 /* Pods-demo-store-ios-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 0C03A6912D025B497528F2C7FFE2F1D5 /* REES46 */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8E1D1D82B8C19B1C0331B2BEB8C4D8C4 /* Build configuration list for PBXNativeTarget "REES46" */; - buildPhases = ( - 0497B8209A7C42239CBA678B6D7555CE /* Headers */, - 162299803C2DD730DDF1AE240582C26A /* Sources */, - 7A15CEA6728C6B3F853FFEBFA1D5D984 /* Frameworks */, - 8564548E0C86E118BEEF4D107281180D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = REES46; - productName = REES46; - productReference = 3671B3C220D01E22000CF41146C2B4AB /* REES46 */; - productType = "com.apple.product-type.framework"; - }; - 3AF1A4FE1808CDAE51281F7A31DB2A13 /* Resolver */ = { - isa = PBXNativeTarget; - buildConfigurationList = EB24502C2CCD4701AD9767427762F135 /* Build configuration list for PBXNativeTarget "Resolver" */; - buildPhases = ( - 4F781D09EF6CEEA323B2D4153E43B10A /* Headers */, - E4CAC94D0DDD20CFD1040A69ED8B3AF0 /* Sources */, - 9BC2B94B990845DD960C90D01A71D386 /* Frameworks */, - 651078E390375771091C686D67F4FB71 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Resolver; - productName = Resolver; - productReference = DDFD6E1EE7FB75CC6E6CEB7213F706BD /* Resolver */; - productType = "com.apple.product-type.framework"; - }; - 80CA65F514DD5B1DC5829F29295F6292 /* Pods-demo-store-ios */ = { - isa = PBXNativeTarget; - buildConfigurationList = CC567D09592DD472849065F3CE1979C1 /* Build configuration list for PBXNativeTarget "Pods-demo-store-ios" */; - buildPhases = ( - 57157C5440687E95F38BA34598934166 /* Headers */, - 24C3D6D8789B553C261691AAD58740BF /* Sources */, - 36A9DB085C67755D2E9AA97FC45927BA /* Frameworks */, - 2A9CA42EDD264B9B78762D324BC73055 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - C7599D115013A988B8B506000DF95B70 /* PBXTargetDependency */, - 9D5796DE7CC3CC110A40F847C4CE3EDD /* PBXTargetDependency */, - ); - name = "Pods-demo-store-ios"; - productName = Pods_demo_store_ios; - productReference = A05E795ECA6FF0F5767E433F8FE8625C /* Pods-demo-store-ios */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - BFDFE7DC352907FC980B868725387E98 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 1500; - LastUpgradeCheck = 1500; - }; - buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; - compatibilityVersion = "Xcode 14.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - Base, - en, - ); - mainGroup = CF1408CF629C7361332E53B88F7BD30C; - minimizedProjectReferenceProxies = 0; - productRefGroup = 1EDB74872C951A47836419A3A8CF1CF3 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 80CA65F514DD5B1DC5829F29295F6292 /* Pods-demo-store-ios */, - 0C03A6912D025B497528F2C7FFE2F1D5 /* REES46 */, - 3AF1A4FE1808CDAE51281F7A31DB2A13 /* Resolver */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 2A9CA42EDD264B9B78762D324BC73055 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 651078E390375771091C686D67F4FB71 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 87AF8F757C19F3FA49377F8C3CD4486D /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8564548E0C86E118BEEF4D107281180D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - E376227043AE68F0819F01C767C4400C /* Assets.xcassets in Resources */, - 6DB57B9B041C8CCCEF3912E47FB5D717 /* StoriesCollectionViewPreviewCell.xib in Resources */, - 6EC76DC8A79007FF669B1B418A4EEF9C /* StoriesView.xib in Resources */, - 116AE95379F84575815C29772F7C4767 /* StoryCollectionViewCell.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 162299803C2DD730DDF1AE240582C26A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 87045DA860ACF72B195FD6528F6C9FF3 /* AlertDialog.swift in Sources */, - DFE1404F36B46BDBF00FD441425B7CDE /* AllSearchResultsViewController.swift in Sources */, - 8D032530F84E135C3F2A4B05CEFD5D35 /* AllSearchResultsViewController.extension.swift in Sources */, - E2D8750485C54EA1234928061426B057 /* AppColors.struct.swift in Sources */, - 754A1F1E31FF970DBDC8668D7DA6C830 /* AppDimensions.struct.swift in Sources */, - 51CD9BCEB709FD2B580AEF97BF85C796 /* Assets.swift in Sources */, - D1557481044FA8679CDCBC49ED6FBFB8 /* BottomSheetDialog.swift in Sources */, - EB6CA4EDFD204298CEB1E56B91046CD6 /* Bundle.swift in Sources */, - 9133D2BEF9EB9FB39271C4E4270CB163 /* CAPropertyAnimation+Key.swift in Sources */, - 19EE246BAB5F55010A04C34800BC2216 /* CarouselCollectionView.swift in Sources */, - 6966EE50EA8122FFA740A8223B4740B9 /* CarouselCollectionViewCell.swift in Sources */, - 5EE910225DDB14F9798D972879CB28E6 /* CarouselConstants.swift in Sources */, - 7BFA3CE16863A29AE523634B64866E34 /* CartItem.swift in Sources */, - 516B12AA550BE795B6D891ACBBA2272F /* CGImageSource+ImageLoader.swift in Sources */, - D66783C5DB98E8438DD5EE15016D9061 /* CGRect+Center.swift in Sources */, - CDDB17009796217BBD6D45482E884EFE /* CGSize+Min.swift in Sources */, - 49FFC142348EF1C1E57E93DD6E8014B0 /* CheckBox.swift in Sources */, - 89946A70E65C27E5B8404B3A5A9FB0AE /* CheckBoxCollectionViewCell.swift in Sources */, - 7F311D0CDE41D6DE5AEB20706D7C3FDE /* CheckBoxDelegate.protocol.swift in Sources */, - 835C2FBD1965723EC71ED4019433DC42 /* ColorExtensions.swift in Sources */, - A53B4271B2AE822C99E88F8D32CA382F /* Coverable.swift in Sources */, - 1849D7AC9D5FA57BC42FE3A1E5A1E719 /* Coverable+UIKit.swift in Sources */, - 1EE6879433A4974B423294E242AE1F82 /* Data+ImageLoader.swift in Sources */, - D6296D84D29702BE57E83FE43D72FEBD /* Data.extension.swift in Sources */, - BD566F1B58DC06A7E9C5C2B781DA533A /* DialogActionButton.swift in Sources */, - 9B0A27626814831DFA23A1555EDFC02D /* DialogButtonClose.swift in Sources */, - 5496D106C1FB445251E84BF0EC539F9F /* DialogImageVeiw.swift in Sources */, - 73858371B126A55EDE10CCEDA1206112 /* DialogText.swift in Sources */, - 1DC10CB8CA475B10F29482EEF0166C91 /* Disk.swift in Sources */, - B1DE22D8EBCD77946D139662ACB90514 /* Event.enum.swift in Sources */, - 6CA11BFED28BFD7F5E271650017DEC3D /* FontFamily.swift in Sources */, - 02E2478D92FE7A7C24BB90D99376601D /* FullScreenAlertViewController.swift in Sources */, - 998012C7CF7765EECF2FF61E030235F5 /* FullScreenDialog.swift in Sources */, - D3BC3D7BC94821FDADC504D6283552C8 /* GenericDataTask.swift in Sources */, - 325C748D32E081C380C64143ADE312D7 /* HashStorage.swift in Sources */, - 2C95261FC306B978B2F167F16E8BD3DB /* ImageData.swift in Sources */, - 7716D25C4B3CDEF8760CF11FFAECE65E /* ImageLoader.swift in Sources */, - 6E416F0D4EC5EDBAB0D30F979D5F3CD3 /* ImageLoaderError.swift in Sources */, - ECB1A46A0E72D39C9E6C252B30331981 /* ImageLoading.swift in Sources */, - C76C2C051FD42105EAEDF905E6029F76 /* InAppNotificationProtocol.swift in Sources */, - 65F3142D6929F57304CB558206767413 /* InitResponse.swift in Sources */, - 198D6923F00991CADBE7B959EF32564F /* InitService.swift in Sources */, - D21B560E76D72A4632AC3F04FFBF9EB6 /* Loader.swift in Sources */, - 907BE7D15B2744A8C1D1BF1D3FCE6464 /* LoadingPlaceholderView.swift in Sources */, - 614E757CF52890C2B43E92A8F52A7D04 /* ManagedViewConfig.swift in Sources */, - 402D9D68DDA59F7E89A8A9118C05E55E /* Navigation.swift in Sources */, - 4EB471AA58678D18E586DCDCA46704B5 /* NetworkConnectionStatus.swift in Sources */, - 9E6DE4D50FDE286E1830224162E9EC31 /* NetworkConnectionType.swift in Sources */, - 9411100FC11E50C813F79F45007E7626 /* NetworkRadioType.swift in Sources */, - 3162F55D66DA1BEFFEC76FCF7F0C1F77 /* NetworkStatus.swift in Sources */, - 80E92C0F07F8247812453F623E646BB8 /* NetworkStatusObserver.swift in Sources */, - B6B5C712594D448F75A4BA0443C19878 /* NetworkStatusObserverUI.swift in Sources */, - BA3E96DEFF8DB7B12B83D242E13750FF /* NotificationActionsProtocol.swift in Sources */, - F8A1DE9AC264D48F28C6B2CA7CBCD447 /* NotificationHandlerServiceImpl.swift in Sources */, - B89B3C4D8378ADC2B7B9FB9F76C0EB17 /* NotificationHandlerServiceProtocol.swift in Sources */, - 89041DE5E198D3A5FD946320097A0172 /* NotificationService.swift in Sources */, - 046F56FBFB3E62D9BDFE2F3F600E0240 /* NotificationServiceProtocol.swift in Sources */, - 41B4183646E6ECA21BDCCBFEE5953B1A /* NotificationWidget.swift in Sources */, - 23186245A9B4413F09D8E39E04604654 /* Operative.swift in Sources */, - 99FE013F4C8D2BF496D1E7F6A0CDA7CA /* Option.swift in Sources */, - B68BE1A4F974E6AC799F705970D190AE /* PersonalizationSDK.extension.swift in Sources */, - 312E873813F91729D9D8E27C7486371D /* PersonalizationSDK.protocol.swift in Sources */, - B42149F2BAF470685E5B7F1FA06AB9A0 /* PickerViewController.swift in Sources */, - 715EB402D5B075A56E1F119789870211 /* ProductsButton.swift in Sources */, - DD582BAFCE2F4690253783C5201B4D9D /* ProductsResponse.swift in Sources */, - F2F482DEC888F01D6B41F846D1791276 /* ProfileData.struct.swift in Sources */, - 3318889A52FB9A938685BC28E330949A /* ProfileDataConstants.struct.swift in Sources */, - 35B3AAAEB14AF69DC256E347FA9A37B1 /* ProfileDataImpl.swift in Sources */, - 3033C2F2BC567F6C2A504819E8ADCE13 /* ProfileDataProtocol.swift in Sources */, - F8CA3169463D5840A2F3D3D038F79A04 /* PromocodeBanner.swift in Sources */, - CCA15A03858AC7F4324C13F15FAD3064 /* PromoCodeView.swift in Sources */, - CE1AB0A27B2BE22DAB219335193E79E7 /* PushEventType.enum.swift in Sources */, - 447B09B37F3125C148F2F87D8E3FF3FE /* PushTokenHandlerImpl.swift in Sources */, - 718BFC6E5826831F763468C1C2AB9DCC /* PushTokenNotificationServiceImpl.swift in Sources */, - D71A5826B28868F4032F11A23EA2A688 /* PushTokenNotificationServiceProtocol.swift in Sources */, - 993014E78B54097345FE373EE7EE75FA /* RawRepresentable+FontInjector.swift in Sources */, - C2A16B1BAC3896A9D19B25504E710127 /* RecommendationsStarsView.swift in Sources */, - 6F12E4B8E5E0C9E87004B0C9A46F04C1 /* RecommendationsWidgetCommunicationProtocol.swift in Sources */, - ED6ED9F6615DBEB30CC6B89130F4960A /* RecommendationsWidgetConstants.swift in Sources */, - EC646905239F970EF42F6B5CA51C824F /* RecommendationsWidgetView.swift in Sources */, - 95772C7E80A8968269D99ADEA3FCC28E /* RecommendationsWidgetViewCell.swift in Sources */, - C6A9B9DEB56BE375CCC95FE0E07A804D /* RecommendResponse.swift in Sources */, - EE37B42734D1D3B13BF1930003338134 /* REES46-dummy.m in Sources */, - B1744077EDCB9820488E3C6458E76D8E /* RegisterNotification.swift in Sources */, - 658954193136BC5E919A86DA4201D1A1 /* ReloadButton.swift in Sources */, - 0C22917220F67DC97118533040ED80F8 /* RequestOperation.swift in Sources */, - 93822B3E9BE2E6D5A67B73AA8980340B /* RView_Extensions.swift in Sources */, - 7077DA13FB79569119FA30CAA794DE48 /* RWebViewController.swift in Sources */, - 8B6AD6B70AEA4D2D63742F304E51A098 /* RWebViewController_Extensions.swift in Sources */, - 434F90048BE40B680133F0879FDBD5AF /* SdkActivityIndicator.swift in Sources */, - 71E863F8B222DF0D7C854D6D4BB019FF /* SdkApperanceViewScheme.swift in Sources */, - 8B5D22F5AF68F57A02B73B0DBA043438 /* SDKConfigProvider.protocol.swift in Sources */, - FB02BD452F32C691FCCAFB4960B50164 /* SdkConfiguration.swift in Sources */, - DBF6439D753C4DB1A7565DF07C559EA7 /* SdkConstants.struct.swift in Sources */, - C50268BFA57A3DD610C7B402FAEA48B6 /* SdkDynamicFont.swift in Sources */, - A1233B4E880C680523951D47977E5E57 /* SDKError.enum.swift in Sources */, - D2D1DFBDD05ED5029D9836581FFB6FA8 /* SdkError.extension.swift in Sources */, - 29127AE32397D281363E86BD02A1D1B2 /* SdkErrorDescription.protocol.swift in Sources */, - 853E917E81EF70FBDA1C0EAB19016E7A /* SdkFontInjector.swift in Sources */, - 6FF6BB68CAB360D665D3B01B20624EA5 /* SdkFontInstaller.swift in Sources */, - 95B12F0F2FF9D32DEFCBD8652E2A6022 /* SdkGlobalHelper.swift in Sources */, - E3AA9F3B7793B2DB01E311A9DDC40827 /* SdkImageReloader.swift in Sources */, - DA3323271E7A7E10734AFFCE6141FB6F /* SdkPopupAlertView.swift in Sources */, - FE139F9FB6511B5C0B1CCC3A92154CFD /* SdkQueryBuilder.swift in Sources */, - 657E3A8F2E31225BF6738743BEB5040A /* SdkStyle.swift in Sources */, - 9CFED3B9724C4BA6E2404155153E2709 /* SdkStyleColorScheme.swift in Sources */, - 54298611DD3103E6BD9F8545C3EFBECA /* SdkStyleColorSchemeAwareView.swift in Sources */, - 7F4B60B07F12D6D9B00AC710898BC3E6 /* SdkStyleColorSchemeAwareViewController.swift in Sources */, - 705272F73D15E6CFEE6BCB5ED0FDEADF /* SdkStyleCustomColorScheme.swift in Sources */, - F7578F27D974C5D158FFFE1E7BD6E7E8 /* SdkStyleCustomColorSchemeAwareView.swift in Sources */, - 5B25BC49BD3496F2621827DAAAA30425 /* SdkStyleCustomColorSchemeAwareViewController.swift in Sources */, - ACF7B22310219A909CE2015E503F7103 /* SdkStyleCustomFonts.swift in Sources */, - 8049FD3EB5EC4C33710EC4877FBC4909 /* SdkStyleCustomFontSizeAwareView.swift in Sources */, - 9E84FB5815AEBBBBF6A0E32FCA6A2BF7 /* SdkStyleCustomFontSizeAwareViewController.swift in Sources */, - 9F48E8D1EC8C0A5FD269BD2DA51FCE27 /* SdkStyleUIApplication.swift in Sources */, - 18C88A9A18911E9E843E65C5797A8B49 /* SearchFilterActionButtons.swift in Sources */, - 745EDDB344D53D226B0C4D1A589D8AB5 /* SearchFilterCheckBoxes.swift in Sources */, - B31F991069E28F52DBBFB35089C003C2 /* SearchFilterCheckBoxViewDelegate.protocol.swift in Sources */, - F9BF25827EECDF676394C8207B3A7A38 /* SearchFilterHeaderView.swift in Sources */, - 7AB63EC8A770F08F8D225E4ACF284C12 /* SearchFilterPickerView.swift in Sources */, - 2B0E90772BF973739BB0A975F4A25DAD /* SearchFilterPickerViewDelegate.protocol.swift in Sources */, - 035085202F1290748B6901610A1C3803 /* SearchFilterViewController.swift in Sources */, - 41D017503655B4E150EBB695A3D9CCCA /* SearchFilterViewController.extension.swift in Sources */, - 57ACD227CF537AF191DF5B229A2FDAEF /* SearchResponse.swift in Sources */, - E1953493E7BC57680742EC15ED4CD81D /* SearchResult.struct.swift in Sources */, - 2698CAF1CB3C90F15DEE54EF55C9E953 /* SearchResultHeaderView.swift in Sources */, - 1AEC8D195103941D56BEE4026601AA6F /* SearchResultsButton.protocol.swift in Sources */, - C8FE32DE682C0CE147FA575EAAA9F7FE /* SearchResultsListView.swift in Sources */, - 2448A33CBB4D2BB29E3BA45F3785C1DF /* SearchResultsView.swift in Sources */, - 13272AF91620D621EA26E24549070797 /* SearchResultsView.extension.swift in Sources */, - A26DE048CABB3908786DFE0CA1C3CF72 /* SearchServiceImpl.swift in Sources */, - DB6A701DBE1D4A479D8017DC4EE502FD /* SearchServiceProtocol.swift in Sources */, - C5AF8503D873ED39856D2E172C78B80A /* SearchWidget.swift in Sources */, - 3DA3089316E791CC241C3B0F19CD9DD3 /* SearchWidgetCategoriesButton.swift in Sources */, - 0BFA700DA95C293E073E033E581F6B39 /* SearchWidgetCategoriesButtonType.enum.swift in Sources */, - F935E4FC6248E21039FD42D98AE25418 /* SearchWidgetDelegate.swift in Sources */, - 32E8BF53CD4F2CF660AA1EDCFEC9B996 /* SearchWidgetExtension.swift in Sources */, - E90EB8F8F9A719CDC13C84725C75C15D /* SearchWidgetHistoryButton.swift in Sources */, - B03E79310B0463DE2699E2E38C41FF4C /* SearchWidgetListView.swift in Sources */, - 88D8EA3B5D3D67A83B26CFF726A4F6DA /* SearchWidgetListViewCell.swift in Sources */, - CD47838DAFC124E920661640B81550DC /* SearchWidgetMainView.swift in Sources */, - D4E1DAA19CBF9E4091987688236ED619 /* SearchWidgetModel.swift in Sources */, - 517ACA9E75E8140D2FE86BEE09874C7D /* SearchWidgetObjectification.swift in Sources */, - 36BFF56DAE89D4B705A72F0B7B3E2C45 /* SearchWidgetObjectificationType.enum.swift in Sources */, - 978B328B3CC172E9069AC31E5A7825E8 /* SearchWidgetTextField.swift in Sources */, - 5E380191AE481C787D95E61B30263B50 /* SearchWidgetView.swift in Sources */, - 14BA05544BB424EE741A3BA3AAF6E814 /* SearchWidgetViewController.swift in Sources */, - 710F96442DD247E5CC8A1E1C858491E7 /* SessionDataTaskProtocol.swift in Sources */, - DA644E7C7F854AE0BBDB910F004D24BE /* SessionOperation.swift in Sources */, - 6AB8491E0354D63E2179E60F89825618 /* SessionQueue.swift in Sources */, - A38B208FF20463E838B18A38619CC554 /* SettingsManageable.swift in Sources */, - 592837C73ACD0C223615BB72B19FF713 /* SimplePersonalizationSDK.swift in Sources */, - 2BDEB05457ADAD73B54F8A1CFF970C24 /* SimplePersonalizationSDK.extension.swift in Sources */, - 318C34BE2626A200186F81CB02C76424 /* SlideView.swift in Sources */, - DB610DFC784EE7AB91C0B4E23B8F89CC /* SlideViewController.swift in Sources */, - 650E1D17541DEE6BF5660CAE44F49B14 /* Stories.swift in Sources */, - F8191B0BB1A4C58686BB3598305F47DC /* StoriesCollectionViewPreviewCell.swift in Sources */, - 665DBF785E441B0FBB3B6F2B521BBE14 /* StoriesImageLoader.swift in Sources */, - 920D1BBA15A019F588D0DA4CF4FD411C /* StoriesSlideReloadIndicator.swift in Sources */, - ABF2375F52832F53A519355A8B58B224 /* StoriesView.swift in Sources */, - A8B3FA4EF3318BC471BB7BACAEB0A50E /* StoryBlockImageCache.swift in Sources */, - 06DD40F3E87ACC1416FB5C9E9F198A54 /* StoryButton.swift in Sources */, - B93B0EFDE371F3DC5ED40329AAFFB373 /* StoryCollectionViewCell.swift in Sources */, - D9E1039269642B1E7D6010CDA249D8C2 /* StoryViewController.swift in Sources */, - D7BC005369E2DB4FFB538E1A1CD390EF /* String.extension.swift in Sources */, - FA6B453F3C071D9B49C944C95BE8E352 /* SubscriptionServiceImpl.swift in Sources */, - FC1A956653E9ECC5DB2B7E75A25FE742 /* SubscriptionServiceProtocol.swift in Sources */, - 67EEAEEBF2F87C0EFE29362E1D7A1778 /* TBAppearanceConfiguration.swift in Sources */, - 79DCED4A6E1EC3E85C12149AF7FC8008 /* TBFontConfiguration.swift in Sources */, - 0A74D9D730CBB0EB8006A37171A3C23C /* TBTextConfiguration.swift in Sources */, - 2840E0DD7FD1D3C01A5C04BC4801FA19 /* TexBlockConfiguration.swift in Sources */, - E5E9A7240CF77CB527D60B79C017C28B /* TextBlockConstants.swift in Sources */, - 0D521BD2D6F90D63ED1FA6B1A06F6809 /* TextBlockView.swift in Sources */, - F556770333F7205C9C825416D1547069 /* TrackEventServiceProtocol.swift in Sources */, - B73F229E04684F619BF3B96D266141C5 /* TrackServiceImpl.swift in Sources */, - BF7CCE1F5A8CFD34FD4847AE63E1580E /* TrackSourceServiceProtocol.swift in Sources */, - 5707D0D8B3B0956C5830DA994334AC28 /* UIBezierPath+Circle.swift in Sources */, - B709464F9F7A5C6854C390ADD1BBDA69 /* UIBezierPath+ImagePlaceholder.swift in Sources */, - 03057BAAF29E2B92EC73DFFFBEA56F21 /* UIColor+Extension.swift in Sources */, - 60AAB9054E902DE42B702ACA4D1B735C /* UIFont+FontInjector.swift in Sources */, - 06B56393C01CFF9A08D4900408340123 /* UIFontDescriptorUsage.swift in Sources */, - B6F8A4FC0B01199D77C3E16BDC1DA41E /* UIImage+ImageLoader.swift in Sources */, - 25AE14E5BC9CEADF12875C9A04DA7137 /* UIImageView+ImageLoader.swift in Sources */, - 59B89B2A803A67EE3F0C103EC5458A5E /* UIImageView.extension.swift in Sources */, - 60014773B4BF1AA22061962819BECB9F /* UISdkWrapLabel.swift in Sources */, - 22773E0B9D04DBE57F04ACC84A275C6C /* UIView.swift in Sources */, - 151503D01817AC6C5C3C75E094A73414 /* UIViewController+PromocodeBanner.swift in Sources */, - 059A4CB37349C45E7B83274EEF19CB2E /* URLLiteralConvertible.swift in Sources */, - 2E59E0D53B32793C44CCC200197FEF0C /* URLSession.extension.swift in Sources */, - 6B3A7319951E3B31112C6638BABB2C0A /* URLSessionQueue.swift in Sources */, - F0B44704D60D03EF8819AAF4A4A66BDB /* UserDefaultsExtension.swift in Sources */, - BE48A5C472094F8DF00FD468D1BFAB58 /* UserSettings.swift in Sources */, - 10D55E0061EA79EB25B75054D35CE7E0 /* VideoDownloadManager.swift in Sources */, - CFCA4AB2B18CA7A2242AC58D2A545393 /* VideoDownloadObject.swift in Sources */, - 32393A24A0869CF7CC52E3D71519247C /* VideoFileUtils.swift in Sources */, - F596463D2EBD27544AC60B558DE04F5B /* ViewConfigPlain.swift in Sources */, - 3834506A52ADEA62B0A77FC5967E6CB8 /* ViewConfigService.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 24C3D6D8789B553C261691AAD58740BF /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 2B8F5E4C61F8449068912DC64D160E64 /* Pods-demo-store-ios-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E4CAC94D0DDD20CFD1040A69ED8B3AF0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8EC13D530673067992EFE5C59BA07CF7 /* Resolver.swift in Sources */, - 5352192BB2E12C809436BAB92A33B08C /* Resolver-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 9D5796DE7CC3CC110A40F847C4CE3EDD /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Resolver; - target = 3AF1A4FE1808CDAE51281F7A31DB2A13 /* Resolver */; - targetProxy = 5B017EA963DCB80AC457047352564C1C /* PBXContainerItemProxy */; - }; - C7599D115013A988B8B506000DF95B70 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = REES46; - target = 0C03A6912D025B497528F2C7FFE2F1D5 /* REES46 */; - targetProxy = 3937D943A6532951EE926E8B95AAB871 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 0B05D091C8FC7C75AE3F4967A3BE132B /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 83BFD6AC752D1918CF4AD241F5ED17A6 /* Resolver.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Resolver/Resolver-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Resolver/Resolver-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/Resolver/Resolver.modulemap"; - PRODUCT_MODULE_NAME = Resolver; - PRODUCT_NAME = Resolver; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.9; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 11B06545CB653DCFC210A1E195834062 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C2CFBF87EB78E30CC4A10E9641F99C7E /* Pods-demo-store-ios.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 45469826BCC89E1DC3A6FC889124838C /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F61DEA91A6E99993225677504409D9CF /* REES46.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/REES46/REES46-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/REES46/REES46-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/REES46/REES46.modulemap"; - PRODUCT_MODULE_NAME = REES46; - PRODUCT_NAME = REES46; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 48D8EED7A5518A6464CE28A9C2A18C15 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A3BC4DCD1D930788E65681442B043C28 /* Pods-demo-store-ios.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 830D51BD7D7934E3D62D46ADCC8CBB77 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 35A9112B3BC7B00E18A2400AA6D80FA6 /* REES46.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/REES46/REES46-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/REES46/REES46-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/REES46/REES46.modulemap"; - PRODUCT_MODULE_NAME = REES46; - PRODUCT_NAME = REES46; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 8DE5143C03248BB6CD542DE3963D6F3A /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Debug; - }; - 9E406C6AAF85E580207CD97B0044DEAB /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Release; - }; - AA08EF2E173E7AB435E3FB7B23769743 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C363387664200FA2F71D3A2CDC7280DB /* Resolver.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Resolver/Resolver-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Resolver/Resolver-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/Resolver/Resolver.modulemap"; - PRODUCT_MODULE_NAME = Resolver; - PRODUCT_NAME = Resolver; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.9; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8DE5143C03248BB6CD542DE3963D6F3A /* Debug */, - 9E406C6AAF85E580207CD97B0044DEAB /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8E1D1D82B8C19B1C0331B2BEB8C4D8C4 /* Build configuration list for PBXNativeTarget "REES46" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 830D51BD7D7934E3D62D46ADCC8CBB77 /* Debug */, - 45469826BCC89E1DC3A6FC889124838C /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - CC567D09592DD472849065F3CE1979C1 /* Build configuration list for PBXNativeTarget "Pods-demo-store-ios" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 48D8EED7A5518A6464CE28A9C2A18C15 /* Debug */, - 11B06545CB653DCFC210A1E195834062 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - EB24502C2CCD4701AD9767427762F135 /* Build configuration list for PBXNativeTarget "Resolver" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 0B05D091C8FC7C75AE3F4967A3BE132B /* Debug */, - AA08EF2E173E7AB435E3FB7B23769743 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; -} diff --git a/Pods/REES46/LICENSE b/Pods/REES46/LICENSE deleted file mode 100644 index 6c1bf32..0000000 --- a/Pods/REES46/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright REES46 (c) 2024. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above Copyright notice and this permission notice shall be included in -all copies or substantial portions of the REES46 Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE REES46 SOFTWARE. diff --git a/Pods/REES46/README.md b/Pods/REES46/README.md deleted file mode 100644 index 682071d..0000000 --- a/Pods/REES46/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# REES46 SDK for iOS - -![REES46](https://github.com/user-attachments/assets/f84f80c5-5884-42f5-92d5-65f2a4c30aee) -![iOS](https://img.shields.io/badge/iOS-000000?style=for-the-badge&logo=ios&logoColor=white) -[![Version](https://img.shields.io/cocoapods/v/REES46.svg?style=for-the-badge)](https://cocoapods.org/pods/REES46) -![Swift](https://img.shields.io/badge/swift-5-F54A2A?style=for-the-badge&logo=swift&logoColor=white&labelColor=F54A2A) -[![License](https://img.shields.io/cocoapods/l/REES46.svg?style=for-the-badge)](https://cocoapods.org/pods/REES46) - -## Description - -REES46 SDK for iOS platform - the wide toolset for eCommerce apps. -This SDK can be used to integrate in your own app for iOS in few steps. - -## Documentation - -For detailed information on methods, please refer to the documentation available at the following link: - -[Official API references](https://reference.api.rees46.com/#introduction) - -## Author - -REES46, desk@rees46.com - -## License - -REES46 SDK is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/REES46/REES46/Classes/Button/ProductsButton.swift b/Pods/REES46/REES46/Classes/Button/ProductsButton.swift deleted file mode 100644 index 8b98e91..0000000 --- a/Pods/REES46/REES46/Classes/Button/ProductsButton.swift +++ /dev/null @@ -1,185 +0,0 @@ -import UIKit - -protocol CustomProductButtonDelegate: AnyObject { - func openDeepLink(url: String) - func openLinkIosExternal(url: String) - func openLinkWebExternal(url: String) -} - -@IBDesignable class ProductsButton: UIButton { - - var _buttonData: StoriesElement? - weak var delegate: CustomProductButtonDelegate? - - init() { - super.init(frame: .zero) - setToDefaultProductsButton() - } - - override func layoutSubviews() { - super.layoutSubviews() - updateCornerRadius() - } - - @IBInspectable var rounded: Bool = true { - didSet { - updateCornerRadius() - } - } - - func updateCornerRadius() { - if SdkConfiguration.stories.productsButtonCornerRadius != -1 { - layer.cornerRadius = SdkConfiguration.stories.productsButtonCornerRadius - } else { - layer.cornerRadius = rounded ? frame.size.height / 2 : 2 - } - } - - func configProductsButton(buttonData: StoriesElement) { - if (buttonData.products!.count != 0) { - if SdkConfiguration.stories.slideProductsButtonFontNameChanged != nil { - if SdkConfiguration.stories.slideProductsButtonFontSizeChanged != nil { - self.titleLabel?.font = UIFont(name: (SdkConfiguration.stories.slideProductsButtonFontNameChanged)!, size: (SdkConfiguration.stories.slideProductsButtonFontSizeChanged)!) - } else { - self.titleLabel?.font = UIFont(name: (SdkConfiguration.stories.slideProductsButtonFontNameChanged)!, size: 14) - } - } else { - if SdkConfiguration.stories.slideProductsButtonFontSizeChanged != nil { - self.titleLabel?.font = .systemFont(ofSize: SdkConfiguration.stories.slideProductsButtonFontSizeChanged!, weight: .bold) - } else { - self.titleLabel?.font = .systemFont(ofSize: 14, weight: .bold) - } - } - - setTitle(buttonData.labels?.showCarousel ?? SdkConfiguration.stories.defaultShowProductsButtonText, for: .normal) - if buttonData.labels?.showCarousel == "" { - setTitle(SdkConfiguration.stories.defaultShowProductsButtonText, for: .normal) - } - - var frameworkBundle = Bundle(for: classForCoder) -#if SWIFT_PACKAGE - frameworkBundle = Bundle.module -#endif - - let angleUpIcon = UIImage(named: "angleUpBlack", in: frameworkBundle, compatibleWith: nil)?.withRenderingMode(UIImage.RenderingMode.alwaysTemplate) - - if SdkConfiguration.isDarkMode { - if SdkConfiguration.stories.slideProductsButtonBackgroundColorChanged_Dark != nil { - self.backgroundColor = SdkConfiguration.stories.slideProductsButtonBackgroundColorChanged_Dark - } else { - self.backgroundColor = .white - } - } else { - if SdkConfiguration.stories.slideProductsButtonBackgroundColorChanged_Light != nil { - self.backgroundColor = SdkConfiguration.stories.slideProductsButtonBackgroundColorChanged_Light - } else { - self.backgroundColor = .white - } - } - - if SdkConfiguration.stories.productsButtonCornerRadius != -1 { - layer.cornerRadius = SdkConfiguration.stories.productsButtonCornerRadius - } else { - layer.cornerRadius = layer.frame.size.height/2 - } - layer.masksToBounds = true - - if SdkConfiguration.isDarkMode { - if SdkConfiguration.stories.slideProductsButtonTextColorChanged_Dark != nil { - if let components = SdkConfiguration.stories.slideProductsButtonTextColorChanged_Dark?.rgba { - self.setTitleColor(UIColor(red: components.red, green: components.green, blue: components.blue, alpha: components.alpha), for: .normal) - } else { - self.setTitleColor(.black, for: .normal) - } - self.addRightIconForProductsBtn(image: angleUpIcon!) - tintColor = SdkConfiguration.stories.slideProductsButtonTextColorChanged_Dark - } else { - setTitleColor(.black, for: .normal) - self.addRightIconForProductsBtn(image: angleUpIcon!) - tintColor = .black - } - } else { - if SdkConfiguration.stories.slideProductsButtonTextColorChanged_Light != nil { - if let components = SdkConfiguration.stories.slideProductsButtonTextColorChanged_Light?.rgba { - self.setTitleColor(UIColor(red: components.red, green: components.green, blue: components.blue, alpha: components.alpha), for: .normal) - } else { - self.setTitleColor(.black, for: .normal) - } - self.addRightIconForProductsBtn(image: angleUpIcon!) - tintColor = SdkConfiguration.stories.slideProductsButtonTextColorChanged_Light - } else { - setTitleColor(.black, for: .normal) - self.addRightIconForProductsBtn(image: angleUpIcon!) - tintColor = .black - } - } - - } else { - titleLabel?.font = .systemFont(ofSize: 17.0, weight: .semibold) - if SdkConfiguration.stories.productsButtonCornerRadius != -1 { - self.layer.cornerRadius = SdkConfiguration.stories.productsButtonCornerRadius - } else { - self.layer.cornerRadius = layer.frame.size.height/2 - } - self.layer.masksToBounds = true - } - super.layoutSubviews() - } - - @objc - public func didTapButton() { - - if let iosLink = _buttonData?.linkIos { - delegate?.openLinkIosExternal(url: iosLink) - return - } - if let link = _buttonData?.link { - delegate?.openDeepLink(url: link) - return - } - } - - required init?(coder: NSCoder) { - super.init(coder: coder) - setToDefaultProductsButton() - super.layoutSubviews() - } - - private func setToDefaultProductsButton() { - backgroundColor = .white - setTitle("", for: .normal) - if SdkConfiguration.stories.productsButtonCornerRadius != -1 { - layer.cornerRadius = SdkConfiguration.stories.productsButtonCornerRadius - } else { - layer.cornerRadius = layer.frame.size.height / 2 - } - layer.masksToBounds = true - super.layoutSubviews() - } -} - - -extension UIButton { - func addRightIconForProductsBtn(image: UIImage) { - - let imageView = UIImageView(image: image) - imageView.translatesAutoresizingMaskIntoConstraints = false - addSubview(imageView) - - let length = CGFloat(21) - titleEdgeInsets.right += length - - NSLayoutConstraint.activate([ - imageView.leadingAnchor.constraint(equalTo: self.titleLabel!.trailingAnchor, constant: 6), - imageView.centerYAnchor.constraint(equalTo: self.titleLabel!.centerYAnchor, constant: 1), - imageView.widthAnchor.constraint(equalToConstant: length), - imageView.heightAnchor.constraint(equalToConstant: length) - ]) - } - - func setImageTintColor(_ color: UIColor) { - let tintedImage = self.imageView?.image?.withRenderingMode(.alwaysTemplate) - self.setImage(tintedImage, for: .normal) - self.tintColor = color - } -} diff --git a/Pods/REES46/REES46/Classes/Button/PromoCodeView.swift b/Pods/REES46/REES46/Classes/Button/PromoCodeView.swift deleted file mode 100644 index 1408816..0000000 --- a/Pods/REES46/REES46/Classes/Button/PromoCodeView.swift +++ /dev/null @@ -1,183 +0,0 @@ -import UIKit - -class PromoCodeView: UIView { - var _promoData: StoriesPromoCodeElement? - - private let loadingPlaceholderView = LoadingPlaceholderView() - - let promoProductNameLabel = UILabel() - var promocodeSlideProductImage = UIImageView() - - init() { - super.init(frame: .zero) - setToDefault() - } - - func configPromoView(promoData: StoriesPromoCodeElement) { - promoProductNameLabel.removeFromSuperview() - - if (promoData.name != "") { - if SdkGlobalHelper.DeviceType.IS_IPHONE_14 || SdkGlobalHelper.DeviceType.IS_IPHONE_14_PLUS || SdkGlobalHelper.DeviceType.IS_IPHONE_XS_MAX || SdkGlobalHelper.DeviceType.IS_IPHONE_XS || SdkGlobalHelper.DeviceType.IS_IPHONE_SE || SdkGlobalHelper.DeviceType.IS_IPHONE_8_PLUS || SdkGlobalHelper.DeviceType.IS_IPHONE_5 { - promoProductNameLabel.frame = CGRect(x: frame.minX + 18, y: frame.minY + 72, width: frame.width - 60, height: 80) - } else { - promoProductNameLabel.frame = CGRect(x: frame.minX + 18, y: frame.minY + 116, width: frame.width - 60, height: 80) - } - promoProductNameLabel.text = promoData.name - promoProductNameLabel.numberOfLines = 0 - promoProductNameLabel.textAlignment = .left - - if SdkConfiguration.stories.promoCodeSlideFontNameChanged != nil { - if let customFont = UIFont(name: SdkConfiguration.stories.promoCodeSlideFontNameChanged!, size: 16) { - promoProductNameLabel.font = customFont - } - if SdkConfiguration.stories.promoCodeSlideFontSizeChanged != nil { - if let customFontWithSize = UIFont(name: SdkConfiguration.stories.promoCodeSlideFontNameChanged!, size: SdkConfiguration.stories.promoCodeSlideFontSizeChanged!) { - promoProductNameLabel.font = customFontWithSize - } - } - } else { - promoProductNameLabel.font = UIFont.systemFont(ofSize: 16, weight: .semibold) - if SdkConfiguration.stories.promoCodeSlideFontSizeChanged != nil { - promoProductNameLabel.font = UIFont.systemFont(ofSize: SdkConfiguration.stories.promoCodeSlideFontSizeChanged!, weight: .semibold) - } - } - - if SdkConfiguration.isDarkMode { - promoProductNameLabel.textColor = SdkConfiguration.stories.promoProductTitleTextColorDarkMode ?? .white - } else { - promoProductNameLabel.textColor = SdkConfiguration.stories.promoProductTitleTextColorLightMode ?? .white - } - - promoProductNameLabel.sizeToFit() - addSubview(promoProductNameLabel) - - promocodeSlideProductImage.backgroundColor = .clear - promocodeSlideProductImage.contentMode = .scaleAspectFit - promocodeSlideProductImage.layer.masksToBounds = true - promocodeSlideProductImage.layer.cornerRadius = 6.0 - promocodeSlideProductImage.layer.borderColor = UIColor.clear.cgColor - promocodeSlideProductImage.frame = CGRect(x: 18, y: frame.maxY / 2 - frame.size.width / 2, width: frame.size.width - 36, height: frame.size.width - 36) - - addSubview(promocodeSlideProductImage) - - let urlImgFullSize: String = promoData.image_url - let urlImgResize = URL(string: promoData.image_url_resized?.image_url_resized520 ?? urlImgFullSize) - - if urlImgResize != nil { - StoryBlockImageCache.image(for: urlImgResize!.absoluteString) { [self] cachedImage in - if cachedImage != nil { - let imageBorderRepresentation = cachedImage!.imageWithInsets(insets: UIEdgeInsets(top: 22, left: 22, bottom: 22, right: 22)) - if cachedImage!.hasAlpha { - DispatchQueue.main.async { - self.promocodeSlideProductImage.backgroundColor = .clear - self.promocodeSlideProductImage.layer.borderWidth = 0.0 - self.promocodeSlideProductImage.image = cachedImage - } - } else { - DispatchQueue.main.async { - self.promocodeSlideProductImage.backgroundColor = .white - self.promocodeSlideProductImage.layer.borderWidth = 22.0 - self.promocodeSlideProductImage.image = imageBorderRepresentation - } - } - - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - self.loadingPlaceholderView.uncover(animated: false) - } - UIView.animate(withDuration: 0.2, animations: { - self.promocodeSlideProductImage.alpha = 1.0 - }, completion: { (b) in - //Do nothing - }) - } else { - - loadingPlaceholderView.gradientColor = .white - loadingPlaceholderView.backgroundColor = .clear - - UIView.animate(withDuration: 0.1, animations: { - self.loadingPlaceholderView.cover(self, animated: true) - }, completion: { (b) in - //Do nothing - }) - - let task = URLSession.shared.dataTask(with: urlImgResize!, completionHandler: { data, _, error in - if error == nil { - guard let unwrappedData = data, let downloadedImage = UIImage(data: unwrappedData) else { - return - } - - let imageBorderRepresentation = downloadedImage.imageWithInsets(insets: UIEdgeInsets(top: 22, left: 22, bottom: 22, right: 22)) - if downloadedImage.hasAlpha { - DispatchQueue.main.async { [self] in - self.promocodeSlideProductImage.backgroundColor = .clear - self.promocodeSlideProductImage.layer.borderWidth = 0.0 - self.promocodeSlideProductImage.image = downloadedImage - } - } else { - DispatchQueue.main.async { [self] in - self.promocodeSlideProductImage.backgroundColor = .white - self.promocodeSlideProductImage.layer.borderWidth = 22.0 - self.promocodeSlideProductImage.image = imageBorderRepresentation - } - } - - DispatchQueue.main.asyncAfter(deadline: .now() + 1.8) { - self.loadingPlaceholderView.uncover(animated: true) - } - - DispatchQueue.main.async { [self] in - UIView.animate(withDuration: 1.8, animations: { - self.promocodeSlideProductImage.alpha = 1.0 - }, completion: { (b) in }) - } - - StoryBlockImageCache.save(downloadedImage, for: urlImgResize!.absoluteString) - } - }) - task.resume() - } - } - } - } - } - - private func setToDefault() { - self.backgroundColor = .clear - } - - required init?(coder: NSCoder) { - super.init(coder: coder) - setToDefault() - } -} - - -extension UIImage { - func imageWithInsets(insets: UIEdgeInsets) -> UIImage? { - UIGraphicsBeginImageContextWithOptions( - CGSize(width: self.size.width + insets.left + insets.right, - height: self.size.height + insets.top + insets.bottom), false, self.scale) - let _ = UIGraphicsGetCurrentContext() - let origin = CGPoint(x: insets.left, y: insets.top) - self.draw(at: origin) - let imageWithInsets = UIGraphicsGetImageFromCurrentImageContext() - UIGraphicsEndImageContext() - return imageWithInsets - } -} - - -extension UIImage { - public var hasAlpha: Bool { - guard let alphaInfo = self.cgImage?.alphaInfo else { - return false - } - - switch alphaInfo { - case .none, .noneSkipLast, .noneSkipFirst: - return false - default: - return true - } - } -} diff --git a/Pods/REES46/REES46/Classes/Button/ReloadButton.swift b/Pods/REES46/REES46/Classes/Button/ReloadButton.swift deleted file mode 100644 index b47c5e6..0000000 --- a/Pods/REES46/REES46/Classes/Button/ReloadButton.swift +++ /dev/null @@ -1,31 +0,0 @@ -import UIKit - -class ReloadButton: UIButton { - init() { - super.init(frame: .zero) - setToDefault() - } - - func configReloadButton() { - var frameworkBundle = Bundle(for: classForCoder) -#if SWIFT_PACKAGE - frameworkBundle = Bundle.module -#endif - setImage(UIImage(named: "iconReload", in: frameworkBundle, compatibleWith: nil), for: .normal) - addTarget(self, action: #selector(didTapReloadButton), for: .touchUpInside) - } - - private func setToDefault() { - self.layer.masksToBounds = true - } - - @objc - public func didTapReloadButton() { - print("didTapReloadButton") - } - - required init?(coder: NSCoder) { - super.init(coder: coder) - setToDefault() - } -} diff --git a/Pods/REES46/REES46/Classes/Button/StoryButton.swift b/Pods/REES46/REES46/Classes/Button/StoryButton.swift deleted file mode 100644 index 44f1385..0000000 --- a/Pods/REES46/REES46/Classes/Button/StoryButton.swift +++ /dev/null @@ -1,132 +0,0 @@ -import UIKit - -protocol CustomButtonDelegate: AnyObject { - func openDeepLink(url: String) - func openLinkIosExternal(url: String) - func openLinkWebExternal(url: String) -} - -class StoryButton: UIButton { - - var _buttonData: StoriesElement? - weak var delegate: CustomButtonDelegate? - - init() { - super.init(frame: .zero) - setToDefault() - } - - func configButton(buttonData: StoriesElement) { - if SdkConfiguration.stories.slideDefaultButtonFontNameChanged != nil { - if SdkConfiguration.stories.slideDefaultButtonFontSizeChanged != 0.0 { - self.titleLabel?.font = SdkStyle.shared.currentColorScheme?.defaultButtonSelectFontName.withSize(SdkStyle.shared.currentColorScheme!.defaultButtonSelectFontSize) - } else { - self.titleLabel?.font = SdkStyle.shared.currentColorScheme?.defaultButtonSelectFontName.withSize(19.0) - } - } else { - if let backendFont = buttonData.textBold { - if SdkConfiguration.stories.slideDefaultButtonFontSizeChanged != nil { - self.titleLabel?.font = .systemFont(ofSize: SdkStyle.shared.currentColorScheme!.defaultButtonSelectFontSize, weight: .bold) - } else { - self.titleLabel?.font = .systemFont(ofSize: 17.0, weight: backendFont ? .bold : .regular) - } - } else { - if SdkConfiguration.stories.slideDefaultButtonFontSizeChanged != nil { - self.titleLabel?.font = .systemFont(ofSize: SdkStyle.shared.currentColorScheme!.defaultButtonSelectFontSize, weight: .regular) - } else { - self.titleLabel?.font = .systemFont(ofSize: 19.0, weight: .regular) - } - } - } - - self.setTitle(buttonData.title ?? "", for: .normal) - - if SdkConfiguration.stories.defaultButtonCornerRadius != -1 { - self.layer.cornerRadius = SdkConfiguration.stories.defaultButtonCornerRadius - } else { - self.layer.cornerRadius = CGFloat(buttonData.cornerRadius) - } - self.layer.masksToBounds = true - - if SdkConfiguration.isDarkMode { - if SdkConfiguration.stories.slideDefaultButtonBackgroundColorChanged_Dark != nil { - self.backgroundColor = SdkConfiguration.stories.slideDefaultButtonBackgroundColorChanged_Dark - } else { - if let bgColor = buttonData.background { - let color = bgColor.hexToRGB() - self.backgroundColor = UIColor(red: color.red, green: color.green, blue: color.blue, alpha: 1) - } else { - self.backgroundColor = .white - } - } - - if SdkConfiguration.stories.slideDefaultButtonTextColorChanged_Dark != nil { - if let components = SdkConfiguration.stories.slideDefaultButtonTextColorChanged_Dark?.rgba { - self.setTitleColor(UIColor(red: components.red, green: components.green, blue: components.blue, alpha: components.alpha), for: .normal) - } else { - self.setTitleColor(.black, for: .normal) - } - } else { - if let titleColor = buttonData.color { - let color = titleColor.hexToRGB() - self.setTitleColor(UIColor(red: color.red, green: color.green, blue: color.blue, alpha: 1), for: .normal) - } else { - self.setTitleColor(.black, for: .normal) - } - } - } else { - if SdkConfiguration.stories.slideDefaultButtonBackgroundColorChanged_Light != nil { - self.backgroundColor = SdkConfiguration.stories.slideDefaultButtonBackgroundColorChanged_Light - } else { - if let bgColor = buttonData.background { - let color = bgColor.hexToRGB() - self.backgroundColor = UIColor(red: color.red, green: color.green, blue: color.blue, alpha: 1) - } else { - self.backgroundColor = .white - } - } - - if SdkConfiguration.stories.slideDefaultButtonTextColorChanged_Light != nil { - if let components = SdkConfiguration.stories.slideDefaultButtonTextColorChanged_Light?.rgba { - self.setTitleColor(UIColor(red: components.red, green: components.green, blue: components.blue, alpha: components.alpha), for: .normal) - } else { - self.setTitleColor(.black, for: .normal) - } - } else { - if let titleColor = buttonData.color { - let color = titleColor.hexToRGB() - self.setTitleColor(UIColor(red: color.red, green: color.green, blue: color.blue, alpha: 1), for: .normal) - } else { - self.setTitleColor(.black, for: .normal) - } - } - } - } - - private func setToDefault() { - self.backgroundColor = .white - if SdkConfiguration.stories.productsButtonCornerRadius != -1 { - self.layer.cornerRadius = SdkConfiguration.stories.productsButtonCornerRadius - } else { - self.layer.cornerRadius = layer.frame.size.height / 2 - } - self.layer.masksToBounds = true - } - - @objc - public func didTapOnButton() { - if let iosLink = _buttonData?.linkIos { - delegate?.openLinkIosExternal(url: iosLink) - return - } - if let link = _buttonData?.link { - delegate?.openDeepLink(url: link) - return - } - } - - required init?(coder: NSCoder) { - super.init(coder: coder) - setToDefault() - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/DownloadManager/VideoDownloadManager.swift b/Pods/REES46/REES46/Classes/Extensions/DownloadManager/VideoDownloadManager.swift deleted file mode 100644 index 51c52d5..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/DownloadManager/VideoDownloadManager.swift +++ /dev/null @@ -1,256 +0,0 @@ -import UIKit -import UserNotifications - -final public class VideoDownloadManager: NSObject { - - public typealias DownloadCompletionBlock = (_ error : Error?, _ fileUrl:URL?) -> Void - public typealias DownloadProgressBlock = (_ progress : CGFloat) -> Void - public typealias BackgroundDownloadCompletionHandler = () -> Void - - private var session: URLSession! - private var ongoingDownloads: [String : VideoDownloadObject] = [:] - private var backgroundSession: URLSession! - - public var backgroundCompletionHandler: BackgroundDownloadCompletionHandler? - public var showLocalNotificationOnBackgroundDownloadSuccess = true - public var localNotificationText: String? - - public static let shared: VideoDownloadManager = { - return VideoDownloadManager() - }() - - public func downloadStoryMediaFile(withRequest request: URLRequest, - inDirectory directory: String? = nil, - withName fileName: String? = nil, - shouldDownloadInBackground: Bool = false, - onProgress progressBlock:DownloadProgressBlock? = nil, - onCompletion completionBlock:@escaping DownloadCompletionBlock) -> String? { - - guard let url = request.url else { - print("SDK Request url is empty") - return nil - } - - if let _ = self.ongoingDownloads[url.absoluteString] { - return nil - } - var downloadTask: URLSessionDownloadTask - if shouldDownloadInBackground { - downloadTask = self.backgroundSession.downloadTask(with: request) - } else{ - downloadTask = self.session.downloadTask(with: request) - } - - let download = VideoDownloadObject(downloadTask: downloadTask, - progressBlock: progressBlock, - completionBlock: completionBlock, - fileName: fileName, - directoryName: directory) - - let key = self.getExDownloadKey(withUrl: url) - self.ongoingDownloads[key] = download - downloadTask.resume() - return key - } - - public func getExDownloadKey(withUrl url: URL) -> String { - return url.absoluteString - } - - public func currentDownloads() -> [String] { - return Array(self.ongoingDownloads.keys) - } - - public func cancelAllDownloads() { - for (_, download) in self.ongoingDownloads { - let downloadTask = download.downloadTask - downloadTask.cancel() - } - self.ongoingDownloads.removeAll() - } - - public func cancelDownload(forUniqueKey key:String?) { - let downloadStatus = self.isDownloadInProgress(forUniqueKey: key) - let presence = downloadStatus.0 - if presence { - if let download = downloadStatus.1 { - download.downloadTask.cancel() - self.ongoingDownloads.removeValue(forKey: key!) - } - } - } - - public func pause(forUniqueKey key:String?) { - let downloadStatus = self.isDownloadInProgress(forUniqueKey: key) - let presence = downloadStatus.0 - if presence { - if let download = downloadStatus.1 { - let downloadTask = download.downloadTask - downloadTask.suspend() - }} - } - - public func resume(forUniqueKey key:String?) { - let downloadStatus = self.isDownloadInProgress(forUniqueKey: key) - let presence = downloadStatus.0 - if presence { - if let download = downloadStatus.1 { - let downloadTask = download.downloadTask - downloadTask.resume() - }} - } - - public func isDownloadInProgress(forKey key:String?) -> Bool { - let downloadStatus = self.isDownloadInProgress(forUniqueKey: key) - return downloadStatus.0 - } - - public func alterDownload(withKey key: String?, - onProgress progressBlock:DownloadProgressBlock?, - onCompletion completionBlock:@escaping DownloadCompletionBlock) { - let downloadStatus = self.isDownloadInProgress(forUniqueKey: key) - let presence = downloadStatus.0 - if presence { - if let download = downloadStatus.1 { - download.progressBlock = progressBlock - download.completionBlock = completionBlock - } - } - } - - private func isDownloadInProgress(forUniqueKey key:String?) -> (Bool, VideoDownloadObject?) { - guard let key = key else { - return (false, nil) - } - - for (uniqueKey, download) in self.ongoingDownloads { - if key == uniqueKey { - return (true, download) - } - } - return (false, nil) - } - - private func showSdkDownloaderNotification(withText text:String) { - let notificationCenter = UNUserNotificationCenter.current() - notificationCenter.getNotificationSettings { (settings) in - guard settings.authorizationStatus == .authorized else { - //debugPrint("SDK not authorized to schedule notification") - return - } - - let content = UNMutableNotificationContent() - content.title = text - content.sound = UNNotificationSound.default - let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 0.1, repeats: false) - let identifier = "SDKSuccessDownloadManagerNotification" - let request = UNNotificationRequest(identifier: identifier, - content: content, trigger: trigger) - notificationCenter.add(request, withCompletionHandler: { (error) in - if let error = error { - debugPrint("SDK could not schedule notification with error: \(error)") - } - }) - } - } - - private override init() { - super.init() - let sessionConfiguration = URLSessionConfiguration.default - self.session = URLSession(configuration: sessionConfiguration, delegate: self, delegateQueue: nil) - let backgroundConfiguration = URLSessionConfiguration.background(withIdentifier: Bundle.main.bundleIdentifier!) - self.backgroundSession = URLSession(configuration: backgroundConfiguration, delegate: self, delegateQueue: OperationQueue()) - } -} - -extension VideoDownloadManager : URLSessionDelegate, URLSessionDownloadDelegate { - public func urlSession(_ session: URLSession, - downloadTask: URLSessionDownloadTask, - didFinishDownloadingTo location: URL) { - - let key = (downloadTask.originalRequest?.url?.absoluteString)! - if let download = self.ongoingDownloads[key] { - if let response = downloadTask.response { - let statusCode = (response as! HTTPURLResponse).statusCode - - guard statusCode < 400 else { - let error = NSError(domain:"HttpError", code:statusCode, userInfo:[NSLocalizedDescriptionKey : HTTPURLResponse.localizedString(forStatusCode: statusCode)]) - OperationQueue.main.addOperation({ - download.completionBlock(error, nil) - }) - return - } - let fileName = download.fileName ?? downloadTask.response?.suggestedFilename ?? (downloadTask.originalRequest?.url?.lastPathComponent)! - let directoryName = download.directoryName - - let fileMovingResult = VideoFileUtils.moveFile(fromUrl: location, toDirectory: directoryName, withName: fileName) - let didSucceed = fileMovingResult.0 - let error = fileMovingResult.1 - let finalFileUrl = fileMovingResult.2 - - OperationQueue.main.addOperation({ - (didSucceed ? download.completionBlock(nil, finalFileUrl) : download.completionBlock(error, nil)) - }) - } - } - self.ongoingDownloads.removeValue(forKey:key) - } - - public func urlSession(_ session: URLSession, - downloadTask: URLSessionDownloadTask, - didWriteData bytesWritten: Int64, - totalBytesWritten: Int64, - totalBytesExpectedToWrite: Int64) { - guard totalBytesExpectedToWrite > 0 else { - //debugPrint("SDK Could not calculate progress as total bytes to Write is less than 0") - return - } -// if let download = self.ongoingDownloads[(downloadTask.originalRequest?.url?.absoluteString)!], -// let progressBlock = download.progressBlock { -// let progress: CGFloat = CGFloat(totalBytesWritten) / CGFloat(totalBytesExpectedToWrite) -// //let percent = String(format:"%.0f", progress * 100) + "%" -// OperationQueue.main.addOperation({ -// progressBlock(progress) -// }) -// } - } - - public func urlSession(_ session: URLSession, - task: URLSessionTask, - didCompleteWithError error: Error?) { - - if let error = error { - let downloadTask = task as! URLSessionDownloadTask - let key = (downloadTask.originalRequest?.url?.absoluteString)! - if let download = self.ongoingDownloads[key] { - OperationQueue.main.addOperation({ - download.completionBlock(error, nil) - }) - } - self.ongoingDownloads.removeValue(forKey:key) - } - } - - public func urlSessionDidFinishEvents(forBackgroundURLSession session: URLSession) { - session.getTasksWithCompletionHandler { (dataTasks, uploadTasks, downloadTasks) in - if downloadTasks.count == 0 { - OperationQueue.main.addOperation({ - if let completion = self.backgroundCompletionHandler { - completion() - } - - if self.showLocalNotificationOnBackgroundDownloadSuccess { - var notificationText = "SDK Internal Notification Downloading task completed" - if let userNotificationText = self.localNotificationText { - notificationText = userNotificationText - } - - self.showSdkDownloaderNotification(withText: notificationText) - } - - self.backgroundCompletionHandler = nil - }) - } - } - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/DownloadManager/VideoDownloadObject.swift b/Pods/REES46/REES46/Classes/Extensions/DownloadManager/VideoDownloadObject.swift deleted file mode 100644 index ae788fe..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/DownloadManager/VideoDownloadObject.swift +++ /dev/null @@ -1,24 +0,0 @@ -import UIKit - -class VideoDownloadObject: NSObject { - - var completionBlock: VideoDownloadManager.DownloadCompletionBlock - var progressBlock: VideoDownloadManager.DownloadProgressBlock? - let downloadTask: URLSessionDownloadTask - let directoryName: String? - let fileName:String? - - init(downloadTask: URLSessionDownloadTask, - progressBlock: VideoDownloadManager.DownloadProgressBlock?, - completionBlock: @escaping VideoDownloadManager.DownloadCompletionBlock, - fileName: String?, - directoryName: String?) { - - self.downloadTask = downloadTask - self.completionBlock = completionBlock - self.progressBlock = progressBlock - self.fileName = fileName - self.directoryName = directoryName - } - -} diff --git a/Pods/REES46/REES46/Classes/Extensions/DownloadManager/VideoFileUtils.swift b/Pods/REES46/REES46/Classes/Extensions/DownloadManager/VideoFileUtils.swift deleted file mode 100644 index af89493..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/DownloadManager/VideoFileUtils.swift +++ /dev/null @@ -1,44 +0,0 @@ -import UIKit - -class VideoFileUtils: NSObject { - - static func moveFile(fromUrl url:URL, - toDirectory directory:String? , - withName name:String) -> (Bool, Error?, URL?) { - var newUrl:URL - if let directory = directory { - let directoryCreationResult = self.createDirectoryIfNotExists(withName: directory) - guard directoryCreationResult.0 else { - return (false, directoryCreationResult.1, nil) - } - newUrl = self.cacheDirectoryPath().appendingPathComponent(directory).appendingPathComponent(name) - } else { - newUrl = self.cacheDirectoryPath().appendingPathComponent(name) - } - do { - try FileManager.default.moveItem(at: url, to: newUrl) - return (true, nil, newUrl) - } catch { - return (false, error, nil) - } - } - - static func cacheDirectoryPath() -> URL { - let cachePath = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true)[0] - return URL(fileURLWithPath: cachePath) - } - - static func createDirectoryIfNotExists(withName name:String) -> (Bool, Error?) { - let directoryUrl = self.cacheDirectoryPath().appendingPathComponent(name) - if FileManager.default.fileExists(atPath: directoryUrl.path) { - return (true, nil) - } - do { - try FileManager.default.createDirectory(at: directoryUrl, withIntermediateDirectories: true, attributes: nil) - return (true, nil) - } catch { - return (false, error) - } - } - -} diff --git a/Pods/REES46/REES46/Classes/Extensions/InitService.swift b/Pods/REES46/REES46/Classes/Extensions/InitService.swift deleted file mode 100644 index 51224fd..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/InitService.swift +++ /dev/null @@ -1,100 +0,0 @@ -import Foundation - -enum KeychainError: LocalizedError { - case itemNotFound - case duplicateItem - case unexpectedStatus(OSStatus) -} - -public let sdkBundleId = Bundle(for: SimplePersonalizationSDK.self).bundleIdentifier ?? "com.bundle.ident.sdk-instanceKeychainService" -public let instanceKeychainService = Bundle(for: SimplePersonalizationSDK.self).bundleIdentifier ?? "com.bundle.ident.sdk-instanceKeychainService" - -public struct InitService { - - static func insertKeychainDidToken(_ token: Data, identifier: String, instanceKeychainService: String = instanceKeychainService) throws { - let attributes = [ - kSecClass: kSecClassGenericPassword, - kSecAttrService: instanceKeychainService, - kSecAttrAccount: identifier, - kSecValueData: token - ] as CFDictionary - - let status = SecItemAdd(attributes, nil) - guard status == errSecSuccess else { - if status == errSecDuplicateItem { - throw KeychainError.duplicateItem - } - throw KeychainError.unexpectedStatus(status) - } - } - - static func getKeychainDidToken(identifier: String, instanceKeychainService: String = instanceKeychainService) throws -> Data { - let query = [kSecClass: kSecClassGenericPassword, - kSecAttrService: instanceKeychainService, - kSecAttrAccount: identifier, - kSecMatchLimit: kSecMatchLimitOne, - kSecReturnData: true - ] as CFDictionary - - var res: AnyObject? - let status = SecItemCopyMatching(query, &res) - - guard status == errSecSuccess else { - if status == errSecItemNotFound { - throw KeychainError.itemNotFound - } - throw KeychainError.unexpectedStatus(status) - } - - return res as! Data - } - - static func updateKeychainDidToken(_ token: Data, identifier: String, instanceKeychainService: String = instanceKeychainService) throws { - let query = [ - kSecClass: kSecClassGenericPassword, - kSecAttrService: instanceKeychainService, - kSecAttrAccount: identifier - ] as CFDictionary - - let attributes = [ - kSecValueData: token - ] as CFDictionary - - let status = SecItemUpdate(query, attributes) - guard status == errSecSuccess else { - if status == errSecItemNotFound { - throw KeychainError.itemNotFound - } - throw KeychainError.unexpectedStatus(status) - } - } - - static func upsertKeychainDidToken(_ token: Data, identifier: String, instanceKeychainService: String = instanceKeychainService) throws { - do { - _ = try getKeychainDidToken(identifier: identifier, instanceKeychainService: instanceKeychainService) - try updateKeychainDidToken(token, identifier: identifier, instanceKeychainService: instanceKeychainService) - } catch KeychainError.itemNotFound { - try insertKeychainDidToken(token, identifier: identifier, instanceKeychainService: instanceKeychainService) - } - } - - public static func deleteKeychainDidToken(identifier: String, instanceKeychainService: String = instanceKeychainService) throws { - let query = [ - kSecClass: kSecClassGenericPassword, - kSecAttrService: instanceKeychainService, - kSecAttrAccount: identifier - ] as CFDictionary - - let status = SecItemDelete(query) - - if status == errSecItemNotFound { - print ("SDK Keychain errSecItemNotFound") - } else if status == errSecNoSuchKeychain { - print ("SDK Keychain errSecNoSuchKeychain") - } - - guard status == errSecSuccess || status == errSecItemNotFound else { - throw KeychainError.unexpectedStatus(status) - } - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/ConnectionObservers/NetworkStatusObserver.swift b/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/ConnectionObservers/NetworkStatusObserver.swift deleted file mode 100644 index e4d9245..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/ConnectionObservers/NetworkStatusObserver.swift +++ /dev/null @@ -1,25 +0,0 @@ -import Foundation - -public protocol NetworkStatusObserver { - func startObserving() - func stopObserving() - func didChangeConnectionStatus(_ status: NetworkConnectionStatus) - func didChangeConnectionType(_ type: NetworkConnectionType?) -} - - -public extension NetworkStatusObserver { - internal var connectionObserverId: String { - get { - return String(unsafeBitCast(self, to: Int.self)) - } - } - - func startObserving() { - NetworkStatus.nManager.addObserver(observer: self) - } - - func stopObserving() { - NetworkStatus.nManager.removeObserver(observer: self) - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/ConnectionObservers/NetworkStatusObserverUI.swift b/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/ConnectionObservers/NetworkStatusObserverUI.swift deleted file mode 100644 index e4010eb..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/ConnectionObservers/NetworkStatusObserverUI.swift +++ /dev/null @@ -1,48 +0,0 @@ -import Foundation - -@available(iOS 13.0, macOS 10.15, *) -public class NetworkStatusObserverUI: ObservableObject { - - @Published - public var connectionStatus: NetworkConnectionStatus - - @Published - public var connectionType: NetworkConnectionType? - - private var hiddenObserver: HiddenObserver - - public init() { - self.hiddenObserver = HiddenObserver() - self.connectionStatus = .Offline - self.connectionType = .none - self.hiddenObserver.setExternalObserver(observer: self) - } - - class HiddenObserver: NetworkStatusObserver { - weak var externalObserver: NetworkStatusObserverUI? - - init() { - startObserving() - } - - func setExternalObserver(observer: NetworkStatusObserverUI) { - self.externalObserver = observer - } - - deinit { - stopObserving() - } - - public func didChangeConnectionStatus(_ status: NetworkConnectionStatus) { - DispatchQueue.main.async { - self.externalObserver?.connectionStatus = status - } - } - - public func didChangeConnectionType(_ type: NetworkConnectionType?) { - DispatchQueue.main.async { - self.externalObserver?.connectionType = type - } - } - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/ConnectionProperties/NetworkConnectionStatus.swift b/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/ConnectionProperties/NetworkConnectionStatus.swift deleted file mode 100644 index dc7284f..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/ConnectionProperties/NetworkConnectionStatus.swift +++ /dev/null @@ -1,6 +0,0 @@ -import Foundation - -public enum NetworkConnectionStatus { - case Online - case Offline -} diff --git a/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/ConnectionProperties/NetworkConnectionType.swift b/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/ConnectionProperties/NetworkConnectionType.swift deleted file mode 100644 index 4ddc031..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/ConnectionProperties/NetworkConnectionType.swift +++ /dev/null @@ -1,21 +0,0 @@ -import Foundation - -public enum NetworkConnectionType: Equatable, CustomStringConvertible { - case cellular(radioType: NetworkRadioType) - case wifi - case ethernet - case notdetected - - public var description: String { - switch self { - case .cellular(let radioType): - return "Cellular(" + radioType.description + ")" - case .wifi: - return "WiFi" - case .ethernet: - return "Ethernet" - case .notdetected: - return "AirplaneMode" - } - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/ConnectionProperties/NetworkRadioType.swift b/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/ConnectionProperties/NetworkRadioType.swift deleted file mode 100644 index 57d3114..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/ConnectionProperties/NetworkRadioType.swift +++ /dev/null @@ -1,24 +0,0 @@ -import Foundation - -public enum NetworkRadioType: CustomStringConvertible { - case notdeterminedcellular - case _2G - case _3G - case _4G - case _5G - - public var description: String { - switch self { - case .notdeterminedcellular: - return "NotDeterminedCellular" - case ._2G: - return "2G" - case ._3G: - return "3G" - case ._4G: - return "4G" - case ._5G: - return "5G" - } - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/Navigation.swift b/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/Navigation.swift deleted file mode 100644 index d7954f8..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/Navigation.swift +++ /dev/null @@ -1,34 +0,0 @@ -import Foundation -import UIKit - -public class DefaultNavigation: UINavigationController { - var isDark = false { - didSet { - setNeedsStatusBarAppearanceUpdate() - } - } - var hide = true { - didSet { - self.navigationBar.setBackgroundImage(UIImage(), for: .default) - self.navigationBar.backgroundColor = UIColor.clear - self.navigationBar.shadowImage = UIImage() - } - } - public override var preferredStatusBarStyle: UIStatusBarStyle { - return isDark ? .lightContent : .default - } -} - -class Navigation { - private let window: UIWindow? - init(window: UIWindow ) { - self.window = window - } - - func startApp() { - let root = DefaultNavigation(rootViewController: StoryViewController()) - window!.rootViewController = root - window!.makeKeyAndVisible() - } - -} diff --git a/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/NetworkStatus.swift b/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/NetworkStatus.swift deleted file mode 100644 index adab458..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/NetworkStatus.swift +++ /dev/null @@ -1,126 +0,0 @@ -import Network -#if os(iOS) -import CoreTelephony -#endif - - -public class NetworkStatus { - - public static var nManager: NetworkStatus = NetworkStatus() - - private let monitor: NWPathMonitor - - public var semaphore: DispatchSemaphore? = DispatchSemaphore(value: 0) - - public var connectionStatus: NetworkConnectionStatus { - didSet { - for observer in observers.values { - observer.didChangeConnectionStatus(connectionStatus) - } - } - } - - public var connectionType: NetworkConnectionType? { - didSet { - for observer in observers.values { - observer.didChangeConnectionType(connectionType) - } - } - } - - private var observers: [String: NetworkStatusObserver] - - private init() { - connectionStatus = .Offline - connectionType = .none - observers = [:] - monitor = NWPathMonitor.init() - - monitor.pathUpdateHandler = { path in - self.setConnection(path: path) - } - - monitor.start(queue: DispatchQueue.global(qos: .default)) - - semaphore?.wait() - semaphore = nil - } - - private func setConnection(path: NWPath) { - var newConnectionStatus: NetworkConnectionStatus = .Offline - var newConnectionType: NetworkConnectionType? = nil - - guard path.status == .satisfied else { - newConnectionStatus = .Offline - newConnectionType = .none - if self.connectionStatus != newConnectionStatus { - self.connectionStatus = newConnectionStatus - } - if self.connectionType != newConnectionType { - self.connectionType = newConnectionType - } - semaphore?.signal() - return - } - - newConnectionStatus = .Online - - if path.usesInterfaceType(.cellular) { - #if os(iOS) - let networkInfo = CTTelephonyNetworkInfo() - guard let currentRadio = networkInfo.serviceCurrentRadioAccessTechnology?.values.first else { - newConnectionType = .cellular(radioType: .notdeterminedcellular) - return - } - switch currentRadio { - case CTRadioAccessTechnologyGPRS, CTRadioAccessTechnologyEdge, CTRadioAccessTechnologyCDMA1x: - newConnectionType = .cellular(radioType: ._2G) - case CTRadioAccessTechnologyWCDMA, CTRadioAccessTechnologyHSDPA, CTRadioAccessTechnologyHSUPA, CTRadioAccessTechnologyCDMAEVDORev0, CTRadioAccessTechnologyCDMAEVDORevA, CTRadioAccessTechnologyCDMAEVDORevB, CTRadioAccessTechnologyeHRPD: - newConnectionType = .cellular(radioType: ._3G) - case CTRadioAccessTechnologyLTE: - newConnectionType = .cellular(radioType: ._4G) - default: - if #available(iOS 14.1, *) { - switch currentRadio { - case CTRadioAccessTechnologyNRNSA, CTRadioAccessTechnologyNR: - newConnectionType = .cellular(radioType: ._5G) - default: - newConnectionType = .cellular(radioType: .notdeterminedcellular) - } - } else { - newConnectionType = .cellular(radioType: .notdeterminedcellular) - } - } - #else - newConnectionType = .cellular(radioType: .notdeterminedcellular) - #endif - } else if path.usesInterfaceType(.wifi) { - newConnectionType = .wifi - } else if path.usesInterfaceType(.wiredEthernet) { - newConnectionType = .ethernet - } - - if self.connectionStatus != newConnectionStatus { - self.connectionStatus = newConnectionStatus - } - - if self.connectionType != newConnectionType { - self.connectionType = newConnectionType - } - semaphore?.signal() - } - - internal func addObserver(observer: NetworkStatusObserver) { - observer.didChangeConnectionStatus(connectionStatus) - observer.didChangeConnectionType(connectionType) - observers[observer.connectionObserverId] = observer - } - - internal func removeObserver(observer: NetworkStatusObserver) { - observers[observer.connectionObserverId] = nil - } - - deinit { - monitor.cancel() - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/SdkGlobalHelper.swift b/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/SdkGlobalHelper.swift deleted file mode 100755 index 59b72b3..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/NetworkStatus/SdkGlobalHelper.swift +++ /dev/null @@ -1,239 +0,0 @@ -import UIKit -import Foundation - -public class SdkGlobalHelper { - - public class var sharedInstance: SdkGlobalHelper { - struct Static { - static let instance: SdkGlobalHelper = SdkGlobalHelper() - } - return Static.instance - } - - init() { - } - - public struct ScreenSize { - static let SCREEN_WIDTH = UIScreen.main.bounds.size.width - static let SCREEN_HEIGHT = UIScreen.main.bounds.size.height - static let SCREEN_MAX_LENGTH = max(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT) - static let SCREEN_MIN_LENGTH = min(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT) - } - - public struct DeviceType { - public static let IS_IPHONE_5 = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 568.0 - public static let IS_IPHONE_SE = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 667.0 - public static let IS_IPHONE_8_PLUS = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 736.0 - public static let IS_IPHONE_XS = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 812.0 - public static let IS_IPHONE_XS_MAX = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 896.0 - public static let IS_IPHONE_14 = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 844.0 - public static let IS_IPHONE_14_PRO = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 852.0 - public static let IS_IPHONE_14_PLUS = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 926.0 - public static let IS_IPHONE_14_PRO_MAX = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 932.0 - } - - public func getSdkDocumentsDirectory() -> URL { - let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask) - return paths[0] - } - - public func willDeviceHaveDynamicIsland() -> Bool { - if let simulatorModelIdentifier = ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"] { - let nameSimulator = simulatorModelIdentifier - return nameSimulator == "iPhone15,2" || nameSimulator == "iPhone15,3" || nameSimulator == "iPhone15,4" || nameSimulator == "iPhone15,5" || nameSimulator == "iPhone16,1" || nameSimulator == "iPhone16,2" ? true : false - } - - var sysinfo = utsname() - uname(&sysinfo) - let name = String(bytes: Data(bytes: &sysinfo.machine, count: Int(_SYS_NAMELEN)), encoding: .ascii)!.trimmingCharacters(in: .controlCharacters) - return name == "iPhone15,2" || name == "iPhone15,3" || name == "iPhone15,4" || name == "iPhone15,5" || name == "iPhone16,1" || name == "iPhone16,2" ? true : false - } - - public func saveVideoParamsToDictionary(parentSlideId: String, paramsDictionary: [String:String]) { - var stringValuesToSave: [String:String] = [:] - - for key in paramsDictionary.keys { - let valueToStore = paramsDictionary[key]! - let keyVideoStr: String = key - let durationVideoStr: String = valueToStore - - stringValuesToSave[keyVideoStr] = durationVideoStr - } - UserDefaults.standard.setValue(stringValuesToSave, forKeyPath: parentSlideId) - } - - func retrieveVideoCachedParamsDictionary(parentSlideId: String) -> [String:String] { - let savedDownloadedVideosValues: [String:String] = UserDefaults.standard.object(forKey: parentSlideId) as? [String : String] ?? [String:String]() - - var convertedDurationsDictionary:[String:String] = [:] - for key in savedDownloadedVideosValues.keys { - let keyVideoStr: String = key - let durationVideoStr: String = savedDownloadedVideosValues[key]! - convertedDurationsDictionary[keyVideoStr] = durationVideoStr - } - - return convertedDurationsDictionary - } -} - - -extension DispatchQueue { - private static var _onceTracker = [String]() - - class func onceTechService( - file: String = #file, - function: String = #function, - line: Int = #line, - block: () -> Void - ) { - let token = "\(file):\(function):\(line)" - onceTechService(token: token, block: block) - } - - class func onceTechService( - token: String, - block: () -> Void - ) { - objc_sync_enter(self) - defer { objc_sync_exit(self) } - - guard !_onceTracker.contains(token) else { - return - } - - _onceTracker.append(token) - block() - } -} - - -extension UIImage { - func withRoundedCorners(radius: CGFloat? = nil) -> UIImage? { - let maxRadius = min(size.width, size.height) / 2 - let cornerRadius: CGFloat - - if let radius = radius, radius > 0 && radius <= maxRadius { - cornerRadius = radius - } else { - cornerRadius = maxRadius - } - - UIGraphicsBeginImageContextWithOptions(size, false, scale) - - let rect = CGRect(origin: .zero, size: size) - UIBezierPath(roundedRect: rect, cornerRadius: cornerRadius).addClip() - draw(in: rect) - - let image = UIGraphicsGetImageFromCurrentImageContext() - UIGraphicsEndImageContext() - return image - } -} - - -extension UIColor { - convenience init(red: Int, green: Int, blue: Int) { - assert(red >= 0 && red <= 255, "Invalid red component") - assert(green >= 0 && green <= 255, "Invalid green component") - assert(blue >= 0 && blue <= 255, "Invalid blue component") - - self.init(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: 1.0) - } - - convenience init(rgb: Int) { - self.init( - red: (rgb >> 16) & 0xFF, - green: (rgb >> 8) & 0xFF, - blue: rgb & 0xFF - ) - } -} - - -extension UIColor { - public class func hexStringFromColor(color: UIColor) -> String { - let components = color.cgColor.components - - if components?.count == 2 { - let r: CGFloat = components?[0] ?? 0.0 - let g: CGFloat = components?[0] ?? 0.0 - let b: CGFloat = components?[0] ?? 0.0 - - let hexString = String.init(format: "#%02lX%02lX%02lX", lroundf(Float(r * 255)), lroundf(Float(g * 255)), lroundf(Float(b * 255))) - //print(hexString) - return hexString - } else { - let r: CGFloat = components?[0] ?? 0.0 - let g: CGFloat = components?[1] ?? 0.0 - let b: CGFloat = components?[2] ?? 0.0 - - let hexString = String.init(format: "#%02lX%02lX%02lX", lroundf(Float(r * 255)), lroundf(Float(g * 255)), lroundf(Float(b * 255))) - //print(hexString) - return hexString - } - } - - public var rgba: (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) { - var red: CGFloat = 0 - var green: CGFloat = 0 - var blue: CGFloat = 0 - var alpha: CGFloat = 0 - getRed(&red, green: &green, blue: &blue, alpha: &alpha) - - return (red, green, blue, alpha) - } - - - public static let sdkDefaultWhiteColor = UIColor(red: 1, green: 1, blue: 1, alpha: 0.9) - public static let sdkDefaultBlackColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.9) - public static let sdkDefaultOrangeColor = UIColor(red: 252/255, green: 107/255, blue: 63/255, alpha: 1.0) - public static let sdkDefaultBlueColor = UIColor(red: 23/255, green: 170/255, blue: 223/255, alpha: 1.0) - public static let sdkDefaultYellowColor = UIColor(red: 251/255, green: 184/255, blue: 0/255, alpha: 1.0) - public static let sdkDefaultGreenColor = UIColor(red: 94/255, green: 193/255, blue: 105/255, alpha: 1.0) -} - - -extension String { - func localizeUI(withComment comment: String? = nil) -> String { - return NSLocalizedString(self, comment: comment ?? "") - } -} - - -extension Int { - static func parseIntSymbols(from string: String) -> Int? { - Int(string.components(separatedBy: CharacterSet.decimalDigits.inverted).joined()) - } -} - - -extension Error { - var errorCode:Int? { - return (self as NSError).code - } -} - - -extension UIView { - func fixInView(_ container: UIView!) { - translatesAutoresizingMaskIntoConstraints = false - frame = container.frame - container.addSubview(self) - NSLayoutConstraint(item: self, attribute: .leading, relatedBy: .equal, toItem: container, attribute: .leading, multiplier: 1.0, constant: 0).isActive = true - NSLayoutConstraint(item: self, attribute: .trailing, relatedBy: .equal, toItem: container, attribute: .trailing, multiplier: 1.0, constant: 0).isActive = true - NSLayoutConstraint(item: self, attribute: .top, relatedBy: .equal, toItem: container, attribute: .top, multiplier: 1.0, constant: 0).isActive = true - NSLayoutConstraint(item: self, attribute: .bottom, relatedBy: .equal, toItem: container, attribute: .bottom, multiplier: 1.0, constant: 0).isActive = true - } -} - - -extension NSObject { - func safeRemoveObserver(_ observer: NSObject, forKeyPath keyPath: String) { - switch self.observationInfo { - case .some: - self.removeObserver(observer, forKeyPath: keyPath) - default: break - //debugPrint("SDK Error deleting Observer does not exist") - } - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/ManagedViewConfig/ManagedViewConfig.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/ManagedViewConfig/ManagedViewConfig.swift deleted file mode 100644 index b2e5576..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/ManagedViewConfig/ManagedViewConfig.swift +++ /dev/null @@ -1,63 +0,0 @@ -import Foundation - -public class ManagedViewConfig { - public static let configurationKey = "com.sdk.configuration.managed" - public static let feedbackKey = "com.sdk.feedback.managed" - - public static let shared = ManagedViewConfig() - - public typealias GrabStateFunction = ([String: Any?]) -> Void - - private var configGrabStates = [GrabStateFunction]() - private var feedbackGrabStates = [GrabStateFunction]() - - init() { - NotificationCenter.default.addObserver(self, selector: #selector(ManagedViewConfig.didChange), name: UserDefaults.didChangeNotification, object: nil) - } - - public func addViewAppConfigChangedGrabState(_ appConfigChangedGrabState: @escaping GrabStateFunction) { - configGrabStates.append(appConfigChangedGrabState) - } - - public func addAppFeedbackChangedGrabState(_ appFeedbackChangedGrabState: @escaping GrabStateFunction) { - feedbackGrabStates.append(appFeedbackChangedGrabState) - } - - @objc - func didChange() { - if let configDict = UserDefaults.standard.dictionary(forKey: Self.configurationKey) { - for hook in configGrabStates { - hook(configDict) - } - } - if let feedbackDict = UserDefaults.standard.dictionary(forKey: Self.feedbackKey) { - for hook in feedbackGrabStates { - hook(feedbackDict) - } - } - } - - public func getConfigValue(forKey: String) -> Any? { - if let sdkConfig = UserDefaults.standard.dictionary(forKey: Self.configurationKey) { - return sdkConfig[forKey] - } - return nil - } - - public func getFeedbackValue(forKey: String) -> Any? { - if let sdkConfigFeedback = UserDefaults.standard.dictionary(forKey: Self.feedbackKey) { - return sdkConfigFeedback[forKey] - } - return nil - } - - public func updateStoredValue(_ value: Any, forKey: String) { - if var sdkConfigFeedback = UserDefaults.standard.dictionary(forKey: Self.feedbackKey) { - sdkConfigFeedback[forKey] = value - UserDefaults.standard.set(sdkConfigFeedback, forKey: Self.feedbackKey) - } else { - let feedbackDict = [forKey: value] - UserDefaults.standard.set(feedbackDict, forKey: Self.feedbackKey) - } - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/ManagedViewConfig/SettingsManageable.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/ManagedViewConfig/SettingsManageable.swift deleted file mode 100644 index 6b03eca..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/ManagedViewConfig/SettingsManageable.swift +++ /dev/null @@ -1,125 +0,0 @@ -import Foundation - -protocol SettingsManageable { - func settingsAddr() -> URL - func toDictionary() -> [String: Any?]? - func update() -> Bool - mutating func preload() -> Bool - mutating func preloadUsingSettingsFile() -> Bool - func delete() -> Bool - mutating func reset() -> Bool -} - - -extension SettingsManageable where Self: Codable { - - func settingsAddr() -> URL { - let cachesDirectory = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)[0] - return cachesDirectory.appendingPathComponent("\(Self.self).plist") - } - - func toDictionary() -> [String: Any?]? { - do { - if FileManager.default.fileExists(atPath: settingsAddr().path) { - let fileContents = try Data(contentsOf: settingsAddr()) - let dictionary = try PropertyListSerialization.propertyList(from: fileContents, options: .mutableContainersAndLeaves, format: nil) as? [String: Any?] - return dictionary - } - } catch { - print(error.localizedDescription) - } - - return nil - } - - func update() -> Bool { - do { - let encoded = try PropertyListEncoder().encode(self) - try encoded.write(to: settingsAddr()) - return true - } catch { - print(error.localizedDescription) - return false - } - } - - mutating func preload() -> Bool { - if FileManager.default.fileExists(atPath: settingsAddr().path) { - do { - let fileContents = try Data(contentsOf: settingsAddr()) - self = try PropertyListDecoder().decode(Self.self, from: fileContents) - return true - } catch { - print(error.localizedDescription) - return false - } - } else { - if update() { - backupSettingsFile() - return true - } else { - return false - } - } - } - - mutating func preloadUsingSettingsFile() -> Bool { - guard let originalSettingsURL = Bundle.main.url(forResource: "\(Self.self)", withExtension: "plist") else { - return false - } - - do { - if !FileManager.default.fileExists(atPath: settingsAddr().path) { - try FileManager.default.copyItem(at: originalSettingsURL, to: settingsAddr()) - } - - let fileContents = try Data(contentsOf: settingsAddr()) - self = try PropertyListDecoder().decode(Self.self, from: fileContents) - return true - } catch { - print(error.localizedDescription) - return false - } - } - - func delete() -> Bool { - do { - try FileManager.default.removeItem(at: settingsAddr()) - return true - } catch { - print(error.localizedDescription) - return false - } - } - - private func backupSettingsFile() { - do { - try FileManager.default.copyItem(at: settingsAddr(), to: settingsAddr().appendingPathExtension("init")) - } catch { - print(error.localizedDescription) - } - } - - private func restoreSettingsFile() -> Bool { - do { - try FileManager.default.copyItem(at: settingsAddr().appendingPathExtension("init"), to: settingsAddr()) - return true - } catch { - print(error.localizedDescription) - return false - } - } - - mutating func reset() -> Bool { - if delete() { - if !preloadUsingSettingsFile() { - if restoreSettingsFile() { - return preload() - } - } else { - return true - } - } - return false - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/ManagedViewConfig/ViewConfigPlain.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/ManagedViewConfig/ViewConfigPlain.swift deleted file mode 100644 index 96e3803..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/ManagedViewConfig/ViewConfigPlain.swift +++ /dev/null @@ -1,46 +0,0 @@ -import Foundation - -@propertyWrapper public struct ViewConfigPlain { - - private final class Listener { - - var subscriber: NSObjectProtocol? - var value: Value? - - func listenTo(store: UserDefaults, key: String, defaultValue: Value) { - if subscriber == nil { - ViewConfigService.configShared.use(userDefaults: store) - value = ViewConfigService.configShared.value(for: key, store) ?? defaultValue - - subscriber = NotificationCenter.default.addObserver(forName: .sdkConfigChanged, object: store, queue: nil) { [weak self] _ in - guard let self = self else { - return - } - self.value = ViewConfigService.configShared.value(for: key, store) ?? defaultValue - } - } - } - - deinit { - NotificationCenter.default.removeObserver(self, name: .sdkConfigChanged, object: nil) - } - } - - private var listener = Listener() - - private let defaultValue: Value - - public var wrappedValue: Value { - listener.value ?? defaultValue - } - - public init(wrappedValue defaultValue: Value, _ key: String, store: UserDefaults = UserDefaults.standard) { - self.defaultValue = defaultValue - listener.listenTo(store: store, key: key, defaultValue: defaultValue) - } - - public init(_ key: String, store: UserDefaults = UserDefaults.standard) where Value: ExpressibleByNilLiteral { - self.defaultValue = nil - listener.listenTo(store: store, key: key, defaultValue: nil) - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/ManagedViewConfig/ViewConfigService.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/ManagedViewConfig/ViewConfigService.swift deleted file mode 100644 index 7e8ba08..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/ManagedViewConfig/ViewConfigService.swift +++ /dev/null @@ -1,42 +0,0 @@ -import Foundation - -extension Notification.Name { - public static let sdkConfigChanged = Self("sdkConfigChanged") -} - -class ViewConfigService { - static let configShared = ViewConfigService() - - private var dictionaries: [UserDefaults: [String: Any]] = [:] - private var observers: [UserDefaults: any NSObjectProtocol] = [:] - - func use(userDefaults: UserDefaults) { - - if dictionaries[userDefaults] == nil { - - dictionaries[userDefaults] = userDefaults.dictionary(forKey: ManagedViewConfig.configurationKey) ?? [:] - let center = NotificationCenter.default - observers[userDefaults] = center.addObserver(forName: UserDefaults.didChangeNotification, - object: userDefaults, - queue: .main) { [weak self] (note: Notification) in - guard let self = self else { - return - } - - if let defaults = note.object as? UserDefaults { - let newValues = defaults.dictionary(forKey: ManagedViewConfig.configurationKey) ?? [:] - let mustNotify = !newValues.isEmpty || !(self.dictionaries[defaults]?.isEmpty ?? true) - self.dictionaries[defaults] = newValues - - if mustNotify { - NotificationCenter.default.post(name: .sdkConfigChanged, object: defaults) - } - } - } - } - } - - func value(for key: String, _ defaults: UserDefaults) -> T? { - dictionaries[defaults]?[key] as? T - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeBanner/PromocodeBanner.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeBanner/PromocodeBanner.swift deleted file mode 100644 index bc49b6e..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeBanner/PromocodeBanner.swift +++ /dev/null @@ -1,174 +0,0 @@ -import Foundation -import UIKit - -public enum PromocodeBannerLocation { - case topLeft - case topRight - case bottomLeft - case bottomRight -} - -public class PromocodeBanner: UIView { - - static var SDK_OPEN: Bool = false - static var MAX_ALLOWED_BANNERS: Int = 999 - - internal static var OPEN_PROMOCODE_BANNERS: Int = 0 - - internal var location: PromocodeBannerLocation - - public var size: CGSize { - didSet { self.updateFrame() } - } - - public var padding: (CGFloat, CGFloat) { - didSet { self.updateFrame() } - } - - public var cornerRadius: CGFloat { - didSet { - self.layer.cornerRadius = cornerRadius - self.updateFrame() - self.updateSubviews() - } - } - - public var displayTime: Double - - public var animationDuration: Double - - public required init?(coder aDecoder: NSCoder) { - location = .bottomRight - size = CGSize(width: 100, height: 50) - padding = (20, 20) - cornerRadius = 0 - displayTime = 1 - animationDuration = 1 - super.init(coder: aDecoder) - - self.config() - } - - public init(location: PromocodeBannerLocation) { - self.location = location - self.size = CGSize(width: 100, height: 50) - self.padding = (20, 20) - self.cornerRadius = 0 - self.displayTime = 1 - self.animationDuration = 1 - - switch location { - case .topLeft: - super.init(frame: CGRect(x: padding.0, y: padding.1, width: size.width, height: size.height)) - break - case .topRight: - super.init(frame: CGRect(x: UIScreen.main.bounds.maxX - size.width - padding.0, y: padding.1, width: size.width, height: size.height)) - break - case .bottomLeft: - super.init(frame: CGRect(x: padding.0, y: UIScreen.main.bounds.height - size.height - padding.1, width: size.width, height: size.height)) - break - case .bottomRight: - super.init(frame: CGRect(x: UIScreen.main.bounds.maxX - size.width - padding.0, y: UIScreen.main.bounds.height - size.height - padding.1, width: size.width, height: size.height)) - break - } - - self.config() - } - - private func config() { - backgroundColor = .clear - } - - private func updateFrame() { - switch location { - case .topLeft: - self.frame = CGRect(x: padding.0, y: padding.1, width: size.width, height: size.height) - break - case .topRight: - self.frame = CGRect(x: UIScreen.main.bounds.maxX - size.width - padding.0, y: padding.1, width: size.width, height: size.height) - break - case .bottomLeft: - self.frame = CGRect(x: padding.0, y: UIScreen.main.bounds.height - size.height - padding.1, width: size.width, height: size.height) - break - case .bottomRight: - self.frame = CGRect(x: UIScreen.main.bounds.maxX - size.width - padding.0, y: UIScreen.main.bounds.height - size.height - padding.1, width: size.width, height: size.height) - break - } - } - - internal func updateSubviews() { - for view in subviews { - view.frame = CGRect(x: 0, y: 0, width: frame.width, height: frame.height) - view.layer.cornerRadius = self.cornerRadius - } - } - - public func setView(view: UIView) { - view.frame = CGRect(x: 0, y: 0, width: frame.width, height: frame.height) - view.clipsToBounds = true - addSubview(view) - } - - internal func startTimer() { - if displayTime == 0 { - return - } - - let _ = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(PromocodeBanner.decrementTimer(timer:)), userInfo: nil, repeats: true) - } - - @objc - private func decrementTimer(timer: Timer) { - if displayTime > 0 { - displayTime -= 1 - } else { - timer.invalidate() - dismiss() - } - } - - public func dismissWithoutAnimation() { - self.updateSubviews() - self.removeFromSuperview() - } - - public func dismiss() { - switch location { - case .topLeft: - UIView.animate(withDuration: self.animationDuration, animations: { - self.frame = CGRect(x: self.padding.0, y: self.padding.1, width: 0, height: self.size.height) - self.updateSubviews() - }, completion: { (b) in - self.removeFromSuperview() - }) - break - case .topRight: - UIView.animate(withDuration: self.animationDuration, animations: { - self.frame = CGRect(x: UIScreen.main.bounds.maxX - self.padding.0, y: self.padding.1, width: 0, height: self.size.height) - self.updateSubviews() - }, completion: { (b) in - self.removeFromSuperview() - }) - break - case .bottomLeft: - UIView.animate(withDuration: self.animationDuration, animations: { - self.frame = CGRect(x: self.padding.0, y: UIScreen.main.bounds.height - self.size.height - self.padding.1, width: 0, height: self.size.height) - self.updateSubviews() - }, completion: { (b) in - self.removeFromSuperview() - }) - break - case .bottomRight: - UIView.animate(withDuration: self.animationDuration, animations: { - self.frame = CGRect(x: UIScreen.main.bounds.width - self.padding.0, y: UIScreen.main.bounds.height - self.size.height - self.padding.1, width: 0, height: self.size.height) - self.updateSubviews() - }, completion: { (b) in - self.removeFromSuperview() - }) - break - } - - PromocodeBanner.SDK_OPEN = false - PromocodeBanner.OPEN_PROMOCODE_BANNERS -= 1 - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeBanner/SdkPopupAlertView.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeBanner/SdkPopupAlertView.swift deleted file mode 100644 index 156beb2..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeBanner/SdkPopupAlertView.swift +++ /dev/null @@ -1,377 +0,0 @@ -import QuartzCore -import UIKit - -@available(iOSApplicationExtension, unavailable) - -public protocol SdkPopupAlertViewScheme { - func SdkPopupAlertView() -> String -} - -public class SdkPopupAlertView: UIView { - public enum TextAlignment { - case left - case center - case right - } - - public enum Position { - case top - case centerCustom - case bottom - } - - override public var bounds: CGRect { - didSet { - setupRealShadow() - } - } - - private let position: Position - private var initialTransform: CGAffineTransform { - switch position { - case .top: - return CGAffineTransform(translationX: 0, y: -100) - case .centerCustom: - return CGAffineTransform(translationX: 0, y: -100) - case .bottom: - return CGAffineTransform(translationX: 0, y: 100) - } - } - private let hStack: UIStackView = { - let stackView = UIStackView() - stackView.alignment = .center - return stackView - }() - - private lazy var vStack: UIStackView = { - let stackView = UIStackView() - stackView.axis = .vertical - stackView.alignment = vStackAlignment - return stackView - }() - - private let titleLabel: UILabel = { - let label = UILabel() - label.numberOfLines = 0 //1 - - if #available(iOS 13.0, *) { - label.textColor = .black //.label - } else { - label.textColor = .black - } - return label - }() - - private var popupDefaultBackgroundColor: UIColor? { - return traitCollection.userInterfaceStyle == .dark ? lightBackgroundColor : lightBackgroundColor - } - - private var vStackAlignment: UIStackView.Alignment { - switch textAlignment { - case .left: - return .leading - case .center: - return .center - case .right: - return .trailing - } - } - - private var onTap: (() -> ())? - - public var autoRealHide = true - public var displayRealAlertTime: TimeInterval = 2.7 - public var showAnimationDuration = 0.3 - public var hideAnimationDuration = 0.3 - public var hideOnTap = true - - public var textAlignment: TextAlignment = .center { - didSet { - vStack.alignment = vStackAlignment - } - } - - public var titleTextColor: UIColor = .black { - didSet { - titleLabel.textColor = titleTextColor - } - } - - public var darkBackgroundColor = UIColor(red: 0.13, green: 0.13, blue: 0.13, alpha: 1.00) { - didSet { - backgroundColor = popupDefaultBackgroundColor - } - } - - public var lightBackgroundColor = UIColor(red: 0.99, green: 0.99, blue: 0.99, alpha: 1.00) { - didSet { - backgroundColor = popupDefaultBackgroundColor - } - } - - private var sdkPopupOverlayWindow: SdkPopupAlertViewWindow? - - public init(title: String, - titleFont: UIFont = .systemFont(ofSize: 17, weight: .semibold), - subtitle: String? = nil, - subtitleFont: UIFont = .systemFont(ofSize: 17, weight: .semibold), - icon: UIImage? = nil, - iconSpacing: CGFloat = 16, - position: Position = .top, - onTap: (() -> ())? = nil) { - - self.position = position - - super.init(frame: .zero) - - backgroundColor = popupDefaultBackgroundColor - - hStack.spacing = iconSpacing - - titleLabel.font = titleFont - titleLabel.textAlignment = .center - titleLabel.text = title - vStack.addArrangedSubview(titleLabel) - - if let icon = icon { - let iconImageView = UIImageView() - iconImageView.contentMode = .scaleAspectFit - iconImageView.translatesAutoresizingMaskIntoConstraints = false - - NSLayoutConstraint.activate([ - iconImageView.widthAnchor.constraint(equalToConstant: 28), - iconImageView.heightAnchor.constraint(equalToConstant: 28) - ]) - - if #available(iOS 13.0, *) { - iconImageView.tintColor = .black //.label - } else { - iconImageView.tintColor = .black - } - - iconImageView.image = icon - hStack.addArrangedSubview(iconImageView) - - } else { - - let iconImageView = UIImageView() - iconImageView.contentMode = .scaleAspectFit - iconImageView.translatesAutoresizingMaskIntoConstraints = false - - NSLayoutConstraint.activate([ - iconImageView.widthAnchor.constraint(equalToConstant: 26), - iconImageView.heightAnchor.constraint(equalToConstant: 26) - ]) - - if #available(iOS 13.0, *) { - iconImageView.tintColor = .black //.label - } else { - iconImageView.tintColor = .black - } - - var frameworkBundle = Bundle(for: classForCoder) -#if SWIFT_PACKAGE - frameworkBundle = Bundle.module -#endif - let copyIcon = UIImage(named: "iconCopyDark", in: frameworkBundle, compatibleWith: nil)?.withRenderingMode(UIImage.RenderingMode.alwaysTemplate) - iconImageView.image = copyIcon - hStack.addArrangedSubview(iconImageView) - } - - if let subtitle = subtitle { - let subtitleLabel = UILabel() - - if #available(iOS 13.0, *) { - subtitleLabel.textColor = .black - } else { - subtitleLabel.textColor = .lightGray - } - - subtitleLabel.textAlignment = .center - subtitleLabel.numberOfLines = 0 - subtitleLabel.font = subtitleFont - subtitleLabel.text = "\n" + subtitle + "\n" - vStack.addArrangedSubview(subtitleLabel) - } - - self.onTap = onTap - let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(didTap)) - addGestureRecognizer(tapGestureRecognizer) - - hStack.addArrangedSubview(vStack) - addSubview(hStack) - - transform = initialTransform - clipsToBounds = true - } - - func prepareForShowing() { - sdkPopupOverlayWindow = SdkPopupAlertViewWindow(SdkPopupAlertView: self) - setupRealdefaultConstraints(position: position) - setupRealStackViewdefaultConstraints() - sdkPopupOverlayWindow?.isHidden = false - } - - override public func layoutSubviews() { - super.layoutSubviews() - layer.cornerRadius = bounds.height / 2 - } - - public func showHapticFeedbackType(haptic: UINotificationFeedbackGenerator.FeedbackType? = nil) { - if let hapticType = haptic { - UINotificationFeedbackGenerator().notificationOccurred(hapticType) - } - show() - } - - public func show() { - if sdkPopupOverlayWindow == nil { - prepareForShowing() - } else { - return - } - UIView.animate(withDuration: showAnimationDuration, delay: 0.0, options: .curveEaseOut, animations: { - self.transform = .identity - }) { [self] _ in - if autoRealHide { - hide(after: displayRealAlertTime) - } - } - } - - public func hide(after time: TimeInterval = 0.0) { - DispatchQueue.main.asyncAfter(deadline: .now() + time) { - UIView.animate(withDuration: self.hideAnimationDuration, delay: 0, options: .curveEaseIn, animations: { [self] in - transform = initialTransform - }) { [self] _ in - removeFromSuperview() - sdkPopupOverlayWindow = nil - } - } - } - - public func hideImmediately() { - removeFromSuperview() - sdkPopupOverlayWindow = nil - } - - override public func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { - super.traitCollectionDidChange(previousTraitCollection) - backgroundColor = popupDefaultBackgroundColor - } - - private func setupRealdefaultConstraints(position: Position) { - guard let superview = superview else { - return - } - translatesAutoresizingMaskIntoConstraints = false - - var defaultConstraints = [ - centerXAnchor.constraint(equalTo: superview.centerXAnchor), - leadingAnchor.constraint(greaterThanOrEqualTo: superview.leadingAnchor, constant: 8), - trailingAnchor.constraint(lessThanOrEqualTo: superview.trailingAnchor, constant: -8), - heightAnchor.constraint(greaterThanOrEqualToConstant: 50) - ] - - switch position { - case .top: - if SdkGlobalHelper.DeviceType.IS_IPHONE_14 || SdkGlobalHelper.DeviceType.IS_IPHONE_14_PLUS || SdkGlobalHelper.DeviceType.IS_IPHONE_XS_MAX || SdkGlobalHelper.DeviceType.IS_IPHONE_XS || SdkGlobalHelper.DeviceType.IS_IPHONE_SE || SdkGlobalHelper.DeviceType.IS_IPHONE_8_PLUS || SdkGlobalHelper.DeviceType.IS_IPHONE_5 { - defaultConstraints += [ - topAnchor.constraint(equalTo: superview.layoutMarginsGuide.topAnchor, constant: 68), - bottomAnchor.constraint(lessThanOrEqualTo: superview.layoutMarginsGuide.bottomAnchor, constant: -8) - ] - } else { - defaultConstraints += [ - topAnchor.constraint(equalTo: superview.layoutMarginsGuide.topAnchor, constant: 90), - bottomAnchor.constraint(lessThanOrEqualTo: superview.layoutMarginsGuide.bottomAnchor, constant: -8) - ] - } - case .centerCustom: - defaultConstraints += [ - topAnchor.constraint(equalTo: superview.layoutMarginsGuide.topAnchor, constant: SdkConfiguration.stories.storiesSlideReloadPopupPositionY), - bottomAnchor.constraint(lessThanOrEqualTo: superview.layoutMarginsGuide.bottomAnchor, constant: -8) - ] - case .bottom: - defaultConstraints += [ - bottomAnchor.constraint(equalTo: superview.layoutMarginsGuide.bottomAnchor, constant: -8), - topAnchor.constraint(greaterThanOrEqualTo: superview.layoutMarginsGuide.topAnchor, constant: 8) - ] - } - NSLayoutConstraint.activate(defaultConstraints) - } - - private func setupRealStackViewdefaultConstraints() { - hStack.translatesAutoresizingMaskIntoConstraints = false - - NSLayoutConstraint.activate([ - hStack.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 54), - hStack.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -54), - hStack.topAnchor.constraint(equalTo: topAnchor, constant: 8), - hStack.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -8) - ]) - } - - private func setupRealShadow() { - layer.masksToBounds = false - layer.shadowOffset = CGSize(width: 0, height: 4) - layer.shadowColor = UIColor.black.withAlphaComponent(0.08).cgColor - layer.shadowRadius = 8 - layer.shadowOpacity = 1 - } - - @objc - private func didTap() { - if hideOnTap { - hide() - } - onTap?() - } - - @available(*, unavailable) - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } -} - - -@available(iOSApplicationExtension, unavailable) - -class SdkPopupAlertViewWindow: UIWindow { - init(SdkPopupAlertView: SdkPopupAlertView) { - if #available(iOS 13.0, *) { - if let activeForegroundScene = UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene { - super.init(windowScene: activeForegroundScene) - } else if let inactiveForegroundScene = UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundInactive }) as? UIWindowScene { - super.init(windowScene: inactiveForegroundScene) - } else { - super.init(frame: UIScreen.main.bounds) - } - } else { - super.init(frame: UIScreen.main.bounds) - } - rootViewController = UIViewController() - windowLevel = .alert - rootViewController?.view.addSubview(SdkPopupAlertView) - } - - @available(*, unavailable) - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func point(inside point: CGPoint, with event: UIEvent?) -> Bool { - if let rootViewController = self.rootViewController, - let SdkPopupAlertView = rootViewController.view.subviews.first as? SdkPopupAlertView { - return SdkPopupAlertView.frame.contains(point) - } - return false - } -} - - -extension RawRepresentable where RawValue == String { - public func SdkPopupAlertView() -> String { - let str = String(describing: type(of: self)) + rawValue - return str - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeBanner/UIViewController+PromocodeBanner.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeBanner/UIViewController+PromocodeBanner.swift deleted file mode 100644 index c035a05..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeBanner/UIViewController+PromocodeBanner.swift +++ /dev/null @@ -1,149 +0,0 @@ -import Foundation -import UIKit - -public extension UICollectionViewCell { - - func showInCellPromocodeBanner(promoBanner: PromocodeBanner) { - if PromocodeBanner.OPEN_PROMOCODE_BANNERS >= PromocodeBanner.MAX_ALLOWED_BANNERS { - return - } else { - PromocodeBanner.OPEN_PROMOCODE_BANNERS += 1 - } - - let needToSetup: CGRect = promoBanner.frame - - switch promoBanner.location { - case .topLeft: - promoBanner.frame = CGRect(x: promoBanner.frame.minX, y: promoBanner.frame.minY, width: 0, height: promoBanner.frame.height) - promoBanner.updateSubviews() - break - case .topRight: - promoBanner.frame = CGRect(x: promoBanner.frame.minX + promoBanner.frame.width, y: promoBanner.frame.minY, width: 0, height: promoBanner.frame.height) - promoBanner.updateSubviews() - break - case .bottomLeft: - promoBanner.frame = CGRect(x: promoBanner.frame.minX, y: promoBanner.frame.minY, width: 0, height: promoBanner.frame.height) - promoBanner.updateSubviews() - break - case .bottomRight: - promoBanner.frame = CGRect(x: promoBanner.frame.minX + promoBanner.frame.width, y: promoBanner.frame.minY, width: 0, height: promoBanner.frame.height) - promoBanner.updateSubviews() - break - } - - contentView.addSubview(promoBanner) - contentView.bringSubviewToFront(promoBanner) - - UIView.setAnimationCurve(UIView.AnimationCurve.easeOut) - switch promoBanner.location { - case .topLeft: - UIView.animate(withDuration: promoBanner.animationDuration, animations: { - promoBanner.frame = CGRect(x: promoBanner.frame.minX, y: promoBanner.frame.minY, width: needToSetup.width, height: promoBanner.frame.height) - promoBanner.updateSubviews() - }, completion: { (b) in - promoBanner.startTimer() - }) - break - case .topRight: - UIView.animate(withDuration: promoBanner.animationDuration, animations: { - promoBanner.frame = CGRect(x: needToSetup.minX, y: promoBanner.frame.minY, width: needToSetup.width, height: promoBanner.frame.height) - promoBanner.updateSubviews() - }, completion: { (b) in - promoBanner.startTimer() - }) - break - case .bottomLeft: - UIView.animate(withDuration: promoBanner.animationDuration, animations: { - promoBanner.frame = CGRect(x: promoBanner.frame.minX, y: promoBanner.frame.minY, width: needToSetup.width, height: promoBanner.frame.height) - promoBanner.updateSubviews() - }, completion: { (b) in - promoBanner.startTimer() - }) - break - case .bottomRight: - UIView.animate(withDuration: promoBanner.animationDuration, animations: { - promoBanner.frame = CGRect(x: needToSetup.minX, y: promoBanner.frame.minY, width: needToSetup.width, height: promoBanner.frame.height) - promoBanner.updateSubviews() - }, completion: { (b) in - promoBanner.startTimer() - }) - break - } - - promoBanner.frame = needToSetup - } -} - - -public extension UIViewController { - - func showInViewPromocodeBanner(promoBanner: PromocodeBanner) { - if PromocodeBanner.OPEN_PROMOCODE_BANNERS >= PromocodeBanner.MAX_ALLOWED_BANNERS { - return - } else { - PromocodeBanner.OPEN_PROMOCODE_BANNERS += 1 - } - - let needToSetup: CGRect = promoBanner.frame - - switch promoBanner.location { - case .topLeft: - promoBanner.frame = CGRect(x: promoBanner.frame.minX, y: promoBanner.frame.minY, width: 0, height: promoBanner.frame.height) - promoBanner.updateSubviews() - break - case .topRight: - promoBanner.frame = CGRect(x: promoBanner.frame.minX + promoBanner.frame.width, y: promoBanner.frame.minY, width: 0, height: promoBanner.frame.height) - promoBanner.updateSubviews() - break - case .bottomLeft: - promoBanner.frame = CGRect(x: promoBanner.frame.minX, y: promoBanner.frame.minY, width: 0, height: promoBanner.frame.height) - promoBanner.updateSubviews() - break - case .bottomRight: - promoBanner.frame = CGRect(x: promoBanner.frame.minX + promoBanner.frame.width, y: promoBanner.frame.minY, width: 0, height: promoBanner.frame.height) - promoBanner.updateSubviews() - break - } - - self.view.addSubview(promoBanner) - self.view.bringSubviewToFront(promoBanner) - - UIView.setAnimationCurve(UIView.AnimationCurve.easeOut) - switch promoBanner.location { - case .topLeft: - UIView.animate(withDuration: promoBanner.animationDuration, animations: { - promoBanner.frame = CGRect(x: promoBanner.frame.minX, y: promoBanner.frame.minY, width: needToSetup.width, height: promoBanner.frame.height) - promoBanner.updateSubviews() - }, completion: { (b) in - promoBanner.startTimer() - }) - break - case .topRight: - UIView.animate(withDuration: promoBanner.animationDuration, animations: { - promoBanner.frame = CGRect(x: needToSetup.minX, y: promoBanner.frame.minY, width: needToSetup.width, height: promoBanner.frame.height) - promoBanner.updateSubviews() - }, completion: { (b) in - promoBanner.startTimer() - }) - break - case .bottomLeft: - UIView.animate(withDuration: promoBanner.animationDuration, animations: { - promoBanner.frame = CGRect(x: promoBanner.frame.minX, y: promoBanner.frame.minY, width: needToSetup.width, height: promoBanner.frame.height) - promoBanner.updateSubviews() - }, completion: { (b) in - promoBanner.startTimer() - }) - break - case .bottomRight: - UIView.animate(withDuration: promoBanner.animationDuration, animations: { - promoBanner.frame = CGRect(x: needToSetup.minX, y: promoBanner.frame.minY, width: needToSetup.width, height: promoBanner.frame.height) - promoBanner.updateSubviews() - }, completion: { (b) in - promoBanner.startTimer() - }) - break - } - - promoBanner.frame = needToSetup - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeImagePlaceholder/Coverable+UIKit.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeImagePlaceholder/Coverable+UIKit.swift deleted file mode 100644 index a98382c..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeImagePlaceholder/Coverable+UIKit.swift +++ /dev/null @@ -1,54 +0,0 @@ -import UIKit - -extension UIView { - private struct AssociatedObjectKey { - static var isC = "isC" - static var path = "coverablePath" - } - - @IBInspectable - open var isC: Bool { - get { - let settedValue = objc_getAssociatedObject(self, AssociatedObjectKey.isC) as? Bool - return settedValue ?? engh - } - set { - objc_setAssociatedObject(self, - AssociatedObjectKey.isC, - newValue, - .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - public var coverablePath: UIBezierPath? { - get { - let settedCoverablePath = objc_getAssociatedObject(self, - AssociatedObjectKey.path) as? UIBezierPath - return settedCoverablePath ?? (self as? Coverable)?.defaultCoverablePath - } - set { - objc_setAssociatedObject(self, - AssociatedObjectKey.path, - newValue, - .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - private var engh: Bool { - return bounds.width > 5 && bounds.height > 5 - } - - fileprivate var sub: UIBezierPath { - return coverableSubviews() - .reduce(UIBezierPath(), { totalBezierPath, coverableView in - coverableView.addCoverablePath(to: totalBezierPath, superview: self) - return totalBezierPath - }) - } - -} - - -extension UIImageView: Coverable { - // Coverable -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeImagePlaceholder/Coverable.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeImagePlaceholder/Coverable.swift deleted file mode 100644 index 9a5ebaa..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeImagePlaceholder/Coverable.swift +++ /dev/null @@ -1,59 +0,0 @@ -import UIKit - -public protocol Coverable { - var defaultCoverablePath: UIBezierPath? { get } -} - -typealias CoverableView = UIView & Coverable - -extension Coverable where Self: UIView { - - func makeCoverablePath(superview: UIView? = nil) -> UIBezierPath? { - guard let superview = superview ?? self.superview else { - return nil - } - - layoutIfNeeded() - let offsetPoint = convert(bounds, to: superview).origin - let relativePath = coverablePath ?? UIBezierPath() - relativePath.translate(to: offsetPoint) - return relativePath - } - - func addCoverablePath(to totalCoverablePath: UIBezierPath, superview: UIView? = nil) { - guard let coverablePath = makeCoverablePath(superview: superview) else { - return - } - totalCoverablePath.append(coverablePath) - } - - public var defaultCoverablePath: UIBezierPath? { - return UIBezierPath(roundedRect: bounds, - cornerRadius: layer.cornerRadius) - } -} - - -extension Array where Element: CoverableView { - var coverablePath: UIBezierPath { - return reduce(UIBezierPath(), { totalPath, cell in - cell.addCoverablePath(to: totalPath) - return totalPath - }) - } -} - - -extension UIView { - func coverableSubviews() -> [CoverableView] { - var foundedViews = [CoverableView]() - subviews.forEach { view in - if let coverableView = view as? CoverableView & UIView, coverableView.isC { - foundedViews.append(coverableView) - } else { - foundedViews += view.coverableSubviews() - } - } - return foundedViews - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeImagePlaceholder/LoadingPlaceholderView.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeImagePlaceholder/LoadingPlaceholderView.swift deleted file mode 100755 index b522606..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeImagePlaceholder/LoadingPlaceholderView.swift +++ /dev/null @@ -1,211 +0,0 @@ -import UIKit - -open class LoadingPlaceholderView: UIView { - - public struct gradientConfiguration { - - public var width: Double = 0.2 - public var animationDuration: TimeInterval = 0.7 - public var backgroundColor: UIColor = .clear - public var primaryColor: UIColor = .clear - public var secondaryColor: UIColor = .clear - - fileprivate mutating func mainGradCnfgColor(_ color: UIColor) { - backgroundColor = color.withBrightness(brightness: 0.98) - primaryColor = color.withBrightness(brightness: 0.88) - secondaryColor = color.withBrightness(brightness: 0.75) - } - - init(color: UIColor) { - mainGradCnfgColor(color) - } - } - - open var promocodeDuration: TimeInterval = 1.75 - open var promocodeGradient = gradientConfiguration(color: .white) - - open var gradientColor: UIColor = .clear { - didSet { - promocodeGradient.mainGradCnfgColor(gradientColor) - } - } - - private var viewToCover: UIView? - private var maskLayer = CAShapeLayer() - private var gradientLayer = CAGradientLayer() - private var viewToConverObservation: NSKeyValueObservation? - private var isCovering: Bool { - return superview != nil - } - - public func cover(_ viewToCover: UIView, animated: Bool = true) { - viewToCover.layoutIfNeeded() - setupView(viewToCover: viewToCover) - DispatchQueue.main.asyncAfter(deadline: .now() + 0.01) { [weak self] in - self?.startLoading(animated: animated) - } - } - - public func uncover(animated: Bool = true) { - guard isCovering else { - return - } - - fadeOut(animated: animated) - let dispatchTime: DispatchTime = .now() + promocodeDuration - DispatchQueue.main.asyncAfter(deadline: dispatchTime) { [weak self] in - self?.removeGradientAndMask() - self?.removeFromSuperview() - } - } - - deinit { - if let observer = viewToConverObservation { - observer.invalidate() - removeObserver(observer, forKeyPath: "bounds") - } - viewToConverObservation = nil - } - - private func setupView(viewToCover: UIView) { - self.viewToCover = viewToCover - self.frame = viewToCover.bounds - viewToConverObservation = observe(\.bounds) { [weak self] _, _ in - if self?.isCovering == true { - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - self?.setupMaskLayerIfNeeded() - self?.setupGradientLayerIfNeeded() - } - } - } - } - - private func startLoading(animated: Bool) { - guard !isCovering, let viewToCover = viewToCover else { - return - } - - viewToCover.addSubview(self) - translatesAutoresizingMaskIntoConstraints = false - frame = viewToCover.bounds - NSLayoutConstraint.activate([ - topAnchor.constraint(equalTo: viewToCover.topAnchor), - bottomAnchor.constraint(equalTo: viewToCover.bottomAnchor), - leftAnchor.constraint(equalTo: viewToCover.leftAnchor), - rightAnchor.constraint(equalTo: viewToCover.rightAnchor) - ]) - setupMaskLayerIfNeeded() - setupGradientLayerIfNeeded() - setupGradientLayerAnimation() - fadeIn(animated: animated) - } - - private func setupMaskLayerIfNeeded() { - guard let superview = superview else { - return - } - - maskLayer.frame = superview.bounds - let toalBezierPath = superview - .coverableSubviews() - .reduce(UIBezierPath(), { totalBezierPath, coverableView in - coverableView.addCoverablePath(to: totalBezierPath, superview: superview) - return totalBezierPath - }) - maskLayer.path = toalBezierPath.cgPath - maskLayer.fillColor = UIColor.red.cgColor - layer.addSublayer(maskLayer) - } - - private func setupGradientLayerIfNeeded() { - guard let superview = superview else { - return - } - - gradientLayer.frame = CGRect(x: 0, - y: 0, - width: superview.bounds.size.width, - height: superview.bounds.size.height) - superview.layer.addSublayer(gradientLayer) - gradientLayer.startPoint = CGPoint(x: -1 - promocodeGradient.width*2, y: 0) - gradientLayer.endPoint = CGPoint(x: 1 + promocodeGradient.width*2, y: 0) - - gradientLayer.colors = [ - promocodeGradient.backgroundColor.cgColor, - promocodeGradient.primaryColor.cgColor, - promocodeGradient.secondaryColor.cgColor, - promocodeGradient.primaryColor.cgColor, - promocodeGradient.backgroundColor.cgColor - ] - - let startLocations = [NSNumber(value: Double(gradientLayer.startPoint.x)), - NSNumber(value: Double(gradientLayer.startPoint.x)), - NSNumber(value: 0), - NSNumber(value: promocodeGradient.width), - NSNumber(value: 1 + promocodeGradient.width)] - - gradientLayer.locations = startLocations - gradientLayer.cornerRadius = superview.layer.cornerRadius - layer.addSublayer(gradientLayer) - gradientLayer.mask = maskLayer - } - - private func setupGradientLayerAnimation() { - let gradientAnimation = CABasicAnimation(keyPath: "locations") - gradientAnimation.fromValue = gradientLayer.locations - gradientAnimation.toValue = [NSNumber(value: 0), - NSNumber(value: 1), - NSNumber(value: 1), - NSNumber(value: 1 + promocodeGradient.width), - NSNumber(value: 1 + promocodeGradient.width)] - - gradientAnimation.repeatCount = .infinity - gradientAnimation.isRemovedOnCompletion = false - gradientAnimation.duration = promocodeGradient.animationDuration - gradientLayer.add(gradientAnimation, forKey: "locations") - } - - private func fadeIn(animated: Bool) { - guard - animated - else { - self.alpha = 1 - return - } - let opacityAnimation = CABasicAnimation(keyPath: "opacity") - opacityAnimation.fromValue = alpha - opacityAnimation.toValue = 1 - opacityAnimation.duration = promocodeDuration - gradientLayer.add(opacityAnimation, forKey: "opacityAnimationIn") - - UIView.animate(withDuration: promocodeDuration) { - self.alpha = 1 - } - } - - private func fadeOut(animated: Bool) { - guard - animated - else { - self.alpha = 0 - return - } - - let opacityAnimation = CABasicAnimation(keyPath: "opacity") - opacityAnimation.fromValue = alpha - opacityAnimation.toValue = 0 - opacityAnimation.duration = promocodeDuration - - gradientLayer.add(opacityAnimation, forKey: "opacityAnimationOut") - - UIView.animate(withDuration: promocodeDuration) { - self.alpha = 0 - } - } - - private func removeGradientAndMask() { - gradientLayer.removeAllAnimations() - gradientLayer.removeFromSuperlayer() - maskLayer.removeFromSuperlayer() - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeImagePlaceholder/UIBezierPath+ImagePlaceholder.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeImagePlaceholder/UIBezierPath+ImagePlaceholder.swift deleted file mode 100644 index 51b0ff5..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/PromocodeImagePlaceholder/UIBezierPath+ImagePlaceholder.swift +++ /dev/null @@ -1,28 +0,0 @@ -import UIKit - -extension UIBezierPath { - - static func multiLinePath(numberOfLines: Int, - spacing: CGFloat, - bounds: CGRect) -> UIBezierPath { - let numberOfLinesFloat = CGFloat(numberOfLines) - let height = bounds.height - let lineHeight = CGFloat((height - ((numberOfLinesFloat - 1) * spacing))/numberOfLinesFloat) - let totalPath = UIBezierPath() - for index in 0.. CALayer { - let containerLayer = createContainerLayer(size) - let path = createStarPath(starPoints, size: size, lineWidth: lineWidth) - - let shapeLayer = createShapeLayer(path.cgPath, lineWidth: lineWidth, fillColor: fillColor, strokeColor: strokeColor, size: size) - containerLayer.addSublayer(shapeLayer) - - return containerLayer - } - - static func create(image: UIImage, size: Double) -> CALayer { - let containerLayer = createContainerLayer(size) - let imageLayer = createContainerLayer(size) - - containerLayer.addSublayer(imageLayer) - imageLayer.contents = image.cgImage - imageLayer.contentsGravity = CALayerContentsGravity.resizeAspect - - return containerLayer - } - - static func createShapeLayer(_ path: CGPath, lineWidth: Double, fillColor: UIColor, strokeColor: UIColor, size: Double) -> CALayer { - let layer = CAShapeLayer() - layer.anchorPoint = CGPoint() - layer.contentsScale = UIScreen.main.scale - layer.strokeColor = strokeColor.cgColor - layer.fillColor = fillColor.cgColor - layer.lineWidth = CGFloat(lineWidth) - layer.bounds.size = CGSize(width: size, height: size) - layer.masksToBounds = true - layer.path = path - layer.isOpaque = true - return layer - } - - static func createContainerLayer(_ size: Double) -> CALayer { - let layer = CALayer() - layer.contentsScale = UIScreen.main.scale - layer.anchorPoint = CGPoint() - layer.masksToBounds = true - layer.bounds.size = CGSize(width: size, height: size) - layer.isOpaque = true - return layer - } - - static func createStarPath(_ starPoints: [CGPoint], size: Double, lineWidth: Double) -> UIBezierPath { - - let lineWidthLocal = lineWidth + ceil(lineWidth * 0.3) - let sizeWithoutLineWidth = size - lineWidthLocal * 2 - - let points = scaleStar(starPoints, factor: sizeWithoutLineWidth / 100, - lineWidth: lineWidthLocal) - - let path = UIBezierPath() - path.move(to: points[0]) - let remainingPoints = Array(points[1.. [CGPoint] { - return starPoints.map { point in - return CGPoint( - x: point.x * CGFloat(factor) + CGFloat(lineWidth), - y: point.y * CGFloat(factor) + CGFloat(lineWidth) - ) - } - } -} - - -struct RecommendationsStarsAccessibility { - - static func update(_ view: UIView, rating: Double, text: String?, starsSetupSettings: RecommendationsStarsSettings) { - view.isAccessibilityElement = true - - view.accessibilityTraits = starsSetupSettings.reloadOnUserTouch ? UIAccessibilityTraits.adjustable : UIAccessibilityTraits.none - - var accessibilityLabel = "Rating" - - if let text = text, text != "" { - accessibilityLabel += " \(text)" - } - - view.accessibilityLabel = accessibilityLabel - - view.accessibilityValue = accessibilityValue(view, rating: rating, starsSetupSettings: starsSetupSettings) - } - - static func accessibilityValue(_ view: UIView, rating: Double, starsSetupSettings: RecommendationsStarsSettings) -> String { - let accessibilityRating = RecommendationsStarsRating.showRatingStFromPreciseStRating(rating, fillMode: starsSetupSettings.fillMode, summaryRecommendationsStars: starsSetupSettings.summaryRecommendationsStars) - - let isInteger = (accessibilityRating * 10).truncatingRemainder(dividingBy: 10) == 0 - - if isInteger { - return "\(Int(accessibilityRating))" - } else { - let roundedToFirstDecimalPlace = Double( round(10 * accessibilityRating) / 10 ) - return "\(roundedToFirstDecimalPlace)" - } - } - - static func accessibilityIncrement(_ rating: Double, starsSetupSettings: RecommendationsStarsSettings) -> Double { - var increment: Double = 0 - - switch starsSetupSettings.fillMode { - case .full: - increment = ceil(rating) - rating - if increment == 0 { - increment = 1 - } - - case .half, .precise: - increment = (ceil(rating * 2) - rating * 2) / 2 - if increment == 0 { - increment = 0.5 - } - } - - if rating >= Double(starsSetupSettings.summaryRecommendationsStars) { increment = 0 } - - let roundedToFirstDecimalPlace = Double( round(10 * increment) / 10 ) - return roundedToFirstDecimalPlace - } - - static func accessibilityDecrement(_ rating: Double, starsSetupSettings: RecommendationsStarsSettings) -> Double { - var increment: Double = 0 - - switch starsSetupSettings.fillMode { - case .full: - increment = rating - floor(rating) - if increment == 0 { - increment = 1 - } - - case .half, .precise: - increment = (rating * 2 - floor(rating * 2)) / 2 - if increment == 0 { - increment = 0.5 - } - } - - if rating <= starsSetupSettings.minStTchRating { increment = 0 } - - let roundedToFirstDecimalPlace = Double( round(10 * increment) / 10 ) - return roundedToFirstDecimalPlace - } -} - - -class RecommendationsStarsText { - class func position(_ layer: CALayer, starsSize: CGSize, textMargin: Double) { - layer.position.x = starsSize.width + CGFloat(textMargin) - let yOffset = (starsSize.height - layer.bounds.height) / 2 - layer.position.y = yOffset - } -} - - -struct RecommendationsStarsDefaultSettings { - - init() {} - - static let sColor = SdkConfiguration.recommendations.widgetStarsColor.hexToRGB() - static let defaultStarsColor = UIColor(red: sColor.red, green: sColor.green, blue: sColor.blue, alpha: 1) // UIColor(red: 255/255, green: 149/255, blue: 0/255, alpha: 1) - - static let emptyBorderColor = defaultStarsColor - static let emptyBorderWidth: Double = 4 / Double(UIScreen.main.scale) - - static let filledBorderColor = defaultStarsColor - static let filledBorderWidth: Double = 1 / Double(UIScreen.main.scale) - - static let emptyColor = UIColor.clear - static let filledColor = defaultStarsColor - - static let fillMode = StarFillMode.full - static let rating: Double = 2.718281828 - static let rateStMargin: Double = 2 - - static let starPoints: [CGPoint] = [ - CGPoint(x: 49.5, y: 0.0), - CGPoint(x: 60.5, y: 35.0), - CGPoint(x: 99.0, y: 35.0), - CGPoint(x: 67.5, y: 58.0), - CGPoint(x: 78.5, y: 92.0), - CGPoint(x: 49.5, y: 71.0), - CGPoint(x: 20.5, y: 92.0), - CGPoint(x: 31.5, y: 58.0), - CGPoint(x: 0.0, y: 35.0), - CGPoint(x: 38.5, y: 35.0) - ] - - static var starSize: Double = 21 - static let summaryRecommendationsStars = 5 - static let textColor = UIColor(red: 127/255, green: 127/255, blue: 127/255, alpha: 1) - static let textFont = UIFont.preferredFont(forTextStyle: UIFont.TextStyle.footnote) - static let textMargin: Double = 5 - static var textSize: Double { - get { - return Double(textFont.pointSize) - } - } - - static let minStTchRating: Double = 1 - static let passUserTchToSuperview = true - static let reloadOnUserTouch = true -} - - -class RecommendationsStarsSize { - class func calculateSizeToFitLayers(_ layers: [CALayer]) -> CGSize { - var size = CGSize() - - for layer in layers { - if layer.frame.maxX > size.width { - size.width = layer.frame.maxX - } - if layer.frame.maxY > size.height { - size.height = layer.frame.maxY - } - } - - return size - } -} - - -class RecommendationsStarsLayers { - class func createRecommendstarViewLayer(_ rating: Double, starsSetupSettings: RecommendationsStarsSettings, isactionRightStarsToLeft: Bool) -> [CALayer] { - - var ratingRetranslator = RecommendationsStarsRating.numberOfFilledRateStars(rating, totalNumberOfStars: starsSetupSettings.summaryRecommendationsStars) - var starViewLayer = [CALayer]() - - for _ in (0.. CALayer { - - if rateStFillLevel >= 1 { - return createRecommendStarLayer(true, starsSetupSettings: starsSetupSettings) - } - - if rateStFillLevel == 0 { - return createRecommendStarLayer(false, starsSetupSettings: starsSetupSettings) - } - - return createPartialStar(rateStFillLevel, starsSetupSettings: starsSetupSettings, isactionRightStarsToLeft: isactionRightStarsToLeft) - } - - class func createPartialStar(_ rateStFillLevel: Double, starsSetupSettings: RecommendationsStarsSettings, isactionRightStarsToLeft: Bool) -> CALayer { - let filledStar = createRecommendStarLayer(true, starsSetupSettings: starsSetupSettings) - let emptyStar = createRecommendStarLayer(false, starsSetupSettings: starsSetupSettings) - - let parentLayer = CALayer() - parentLayer.contentsScale = UIScreen.main.scale - parentLayer.bounds = CGRect(origin: CGPoint(), size: filledStar.bounds.size) - parentLayer.anchorPoint = CGPoint() - parentLayer.addSublayer(emptyStar) - parentLayer.addSublayer(filledStar) - - if isactionRightStarsToLeft { - let rotationScope = CATransform3DMakeRotation(CGFloat(Double.pi), 0, 1, 0) - filledStar.transform = CATransform3DTranslate(rotationScope, -filledStar.bounds.size.width, 0, 0) - } - - filledStar.bounds.size.width *= CGFloat(rateStFillLevel) - - return parentLayer - } - - private class func createRecommendStarLayer(_ isFilled: Bool, starsSetupSettings: RecommendationsStarsSettings) -> CALayer { - if let image = isFilled ? starsSetupSettings.filledImage : starsSetupSettings.emptyImage { - return RecommendStarLayer.create(image: image, size: starsSetupSettings.starSize) - } - - let fillColor = isFilled ? starsSetupSettings.filledColor : starsSetupSettings.emptyColor - let strokeColor = isFilled ? starsSetupSettings.filledBorderColor : starsSetupSettings.emptyBorderColor - - return RecommendStarLayer.create(starsSetupSettings.starPoints, - size: starsSetupSettings.starSize, - lineWidth: isFilled ? starsSetupSettings.filledBorderWidth : starsSetupSettings.emptyBorderWidth, - fillColor: fillColor, - strokeColor: strokeColor) - } - - class func poseRecommendstarViewLayer(_ layers: [CALayer], rateStMargin: Double) { - var positionX:CGFloat = 0 - - for layer in layers { - layer.position.x = positionX - positionX += layer.bounds.width + CGFloat(rateStMargin) - } - } -} - - -class RecommendationsStarsLayerHelper { - class func crStarsTextLayer(_ text: String, font: UIFont, color: UIColor) -> CATextLayer { - let size = NSString(string: text).size(withAttributes: [NSAttributedString.Key.font: font]) - - let layer = CATextLayer() - layer.bounds = CGRect(origin: CGPoint(), size: size) - layer.anchorPoint = CGPoint() - - layer.string = text - layer.font = CGFont(font.fontName as CFString) - layer.fontSize = font.pointSize - layer.foregroundColor = color.cgColor - layer.contentsScale = UIScreen.main.scale - - return layer - } -} - - -struct RecommendationsStarsTouch { - static func didUserTchRating(_ position: CGFloat, starsSetupSettings: RecommendationsStarsSettings) -> Double { - var rating = starRecommendationsPreRating(position: Double(position), - numberOfStars: starsSetupSettings.summaryRecommendationsStars, - starSize: starsSetupSettings.starSize, - rateStMargin: starsSetupSettings.rateStMargin) - - if starsSetupSettings.fillMode == .half { - rating += 0.20 - } - - if starsSetupSettings.fillMode == .full { - rating += 0.45 - } - - rating = RecommendationsStarsRating.showRatingStFromPreciseStRating(rating, fillMode: starsSetupSettings.fillMode, summaryRecommendationsStars: starsSetupSettings.summaryRecommendationsStars) - - rating = max(starsSetupSettings.minStTchRating, rating) - - return rating - } - - static func starRecommendationsPreRating(position: Double, numberOfStars: Int, starSize: Double, rateStMargin: Double) -> Double { - if position < 0 { - return 0 - - } - var positionRemainder = position; - - var rating: Double = Double(Int(position / (starSize + rateStMargin))) - - if Int(rating) > numberOfStars { - return Double(numberOfStars) - } - - positionRemainder -= rating * (starSize + rateStMargin) - - if positionRemainder > starSize { - rating += 1 - } else { - rating += positionRemainder / starSize - } - - return rating - } -} - - -struct RecommendationsStarsRating { - static func rateStFillLevel(ratingRemainder: Double, fillMode: StarFillMode) -> Double { - var result = ratingRemainder - - if result > 1 { - result = 1 - } - - if result < 0 { - result = 0 - } - - return roundFillLevel(result, fillMode: fillMode) - } - - static func roundFillLevel(_ rateStFillLevel: Double, fillMode: StarFillMode) -> Double { - switch fillMode { - case .full: - return Double(round(rateStFillLevel)) - case .half: - return Double(round(rateStFillLevel * 2) / 2) - case .precise : - return rateStFillLevel - } - } - - static func showRatingStFromPreciseStRating(_ starRecommendationsPreRating: Double, fillMode: StarFillMode, summaryRecommendationsStars: Int) -> Double { - let starFloorNumber = floor(starRecommendationsPreRating) - let singleStarRemainder = starRecommendationsPreRating - starFloorNumber - - var displayedRating = starFloorNumber + rateStFillLevel( - ratingRemainder: singleStarRemainder, fillMode: fillMode) - - displayedRating = min(Double(summaryRecommendationsStars), displayedRating) - displayedRating = max(0, displayedRating) - - return displayedRating - } - - static func numberOfFilledRateStars(_ rating: Double, totalNumberOfStars: Int) -> Double { - if rating > Double(totalNumberOfStars) { - return Double(totalNumberOfStars) - } - - if rating < 0 { - return 0 - } - - return rating - } -} - - -public struct RecommendationsStarsSettings { - - public static var `default`: RecommendationsStarsSettings { - return RecommendationsStarsSettings() - } - - public init() {} - - public var emptyBorderColor = RecommendationsStarsDefaultSettings.emptyBorderColor - - public var emptyBorderWidth: Double = RecommendationsStarsDefaultSettings.emptyBorderWidth - - public var filledBorderColor = RecommendationsStarsDefaultSettings.filledBorderColor - - public var filledBorderWidth: Double = RecommendationsStarsDefaultSettings.filledBorderWidth - - public var emptyColor = RecommendationsStarsDefaultSettings.emptyColor - - public var filledColor = RecommendationsStarsDefaultSettings.filledColor - - public var fillMode = RecommendationsStarsDefaultSettings.fillMode - - public var rateStMargin: Double = RecommendationsStarsDefaultSettings.rateStMargin - - public var starPoints: [CGPoint] = RecommendationsStarsDefaultSettings.starPoints - - public var starSize: Double = RecommendationsStarsDefaultSettings.starSize - - public var summaryRecommendationsStars = RecommendationsStarsDefaultSettings.summaryRecommendationsStars - - public var filledImage: UIImage? = nil - - public var emptyImage: UIImage? = nil - - public var textColor = RecommendationsStarsDefaultSettings.textColor - - public var textFont = RecommendationsStarsDefaultSettings.textFont - - public var textMargin: Double = RecommendationsStarsDefaultSettings.textMargin - - public var minStTchRating: Double = RecommendationsStarsDefaultSettings.minStTchRating - - public var passUserTchToSuperview = RecommendationsStarsDefaultSettings.passUserTchToSuperview - - public var reloadOnUserTouch = RecommendationsStarsDefaultSettings.reloadOnUserTouch -} - - -struct RecommendationsStarsTouchTarget { - static func optimize(_ bounds: CGRect) -> CGRect { - let recommendedHitSize: CGFloat = 44 - - var hitWidthIncrease:CGFloat = recommendedHitSize - bounds.width - var hitHeightIncrease:CGFloat = recommendedHitSize - bounds.height - - if hitWidthIncrease < 0 { - hitWidthIncrease = 0 - } - if hitHeightIncrease < 0 { - hitHeightIncrease = 0 - } - - let extendedBounds: CGRect = bounds.insetBy(dx: -hitWidthIncrease / 2, dy: -hitHeightIncrease / 2) - - return extendedBounds - } -} - - -struct actionRightStarsToLeft { - static func isactionRightStarsToLeft(_ view: UIView) -> Bool { - return false - } -} - - -@IBDesignable open class RecommendationsStarsView: UIView { - - @IBInspectable open var rating: Double = RecommendationsStarsDefaultSettings.rating { - didSet { - if oldValue != rating { - update() - } - } - } - - @IBInspectable open var text: String? { - didSet { - if oldValue != text { - update() - } - } - } - - open var starsSetupSettings: RecommendationsStarsSettings = .default { - didSet { - update() - } - } - - private var viewSize = CGSize() - - open override func awakeFromNib() { - super.awakeFromNib() - - update() - } - - public convenience init(starsSetupSettings: RecommendationsStarsSettings = .default) { - self.init(frame: .zero, starsSetupSettings: starsSetupSettings) - } - - override public convenience init(frame: CGRect) { - self.init(frame: frame, starsSetupSettings: .default) - } - - public init(frame: CGRect, starsSetupSettings: RecommendationsStarsSettings) { - super.init(frame: frame) - self.starsSetupSettings = starsSetupSettings - - update() - - improvePerformance() - } - - required public init?(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - - improvePerformance() - } - - private func improvePerformance() { - layer.shouldRasterize = true - layer.rasterizationScale = UIScreen.main.scale - - isOpaque = true - } - - open func update() { - var layers = RecommendationsStarsLayers.createRecommendstarViewLayer( - rating, - starsSetupSettings: starsSetupSettings, - isactionRightStarsToLeft: actionRightStarsToLeft.isactionRightStarsToLeft(self) - ) - if let text = text { - let textLayer = crStarsTextLayer(text, layers: layers) - layers = addTextLayer(textLayer: textLayer, layers: layers) - } - - layer.sublayers = layers - updateSize(layers) - updateAccessibility() - } - - private func crStarsTextLayer(_ text: String, layers: [CALayer]) -> CALayer { - let textLayer = RecommendationsStarsLayerHelper.crStarsTextLayer(text, font: starsSetupSettings.textFont, color: starsSetupSettings.textColor) - - let starsSize = RecommendationsStarsSize.calculateSizeToFitLayers(layers) - - if actionRightStarsToLeft.isactionRightStarsToLeft(self) { - RecommendationsStarsText.position(textLayer, starsSize: CGSize(width: 0, height: starsSize.height), textMargin: 0) - } else { - RecommendationsStarsText.position(textLayer, starsSize: starsSize, textMargin: starsSetupSettings.textMargin) - } - - layer.addSublayer(textLayer) - return textLayer - } - - private func addTextLayer(textLayer: CALayer, layers: [CALayer]) -> [CALayer] { - var allLayers = layers - if actionRightStarsToLeft.isactionRightStarsToLeft(self) { - for starLayer in layers { - starLayer.position.x += textLayer.bounds.width + CGFloat(starsSetupSettings.textMargin); - } - - allLayers.insert(textLayer, at: 0) - } else { - allLayers.append(textLayer) - } - - return allLayers - } - - private func updateSize(_ layers: [CALayer]) { - viewSize = RecommendationsStarsSize.calculateSizeToFitLayers(layers) - invalidateIntrinsicContentSize() - - frame.size = intrinsicContentSize - } - - override open var intrinsicContentSize:CGSize { - return viewSize - } - - open func prepareForReuse() { - previousRatingForDidTouchCallback = -123.192 - } - - private func updateAccessibility() { - RecommendationsStarsAccessibility.update(self, rating: rating, text: text, starsSetupSettings: starsSetupSettings) - } - - open override func accessibilityIncrement() { - super.accessibilityIncrement() - - rating += RecommendationsStarsAccessibility.accessibilityIncrement(rating, starsSetupSettings: starsSetupSettings) - didTouchRecommendationsStars?(rating) - didFinishTouchingRecommendationsStars?(rating) - } - - open override func accessibilityDecrement() { - super.accessibilityDecrement() - - rating -= RecommendationsStarsAccessibility.accessibilityDecrement(rating, starsSetupSettings: starsSetupSettings) - didTouchRecommendationsStars?(rating) - didFinishTouchingRecommendationsStars?(rating) - } - - open var didTouchRecommendationsStars: ((Double)->())? - - open var didFinishTouchingRecommendationsStars: ((Double)->())? - - open override func touchesBegan(_ touches: Set, with event: UIEvent?) { - if starsSetupSettings.passUserTchToSuperview { super.touchesBegan(touches, with: event) } - guard let location = touchLocationFromBeginningOfRating(touches) else { - return - } - onDidTouch(location) - } - - open override func touchesMoved(_ touches: Set, with event: UIEvent?) { - if starsSetupSettings.passUserTchToSuperview { super.touchesMoved(touches, with: event) } - guard let location = touchLocationFromBeginningOfRating(touches) else { - return - } - onDidTouch(location) - } - - func touchLocationFromBeginningOfRating(_ touches: Set) -> CGFloat? { - guard let touch = touches.first else { - return nil - } - var location = touch.location(in: self).x - - if actionRightStarsToLeft.isactionRightStarsToLeft(self) { location = bounds.width - location } - return location - } - - open override func touchesEnded(_ touches: Set, with event: UIEvent?) { - if starsSetupSettings.passUserTchToSuperview { - super.touchesEnded(touches, with: event) - } - didFinishTouchingRecommendationsStars?(rating) - } - - open override func touchesCancelled(_ touches: Set, with event: UIEvent?) { - if starsSetupSettings.passUserTchToSuperview { - super.touchesCancelled(touches, with: event) - } - didFinishTouchingRecommendationsStars?(rating) - } - - func onDidTouch(_ locationX: CGFloat) { - let calculatedTouchRating = RecommendationsStarsTouch.didUserTchRating(locationX, starsSetupSettings: starsSetupSettings) - - if starsSetupSettings.reloadOnUserTouch { - rating = calculatedTouchRating - } - - if calculatedTouchRating == previousRatingForDidTouchCallback { - return - } - - didTouchRecommendationsStars?(calculatedTouchRating) - previousRatingForDidTouchCallback = calculatedTouchRating - } - - private var previousRatingForDidTouchCallback: Double = -123.192 - - override open func point(inside point: CGPoint, with event: UIEvent?) -> Bool { - let oprimizedBounds = RecommendationsStarsTouchTarget.optimize(bounds) - return oprimizedBounds.contains(point) - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkConfiguration.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkConfiguration.swift deleted file mode 100644 index 081616c..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkConfiguration.swift +++ /dev/null @@ -1,1333 +0,0 @@ -import UIKit.UIFont -import Foundation - -public protocol SdkConfigurationProtocol: AnyObject {} - -public typealias sdkFontPath = URL -public typealias sdkFontName = String -public typealias sdkFontExtension = String -public typealias sdkFontClass = (url: sdkFontPath, name: sdkFontName) - -open class SdkConfiguration: SdkConfigurationProtocol { - - public static let stories: SdkConfiguration = SdkConfiguration() - - public static let recommendations: SdkConfiguration = SdkConfiguration() - - public init() {} - - public var allLoadedFonts: [sdkFontClass] = [] - - //Sdk main stories block default settings - var iconSize: CGFloat = 76 - var iconBorderWidth: CGFloat = 2.3 - var iconMarginX: CGFloat = 18 - var iconMarginBottom: CGFloat = 8 - var iconNotViewedBorderColor: String = "" - var iconNotViewedBorderColorDarkMode: String = "" - var iconViewedBorderColor: String = "" - var iconViewedBorderColorDarkMode: String = "" - var iconViewedTransparency: CGFloat = 1.0 - var iconPlaceholderColor: String = "#d6d6d6" - var iconPlaceholderColorDarkMode: String = "#d6d6d6" - var iconAnimatedLoaderColor: String = "#5ec169" - var labelWidth: CGFloat = 76 - var pinColor: String = "" - var pinColorDarkMode: String = "" - var closeIconColor: String = "#ffffff" - var iconDisplayFormatSquare = false //default square icon false - - var defaultIconNotViewedBorderColor: String = "#fd7c50" - var defaultIconViewedBorderColor: String = "#fdc2a1" - var defaultIconViewedTransparency: CGFloat = 1.0 - var defaultIconPinColor: String = "#fd7c50" - - public var storiesBlockNumberOfLines: Int = 0 - public var storiesBlockCharWrapping = false - public var storiesBlockCharCountWrap: Int = 10 - public var defaultShowProductsButtonText: String = "See all products" - public var defaultHideProductsButtonText: String = "Hide products" - - var defaultButtonCornerRadius: CGFloat = -1 - var productsButtonCornerRadius: CGFloat = -1 - - //Sdk Promocode default settings - public var defaultCopyToClipboardMessageText: String = "Copied" - public var defaultCopyToClipboardMessageWidth: CGFloat = 150 - - //Sdk Recommendations Widget settings - public var widgetFontName: String? = nil - public var widgetBackgroundColor: String = "#ffffff" - public var widgetBackgroundColorDarkMode: String = "#000000" - public var widgetCellBackgroundColor: String = "#ffffff" - public var widgetCellBackgroundColorDarkMode: String = "#000000" - public var widgetBorderWidth: CGFloat = 1 - public var widgetBorderColor: String = "#d3d3d3" - public var widgetBorderColorDarkMode: String = "#d3d3d3" - public var widgetBorderTransparent: CGFloat = 0.5 - public var widgetCornerRadius: CGFloat = 9 - public var widgetStarsColor: String = "#ff9500" - public var widgetCartButtonTextColor: String = "#ffffff" - public var widgetCartButtonTextColorDarkMode: String = "#000000" - public var widgetCartButtonBackgroundColor: String = "#000000" - public var widgetCartButtonBackgroundColorDarkMode: String = "#ffffff" - public var widgetAddToCartButtonText: String = "Add to cart" - public var widgetRemoveFromCartButtonText: String = "Remove from cart" - public var widgetAddToCartButtonFontSize: CGFloat? = 17.0 - public var widgetRemoveFromCartButtonFontSize: CGFloat? = 14.0 - public var widgetFavoritesIconColor: String = "#000000" - public var widgetFavoritesIconColorDarkMode: String = "#ffffff" - public var widgetCartButtonNeedOpenWebUrl = false - public var widgetPreloadIndicatorColor: String = "#000000" - public var widgetNoReviewsDefaultText: String = "No reviews" - - //Sdk Stories Block collection cell indicator - public var storiesBlockPreloadIndicatorDisabled = false - - //Sdk Stories Slide default indicator - public var storiesSlideReloadIndicatorDisabled = false - public var storiesSlideReloadIndicatorBackgroundColor: String = "#ffffff" - public var storiesSlideReloadIndicatorSize: CGFloat = 76.0 - public var storiesSlideReloadIndicatorBorderLineWidth: CGFloat = 3 - public var storiesSlideReloadIndicatorSegmentCount = Int(Double(Int.random(in: 10..<11))) - public var storiesSlideReloadIndicatorAnimationDuration: Double = 1 - public var storiesSlideReloadIndicatorRotationDuration: Double = 17 - - //Sdk Stories Slide reload settings - public var storiesSlideReloadManually = false - public var storiesSlideReloadTimeoutInterval: TimeInterval = 10 - - //Sdk Stories Slide popup settings - public var storiesSlideReloadPopupMessageError: String = "Failed to retrieve data. Please check your connection and try again" - public var storiesSlideReloadPopupMessageFontSize: CGFloat = 17 - public var storiesSlideReloadPopupMessageFontWeight: UIFont.Weight = .medium - public var storiesSlideReloadPopupPositionY: CGFloat = 120 - public var storiesSlideReloadPopupMessageDisplayTime: TimeInterval = 2.5 - - //Sdk reachability popup postion settings - public enum storiesSlideReloadPopupPosition: String, SdkPopupAlertViewScheme { - case top - case centerCustom - case bottom - } - - public func registerFont(fileName: String, fileExtension: String) { - let pathForResourceString = Bundle.main.path(forResource: fileName, - ofType: fileExtension) - guard pathForResourceString != nil else { - print("SDK Failed locate custom font \(fileName) in App Bundle") - return - } - - if pathForResourceString != nil { - let fontData = NSData(contentsOfFile: pathForResourceString!) - let dataProvider = CGDataProvider(data: fontData!) - let fontRef = CGFont(dataProvider!) - var errorRef: Unmanaged? = nil - - if (CTFontManagerRegisterGraphicsFont(fontRef!, &errorRef) == false) { - print("SDK Error registering font") - } else { - print("SDK Success registering font") - } - } - - SdkFontInjector.manager.registerFontNameWithExtension(fileName: fileName, fileExtension: fileExtension) - } - - public func registerFont(fileNameWithoutExtension: String) { - var parsedFont: (sdkFontName, sdkFontExtension)? - - if fileNameWithoutExtension.contains(SdkFontInjector.sdkSupportedFontExtensions.trueType.rawValue) || fileNameWithoutExtension.contains(SdkFontInjector.sdkSupportedFontExtensions.openType.rawValue) { - parsedFont = SdkConfiguration.fontExt(fromName: fileNameWithoutExtension) - } else { - var tmpName = fileNameWithoutExtension + "." + SdkFontInjector.sdkSupportedFontExtensions.trueType.rawValue - parsedFont = SdkConfiguration.fontExt(fromName: tmpName) - if parsedFont == nil { - tmpName = fileNameWithoutExtension + "." + SdkFontInjector.sdkSupportedFontExtensions.openType.rawValue - parsedFont = SdkConfiguration.fontExt(fromName: tmpName) - } - } - - if let parsedFont = parsedFont { - let pathForResourceString = Bundle.main.path(forResource: parsedFont.0, ofType: parsedFont.1) - if pathForResourceString != nil { - let fontData = NSData(contentsOfFile: pathForResourceString!) - let dataProvider = CGDataProvider(data: fontData!) - let fontRef = CGFont(dataProvider!) - var errorRef: Unmanaged? = nil - - if (CTFontManagerRegisterGraphicsFont(fontRef!, &errorRef) == false) { - print("SDK Error registering font") - } else { - print("SDK Success registering font") - } - } - } - } - - public func setStoriesBlock(fontName: String? = nil, - fontSize: CGFloat? = nil, - textColor: String? = nil, - textColorDarkMode: String? = nil, - backgroundColor: String? = nil, - backgroundColorDarkMode: String? = nil, - iconSize: CGFloat? = nil, - iconBorderWidth: CGFloat? = nil, - iconMarginX: CGFloat? = nil, - iconMarginBottom: CGFloat? = nil, - iconNotViewedBorderColor: String? = nil, - iconNotViewedBorderColorDarkMode: String? = nil, - iconViewedBorderColor: String? = nil, - iconViewedBorderColorDarkMode: String? = nil, - iconViewedTransparency: CGFloat? = nil, - iconAnimatedLoaderColor: String? = nil, - iconPlaceholderColor: String? = nil, - iconPlaceholderColorDarkMode: String? = nil, - iconDisplayFormatSquare: Bool? = false, - labelWidth: CGFloat? = nil, - pinColor: String? = nil, - pinColorDarkMode: String? = nil, - closeIconColor: String? = nil) { - - let uiBlockTextColorLight = UIColor(hexString: textColor ?? UIColor.sdkDefaultBlackColor.toHexString()) - let uiBlockBackgroundColorLight = UIColor(hexString: backgroundColor ?? UIColor.white.toHexString()) - let uiBlockTextColorDark = UIColor(hexString: textColorDarkMode ?? UIColor.white.toHexString()) - let uiBlockBackgroundColorDark = UIColor(hexString: backgroundColorDarkMode ?? UIColor.black.toHexString()) - - storiesBlockTextColorChanged_Light = uiBlockTextColorLight - storiesBlockTextColorChanged_Dark = uiBlockTextColorDark - - storiesBlockBackgroundColorChanged_Light = uiBlockBackgroundColorLight - storiesBlockBackgroundColorChanged_Dark = uiBlockBackgroundColorDark - - var fontProvidedBySdk = UIFont(name: storiesBlockFontNameConstant, size: storiesBlockMinimumFontSizeConstant) - - if fontName != nil { - if fontName == storiesBlockFontNameConstant { - storiesBlockFontNameChanged = storiesBlockFontNameConstant - } else { - storiesBlockFontNameChanged = fontName - } - - fontProvidedBySdk = UIFont(name: storiesBlockFontNameChanged!, size: storiesBlockMinimumFontSizeChanged ?? 14.0) - - if fontSize != nil { - if fontSize == storiesBlockMinimumFontSizeConstant { - storiesBlockMinimumFontSizeChanged = storiesBlockMinimumFontSizeConstant - } else { - storiesBlockMinimumFontSizeChanged = fontSize - fontProvidedBySdk = UIFont(name: storiesBlockFontNameChanged!, size: storiesBlockMinimumFontSizeChanged ?? 14.0) - } - } else { - storiesBlockMinimumFontSizeChanged = 0.0 - } - } else { - if fontSize != nil { - if fontSize == storiesBlockMinimumFontSizeConstant { - storiesBlockMinimumFontSizeChanged = storiesBlockMinimumFontSizeConstant - } else { - storiesBlockMinimumFontSizeChanged = fontSize - fontProvidedBySdk = UIFont(name: storiesBlockFontNameConstant, size: storiesBlockMinimumFontSizeChanged ?? 14.0) - } - } else { - storiesBlockMinimumFontSizeChanged = 0.0 - } - } - - if (fontProvidedBySdk == nil) { - fontProvidedBySdk = .systemFont(ofSize: 14.0) - } - - SdkStyle.shared.register(colorScheme: lightSdkStyleApperance(storiesBlockSelectFontName: fontProvidedBySdk!, - storiesBlockSelectFontSize: storiesBlockMinimumFontSizeChanged!, - storiesBlockFontColor: uiBlockTextColorLight, - storiesBlockBackgroundColor: uiBlockBackgroundColorLight, - defaultButtonSelectFontName: fontProvidedBySdk!, - defaultButtonSelectFontSize: storiesBlockMinimumFontSizeChanged!, - defaultButtonFontColor: .white, - defaultButtonBackgroundColor: .black, - productsButtonSelectFontName: fontProvidedBySdk!, - productsButtonSelectFontSize: storiesBlockMinimumFontSizeChanged!, - productsButtonFontColor: .black, - productsButtonBackgroundColor: .white), - for: SdkStyleApperanceTypes.storiesBlockLight) - - SdkStyle.shared.register(colorScheme: darkSdkStyleApperance(storiesBlockSelectFontName: fontProvidedBySdk!, - storiesBlockSelectFontSize: storiesBlockMinimumFontSizeChanged!, - storiesBlockFontColor: uiBlockTextColorDark, - storiesBlockBackgroundColor: uiBlockBackgroundColorDark, - defaultButtonSelectFontName: fontProvidedBySdk!, - defaultButtonSelectFontSize: storiesBlockMinimumFontSizeChanged!, - defaultButtonFontColor: .black, - defaultButtonBackgroundColor: .white, - productsButtonSelectFontName: fontProvidedBySdk!, - productsButtonSelectFontSize: storiesBlockMinimumFontSizeChanged!, - productsButtonFontColor: .black, - productsButtonBackgroundColor: .white), - for: SdkStyleApperanceTypes.storiesBlockDark) - - if iconSize != nil { - self.iconSize = iconSize! - } - if iconBorderWidth != nil { - self.iconBorderWidth = iconBorderWidth! - } - if iconMarginX != nil { - self.iconMarginX = iconMarginX! - } - if iconMarginBottom != nil { - self.iconMarginBottom = iconMarginBottom! - } - if iconNotViewedBorderColor != nil { - self.iconNotViewedBorderColor = iconNotViewedBorderColor! - } - if iconNotViewedBorderColorDarkMode != nil { - self.iconNotViewedBorderColorDarkMode = iconNotViewedBorderColorDarkMode! - } - if iconViewedBorderColor != nil { - self.iconViewedBorderColor = iconViewedBorderColor! - } - if iconViewedBorderColorDarkMode != nil { - self.iconViewedBorderColorDarkMode = iconViewedBorderColorDarkMode! - } - if iconViewedTransparency != nil { - self.iconViewedTransparency = iconViewedTransparency! - } - if iconAnimatedLoaderColor != nil { - self.iconAnimatedLoaderColor = iconAnimatedLoaderColor! - } - if iconPlaceholderColor != nil { - self.iconPlaceholderColor = iconPlaceholderColor! - } - if iconPlaceholderColorDarkMode != nil { - self.iconPlaceholderColorDarkMode = iconPlaceholderColorDarkMode! - } - if labelWidth != nil { - self.labelWidth = labelWidth! - } - if pinColor != nil { - self.pinColor = pinColor! - } - if pinColorDarkMode != nil { - self.pinColorDarkMode = pinColorDarkMode! - } - if closeIconColor != nil { - self.closeIconColor = closeIconColor! - } - - if iconDisplayFormatSquare != nil { - self.iconDisplayFormatSquare = iconDisplayFormatSquare ?? false - } - - if SdkConfiguration.isDarkMode { - SdkStyle.shared.switchApppearance(to: SdkStyleApperanceTypes.storiesBlockDark, animated: false) - } else { - SdkStyle.shared.switchApppearance(to: SdkStyleApperanceTypes.storiesBlockLight, animated: false) - } - } - - public func setSlideDefaultButton(fontName: String? = nil, - fontSize: CGFloat? = nil, - textColor: String? = nil, - backgroundColor: String? = nil, - textColorDarkMode: String? = nil, - backgroundColorDarkMode: String? = nil, - cornerRadius: CGFloat? = nil) { - - let slideDefaultButtonTextColorLight = UIColor(hexString: textColor ?? UIColor.sdkDefaultBlackColor.toHexString()) - let slideDefaultButtonTextColorDark = UIColor(hexString: textColorDarkMode ?? UIColor.white.toHexString()) - - let defaultTextColor = UIColor.hexStringFromColor(color: slideDefaultButtonTextColorConstant_Light) - let convertedTextColor = textColor?.hexToRGB() ?? defaultTextColor.hexToRGB() - if textColor != nil { - slideDefaultButtonTextColorChanged_Light = UIColor(red: convertedTextColor.red, green: convertedTextColor.green, blue: convertedTextColor.blue, alpha: 1) - } else { - slideDefaultButtonTextColorChanged_Light = nil - slideDefaultButtonTextColorConstant_Light = UIColor(red: convertedTextColor.red, green: convertedTextColor.green, blue: convertedTextColor.blue, alpha: 1) - } - - let defaultTextColorDark = UIColor.hexStringFromColor(color: slideDefaultButtonTextColorConstant_Dark) - let convertedTextColorDark = textColorDarkMode?.hexToRGB() ?? defaultTextColorDark.hexToRGB() - if textColor != nil { - slideDefaultButtonTextColorChanged_Dark = UIColor(red: convertedTextColorDark.red, green: convertedTextColorDark.green, blue: convertedTextColorDark.blue, alpha: 1) - } else { - slideDefaultButtonTextColorChanged_Dark = nil - } - - let defaultBackgroundColorLight = UIColor.hexStringFromColor(color: slideDefaultButtonBackgroundColorConstant_Light) - let convertedDefaultButtonBackgroundColorLight = backgroundColor?.hexToRGB() ?? defaultBackgroundColorLight.hexToRGB() - if backgroundColor != nil { - slideDefaultButtonBackgroundColorChanged_Light = UIColor(red: convertedDefaultButtonBackgroundColorLight.red, green: convertedDefaultButtonBackgroundColorLight.green, blue: convertedDefaultButtonBackgroundColorLight.blue, alpha: 1) - } else { - slideDefaultButtonBackgroundColorChanged_Light = nil - } - - let defaultBackgroundColorDark = UIColor.hexStringFromColor(color: slideDefaultButtonBackgroundColorConstant_Dark) - let convertedDefaultButtonBackgroundColorDark = backgroundColorDarkMode?.hexToRGB() ?? defaultBackgroundColorDark.hexToRGB() - if backgroundColorDarkMode != nil { - slideDefaultButtonBackgroundColorChanged_Dark = UIColor(red: convertedDefaultButtonBackgroundColorDark.red, green: convertedDefaultButtonBackgroundColorDark.green, blue: convertedDefaultButtonBackgroundColorDark.blue, alpha: 1) - } else { - slideDefaultButtonBackgroundColorChanged_Dark = nil - } - - var slideButtonFontBySdk = UIFont(name: slideDefaultButtonFontNameConstant, size: slideDefaultButtonFontSizeConstant) - if fontName != nil { - if fontName == slideDefaultButtonFontNameConstant { - slideDefaultButtonFontNameChanged = slideDefaultButtonFontNameConstant - } else { - slideDefaultButtonFontNameChanged = fontName - } - slideButtonFontBySdk = UIFont(name: slideDefaultButtonFontNameChanged!, size: slideDefaultButtonFontSizeChanged ?? 14.0) - - if fontSize != nil { - if fontSize == slideDefaultButtonFontSizeConstant { - slideDefaultButtonFontSizeChanged = slideDefaultButtonFontSizeConstant - } else { - slideDefaultButtonFontSizeChanged = fontSize - slideButtonFontBySdk = UIFont(name: slideDefaultButtonFontNameChanged!, size: fontSize ?? 14.0) - } - } else { - slideDefaultButtonFontSizeChanged = 0.0 - } - } else { - if fontSize != nil { - if fontSize == slideDefaultButtonFontSizeConstant { - slideDefaultButtonFontSizeChanged = slideDefaultButtonFontSizeConstant - } else { - slideDefaultButtonFontSizeChanged = fontSize - slideButtonFontBySdk = UIFont(name: slideDefaultButtonFontNameConstant, size: slideDefaultButtonFontSizeChanged ?? 14.0) - } - } else { - slideDefaultButtonFontSizeChanged = 0.0 - } - } - - var storedStoriesBlockSelectFontName = SdkStyle.shared.currentColorScheme?.storiesBlockSelectFontName - if storedStoriesBlockSelectFontName == nil { - storedStoriesBlockSelectFontName = .systemFont(ofSize: 15.0, weight: .semibold) - } - let storedStoriesBlockFontColor = SdkStyle.shared.currentColorScheme?.storiesBlockFontColor ?? .black - let storedStoriesBlockBackgroundColor = SdkStyle.shared.currentColorScheme?.storiesBlockBackgroundColor ?? .white - - if (slideButtonFontBySdk == nil) { - slideButtonFontBySdk = .systemFont(ofSize: 16.0) - } - if (storiesBlockMinimumFontSizeChanged == nil) { - storiesBlockMinimumFontSizeChanged = 14.0 - } - - if cornerRadius != nil { - self.defaultButtonCornerRadius = cornerRadius! - } - - SdkStyle.shared.register(colorScheme: - lightSdkStyleApperance(storiesBlockSelectFontName: storedStoriesBlockSelectFontName!, - storiesBlockSelectFontSize: storiesBlockMinimumFontSizeChanged!, - storiesBlockFontColor: storedStoriesBlockFontColor, - storiesBlockBackgroundColor: storedStoriesBlockBackgroundColor, - - defaultButtonSelectFontName: slideButtonFontBySdk!, - defaultButtonSelectFontSize: slideDefaultButtonFontSizeChanged!, - defaultButtonFontColor: slideDefaultButtonTextColorLight, - defaultButtonBackgroundColor: slideDefaultButtonBackgroundColorChanged_Light ?? .white, - - productsButtonSelectFontName: slideButtonFontBySdk!, - productsButtonSelectFontSize: slideDefaultButtonFontSizeChanged!, - productsButtonFontColor: .black, - productsButtonBackgroundColor: .white - ), - for: SdkStyleApperanceTypes.storiesBlockLight) - - SdkStyle.shared.register(colorScheme: - darkSdkStyleApperance(storiesBlockSelectFontName: storedStoriesBlockSelectFontName!, - storiesBlockSelectFontSize: storiesBlockMinimumFontSizeChanged!, - storiesBlockFontColor: storedStoriesBlockFontColor, - storiesBlockBackgroundColor: storedStoriesBlockBackgroundColor, - - defaultButtonSelectFontName: slideButtonFontBySdk!, - defaultButtonSelectFontSize: slideDefaultButtonFontSizeChanged!, - defaultButtonFontColor: slideDefaultButtonTextColorDark, - defaultButtonBackgroundColor: slideDefaultButtonBackgroundColorChanged_Dark ?? .white, - - productsButtonSelectFontName: slideButtonFontBySdk!, - productsButtonSelectFontSize: 12.0, - productsButtonFontColor: .black, - productsButtonBackgroundColor: .white - ), - for: SdkStyleApperanceTypes.storiesBlockDark) - - - if SdkConfiguration.isDarkMode { - SdkStyle.shared.switchApppearance(to: SdkStyleApperanceTypes.storiesBlockDark, animated: false) - } else { - SdkStyle.shared.switchApppearance(to: SdkStyleApperanceTypes.storiesBlockLight, animated: false) - } - } - - public func setSlideProductsButton(fontName: String? = nil, - fontSize: CGFloat? = nil, - textColor: String? = nil, - backgroundColor: String? = nil, - textColorDarkMode: String? = nil, - backgroundColorDarkMode: String? = nil, - cornerRadius: CGFloat? = nil) { - - if fontName != nil { - if fontName == slideProductsButtonFontNameConstant { - slideProductsButtonFontNameChanged = nil - } else { - slideProductsButtonFontNameChanged = fontName - } - } - - let defaultTextColor = UIColor.hexStringFromColor(color: slideProductsButtonTextColorConstant_Light) - let convertedTextColor = textColor?.hexToRGB() ?? defaultTextColor.hexToRGB() - slideProductsButtonTextColorChanged_Light = UIColor(red: convertedTextColor.red, green: convertedTextColor.green, blue: convertedTextColor.blue, alpha: 1) - - let defaultTextColorDark = UIColor.hexStringFromColor(color: slideProductsButtonTextColorConstant_Dark) - let convertedTextColorDark = textColorDarkMode?.hexToRGB() ?? defaultTextColorDark.hexToRGB() - slideProductsButtonTextColorChanged_Dark = UIColor(red: convertedTextColorDark.red, green: convertedTextColorDark.green, blue: convertedTextColorDark.blue, alpha: 1) - - let defaultBackgroundColor = UIColor.hexStringFromColor(color: slideProductsButtonBackgroundColorConstant_Light) - let convertedBackgroundColor = backgroundColor?.hexToRGB() ?? defaultBackgroundColor.hexToRGB() - if backgroundColor != nil { - slideProductsButtonBackgroundColorChanged_Light = UIColor(red: convertedBackgroundColor.red, green: convertedBackgroundColor.green, blue: convertedBackgroundColor.blue, alpha: 1) - } else { - slideProductsButtonBackgroundColorChanged_Light = nil - } - - let defaultBackgroundColorDark = UIColor.hexStringFromColor(color: slideProductsButtonBackgroundColorConstant_Dark) - let convertedBackgroundColorDark = backgroundColorDarkMode?.hexToRGB() ?? defaultBackgroundColorDark.hexToRGB() - if backgroundColor != nil { - slideProductsButtonBackgroundColorChanged_Dark = UIColor(red: convertedBackgroundColorDark.red, green: convertedBackgroundColorDark.green, blue: convertedBackgroundColorDark.blue, alpha: 1) - } else { - slideProductsButtonBackgroundColorChanged_Dark = nil - } - - let convertedFontSize = fontSize ?? slideProductsButtonFontSizeConstant - if fontSize != nil { - slideProductsButtonFontSizeChanged = convertedFontSize - } else { - slideProductsButtonFontSizeChanged = nil - } - - if cornerRadius != nil { - self.productsButtonCornerRadius = cornerRadius! - } - } - - public func setProductsCard(fontName: String? = nil, - showProductsButtonText: String? = "See all products", - hideProductsButtonText: String? = "Hide products") { - if fontName != nil { - if fontName == slideProductsHideButtonFontNameConstant { - slideProductsHideButtonFontNameChanged = nil - } else { - slideProductsHideButtonFontNameChanged = fontName - } - } - defaultShowProductsButtonText = showProductsButtonText! - defaultHideProductsButtonText = hideProductsButtonText! - } - - public func setWidgetBlock(widgetFontName: String? = nil, - widgetBackgroundColor: String? = nil, - widgetBackgroundColorDarkMode: String? = nil, - widgetCellBackgroundColor: String? = nil, - widgetCellBackgroundColorDarkMode: String? = nil, - widgetBorderWidth: CGFloat? = nil, - widgetBorderColor: String? = nil, - widgetBorderColorDarkMode: String? = nil, - widgetBorderTransparent: CGFloat? = nil, - widgetCornerRadius: CGFloat? = nil, - widgetStarsColor: String? = nil, - widgetAddToCartButtonText: String? = nil, - widgetRemoveFromCartButtonText: String? = nil, - widgetAddToCartButtonFontSize: CGFloat? = nil, - widgetRemoveFromCartButtonFontSize: CGFloat? = nil, - widgetCartButtonTextColor: String? = nil, - widgetCartButtonTextColorDarkMode: String? = nil, - widgetCartButtonBackgroundColor: String? = nil, - widgetCartButtonBackgroundColorDarkMode: String? = nil, - widgetCartButtonNeedOpenWebUrl: Bool? = false, - widgetFavoritesIconColor: String? = nil, - widgetFavoritesIconColorDarkMode: String? = nil, - widgetPreloadIndicatorColor: String? = nil, - widgetNoReviewDefaultMessage: String? = "No reviews") { - - if widgetFontName != nil { - self.widgetFontName = widgetFontName! - } - if widgetBackgroundColor != nil { - self.widgetBackgroundColor = widgetBackgroundColor! - } - if widgetBackgroundColorDarkMode != nil { - self.widgetBackgroundColorDarkMode = widgetBackgroundColorDarkMode! - } - if widgetCellBackgroundColor != nil { - self.widgetCellBackgroundColor = widgetCellBackgroundColor! - } - if widgetCellBackgroundColorDarkMode != nil { - self.widgetCellBackgroundColorDarkMode = widgetCellBackgroundColorDarkMode! - } - if widgetBorderWidth != nil { - self.widgetBorderWidth = widgetBorderWidth! - } - if widgetBorderColor != nil { - self.widgetBorderColor = widgetBorderColor! - } - if widgetBorderColorDarkMode != nil { - self.widgetBorderColorDarkMode = widgetBorderColorDarkMode! - } - if widgetBorderTransparent != nil { - self.widgetBorderTransparent = widgetBorderTransparent! - } - if widgetCornerRadius != nil { - self.widgetCornerRadius = widgetCornerRadius! - } - if widgetStarsColor != nil { - self.widgetStarsColor = widgetStarsColor! - } - if widgetAddToCartButtonText != nil { - self.widgetAddToCartButtonText = widgetAddToCartButtonText! - } - if widgetRemoveFromCartButtonText != nil { - self.widgetRemoveFromCartButtonText = widgetRemoveFromCartButtonText! - } - if widgetAddToCartButtonFontSize != nil { - self.widgetAddToCartButtonFontSize = widgetAddToCartButtonFontSize! - } - if widgetRemoveFromCartButtonFontSize != nil { - self.widgetRemoveFromCartButtonFontSize = widgetRemoveFromCartButtonFontSize! - } - if widgetCartButtonTextColor != nil { - self.widgetCartButtonTextColor = widgetCartButtonTextColor! - } - if widgetCartButtonTextColorDarkMode != nil { - self.widgetCartButtonTextColorDarkMode = widgetCartButtonTextColorDarkMode! - } - if widgetCartButtonBackgroundColor != nil { - self.widgetCartButtonBackgroundColor = widgetCartButtonBackgroundColor! - } - if widgetCartButtonBackgroundColorDarkMode != nil { - self.widgetCartButtonBackgroundColorDarkMode = widgetCartButtonBackgroundColorDarkMode! - } - if widgetCartButtonNeedOpenWebUrl != nil { - self.widgetCartButtonNeedOpenWebUrl = widgetCartButtonNeedOpenWebUrl! - } - if widgetFavoritesIconColor != nil { - self.widgetFavoritesIconColor = widgetFavoritesIconColor! - } - if widgetFavoritesIconColorDarkMode != nil { - self.widgetFavoritesIconColorDarkMode = widgetFavoritesIconColorDarkMode! - } - if widgetPreloadIndicatorColor != nil { - self.widgetPreloadIndicatorColor = widgetPreloadIndicatorColor! - } - if widgetNoReviewDefaultMessage != nil { - self.widgetNoReviewsDefaultText = widgetNoReviewDefaultMessage! - } - } - - public var promoCodeSlideFontNameChanged: String? - public var promoCodeSlideFontNameConstant: String { - get { - return "San Francisco (System Font)" - } - set { - promoCodeSlideFontNameChanged = newValue - } - } - - public var promoCodeSlideFontSizeChanged: CGFloat? - public var promoCodeSlideFontSizeConstant: CGFloat { - get { - return 14.0 - } - set { - promoCodeSlideFontSizeChanged = newValue - } - } - - public var promoProductTitleTextColorLightMode: UIColor? - public var promoCodeSlideFontColorConstant_Light: UIColor { - get { - return .white - } - set { - promoProductTitleTextColorLightMode = newValue - } - } - - public var promoProductTitleTextColorDarkMode: UIColor? - public var promoCodeSlideFontColorConstant_Dark: UIColor { - get { - return .white - } - set { - promoProductTitleTextColorDarkMode = newValue - } - } - - public var bannerOldPriceSectionFontColor: UIColor? - public var bannerOldPriceSectionFontColorConstant: UIColor { - get { - return .white - } - set { - bannerOldPriceSectionFontColor = newValue - } - } - - public var bannerPriceSectionFontColor: UIColor? - public var bannerPriceSectionFontColorConstant: UIColor { - get { - return .white - } - set { - bannerPriceSectionFontColor = newValue - } - } - - public var bannerPromocodeSectionFontColor: UIColor? - public var bannerPromocodeSectionFontColorConstant: UIColor { - get { - return .white - } - set { - bannerPromocodeSectionFontColor = newValue - } - } - - public var bannerPriceSectionBackgroundColor: UIColor? - public var bannerPriceSectionBackgroundConstant: UIColor { - get { - return .orange - } - set { - bannerPriceSectionBackgroundColor = newValue - } - } - - public var bannerPromocodeSectionBackgroundColor: UIColor? - public var bannerPromocodeSectionBackgroundColorConstant: UIColor { - get { - return .orange - } - set { - bannerPromocodeSectionBackgroundColor = newValue - } - } - - public var bannerDiscountSectionBackgroundColor: UIColor? - public var bannerDiscountSectionBackgroundConstant: UIColor { - get { - return .yellow - } - set { - bannerDiscountSectionBackgroundColor = newValue - } - } - - public func setPromocodeCard(productBannerFontName: String? = nil, - productTitleFontSize: CGFloat? = nil, - productTitleTextColor: String? = nil, - productTitleTextColorDarkMode: String? = nil, - productBannerOldPriceSectionFontColor: String? = nil, - productBannerPriceSectionFontColor: String? = nil, - productBannerPriceSectionBackgroundColor: String? = nil, - productBannerPromocodeSectionFontColor: String? = nil, - productBannerPromocodeSectionBackgroundColor: String? = nil, - productBannerDiscountSectionBackgroundColor: String? = nil, - productBannerPromocodeCopyToClipboardMessage: String? = "Copied") { - - if productBannerFontName != nil { - if productBannerFontName == promoCodeSlideFontNameConstant { - promoCodeSlideFontNameChanged = nil - } else { - promoCodeSlideFontNameChanged = productBannerFontName - } - } - - let convertedFontSize = productTitleFontSize ?? promoCodeSlideFontSizeConstant - if productTitleFontSize != nil { - promoCodeSlideFontSizeChanged = convertedFontSize - } else { - promoCodeSlideFontSizeConstant = 16.0 - } - - let uipromoProductTitleTextColorLightMode = UIColor(hexString: productTitleTextColor ?? UIColor.white.toHexString()) - let uipromoProductTitleTextColorDarkMode = UIColor(hexString: productTitleTextColorDarkMode ?? UIColor.white.toHexString()) - - promoProductTitleTextColorLightMode = uipromoProductTitleTextColorLightMode - promoProductTitleTextColorDarkMode = uipromoProductTitleTextColorDarkMode - - let uiOldProductBannerPriceSectionFontColor = UIColor(hexString: productBannerOldPriceSectionFontColor ?? UIColor.sdkDefaultWhiteColor.toHexString()) - - let uiProductBannerPriceSectionFontColor = UIColor(hexString: productBannerPriceSectionFontColor ?? UIColor.sdkDefaultWhiteColor.toHexString()) - let uiProductBannerPromocodeSectionFontColor = UIColor(hexString: productBannerPromocodeSectionFontColor ?? UIColor.sdkDefaultWhiteColor.toHexString()) - let uiProductBannerPriceSectionBackgroundColor = UIColor(hexString: productBannerPriceSectionBackgroundColor ?? UIColor.sdkDefaultOrangeColor.toHexString()) - let uiProductBannerPromocodeSectionBackgroundColor = UIColor(hexString: productBannerPromocodeSectionBackgroundColor ?? UIColor.sdkDefaultBlueColor.toHexString()) - - bannerOldPriceSectionFontColor = uiOldProductBannerPriceSectionFontColor - bannerPriceSectionFontColor = uiProductBannerPriceSectionFontColor - bannerPromocodeSectionFontColor = uiProductBannerPromocodeSectionFontColor - - bannerPriceSectionBackgroundColor = uiProductBannerPriceSectionBackgroundColor - bannerPromocodeSectionBackgroundColor = uiProductBannerPromocodeSectionBackgroundColor - - let uiDiscountBannerSectionBackgroundColor = UIColor(hexString: productBannerDiscountSectionBackgroundColor ?? UIColor.sdkDefaultYellowColor.toHexString()) - bannerDiscountSectionBackgroundColor = uiDiscountBannerSectionBackgroundColor - - defaultCopyToClipboardMessageText = productBannerPromocodeCopyToClipboardMessage! - //defaultCopyToClipboardMessageWidth = copyToClipboardWidth! - } - - final class func fontExt(fromName name: String) -> (sdkFontName, sdkFontExtension) { - let components = name.split{$0 == "."}.map { String($0) } - return (components[0], components[1]) - } - - public struct lightSdkStyleApperance: SdkStyleColorScheme, SdkStyleViewColorScheme, SdkStyleLabelColorScheme, SdkStyleButtonColorScheme, SdkStyleTableViewColorScheme, SdkStyleCustomColorScheme { - - public var storiesBlockSelectFontName: UIFont - public var storiesBlockSelectFontSize: CGFloat - public var storiesBlockFontColor: UIColor - public var storiesBlockBackgroundColor: UIColor - - public var defaultButtonSelectFontName: UIFont - public var defaultButtonSelectFontSize: CGFloat - public var defaultButtonFontColor: UIColor - public var defaultButtonBackgroundColor: UIColor - - public var productsButtonSelectFontName: UIFont - public var productsButtonSelectFontSize: CGFloat - public var productsButtonFontColor: UIColor - public var productsButtonBackgroundColor: UIColor - - public let storiesBack = UIColor.lightGray - public let viewControllerBackground = UIColor.white - public let navigationBarStyle = UIBarStyle.default - public let navigationBarBackgroundColor = UIColor.white - public let navigationBarTextColor = UIColor.black - public let viewBackgroundColor = UIColor.magenta - public let labelTextColor = UIColor.black - public let buttonTintColor = UIColor.blue - - public let tableViewBackgroundColor = UIColor.lightGray - public var tableViewSeparatorColor = UIColor.gray - public let headerBackgroundColor = UIColor.white - public let headerTextColorColor = UIColor.black - public let cellBackgroundColor = UIColor.white - public let cellTextColorColor = UIColor.black - public let cellSubTextColorColor = UIColor.darkGray - - public let customColors = [CustomTableCellColors.cellBackground.SdkApperanceViewScheme() : UIColor.magenta, - CustomTableCellColors.cellTextColor.SdkApperanceViewScheme() : UIColor.purple] - } - - public struct darkSdkStyleApperance: SdkStyleColorScheme, SdkStyleViewColorScheme, SdkStyleLabelColorScheme, SdkStyleButtonColorScheme, SdkStyleTableViewColorScheme, SdkStyleCustomColorScheme { - - public var storiesBlockSelectFontName: UIFont - public var storiesBlockSelectFontSize: CGFloat - public var storiesBlockFontColor: UIColor - public var storiesBlockBackgroundColor: UIColor - - public var defaultButtonSelectFontName: UIFont - public var defaultButtonSelectFontSize: CGFloat - public var defaultButtonFontColor: UIColor - public var defaultButtonBackgroundColor: UIColor - - public var productsButtonSelectFontName: UIFont - public var productsButtonSelectFontSize: CGFloat - public var productsButtonFontColor: UIColor - public var productsButtonBackgroundColor: UIColor - - public let viewControllerBackground = UIColor.black - public let navigationBarStyle = UIBarStyle.black - public let navigationBarBackgroundColor = UIColor.black - public let navigationBarTextColor = UIColor.white - public let viewBackgroundColor = UIColor.yellow - public let labelTextColor = UIColor.white - public let buttonTintColor = UIColor.blue - - public let tableViewBackgroundColor = UIColor.darkGray - public var tableViewSeparatorColor = UIColor.gray - public let headerBackgroundColor = UIColor.black - public let headerTextColorColor = UIColor.white - public let cellBackgroundColor = UIColor.black - public let cellTextColorColor = UIColor.white - public let cellSubTextColorColor = UIColor.lightGray - - public let customColors = [CustomTableCellColors.cellBackground.SdkApperanceViewScheme() : UIColor.purple, - CustomTableCellColors.cellTextColor.SdkApperanceViewScheme() : UIColor.magenta ] - } - - public struct customSdkStyleApperance: SdkStyleColorScheme, SdkStyleViewColorScheme, SdkStyleLabelColorScheme, SdkStyleButtonColorScheme, SdkStyleTableViewColorScheme, SdkStyleCustomColorScheme { - - public var storiesBlockSelectFontName: UIFont - public var storiesBlockSelectFontSize: CGFloat - public var storiesBlockFontColor: UIColor - public var storiesBlockBackgroundColor: UIColor - - public var defaultButtonSelectFontName: UIFont - public var defaultButtonSelectFontSize: CGFloat - public var defaultButtonFontColor: UIColor - public var defaultButtonBackgroundColor: UIColor - - public var productsButtonSelectFontName: UIFont - public var productsButtonSelectFontSize: CGFloat - public var productsButtonFontColor: UIColor - public var productsButtonBackgroundColor: UIColor - - public let storiesBack = UIColor.lightGray - public var viewControllerBackground = UIColor.blue - public let navigationBarStyle = UIBarStyle.black - public let navigationBarBackgroundColor = UIColor.blue - public let navigationBarTextColor = UIColor.white - public let viewBackgroundColor = UIColor.black - public let labelTextColor = UIColor.white - public let buttonTintColor = UIColor.blue - - public let tableViewBackgroundColor = UIColor.lightGray - public var tableViewSeparatorColor = UIColor.gray - public let headerBackgroundColor = UIColor.white - public let headerTextColorColor = UIColor.black - public let cellBackgroundColor = UIColor.white - public let cellTextColorColor = UIColor.black - public let cellSubTextColorColor = UIColor.darkGray - - public let customColors = [CustomTableCellColors.cellBackground.SdkApperanceViewScheme() : UIColor.magenta, - CustomTableCellColors.cellTextColor.SdkApperanceViewScheme() : UIColor.purple] - } - - public enum SdkStyleApperanceTypes: String, SdkApperanceViewScheme { - case storiesBlockLight - case storiesBlockDark - case slideDefaultButtonLight - case slideDefaultButtonDark - case slideProductsButtonLight - case slideProductsButtonDark - case productsCardLight - case productsCardDark - case custom - } - - public static var isDarkMode: Bool { - if #available(iOS 13.0, *) { - return UITraitCollection.current.userInterfaceStyle == .dark - } else { - return false - } - } - - public func getInstalledFontsFrom(bundle: Bundle = .main, - completion: (([String]) -> Void)? = nil) { - getInstalledFontsFrom(at: bundle.bundleURL, completion: completion) - } - - public func getInstalledFontsFrom(at url: URL?, - completion: (([String]) -> Void)? = nil) { - - guard let url = url else { completion?([]) - return - } - - var loadedForSDKFonts: [sdkFontClass] = [] - loadedForSDKFonts += SdkConfiguration.loadFonts(at: url) - loadedForSDKFonts += SdkConfiguration.loadFontsFromBundles(at: url) - - let alreadyLoaded = allLoadedFonts.map { $0.url } - let justLoaded = loadedForSDKFonts.map { $0.url } - for i in 0 ..< justLoaded.count { - let justLoadedUrl = justLoaded[i] - if alreadyLoaded.firstIndex(of: justLoadedUrl) == nil { - allLoadedFonts.append(loadedForSDKFonts[i]) - } - } - - completion?(loadedForSDKFonts.map { $0.name }) - } - - public enum CustomTableCellColors: String, SdkApperanceViewScheme { - case cellBackground - case cellTextColor - } - - public var storiesBlockFontNameChanged: String? - public var storiesBlockFontNameConstant: String { - get { - return "San Francisco (System Font)" - } - set { - storiesBlockFontNameChanged = newValue - } - } - - public var storiesBlockMinimumFontSizeChanged: CGFloat? - public var storiesBlockMinimumFontSizeConstant: CGFloat { - get { - return 7.0 - } - set { - storiesBlockMinimumFontSizeChanged = newValue - } - } - - public var storiesBlockTextColorChanged_Light: UIColor? - public var storiesBlockTextColorConstant_Light: UIColor { - get { - return .black - } - set { - storiesBlockTextColorChanged_Light = newValue - } - } - - public var storiesBlockTextColorChanged_Dark: UIColor? - public var storiesBlockTextColorConstant_Dark: UIColor { - get { - return .black - } - set { - storiesBlockTextColorChanged_Dark = newValue - } - } - - public var storiesBlockBackgroundColorChanged_Light: UIColor? - public var storiesBlockBackgroundColorConstant_Light: UIColor { - get { - return .white - } - set { - storiesBlockBackgroundColorChanged_Light = newValue - } - } - - public var storiesBlockBackgroundColorChanged_Dark: UIColor? - public var storiesBlockBackgroundColorConstant_Dark: UIColor { - get { - return .black - } - set { - storiesBlockBackgroundColorChanged_Dark = newValue - } - } - - public var slideDefaultButtonFontNameChanged: String? - public var slideDefaultButtonFontNameConstant: String { - get { - return "San Francisco (System Font)" - } - set { - slideDefaultButtonFontNameChanged = newValue - } - } - - public var slideDefaultButtonFontSizeChanged: CGFloat? - public var slideDefaultButtonFontSizeConstant: CGFloat { - get { - return 14.0 - } - set { - slideDefaultButtonFontSizeChanged = newValue - } - } - - public var slideDefaultButtonTextColorChanged_Light: UIColor? - public var slideDefaultButtonTextColorConstant_Light: UIColor { - get { - return .black - } - set { - slideDefaultButtonTextColorChanged_Light = newValue - } - } - - public var slideDefaultButtonTextColorChanged_Dark: UIColor? - public var slideDefaultButtonTextColorConstant_Dark: UIColor { - get { - return .black - } - set { - slideDefaultButtonTextColorChanged_Dark = newValue - } - } - - public var slideDefaultButtonBackgroundColorChanged_Light: UIColor? - public var slideDefaultButtonBackgroundColorConstant_Light: UIColor { - get { - return .white - } - set { - slideDefaultButtonBackgroundColorChanged_Light = newValue - } - } - - public var slideDefaultButtonBackgroundColorChanged_Dark: UIColor? - public var slideDefaultButtonBackgroundColorConstant_Dark: UIColor { - get { - return .white - } - set { - slideDefaultButtonBackgroundColorChanged_Dark = newValue - } - } - - public var slideProductsButtonFontNameChanged: String? - public var slideProductsButtonFontNameConstant: String { - get { - return "San Francisco (System Font)" } - set { - slideProductsButtonFontNameChanged = newValue } - } - - public var slideProductsButtonFontSizeChanged: CGFloat? - public var slideProductsButtonFontSizeConstant: CGFloat { - get { - return 14.0 - } - set { - slideProductsButtonFontSizeChanged = newValue - } - } - - public var slideProductsButtonTextColorChanged_Light: UIColor? - public var slideProductsButtonTextColorConstant_Light: UIColor { - get { - return .black - } - set { - slideProductsButtonTextColorChanged_Light = newValue - } - } - - public var slideProductsButtonTextColorChanged_Dark: UIColor? - public var slideProductsButtonTextColorConstant_Dark: UIColor { - get { - return .black - } - set { - slideProductsButtonTextColorChanged_Dark = newValue - } - } - - public var slideProductsButtonBackgroundColorChanged_Light: UIColor? - public var slideProductsButtonBackgroundColorConstant_Light: UIColor { - get { - return .white - } - set { - slideProductsButtonBackgroundColorChanged_Light = newValue - } - } - - public var slideProductsButtonBackgroundColorChanged_Dark: UIColor? - public var slideProductsButtonBackgroundColorConstant_Dark: UIColor { - get { - return .white - } - set { - slideProductsButtonBackgroundColorChanged_Dark = newValue - } - } - - public var slideProductsHideButtonFontNameChanged: String? - public var slideProductsHideButtonFontNameConstant: String { - get { - return "San Francisco (System Font)" - } - set { - slideProductsButtonFontNameChanged = newValue - } - } - - public var bootRegisteredFontChanged: UIFont? - public var bootRegisteredFontConstant: UIFont { - get { - return .systemFont(ofSize: 14.0) - } - set { - bootRegisteredFontChanged = newValue - } - } - - public class func customFont(name: String, size: CGFloat) -> UIFont { - let sizeWithOffset = size - guard let sFont = UIFont(name: name, size: sizeWithOffset) else { - UIFont.familyNames.forEach({ familyName in - let fontNames = UIFont.fontNames(forFamilyName: familyName) - print(familyName, fontNames) - }) - print("SDK Error Font not found: \(name)") - return UIFont.systemFont(ofSize: 15.0) - } - return sFont - } -} - - -private extension SdkConfiguration { - class func loadFonts(at url: URL) -> [sdkFontClass] { - var loadedFonts: [sdkFontClass] = [] - - do { - let contents = try FileManager.default.contentsOfDirectory( - at: url, - includingPropertiesForKeys: nil, - options: [.skipsHiddenFiles] - ) - - let alreadyLoaded = SdkConfiguration.stories.allLoadedFonts.map { $0.url } - for font in fonts(contents) { - if let idx = alreadyLoaded.firstIndex(of: font.url) { - loadedFonts.append(SdkConfiguration.stories.allLoadedFonts[idx]) - } else if let lf = loadFont(font) { - loadedFonts.append(lf) - } - } - } catch let error as NSError { - print("SDK There was an error loading fonts. Path: \(url). Error: \(error)") - } - return loadedFonts - } - - class func loadFontsFromBundles(at url: URL) -> [sdkFontClass] { - var loadedFonts: [sdkFontClass] = [] - - do { - let contents = try FileManager.default.contentsOfDirectory( - at: url, - includingPropertiesForKeys: nil, - options: [.skipsHiddenFiles] - ) - - for item in contents { - guard item.absoluteString.contains(".bundle") else {continue} - loadedFonts += loadFonts(at: item) - } - } catch let error as NSError { - print("SDK There was an error accessing bundle with url. Path: \(url). Error: \(error) ") - } - return loadedFonts - } - - class func loadFont(_ font: sdkFontClass) -> sdkFontClass? { - let fileURL: sdkFontPath = font.url - let name = font.name - var nowLoadedFontName: String? - var sdkRef: CGFont? - var error: Unmanaged? - - if let data = try? Data(contentsOf: fileURL) as CFData, - let sdkDataProvider = CGDataProvider(data: data) { - workaroundDeadlock() - - sdkRef = CGFont(sdkDataProvider) - - if CTFontManagerRegisterGraphicsFont(sdkRef!, &error) { - if let postScriptName = sdkRef?.postScriptName { - print("SDK Successfully loaded custom font: '\(postScriptName)'.") - nowLoadedFontName = String(postScriptName) - } - } else if let error = error?.takeRetainedValue() { - let errorDescription = CFErrorCopyDescription(error) - print("SDK Already installed custom font '\(name)': \(String(describing: errorDescription))") - } - } else { - guard let error = error?.takeRetainedValue() else { - print("SDK Failed to load font '\(name)'.") - return nil - } - let errorDescription = CFErrorCopyDescription(error) - print("SDK Failed to load font '\(name)': \(String(describing: errorDescription))") - } - - if let sdkLfn = nowLoadedFontName { - return (fileURL, sdkLfn) - } - return nil - } - - class func workaroundDeadlock() { - _ = UIFont.systemFont(ofSize: 7) - } -} - - -extension SdkConfiguration { - class func fonts(_ contents: [URL]) -> [sdkFontClass] { - var fonts = [sdkFontClass]() - for fontUrl in contents { - if let fontName = font(fontUrl) { - fonts.append((fontUrl, fontName)) - } - } - return fonts - } - - class func font(_ fontUrl: URL) -> sdkFontName? { - let name = fontUrl.lastPathComponent - let comps = name.components(separatedBy: ".") - if comps.count < 2 { - return nil - } - - let fname = comps[0 ..< comps.count - 1].joined(separator: ".") - return SdkFontInjector.sdkSupportedFontExtensions(comps.last!) != nil ? fname : nil - } -} - - -extension UIColor { - convenience init(hexString: String) { - let hex = hexString.trimmingCharacters(in: CharacterSet.alphanumerics.inverted) - var int = UInt32() - Scanner(string: hex).scanHexInt32(&int) - let a, r, g, b: UInt32 - switch hex.count { - case 3: - (a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17) - case 6: - (a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF) - case 8: - (a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF) - default: - (a, r, g, b) = (255, 0, 0, 0) - } - self.init(red: CGFloat(r) / 255, green: CGFloat(g) / 255, blue: CGFloat(b) / 255, alpha: CGFloat(a) / 255) - } - - convenience init(hexString: String, alpha: CGFloat = 1.0) { - let hexString: String = hexString.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) - let scanner = Scanner(string: hexString) - if (hexString.hasPrefix("#")) { - scanner.scanLocation = 1 - } - - var color: UInt32 = 0 - scanner.scanHexInt32(&color) - let mask = 0x000000FF - let r = Int(color >> 16) & mask - let g = Int(color >> 8) & mask - let b = Int(color) & mask - - let red = CGFloat(r) / 255.0 - let green = CGFloat(g) / 255.0 - let blue = CGFloat(b) / 255.0 - - self.init(red: red, green: green, blue: blue, alpha: alpha) - } - - func toHexString() -> String { - var r:CGFloat = 0 - var g:CGFloat = 0 - var b:CGFloat = 0 - var a:CGFloat = 0 - getRed(&r, green: &g, blue: &b, alpha: &a) - - let rgb: Int = (Int)(r*255)<<16 | (Int)(g*255)<<8 | (Int)(b*255)<<0 - return String(format:"#%06x", rgb) - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/RawRepresentable+FontInjector.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/RawRepresentable+FontInjector.swift deleted file mode 100644 index 532f887..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/RawRepresentable+FontInjector.swift +++ /dev/null @@ -1,22 +0,0 @@ -import UIKit - -public extension RawRepresentable where Self: Hashable { - - static var allCases: AnySequence { - typealias S = Self - return AnySequence { () -> AnyIterator in - var raw = 0 - return AnyIterator { - let current: Self = withUnsafePointer(to: &raw) { $0.withMemoryRebound(to: S.self, capacity: 1) { $0.pointee } } - guard current.hashValue == raw else { - return nil - } - - raw += 1 - print("\(current)") - return current - } - } - } - -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/SdkDynamicFont.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/SdkDynamicFont.swift deleted file mode 100644 index 92cd6ae..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/SdkDynamicFont.swift +++ /dev/null @@ -1,15 +0,0 @@ -import UIKit - -public enum SdkDynamicFont: String, SdkFontPackage { - - case regular = "Inter" - - public var fontPath: String { - return "" - } - - public var fontExtension: FontExtension { - return .ttf - } - -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/SdkFontInjector.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/SdkFontInjector.swift deleted file mode 100644 index 7892188..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/SdkFontInjector.swift +++ /dev/null @@ -1,135 +0,0 @@ -import UIKit - -public protocol SdkFontPackage: Hashable, RawRepresentable { - static func dynamicFont(textStyle: SdkFontTextStyleImplement, weight: UIFont.Weight) -> UIFont - static func font(ofSize size: CGFloat, weight: UIFont.Weight) -> UIFont -} - -public enum FontExtension: String { - case ttf = ".ttf" - case otf = ".otf" - case fnt = ".fnt" -} - -open class SdkFontInjector: NSObject { - - public static let manager: SdkFontInjector = SdkFontInjector() - - public static var lastestRegisterFontFamilyName: String? - public static var registeredFont: [String: [UIFont.Weight : String]] = [:] - - static internal func font(ofSize size: CGFloat, weight: UIFont.Weight = .regular) -> UIFont? { - guard let registeredFontName = lastestRegisterFontFamilyName, - let fonts = registeredFont[registeredFontName], - fonts.values.count > 0 else { - return nil - } - let postScriptedName = fonts[weight] ?? fonts[.regular] ?? Array(fonts.values)[0] - return UIFont(name: postScriptedName, size: size) - } - - public enum sdkSupportedFontExtensions: String { - case trueType = "ttf" - case openType = "otf" - - init?(_ ver: String?) { - if sdkSupportedFontExtensions.trueType.rawValue == ver { - self = .trueType - } else if sdkSupportedFontExtensions.openType.rawValue == ver { - self = .openType - } else { - return nil - } - } - } - - public func registerFontNameWithExtension(fileName: String, fileExtension: String) { - var parsedFont: (sdkFontName, sdkFontExtension)? - - if fileName.contains(sdkSupportedFontExtensions.trueType.rawValue) || fileName.contains(sdkSupportedFontExtensions.openType.rawValue) { - parsedFont = SdkConfiguration.fontExt(fromName: fileName) - } else { - var tmpName = fileName + "." + sdkSupportedFontExtensions.trueType.rawValue - parsedFont = SdkConfiguration.fontExt(fromName: tmpName) - if parsedFont == nil { - tmpName = fileName + "." + sdkSupportedFontExtensions.openType.rawValue - parsedFont = SdkConfiguration.fontExt(fromName: tmpName) - } - } - - if parsedFont != nil { - let pathForResourceString = Bundle.main.path(forResource: fileName, ofType: fileExtension) - if pathForResourceString != nil { - let fontData = NSData(contentsOfFile: pathForResourceString!) - let dataProvider = CGDataProvider(data: fontData!) - let fontRef = CGFont(dataProvider!) - var errorRef: Unmanaged? = nil - - if (CTFontManagerRegisterGraphicsFont(fontRef!, &errorRef) == false) { - print("SDK Error registering font") - } else { - let fontName = fontRef!.postScriptName as String? - let fontWeightName = "\(String(describing: fontName))".split(separator: ".").last - for fontWeight in UIFont.Weight.all { - if let key = fontWeight.key, key == fontWeightName! { - if SdkFontInjector.registeredFont[fontName!] == nil { - SdkFontInjector.registeredFont[fontName!] = [:] - } - } - //SdkFontInjector.registeredFont[fontName!]?[fontWeight] = fontName - } - SdkFontInjector.registeredFont[fontName!]?[UIFont.Weight.regular] = fontName - print("SDK Success registering font") - SdkFontInjector.lastestRegisterFontFamilyName = fontName - } - } - } - } -} - - -extension SdkFontPackage { - public static func dynamicFont(textStyle: SdkFontTextStyleImplement, weight: UIFont.Weight = .regular) -> UIFont { - return UIFont.dynamicFont(style: textStyle, weight: weight, ofFont: Self.self) - } - - public static func font(ofSize size: CGFloat, weight: UIFont.Weight = .regular) -> UIFont { - return UIFont.staicFont(ofSize: size, weight: weight) - } -} - - -extension SdkFontPackage where Self.RawValue == String { - var fileName: String { - return rawValue - } - - static var familyName: String { - return "\(self)" - } -} - - -extension UIFont.Weight { - static var mappingKeys: [UIFont.Weight: String] { - return [.ultraLight: "ultraLight", - .thin: "thin", - .light: "light", - .regular: "regular", - .medium: "medium", - .semibold: "semibold", - .bold: "bold", - .heavy: "heavy", - .black: "black"] - } - - static var all: [UIFont.Weight] { - return Array(mappingKeys.keys) - } - - var key: String? { - return UIFont.Weight.mappingKeys[self] - } - -} - diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/UIFont+FontInjector.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/UIFont+FontInjector.swift deleted file mode 100644 index 989ba2a..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/UIFont+FontInjector.swift +++ /dev/null @@ -1,64 +0,0 @@ -import UIKit - -public enum SdkFontTextStyleImplement: Int { - - case largeTitleDefault = 0 - case largeTitle - case mediumTitle - case smallTitle - case headline - case body - case callout - case subheadline - case footnote - case caption1 - case caption2 - - internal var systemSdkFontTextStyleImplement: UIFont.TextStyle? { - return [SdkFontTextStyleImplement.largeTitle: UIFont.TextStyle.title1, - SdkFontTextStyleImplement.mediumTitle: UIFont.TextStyle.title2, - SdkFontTextStyleImplement.smallTitle: UIFont.TextStyle.title3, - SdkFontTextStyleImplement.headline: UIFont.TextStyle.headline, - SdkFontTextStyleImplement.body: UIFont.TextStyle.body, - SdkFontTextStyleImplement.callout: UIFont.TextStyle.callout, - SdkFontTextStyleImplement.subheadline: UIFont.TextStyle.subheadline, - SdkFontTextStyleImplement.footnote: UIFont.TextStyle.footnote, - SdkFontTextStyleImplement.caption1: UIFont.TextStyle.caption1, - SdkFontTextStyleImplement.caption2: UIFont.TextStyle.caption2][self] - } - - public var dynamicPointSize: CGFloat { - if let systemSdkFontTextStyleImplement = systemSdkFontTextStyleImplement { - - return UIFont.preferredFont(forTextStyle: systemSdkFontTextStyleImplement).pointSize - - } else if self == .largeTitle { - let titleFontSize = UIFont.preferredFont(forTextStyle: .title1).pointSize - - if let title1SizingMapper = [38, 43, 48, 53, 58].firstIndex(of: titleFontSize) { - return [44, 48, 52, 56, 60][title1SizingMapper] - } - return 52 - } - return 16 - } - -} - - -extension UIFont { - class func dynamicFont(style: SdkFontTextStyleImplement, - weight: UIFont.Weight = .regular, - ofFont font: T.Type? = nil) -> UIFont { - return UIFont.staicFont(ofSize: style.dynamicPointSize, weight: weight) - } - - internal class func staicFont(ofSize size: CGFloat, weight: UIFont.Weight) -> UIFont { - if let font = SdkFontInjector.font(ofSize: size, weight: weight) { - return font - } - - return UIFont.systemFont(ofSize: size, weight: weight) - } - -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/UISdkWrapLabel.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/UISdkWrapLabel.swift deleted file mode 100644 index 203458f..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkFontInjector/UISdkWrapLabel.swift +++ /dev/null @@ -1,93 +0,0 @@ -import UIKit - -open class UISdkWrapLabel: UILabel { - - @IBInspectable - public var maximumFontSizeBySdk: CGFloat = 40 - - @IBInspectable - public var minimumFontSizeBySdk: CGFloat = 1 - - public convenience init() { - self.init(frame: CGRect.zero) - } - - public override init(frame: CGRect) { - super.init(frame: frame) - self.commonInit() - } - - public required init?(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - } - - open override func awakeFromNib() { - super.awakeFromNib() - self.commonInit() - } - - open func commonInit() { - self.adjustsFontSizeToFitWidth = false - } - - open override func layoutSubviews() { - super.layoutSubviews() - self.adjustFontSize() - self.setMinimumScaleFactorBySdk() - } - - private func adjustFontSize() { - if self.maximumFontSizeBySdk < self.minimumFontSizeBySdk { - print("SDK Warning maximumFontSizeBySdk should be greater minimumFontSizeBySdk") - self.minimumFontSizeBySdk = self.maximumFontSizeBySdk - } - - let additionalLbl = self.getAdditionalLbl() - - var adjustmentSdkResultFontSize: CGFloat = self.minimumFontSizeBySdk - var currentMax: Int = Int(self.maximumFontSizeBySdk) - var currentMin: Int = Int(self.minimumFontSizeBySdk) - - repeat { - var middleValue = currentMin + ((currentMax - currentMin) / 2) - - additionalLbl.font = additionalLbl.font.withSize(CGFloat(middleValue)) - additionalLbl.bounds = CGRect.zero - additionalLbl.sizeToFit() - - if additionalLbl.bounds.width > self.bounds.width { - - if currentMax == middleValue { - middleValue -= 1 - } - - currentMax = middleValue - } else { - adjustmentSdkResultFontSize = CGFloat(middleValue) - - if currentMin == middleValue { - middleValue += 1 - } - - currentMin = middleValue - } - - } while currentMin <= currentMax - - self.font = self.font.withSize(adjustmentSdkResultFontSize) - } - - private func getAdditionalLbl() -> UILabel { - - let additionalLbl = UILabel() - additionalLbl.font = self.font - additionalLbl.numberOfLines = 0 - additionalLbl.text = self.text?.replacingOccurrences(of: " ", with: "\n") - return additionalLbl - } - - private func setMinimumScaleFactorBySdk() { - let currentFontSize = self.font.pointSize - self.minimumScaleFactor = self.minimumFontSizeBySdk / currentFontSize - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkApperanceViewScheme.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkApperanceViewScheme.swift deleted file mode 100644 index eff0e7d..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkApperanceViewScheme.swift +++ /dev/null @@ -1,13 +0,0 @@ -import Foundation - -public protocol SdkApperanceViewScheme { - func SdkApperanceViewScheme() -> String -} - - -extension RawRepresentable where RawValue == String { - public func SdkApperanceViewScheme() -> String { - let str = String(describing: type(of: self)) + rawValue - return str - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyle.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyle.swift deleted file mode 100644 index d0c9f62..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyle.swift +++ /dev/null @@ -1,180 +0,0 @@ -import UIKit - -public class SdkStyle: NSObject { - - public static var shared: SdkStyle = { - return SdkStyle() - }() - - private static let animationDuration = 0.2 - - private struct WeakViewControllerContainer { - weak var viewController: UIViewController? - } - - private var viewControllers: [WeakViewControllerContainer] = [] - - public var colorSchemes: [String: SdkStyleColorScheme] = [:] - public var currentColorScheme: SdkStyleColorScheme? = nil - public var currentStoriesBlockColorScheme: sdkElement_storiesBlockColorScheme? = nil - public var fonts: [String: SdkStyleCustomFonts] = [:] - public var currentFonts: SdkStyleCustomFonts? = nil - - private override init() { - super.init() - } - - public static let configure: Void = { - UIView.swizzleWillMove - UIViewController.swizzleViewDidLoad - }() - - public func register(colorScheme: SdkStyleColorScheme, for key: SdkApperanceViewScheme) { - colorSchemes[key.SdkApperanceViewScheme()] = colorScheme - } - - public func register(fonts: SdkStyleCustomFonts, for key: SdkApperanceViewScheme) { - self.fonts[key.SdkApperanceViewScheme()] = fonts - } - - public func switchApppearance(to key: SdkApperanceViewScheme, animated: Bool) { - guard let colorScheme = colorSchemes[key.SdkApperanceViewScheme()] else { - return - } - - currentColorScheme = colorScheme - - for viewControllerContainer in viewControllers { - if let viewController = viewControllerContainer.viewController { - viewController.applyColorScheme(colorScheme, animated: animated) - } - } - } - - public func switchFontSize(to key: SdkApperanceViewScheme) { - guard let fonts = fonts[key.SdkApperanceViewScheme()] else { - return - } - - currentFonts = fonts - - for viewControllerContainer in viewControllers { - if let viewController = viewControllerContainer.viewController { - viewController.applySdkCustomFonts(fonts) - } - } - } - - public override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { - if let view = object as? UIView, - keyPath == #keyPath(UIView.isHidden) { - if let currentColorScheme = currentColorScheme { - view.downcastColorScheme(currentColorScheme, animated: false) - } - if let currentFonts = currentFonts { - view.downcastSdkAllFonts(currentFonts) - } - } - } - - internal func registerViewController(_ viewController: UIViewController) { - print("SDK SdkStyle registers view controller: \(String(describing: type(of: viewController)))") - if blacklist.contains(String(describing: type(of: viewController))) { - return - } - - viewControllers.append(WeakViewControllerContainer(viewController: viewController)) - - if let currentColorScheme = currentColorScheme { - viewController.applyColorScheme(currentColorScheme, animated: false) - } - if let currentFonts = currentFonts { - viewController.applySdkCustomFonts(currentFonts) - } - } - - internal static func applySdkStyleApperance(animated: Bool, block: @escaping (() -> Void)) { - if animated { - UIView.animate(withDuration: animationDuration, animations: block) - } - else { - block() - } - } - - fileprivate var blacklist: [String] = [] - - public func blackListVC(_ type: UIViewController.Type) { - blacklist.append(String(describing: type)) - } - - public func blackListVC(name: String) { - blacklist.append(name) - } -} - - -extension UIView { - @objc - func apppear_willMove(toSuperview newSuperview: UIView?) { - apppear_willMove(toSuperview: newSuperview) - - - let blacklisted: Bool - if let parentVC = self.parentViewController, - SdkStyle.shared.blacklist.contains(String(describing: type(of: parentVC))) { - blacklisted = true - } - else { - blacklisted = false - } - - - if !blacklisted, - newSuperview != nil { - if let currentColorScheme = SdkStyle.shared.currentColorScheme { - downcastColorScheme(currentColorScheme, animated: false) - } - if let currentFonts = SdkStyle.shared.currentFonts { - downcastSdkAllFonts(currentFonts) - } - } - - if self is UITableViewCell { - if newSuperview != nil { - addObserver(SdkStyle.shared, forKeyPath: #keyPath(UIView.isHidden), options: [.new], context: nil) - } - else { - removeObserver(SdkStyle.shared, forKeyPath: #keyPath(UIView.isHidden)) - } - } - } - - fileprivate static let swizzleWillMove: Void = { - let originalMethod = class_getInstanceMethod(UIView.self, #selector(willMove(toSuperview:))) - let swizzledMethod = class_getInstanceMethod(UIView.self, #selector(apppear_willMove(toSuperview:))) - - if let originalMethod = originalMethod, - let swizzledMethod = swizzledMethod { - method_exchangeImplementations(originalMethod, swizzledMethod) - } - }() -} - - -extension UIViewController { - @objc - func apppear_viewDidLoad() { - apppear_viewDidLoad() - SdkStyle.shared.registerViewController(self) - } - - fileprivate static let swizzleViewDidLoad: Void = { - let originalMethod = class_getInstanceMethod(UIViewController.self, #selector(viewDidLoad)) - let swizzledMethod = class_getInstanceMethod(UIViewController.self, #selector(apppear_viewDidLoad)) - if let originalMethod = originalMethod, - let swizzledMethod = swizzledMethod { - method_exchangeImplementations(originalMethod, swizzledMethod) - } - }() -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleAdditional/FontFamily.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleAdditional/FontFamily.swift deleted file mode 100644 index 64f3879..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleAdditional/FontFamily.swift +++ /dev/null @@ -1,96 +0,0 @@ -import UIKit - -public class SdkFontFamily { - - private func mostSimilarFontName(regularName: String, usage: String) -> String? { - for familyName in UIFont.familyNames { - for fontName in UIFont.fontNames(forFamilyName: familyName) { - guard fontName.lowercased() != regularName.lowercased() + "-" + usage.lowercased() else { - return fontName - } - - guard fontName.lowercased() != regularName.lowercased() + "_" + usage.lowercased() else { - return fontName - } - - guard fontName.lowercased() != regularName.lowercased() + " " + usage.lowercased() else { - return fontName - } - - guard fontName.lowercased() != regularName.lowercased() + usage.lowercased() else { - return fontName - } - } - } - return nil - } - - internal lazy var ultraLight: String = { - return mostSimilarFontName(regularName: regular, usage: "UltraLight") ?? thin // ?? light ?? regular - }() - - internal lazy var thin: String = { - return mostSimilarFontName(regularName: regular, usage: "thin") ?? light // ?? regular - }() - - internal lazy var light: String = { - return mostSimilarFontName(regularName: regular, usage: "light") ?? regular - }() - - internal let regular: String - - internal lazy var oblique: String = { - return mostSimilarFontName(regularName: regular, usage: "Oblique") ?? regular - }() - - internal lazy var medium: String = { - return mostSimilarFontName(regularName: regular, usage: "medium") ?? regular - }() - - internal lazy var semibold: String = { - return mostSimilarFontName(regularName: regular, usage: "semibold") ?? medium // ?? regular - }() - - internal lazy var bold: String = { - return mostSimilarFontName(regularName: regular, usage: "bold") ?? semibold // ?? medium ?? regular - }() - - internal lazy var emphasized: String = { - return mostSimilarFontName(regularName: regular, usage: "emphasized") ?? bold // ?? medium ?? regular - }() - - internal lazy var heavy: String = { - return mostSimilarFontName(regularName: regular, usage: "heavy") ?? bold // ?? semibold ?? medium ?? regular - }() - - internal lazy var black: String = { - return mostSimilarFontName(regularName: regular, usage: "black") ?? heavy // ?? bold ?? semibold ?? medium ?? regular - }() - - public init(regular: String, - ultraLight: String? = nil, - thin: String? = nil, - light: String? = nil, - oblique: String? = nil, - medium: String? = nil, - semibold: String? = nil, - bold: String? = nil, - emphasized: String? = nil, - heavy: String? = nil, - black: String? = nil) { - - self.regular = regular - - if let ultraLight = ultraLight { self.ultraLight = ultraLight } - if let thin = thin { self.thin = thin } - if let light = light { self.light = light } - if let oblique = oblique { self.oblique = oblique } - if let medium = medium { self.medium = medium } - if let semibold = semibold { self.semibold = semibold } - if let bold = bold { self.bold = bold } - if let emphasized = emphasized { self.emphasized = emphasized } - if let heavy = heavy { self.heavy = heavy } - if let black = black { self.black = black } - - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleAdditional/SdkFontInstaller.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleAdditional/SdkFontInstaller.swift deleted file mode 100644 index f4b1ce1..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleAdditional/SdkFontInstaller.swift +++ /dev/null @@ -1,34 +0,0 @@ -import Foundation - -public typealias fontInstaller = SdkFontInstaller - -public class SdkFontInstaller { - - public class func exchange(classMethod orginalSystemMethod: Selector, of originalSystemClass: AnyClass?, with customSystemMethod: Selector, of customSystemClass: AnyClass?) { - - guard let originalSystemMethod = class_getClassMethod(originalSystemClass, orginalSystemMethod) else { - return assertionFailure("SDK Original class method not found") - } - - guard let customSystemMethod = class_getClassMethod(customSystemClass, customSystemMethod) else { - return assertionFailure("SDK Custom class method not found") - } - - method_exchangeImplementations(originalSystemMethod, customSystemMethod) - } - - - public class func exchange(instanceMethod orginalSystemMethod: Selector, of originalSystemClass: AnyClass?, with customSystemMethod: Selector, of customSystemClass: AnyClass?) { - - guard let originalSystemMethod = class_getInstanceMethod(originalSystemClass, orginalSystemMethod) else { - return assertionFailure("SDK Original instance method not found") - } - - guard let customSystemMethod = class_getInstanceMethod(customSystemClass, customSystemMethod) else { - return assertionFailure("SDK Custom instance method not found") - } - - method_exchangeImplementations(originalSystemMethod, customSystemMethod) - } - -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleAdditional/SdkStyleUIApplication.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleAdditional/SdkStyleUIApplication.swift deleted file mode 100644 index a238341..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleAdditional/SdkStyleUIApplication.swift +++ /dev/null @@ -1,160 +0,0 @@ -import UIKit -import Foundation - -public protocol sdkStyleManagerProtocol { - func setStoriesViewFont(fontName: String) - func isDeviceDarkModeEnabled() -> Bool - func getSession() -> String -} - -@objc -public extension UIApplication { - - func setStoriesViewFont(fontName: String) { - _ = { - $0.isUserInteractionEnabled = true - $0.font = UIFont(name: fontName, size: 14) - }(UILabel.appearance()) - } - - func setStoriesViewBackgroundColor(color: UIColor) { - _ = { - $0.backgroundColor = .white - }(UICollectionView.appearance()) - } - - func setupFullAppearanceTheme(_ tintColor: UIColor, barTintColor: UIColor) { - _ = { - $0.barTintColor = barTintColor - $0.tintColor = tintColor - $0.titleTextAttributes = [.foregroundColor: tintColor, - ] - }(UINavigationBar.appearance()) - - _ = { - $0.tintColor = nil - }(UINavigationBar.appearance(whenContainedInInstancesOf: [UIDocumentBrowserViewController.self])) - - _ = { - $0.setTitleTextAttributes([.font: UIFont.systemFont(ofSize: 17), ], for: .normal) - $0.setTitleTextAttributes([.font: UIFont.systemFont(ofSize: 15), ], for: .highlighted) - }(UIBarButtonItem.appearance(whenContainedInInstancesOf: [UINavigationBar.self])) - - _ = { - $0.setTitleTextAttributes([.foregroundColor: UIColor.black], for: .normal) - }(UIBarButtonItem.appearance(whenContainedInInstancesOf: [UIImagePickerController.self])) - - _ = { - $0.setTitleColor(.black, for: .normal) - $0.titleLabel?.adjustsFontSizeToFitWidth = true - $0.titleLabel?.minimumScaleFactor = 1.0 - $0.imageView?.contentMode = .scaleAspectFit - $0.isExclusiveTouch = true - $0.adjustsImageWhenHighlighted = false - }(UIButton.appearance()) - - if let aClass = NSClassFromString("UICalloutBarButton")! as? UIButton.Type { - aClass.appearance().setTitleColor(.white, for: .normal) - } - - _ = { - $0.autoresizingMask = [.flexibleWidth, .flexibleHeight] - $0.showsHorizontalScrollIndicator = false - $0.keyboardDismissMode = .onDrag - $0.contentInsetAdjustmentBehavior = .never - }(UIScrollView.appearance()) - - _ = { - $0.separatorInset = .zero - $0.separatorStyle = .singleLine - $0.rowHeight = 60 - $0.backgroundColor = .groupTableViewBackground - $0.estimatedRowHeight = 0.0 - $0.estimatedSectionHeaderHeight = 0.0 - $0.estimatedSectionFooterHeight = 0.0 - }(UITableView.appearance()) - - _ = { - $0.layoutMargins = .zero - $0.separatorInset = .zero - $0.selectionStyle = .none - $0.backgroundColor = .white - }(UITableViewCell.appearance()) - - _ = { - $0.scrollsToTop = false - $0.isPagingEnabled = true - $0.bounces = false - }(UICollectionView.appearance()) - - _ = { - $0.layoutMargins = .zero - $0.backgroundColor = .white - }(UICollectionViewCell.appearance()) - - _ = { - $0.isUserInteractionEnabled = true - }(UIImageView.appearance()) - - _ = { - $0.isUserInteractionEnabled = true - }(UILabel.appearance()) - - _ = { - $0.pageIndicatorTintColor = barTintColor - $0.currentPageIndicatorTintColor = tintColor - $0.isUserInteractionEnabled = true - $0.hidesForSinglePage = true - }(UIPageControl.appearance()) - - _ = { - $0.progressTintColor = barTintColor - $0.trackTintColor = .clear - }(UIProgressView.appearance()) - - _ = { - $0.minimumTrackTintColor = tintColor - $0.autoresizingMask = .flexibleWidth - }(UISlider.appearance()) - - _ = { - $0.onTintColor = tintColor - $0.autoresizingMask = .flexibleWidth - }(UISwitch.appearance()) - } - - var sdkCurrentKeyWindow: UIWindow? { - get { - if #available(iOS 13.0, *) { - return UIApplication.shared.windows.filter({ $0.isKeyWindow }).first - } - return UIApplication.shared.keyWindow ?? UIApplication.shared.windows.first - } - } - - var sdkCurrentViewController: UIViewController? { - guard let rootViewController = UIApplication.shared.keyWindow?.rootViewController else { - return nil - } - - if let presentedViewController = rootViewController.presentedViewController { - if let navigationController = presentedViewController as? UINavigationController { - return navigationController.topViewController - } - return presentedViewController - } - - if let navigationController = rootViewController as? UINavigationController { - return navigationController.topViewController - } - - if let tabBarController = rootViewController as? UITabBarController { - if let navigationController = tabBarController.selectedViewController as? UINavigationController{ - return navigationController.topViewController - } - return tabBarController.viewControllers?.first - } - return nil - - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleAdditional/UIFontDescriptorUsage.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleAdditional/UIFontDescriptorUsage.swift deleted file mode 100644 index 8b13789..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleAdditional/UIFontDescriptorUsage.swift +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleColorScheme.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleColorScheme.swift deleted file mode 100644 index 4600bba..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleColorScheme.swift +++ /dev/null @@ -1,65 +0,0 @@ -import UIKit - -public protocol sdkElement_storiesBlockColorScheme { - var storiesBlockBackgroundColor: UIColor { get set } -} - -public protocol SdkStyleColorScheme { - var storiesBlockSelectFontName: UIFont { get set } - var storiesBlockSelectFontSize: CGFloat { get set } - var storiesBlockFontColor: UIColor { get set } - var storiesBlockBackgroundColor: UIColor { get set } - - var defaultButtonSelectFontName: UIFont { get set } - var defaultButtonSelectFontSize: CGFloat { get set } - var defaultButtonFontColor: UIColor { get set } - var defaultButtonBackgroundColor: UIColor { get set } - - var productsButtonSelectFontName: UIFont { get set } - var productsButtonSelectFontSize: CGFloat { get set } - var productsButtonFontColor: UIColor { get set } - var productsButtonBackgroundColor: UIColor { get set } - - var viewControllerBackground: UIColor { get } - var navigationBarStyle: UIBarStyle { get } - var navigationBarBackgroundColor: UIColor { get } - var navigationBarTextColor: UIColor { get } -} - -public protocol SdkStyleViewColorScheme { - var viewBackgroundColor: UIColor { get } -} - -public protocol SdkStyleLabelColorScheme { - var labelTextColor: UIColor { get } -} - -public protocol SdkStyleButtonColorScheme { - var buttonTintColor: UIColor { get } -} - -public protocol SdkStyleTableViewColorScheme { - var tableViewBackgroundColor: UIColor { get } - var tableViewSeparatorColor: UIColor { get } - var headerBackgroundColor: UIColor { get } - var headerTextColorColor: UIColor { get } - var cellBackgroundColor: UIColor { get } - var cellTextColorColor: UIColor { get } - var cellSubTextColorColor: UIColor { get } -} - -public protocol SdkStyleCollectionViewColorScheme { - var collectionViewBackgroundColor: UIColor { get } - var cellBackgroundColor: UIColor { get } - var cellTextColorColor: UIColor { get } - var cellSubTextColorColor: UIColor { get } -} - -public protocol SdkStyleDatePickerColorScheme { - var datePickerTextColor: UIColor { get } -} - -public protocol SdkStyleRefreshControlColorScheme { - var refreshControlTintColor: UIColor { get } - var refreshControlTextColor: UIColor { get } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleColorSchemeAwareView.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleColorSchemeAwareView.swift deleted file mode 100644 index a0803a0..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleColorSchemeAwareView.swift +++ /dev/null @@ -1,192 +0,0 @@ -import UIKit - -protocol SdkStyleColorSchemeAwareView { - func applyColorScheme(_ colorScheme: SdkStyleColorScheme) - - var shouldDowncastColorScheme: Bool { get } -} - - -extension SdkStyleColorSchemeAwareView { - var shouldDowncastColorScheme: Bool { - return false - } -} - - -extension UILabel: SdkStyleColorSchemeAwareView { - func applyColorScheme(_ colorScheme: SdkStyleColorScheme) { - guard let labelColorScheme = colorScheme as? SdkStyleLabelColorScheme else { - return - } - - if skipColorScheme { - return - } - - textColor = labelColorScheme.labelTextColor - } -} - - -extension UIButton: SdkStyleColorSchemeAwareView { - func applyColorScheme(_ colorScheme: SdkStyleColorScheme) { - guard let buttonColorScheme = colorScheme as? SdkStyleButtonColorScheme else { - return - } - - if skipColorScheme { - return - } - - tintColor = buttonColorScheme.buttonTintColor - } -} - - -extension UITableView: SdkStyleColorSchemeAwareView { - func applyColorScheme(_ colorScheme: SdkStyleColorScheme) { - guard let tableViewColorScheme = colorScheme as? SdkStyleTableViewColorScheme else { - return - } - - if skipColorScheme { - return - } - - backgroundColor = tableViewColorScheme.tableViewBackgroundColor - } - - var shouldDowncastColorScheme: Bool { - return true - } -} - - -extension UICollectionView: SdkStyleColorSchemeAwareView { - func applyColorScheme(_ colorScheme: SdkStyleColorScheme) { - guard let collectionViewColorScheme = colorScheme as? SdkStyleCollectionViewColorScheme else { - return - } - - if skipColorScheme { - return - } - - backgroundColor = collectionViewColorScheme.collectionViewBackgroundColor - } - - var shouldDowncastColorScheme: Bool { - return true - } -} - - -extension UITableViewCell: SdkStyleColorSchemeAwareView { - func applyColorScheme(_ colorScheme: SdkStyleColorScheme) { - guard let tableViewColorScheme = colorScheme as? SdkStyleTableViewColorScheme else { - return - } - - if skipColorScheme { - return - } - - backgroundColor = tableViewColorScheme.cellBackgroundColor - textLabel?.textColor = tableViewColorScheme.cellTextColorColor - detailTextLabel?.textColor = tableViewColorScheme.cellSubTextColorColor - } - - var shouldDowncastColorScheme: Bool { - return true - } -} - - -extension UITableViewHeaderFooterView: SdkStyleColorSchemeAwareView { - func applyColorScheme(_ colorScheme: SdkStyleColorScheme) { - guard let tableViewColorScheme = colorScheme as? SdkStyleTableViewColorScheme else { - return - } - - if skipColorScheme { - return - } - - backgroundView?.backgroundColor = tableViewColorScheme.headerBackgroundColor - textLabel?.textColor = tableViewColorScheme.headerTextColorColor - } -} - - -extension UIDatePicker: SdkStyleColorSchemeAwareView { - func applyColorScheme(_ colorScheme: SdkStyleColorScheme) { - guard let datePickerColorScheme = colorScheme as? SdkStyleDatePickerColorScheme else { - return - } - - if skipColorScheme { - return - } - - setValue(datePickerColorScheme.datePickerTextColor, forKey: "textColor") - } -} - - -extension UIRefreshControl: SdkStyleColorSchemeAwareView { - func applyColorScheme(_ colorScheme: SdkStyleColorScheme) { - guard let refreshControlColorScheme = colorScheme as? SdkStyleRefreshControlColorScheme else { - return - } - - if skipColorScheme { - return - } - - tintColor = refreshControlColorScheme.refreshControlTintColor - titleColor = refreshControlColorScheme.refreshControlTextColor - - updateTitle() - } - - private struct AssociatedKey { - static var key = "titleColor" - } - - public var titleColor: UIColor? { - get { - return objc_getAssociatedObject(self, AssociatedKey.key) as? UIColor - } - set { - objc_setAssociatedObject(self, AssociatedKey.key, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) - updateTitle() - } - } - - public var title: String? { - get { - return attributedTitle?.string - } - set { - guard let newTitle = newValue else { - attributedTitle = nil - return - } - - attributedTitle = NSAttributedString(string: newTitle) - updateTitle() - } - } - - private func updateTitle() { - guard let titleColor = titleColor, - let title = attributedTitle?.string else { - return - } - - let attrTitle = NSAttributedString(string: title, - attributes: [NSAttributedString.Key.foregroundColor: titleColor]) - attributedTitle = attrTitle - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleColorSchemeAwareViewController.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleColorSchemeAwareViewController.swift deleted file mode 100644 index 0cca1cd..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleColorSchemeAwareViewController.swift +++ /dev/null @@ -1,145 +0,0 @@ -import UIKit - -protocol SdkStyleColorSchemeAwareViewController { - func applyColorScheme(_ colorScheme: SdkStyleColorScheme, animated: Bool) -} - - -extension UIViewController: SdkStyleColorSchemeAwareViewController { - func applyColorScheme(_ colorScheme: SdkStyleColorScheme, animated: Bool) { - view.downcastColorScheme(colorScheme, animated: animated) - - SdkStyle.applySdkStyleApperance(animated: animated) { - if let customColorScheme = colorScheme as? SdkStyleCustomColorScheme, - let customColorSchemeAwareSelf = self as? SdkStyleCustomColorSchemeAwareViewController { - customColorSchemeAwareSelf.applyCustomColorScheme(customColorScheme) - } - else if let tableVC = self as? UITableViewController, - let tableViewColorScheme = colorScheme as? SdkStyleTableViewColorScheme { - tableVC.tableView.backgroundColor = tableViewColorScheme.tableViewBackgroundColor - tableVC.tableView.separatorColor = tableViewColorScheme.tableViewSeparatorColor - } - else if let collectionVC = self as? UICollectionViewController, - let collectionViewColorScheme = colorScheme as? SdkStyleCollectionViewColorScheme { - collectionVC.collectionView.backgroundColor = collectionViewColorScheme.collectionViewBackgroundColor - } - else { - if self.view.backgroundColor != nil, - self.view.backgroundColor != UIColor.clear { - self.view.backgroundColor = colorScheme.viewControllerBackground - } - } - - - if self.applyNavBarColors { - self.applyNavigationBarColorScheme(colorScheme) - } - } - } - - func applyNavigationBarColorScheme(_ colorScheme: SdkStyleColorScheme) { - self.navigationController?.navigationBar.barStyle = colorScheme.navigationBarStyle - self.navigationController?.navigationBar.tintColor = colorScheme.navigationBarTextColor - self.navigationController?.navigationBar.barTintColor = colorScheme.navigationBarBackgroundColor - } -} - - -extension UIView { - func downcastColorScheme(_ colorScheme: SdkStyleColorScheme, animated: Bool) { - - if let customColorScheme = colorScheme as? SdkStyleCustomColorScheme, - let customColorSchemeAwareSelf = self as? SdkStyleCustomColorSchemeAwareView { - SdkStyle.applySdkStyleApperance(animated: animated) { - customColorSchemeAwareSelf.applyCustomColorScheme(customColorScheme) - } - if !customColorSchemeAwareSelf.shouldDowncastCustomColorScheme { - return - } - } - - if let colorSchemeAwareSelf = self as? SdkStyleColorSchemeAwareView { - SdkStyle.applySdkStyleApperance(animated: animated) { - colorSchemeAwareSelf.applyColorScheme(colorScheme) - } - - if !colorSchemeAwareSelf.shouldDowncastColorScheme { - return - } - } - - for subview in subviews { - subview.downcastColorScheme(colorScheme, animated: animated) - } - - if type(of: self) == UIView.self, - parentViewController?.view != self, - let viewColorScheme = colorScheme as? SdkStyleViewColorScheme, - backgroundColor != UIColor.clear { - - SdkStyle.applySdkStyleApperance(animated: animated) { - self.backgroundColor = viewColorScheme.viewBackgroundColor - } - } - } -} - - -extension UIView { - var parentViewController: UIViewController? { - var parentResponder: UIResponder? = self - while parentResponder != nil { - parentResponder = parentResponder!.next - if let viewController = parentResponder as? UIViewController { - return viewController - } - } - return nil - } -} - - -extension UIView { - private struct AssociatedKey { - static var key = "skipColorScheme" - } - - public var skipColorScheme: Bool { - get { - return objc_getAssociatedObject(self, AssociatedKey.key) as? Bool ?? false - } - set { - if newValue { - objc_setAssociatedObject(self, AssociatedKey.key, true, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - else { - if let obj = objc_getAssociatedObject(self, AssociatedKey.key) as? Bool { - objc_removeAssociatedObjects(obj) - } - } - } - } -} - - -extension UIViewController { - private struct AssociatedKey { - static var key = "applyNavBarColors" - } - - public var applyNavBarColors: Bool { - get { - return objc_getAssociatedObject(self, AssociatedKey.key) as? Bool ?? true - } - set { - if newValue { - objc_setAssociatedObject(self, AssociatedKey.key, true, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - else { - if let obj = objc_getAssociatedObject(self, AssociatedKey.key) as? Bool { - objc_removeAssociatedObjects(obj) - } - } - } - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleCustomColorScheme.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleCustomColorScheme.swift deleted file mode 100644 index 25a3100..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleCustomColorScheme.swift +++ /dev/null @@ -1,14 +0,0 @@ -import UIKit - -public protocol SdkStyleCustomColorScheme { - var customColors: [String : UIColor] { get } -} - - -extension SdkStyleCustomColorScheme { - public subscript(key: SdkApperanceViewScheme) -> UIColor { - get { - return customColors[key.SdkApperanceViewScheme()] ?? UIColor.black - } - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleCustomColorSchemeAwareView.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleCustomColorSchemeAwareView.swift deleted file mode 100644 index 4d43d80..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleCustomColorSchemeAwareView.swift +++ /dev/null @@ -1,15 +0,0 @@ -import UIKit - -public protocol SdkStyleCustomColorSchemeAwareView { - func applyCustomColorScheme(_ colorScheme: SdkStyleCustomColorScheme) - - var shouldDowncastCustomColorScheme: Bool { get } -} - - -extension SdkStyleCustomColorSchemeAwareView { - public var shouldDowncastCustomColorScheme: Bool { - return false - } -} - diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleCustomColorSchemeAwareViewController.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleCustomColorSchemeAwareViewController.swift deleted file mode 100644 index 97d7a1c..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleColorScheme/SdkStyleCustomColorSchemeAwareViewController.swift +++ /dev/null @@ -1,5 +0,0 @@ -import UIKit - -public protocol SdkStyleCustomColorSchemeAwareViewController { - func applyCustomColorScheme(_ colorScheme: SdkStyleCustomColorScheme) -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleFonts/SdkStyleCustomFontSizeAwareView.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleFonts/SdkStyleCustomFontSizeAwareView.swift deleted file mode 100644 index 0436091..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleFonts/SdkStyleCustomFontSizeAwareView.swift +++ /dev/null @@ -1,5 +0,0 @@ -import UIKit - -public protocol SdkStyleCustomFontsAwareView { - func applySdkCustomFonts(_ fonts: SdkStyleCustomFonts) -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleFonts/SdkStyleCustomFontSizeAwareViewController.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleFonts/SdkStyleCustomFontSizeAwareViewController.swift deleted file mode 100644 index 0347f3b..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleFonts/SdkStyleCustomFontSizeAwareViewController.swift +++ /dev/null @@ -1,34 +0,0 @@ -import UIKit - -protocol SdkStyleCustomFontsAwareViewController { - func applySdkCustomFonts(_ fonts: SdkStyleCustomFonts) -} - - -extension UIViewController: SdkStyleCustomFontsAwareViewController { - func applySdkCustomFonts(_ fonts: SdkStyleCustomFonts) { - if let tableVC = self as? UITableViewController { - for cell in tableVC.tableView.visibleCells { - cell.downcastSdkAllFonts(fonts) - } - tableVC.tableView.reloadData() - } - else { - view.downcastSdkAllFonts(fonts) - } - } -} - - -extension UIView { - func downcastSdkAllFonts(_ fonts: SdkStyleCustomFonts) { - if let sdkCustomFontsAwareSelf = self as? SdkStyleCustomFontsAwareView { - sdkCustomFontsAwareSelf.applySdkCustomFonts(fonts) - return - } - - for subview in subviews { - subview.downcastSdkAllFonts(fonts) - } - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleFonts/SdkStyleCustomFonts.swift b/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleFonts/SdkStyleCustomFonts.swift deleted file mode 100644 index 97ac2a9..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SdkConfiguration/SdkStyle/SdkStyleFonts/SdkStyleCustomFonts.swift +++ /dev/null @@ -1,18 +0,0 @@ -import UIKit - -public protocol SdkStyleCustomFonts { - var customFonts: [String : UIFont] { get set } -} - - -extension SdkStyleCustomFonts { - public subscript(key: SdkApperanceViewScheme) -> UIFont { - get { - return customFonts[key.SdkApperanceViewScheme()] ?? UIFont.systemFont(ofSize: UIFont.systemFontSize) - } - set { - - } - - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SessionQueue/GenericDataTask.swift b/Pods/REES46/REES46/Classes/Extensions/SessionQueue/GenericDataTask.swift deleted file mode 100644 index 31b3e5d..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SessionQueue/GenericDataTask.swift +++ /dev/null @@ -1,54 +0,0 @@ -import Foundation - -public class GenericDataTask: SessionDataTaskProtocol { - - public var sessionTask: URLSessionTask - public var sessionData: Data? - public let sessionIdentifier: Int - - public init(sessionTask: URLSessionTask, sessionData: Data? = nil, sessionIdentifier: Int? = nil) { - self.sessionTask = sessionTask - self.sessionData = sessionData - self.sessionIdentifier = sessionIdentifier ?? sessionTask.taskIdentifier - } - - public var sessionTaskElement: T? { - return sessionDecodable as? T - } - - public var sessionTaskElements: [T] { - return sessionDecodables as? [T] ?? [] - } - - public var sessionDecodable: Decodable? { - do { - guard let sessionData = sessionData else { - return nil - } - - return try JSONDecoder().decode(T.self, from: sessionData) - } catch let error { - debugPrint(error) - return nil - } - } - - public var sessionDecodables: [Decodable] { - do { - guard let data = sessionData else { - return [] - } - - return try JSONDecoder().decode([T].self, from: data) - } catch let error { - debugPrint(error) - return [] - } - } - - public func sessionUpdate(newData: Data) -> SessionDataTaskProtocol { - sessionData = sessionUpdate(data: sessionData, newData: newData) - return self - } - -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SessionQueue/RequestOperation.swift b/Pods/REES46/REES46/Classes/Extensions/SessionQueue/RequestOperation.swift deleted file mode 100644 index 2baa06d..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SessionQueue/RequestOperation.swift +++ /dev/null @@ -1,132 +0,0 @@ -import Foundation - -public enum HTTPMethod: String { - case get = "GET" - case post = "POST" - case put = "PUT" - case delete = "DELETE" - case options = "OPTIONS" - case patch = "PATCH" -} - -public class RequestOperation: SessionOperation { - - public enum RequestError: Error { - case urlError - case operationCancelled - } - - public typealias RequestClosure = (Bool, HTTPURLResponse?, Data?, Error?) -> Void - - public static var globalCachePolicy: URLRequest.CachePolicy = .useProtocolCachePolicy - - private(set) public var task: URLSessionDataTask? - - private(set) public var url: URL? - - private(set) public var query: String = "" - - private(set) public var completeURL: URL? - - private(set) public var timeout: TimeInterval = 10 - - private(set) public var cachePolicy: URLRequest.CachePolicy = globalCachePolicy - - private(set) public var method: HTTPMethod = .get - private(set) public var headers: [String: String] = [:] - private(set) public var body: Data = Data() - - private(set) public var completionHandler: RequestClosure? - - internal var session: URLSession { - return URLSession.shared - } - - private(set) public var request: URLRequest! - - private override init(executionBlock: (() -> Void)? = nil) { - super.init(executionBlock: nil) - } - - public convenience init(url: String, query: [String: String] = [:], timeout: TimeInterval = 10, method: HTTPMethod = .get, cachePolicy: URLRequest.CachePolicy = globalCachePolicy, headers: [String: String] = [:], sdkBody: Data = Data(), completionHandler: RequestClosure? = nil) { - - self.init() - - self.query = SdkQueryBuilder.build(query: query) - - self.url = URL(string: url) - self.completeURL = URL(string: url + self.query) - self.timeout = timeout - self.method = method - self.cachePolicy = cachePolicy - self.headers = headers - self.body = sdkBody - self.completionHandler = completionHandler - } - - public override func execute() { - guard !self.isCancelled else { - if let completionHandler = self.completionHandler { - completionHandler(false, nil, nil, RequestError.operationCancelled) - } - - self.finish() - return - } - - guard let url = self.completeURL else { - if let completionHandler = self.completionHandler { - completionHandler(false, nil, nil, RequestError.urlError) - } - - self.finish() - return - } - - request = URLRequest(url: url, cachePolicy: self.cachePolicy, timeoutInterval: self.timeout) - request.httpMethod = method.rawValue - request.httpBody = body - - for header in self.headers { - request.addValue(header.value, forHTTPHeaderField: header.key) - } - - self.task = self.session.dataTask(with: request) { data, response, error in - if let completionHandler = self.completionHandler { - if let httpResponse = response as? HTTPURLResponse { - var error: Error? = error - let success: Bool = httpResponse.statusCode >= 200 && httpResponse.statusCode < 400 && !self.isCancelled - - if self.isCancelled { - error = RequestError.operationCancelled - } - - completionHandler(success, httpResponse, data, error) - } else { - completionHandler(false, nil, data, error) - } - } - - self.finish() - } - self.task?.resume() - } - - public override func cancel() { - super.cancel() - - self.task?.cancel() - } - - public override func pause() { - super.pause() - - self.task?.suspend() - } - - public override func resume() { - super.resume() - - self.task?.resume() - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SessionQueue/SdkQueryBuilder.swift b/Pods/REES46/REES46/Classes/Extensions/SessionQueue/SdkQueryBuilder.swift deleted file mode 100644 index 5008030..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SessionQueue/SdkQueryBuilder.swift +++ /dev/null @@ -1,17 +0,0 @@ -import Foundation - -internal struct SdkQueryBuilder { - - internal static func build(query: [String: String]) -> String { - var finalCombinatedQuery: String = "" - for (index, parameter) in query.enumerated() { - guard let parameterKey = parameter.key.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed), let parameterValue = parameter.value.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) else { - continue - } - - finalCombinatedQuery += index == 0 ? "?" : "&" - finalCombinatedQuery += parameterKey + "=" + parameterValue - } - return finalCombinatedQuery - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SessionQueue/SessionDataTaskProtocol.swift b/Pods/REES46/REES46/Classes/Extensions/SessionQueue/SessionDataTaskProtocol.swift deleted file mode 100644 index c09dd08..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SessionQueue/SessionDataTaskProtocol.swift +++ /dev/null @@ -1,25 +0,0 @@ -import Foundation - -public protocol SessionDataTaskProtocol { - var sessionTask: URLSessionTask { get } - var sessionData: Data? { get } - var sessionIdentifier: Int { get } - var sessionDecodable: Decodable? { get } - var sessionDecodables: [Decodable] { get } - func sessionUpdate(newData: Data) -> SessionDataTaskProtocol - func sessionUpdate(data: Data? , newData: Data) -> Data -} - - -extension SessionDataTaskProtocol { - - public func sessionUpdate(data: Data? , newData: Data) -> Data { - if var currentData = data { - currentData.append(newData) - return currentData - } - - return newData - } - -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SessionQueue/SessionOperation.swift b/Pods/REES46/REES46/Classes/Extensions/SessionQueue/SessionOperation.swift deleted file mode 100644 index ca19e67..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SessionQueue/SessionOperation.swift +++ /dev/null @@ -1,69 +0,0 @@ -import Foundation - -open class SessionOperation: Operation { - public var executionBlock: (() -> Void)? - - public init(executionBlock: (() -> Void)? = nil) { - super.init() - self.executionBlock = executionBlock - } - - open override var isAsynchronous: Bool { - return true - } - - private var _executing = false { - willSet { - willChangeValue(forKey: "isExecuting") - } - didSet { - didChangeValue(forKey: "isExecuting") - } - } - - open override var isExecuting: Bool { - return _executing - } - - private var _finished = false { - willSet { - willChangeValue(forKey: "isFinished") - } - didSet { - didChangeValue(forKey: "isFinished") - } - } - - open override var isFinished: Bool { - return _finished - } - - open override func start() { - _executing = true - execute() - } - - open func execute() { - if let executionBlock = executionBlock { - executionBlock() - self.finish() - } - } - - public func finish() { - _executing = false - _finished = true - } - - open func pause() {} - - open func resume() {} - - public func addToSharedQueuer() { - SessionQueue.manager.addOperation(self) - } - - public func addToQueue(_ queue: SessionQueue) { - queue.addOperation(self) - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SessionQueue/SessionQueue.swift b/Pods/REES46/REES46/Classes/Extensions/SessionQueue/SessionQueue.swift deleted file mode 100644 index 9a176e5..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SessionQueue/SessionQueue.swift +++ /dev/null @@ -1,99 +0,0 @@ -import Foundation - -open class SessionQueue { - - public static let manager: SessionQueue = SessionQueue(name: "datatasks.sessionQueue") - - //Sample usage with parameters - //private let sessionQueue = SessionQueue.manager - //private let sessionQueue = SessionQueue(name: "datatasks.sessionQueue") - //private let sessionQueue = SessionQueue(name: "datatasks.sessionQueue", maxConcurrentOperationCount: 100) - - public var operationCount: Int { - return self.queue.operationCount - } - - public var operations: [Operation] { - return self.queue.operations - } - - public var qos: QualityOfService { - return .background - } - - public var maxConcurrentOperationCount: Int { - get { - return self.queue.maxConcurrentOperationCount - } - set { - self.queue.maxConcurrentOperationCount = newValue - } - } - - public var isExecuting: Bool { - return !self.queue.isSuspended - } - - public let queue: OperationQueue = OperationQueue() - - public init(name: String, maxConcurrentOperationCount: Int = Int.max) { - self.queue.name = name - self.maxConcurrentOperationCount = maxConcurrentOperationCount - } - - public func addOperation(_ operation: @escaping () -> Void) { - self.queue.addOperation(operation) - } - - public func addOperation(_ operation: Operation) { - self.queue.addOperation(operation) - } - - public func addListOfOperations(_ operations: [Operation], completionHandler: (() -> Void)? = nil) { - for (index, operation) in operations.enumerated() { - if index > 0 { - operation.addDependency(operations[index - 1]) - } - - self.addOperation(operation) - } - - guard let completionHandler = completionHandler else { - return - } - - let completionOperation = BlockOperation(block: completionHandler) - if !operations.isEmpty { - completionOperation.addDependency(operations[operations.count - 1]) - } - self.addOperation(completionOperation) - } - - public func addListOfOperations(_ operations: Operation..., completionHandler: (() -> Void)? = nil) { - self.addListOfOperations(operations, completionHandler: completionHandler) - } - - public func cancelAll() { - self.queue.cancelAllOperations() - } - - public func pause() { - self.queue.isSuspended = true - - for operation in self.queue.operations where operation is SessionOperation { - (operation as? SessionOperation)?.pause() - } - } - - public func resume() { - self.queue.isSuspended = false - - for operation in self.queue.operations where operation is SessionOperation { - (operation as? SessionOperation)?.resume() - } - } - - public func waitUntilAllOperationsAreFinished() { - self.queue.waitUntilAllOperationsAreFinished() - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/SessionQueue/URLSessionQueue.swift b/Pods/REES46/REES46/Classes/Extensions/SessionQueue/URLSessionQueue.swift deleted file mode 100644 index 12e2439..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/SessionQueue/URLSessionQueue.swift +++ /dev/null @@ -1,108 +0,0 @@ -import Foundation - -struct Post: Codable { - let userId: Int - let id: Int - let title: String -} - -public class URLSessionQueue: NSObject, URLSessionDataDelegate { - - private let queue = DispatchQueue(label: "urlsession.datatasks.queue") - - private var dataTasks: [SessionDataTaskProtocol] = [] - - public var taskCompleted: ((_ task: SessionDataTaskProtocol, _ error: Error?) -> Void)? - - public var allTasksCompletedHandler: ((_ tasks: [SessionDataTaskProtocol]) -> Void)? - - open var taskNeedNewBodyStream: ((URLSession, URLSessionTask) -> InputStream?)? - - open var taskNeedNewBodyStreamWithCompletion: ((URLSession, URLSessionTask, (InputStream?) -> Void) -> Void)? - - lazy var session: URLSession = { - let sessionConfiguration = URLSessionConfiguration.default - sessionConfiguration.timeoutIntervalForRequest = 3 - sessionConfiguration.waitsForConnectivity = true - sessionConfiguration.shouldUseExtendedBackgroundIdleMode = true - return URLSession(configuration: sessionConfiguration, delegate: self, delegateQueue: nil) - }() - - public func addTask(dataTask: SessionDataTaskProtocol) { - dataTasks.append(dataTask) - } - - public func addTask(url: URL, lazy: Bool = true) -> GenericDataTask { - let task = createTask(url: url) - let dataTask: GenericDataTask = GenericDataTask(sessionTask: task) - dataTasks.append(dataTask) - return dataTask - } - - public func addTask(request: URLRequest, lazy: Bool = true) -> GenericDataTask { - let task = createTask(request: request) - let dataTask = GenericDataTask(sessionTask: task) - dataTasks.append(dataTask) - return dataTask - } - - public func createTask(url: URL) -> URLSessionDataTask { - return session.dataTask(with: url) - } - - public func createTask(request: URLRequest) -> URLSessionTask { - return session.dataTask(with: request) - } - - public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { - - if let completedTask = queue.sync(execute: { - return dataTasks.first { $0.sessionTask.taskIdentifier == task.taskIdentifier } - }) { - taskCompleted?(completedTask, error) - } - - let completed = queue.sync { - return dataTasks.filter { $0.sessionTask.state == .completed } - } - - let allTasks = queue.sync { - return dataTasks.count - } - - if completed.count == allTasks { - queue.sync { - allTasksCompletedHandler?(dataTasks) - } - } else { - debugPrint("SDK Tasks completed: \(completed.count)/\(dataTasks.count)") - } - } - - public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { - queue.sync { - dataTasks = dataTasks.map { task in - - if task.sessionTask.taskIdentifier == dataTask.taskIdentifier { - return task.sessionUpdate(newData: data) - } - return task - } - } - } - - public func execute(taskCompleted: ((_ task: SessionDataTaskProtocol, _ error: Error?) -> Void)? = nil, allTasksCompletedHandler: ((_ tasks: [SessionDataTaskProtocol]) -> Void)? = nil) { - - if let taskCompleted = taskCompleted { - self.taskCompleted = taskCompleted - } - - if let allTaskCompleted = allTasksCompletedHandler { - self.allTasksCompletedHandler = allTaskCompleted - } - - dataTasks.forEach { dataTask in - dataTask.sessionTask.resume() - } - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/Disk.swift b/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/Disk.swift deleted file mode 100644 index 89f693e..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/Disk.swift +++ /dev/null @@ -1,104 +0,0 @@ -import Foundation - -extension String { - - public func escape() -> String? { - return addingPercentEncoding(withAllowedCharacters: .alphanumerics) - } -} - -private let _ioQueue = DispatchQueue(label: "sdk.storiescollectioncellloader.disk.set") - -public struct Disk { - - let directory = Directory() - let storage = HashStorage() - - public init() { - } - - struct Directory { - - init() { - createDirectory() - } - } -} - - -extension Disk.Directory { - - fileprivate func createDirectory() { - let fileManager = FileManager.default - if fileManager.fileExists(atPath: path) { - return - } - - do { - try fileManager.createDirectory(atPath: path, withIntermediateDirectories: true, attributes: nil) - } catch _ { - } - } - - var path: String { - let cacheDirectory = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true)[0] - let directoryName = "swift.storiescollectioncellloader.disk" - - return cacheDirectory + "/" + directoryName - } -} - - -extension Disk { - - public func cleanUp() { - let manager = FileManager.default - for subpath in manager.subpaths(atPath: directory.path) ?? [] { - let path = directory.path + "/" + subpath - do { - try manager.removeItem(atPath: path) - } catch _ { - } - } - } - - public func get(_ aKey: String) -> Data? { - if let data = storage[aKey] { - return data - } - return (try? Data(contentsOf: URL(fileURLWithPath: _path(aKey)))) - } - - public func get(_ aKey: URL) -> Data? { - guard let key = aKey.absoluteString.escape() else { - return nil - } - - return get(key) - } - - public func _path(_ name: String) -> String { - return directory.path + "/" + name - } - - public func set(_ anObject: Data, forKey aKey: String) { - storage[aKey] = anObject - - let block: () -> Void = { - do { - try anObject.write(to: URL(fileURLWithPath: self._path(aKey)), options: []) - self.storage[aKey] = nil - } catch _ {} - } - - _ioQueue.async(execute: block) - } - - public func set(_ anObject: Data, forKey aKey: URL) { - guard let key = aKey.absoluteString.escape() else { - return - } - - set(anObject, forKey: key) - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/HashStorage.swift b/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/HashStorage.swift deleted file mode 100644 index 5a28496..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/HashStorage.swift +++ /dev/null @@ -1,30 +0,0 @@ -import Foundation - -class HashStorage { - private var items = [K: V]() - public init() {} - public subscript(key: K) -> V? { - get { - objc_sync_enter(HashStorage.self) - defer { objc_sync_exit(HashStorage.self) } - return items[key] - } - set(value) { - objc_sync_enter(HashStorage.self) - defer { objc_sync_exit(HashStorage.self) } - items[key] = value - } - } - - func getKey(_ value: V) -> K? { - var key: K? - items.forEach { k, v in - if v == value { - key = k - } - } - - return key - } - -} diff --git a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/Loader.swift b/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/Loader.swift deleted file mode 100644 index 366920a..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/Loader.swift +++ /dev/null @@ -1,78 +0,0 @@ -import Foundation -import UIKit - -public struct Loader { - - unowned let delegate: StoriesCollectionCellLoader.LoaderManager - let task: URLSessionDataTask - let operative = Operative() - let baseReqUrl: URL - - init(_ task: URLSessionDataTask, reqUrl: URL, delegate: StoriesCollectionCellLoader.LoaderManager) { - self.task = task - self.baseReqUrl = reqUrl - self.delegate = delegate - } - - public var state: URLSessionTask.State { - return task.state - } - - public func resume() { - task.resume() - } - - public func cancel() { - task.cancel() - let reason = "SDK Loader cancel to request: \(baseReqUrl)" - onFailure(with: NSError(domain: "StoriesCollectionCellLoader", code: 0, userInfo: [NSLocalizedFailureReasonErrorKey: reason])) - } - - func complete(with error: Error?) { - if let error = error { - onFailure(with: error) - return - } - - if let image = UIImage.process(data: operative.receiveData) { - onSuccess(with: image) - delegate.disk.set(operative.receiveData, forKey: baseReqUrl) - return - } - - if let statusCode = (task.response as? HTTPURLResponse)?.statusCode, statusCode >= 200, statusCode < 400 { - let reason = "SDK Disconnect on downloading caused by HTTPStatusCode: \(statusCode)" - onFailure(with: NSError(domain: "StoriesCollectionCellLoader", code: statusCode, userInfo: [NSLocalizedFailureReasonErrorKey: reason])) - return - } - - failOnConvertToImage() - } - - private func failOnConvertToImage() { - onFailure(with: NSError(domain: "StoriesCollectionCellLoader", code: -999, userInfo: [NSLocalizedFailureReasonErrorKey: "SDK Failure when convert image"])) - } - - private func onSuccess(with image: UIImage) { - operative.tasks.forEach { task in - task.onCompletion(image, nil, .network) - } - operative.tasks = [] - delegate.remove(self) - } - - private func onFailure(with error: Error) { - operative.tasks.forEach { task in - task.onCompletion(nil, error, .error) - } - operative.tasks = [] - delegate.remove(self) - } -} - - -extension Loader: Equatable {} - -public func == (lhs: Loader, rhs: Loader) -> Bool { - return lhs.task == rhs.task -} diff --git a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/Operative.swift b/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/Operative.swift deleted file mode 100644 index 3879c80..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/Operative.swift +++ /dev/null @@ -1,41 +0,0 @@ -import Foundation -import UIKit - -class Task { - weak var owner: AnyObject? - let onCompletion: (UIImage?, Error?, FetchOperation) -> Void - - init(_ owner: AnyObject?, onCompletion: @escaping (UIImage?, Error?, FetchOperation) -> Void) { - self.owner = owner - self.onCompletion = onCompletion - } -} - -class Operative { - var tasks = [Task]() - var receiveData = Data() - - func remove(_ task: Task) { - guard let index = tasks.firstIndex(of: task) else { - return - } - tasks.remove(at: index) - } - - func update(_ task: Task) { - guard let index = tasks.firstIndex(of: task) else { - tasks.append(task) - return - } - tasks[index] = task - } -} - - -extension Task: Equatable {} - func ==(lhs: Task, rhs: Task) -> Bool { - guard let leftTaskOwner = lhs.owner, let rightTaskOwner = rhs.owner else { - return false - } - return leftTaskOwner.isEqual(rightTaskOwner) -} diff --git a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/Option.swift b/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/Option.swift deleted file mode 100644 index a92425c..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/Option.swift +++ /dev/null @@ -1,13 +0,0 @@ -import Foundation - -public enum FetchOperation { - - case disk - case network - case error - -} - -public enum Option { - case adjustSize -} diff --git a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/SdkImageReloader.swift b/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/SdkImageReloader.swift deleted file mode 100644 index 8ace36d..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/SdkImageReloader.swift +++ /dev/null @@ -1,26 +0,0 @@ -import Foundation -import UIKit - -public struct SdkImageReloader { - - let base: Base - init(_ base: Base) { - self.base = base - } -} - -public protocol SdkImageReloaderCompatible { - associatedtype CompatibleType - var load: SdkImageReloader { get } -} - - -extension SdkImageReloaderCompatible { - - public var load: SdkImageReloader { - return SdkImageReloader(self) - } -} - - -extension UIImageView: SdkImageReloaderCompatible {} diff --git a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/StoriesImageLoader.swift b/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/StoriesImageLoader.swift deleted file mode 100644 index 0cef470..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/StoriesImageLoader.swift +++ /dev/null @@ -1,97 +0,0 @@ -import Foundation -import UIKit - -public struct StoriesCollectionCellLoader { - - @discardableResult - public static func request(with url: URLLiteralConvertible, onCompletion: @escaping (UIImage?, Error?, FetchOperation) -> Void) -> Loader? { - guard let storiesCollectionCellLoaderUrl = url.storiesCollectionCellLoaderURL else { - return nil - } - - let task = Task(nil, onCompletion: onCompletion) - let loader = StoriesCollectionCellLoader.session.getLoader(with: storiesCollectionCellLoaderUrl, task: task) - loader.resume() - - return loader - } - - static var session: StoriesCollectionCellLoader.Session { - return Session.shared - } - - static var manager: StoriesCollectionCellLoader.LoaderManager { - return Session.manager - } - - class Session: NSObject, URLSessionDataDelegate { - - static let shared = Session() - static let manager = LoaderManager() - - func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { - guard let loader = getLoader(with: dataTask) else { - return - } - loader.operative.receiveData.append(data) - } - - func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse, completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) { - completionHandler(.allow) - } - - func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { - guard let loader = getLoader(with: task) else { - return - } - loader.complete(with: error) - } - - func getLoader(with dataTask: URLSessionTask) -> Loader? { - guard let url = dataTask.originalRequest?.url else { - return nil - } - return StoriesCollectionCellLoader.manager.storage[url] - } - - func getLoader(with url: URL, task: Task) -> Loader { - let loader = StoriesCollectionCellLoader.manager.getLoader(with: url) - loader.operative.update(task) - return loader - } - } - - class LoaderManager { - - let session: URLSession - let storage = HashStorage() - var disk = Disk() - - init(configuration: URLSessionConfiguration = .default) { - self.session = URLSession(configuration: .default, delegate: StoriesCollectionCellLoader.session, delegateQueue: nil) - } - - func getLoader(with url: URL) -> Loader { - if let loader = storage[url] { - return loader - } - - let loader = Loader(session.dataTask(with: url), reqUrl: url, delegate: self) - storage[url] = loader - return loader - } - - func getLoader(with url: URL, task: Task) -> Loader { - let loader = getLoader(with: url) - loader.operative.update(task) - return loader - } - - func remove(_ loader: Loader) { - guard let url = storage.getKey(loader) else { - return - } - storage[url] = nil - } - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/URLLiteralConvertible.swift b/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/URLLiteralConvertible.swift deleted file mode 100644 index a719700..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Core/URLLiteralConvertible.swift +++ /dev/null @@ -1,29 +0,0 @@ -import Foundation - -public protocol URLLiteralConvertible { - var storiesCollectionCellLoaderURL: URL? { get } -} - - -extension URL: URLLiteralConvertible { - public var storiesCollectionCellLoaderURL: URL? { - return self - } -} - - -extension URLComponents: URLLiteralConvertible { - public var storiesCollectionCellLoaderURL: URL? { - return url - } -} - - -extension String: URLLiteralConvertible { - public var storiesCollectionCellLoaderURL: URL? { - if let string = addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) { - return URL(string: string) - } - return URL(string: self) - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Extension/CGImageSource+ImageLoader.swift b/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Extension/CGImageSource+ImageLoader.swift deleted file mode 100644 index 934197b..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Extension/CGImageSource+ImageLoader.swift +++ /dev/null @@ -1,28 +0,0 @@ -import Foundation -import UIKit -import ImageIO - -extension CGImageSource { - - internal var imageCount: Int { - return CGImageSourceGetCount(self) - } - - internal func process() -> (images: [UIImage], duration: TimeInterval) { - var images = [UIImage]() - let count = imageCount - let duration: Double = Double(count) * 0.2 - for i in 0 ..< count { - if let cgImage = getCGImage(index: i) { - images.append(UIImage(cgImage: cgImage)) - } - } - - return (images, duration) - } - - internal func getCGImage(index: Int) -> CGImage? { - return CGImageSourceCreateImageAtIndex(self, index, nil) - } - -} diff --git a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Extension/Data+ImageLoader.swift b/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Extension/Data+ImageLoader.swift deleted file mode 100644 index 9ae21af..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Extension/Data+ImageLoader.swift +++ /dev/null @@ -1,43 +0,0 @@ -import Foundation - -extension Data { - - enum FileType { - case png - case jpeg - case gif - case tiff - case webp - case Unknown - } - - internal var fileType: FileType { - let fileHeader = getFileHeader(capacity: 2) - switch fileHeader { - case [0x47, 0x49]: - return .gif - case [0xFF, 0xD8]: - return .jpeg - case [0x89, 0x50]: - return .png - default: - return .Unknown - } - } - - internal func getFileHeader(capacity: Int) -> [UInt8] { - - var pointer = UnsafeMutablePointer.allocate(capacity: capacity) - - (self as NSData).getBytes(pointer, length: capacity) - - var header = [UInt8]() - for _ in 0 ..< capacity { - header.append(pointer.pointee) - pointer += 1 - } - - return header - } - -} diff --git a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Extension/UIColor+Extension.swift b/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Extension/UIColor+Extension.swift deleted file mode 100644 index 4807572..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Extension/UIColor+Extension.swift +++ /dev/null @@ -1,24 +0,0 @@ -import UIKit - -extension String { - func hexToRGB() -> (red: CGFloat, green: CGFloat, blue: CGFloat) { - var hexFormatted: String = self.trimmingCharacters(in: .whitespacesAndNewlines).uppercased() - - if hexFormatted.hasPrefix("#") { - hexFormatted = String(hexFormatted.dropFirst()) - } - - if hexFormatted.count != 6 { - return (0, 0, 0) - } - - var rgb: UInt64 = 0 - Scanner(string: hexFormatted).scanHexInt64(&rgb) - - let red = CGFloat((rgb & 0xFF0000) >> 16) / 255.0 - let green = CGFloat((rgb & 0x00FF00) >> 8) / 255.0 - let blue = CGFloat(rgb & 0x0000FF) / 255.0 - - return (red, green, blue) - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Extension/UIImage+ImageLoader.swift b/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Extension/UIImage+ImageLoader.swift deleted file mode 100644 index 1ef46ff..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Extension/UIImage+ImageLoader.swift +++ /dev/null @@ -1,84 +0,0 @@ -import Foundation -import UIKit -import ImageIO - -private let lock = NSRecursiveLock() - -extension UIImage { - - func adjust(_ size: CGSize, scale: CGFloat, contentMode: UIView.ContentMode) -> UIImage { - lock.lock() - defer { lock.unlock() } - - if images?.count ?? 0 > 1 { - return self - } - - switch contentMode { - case .scaleToFill: - if size.width * scale > self.size.width || size.height * scale > self.size.height { - return self - } - - let fitSize = CGSize(width: size.width * scale, height: size.height * scale) - return render(fitSize) - case .scaleAspectFit: - if size.width * scale > self.size.width || size.height * scale > self.size.height { - return self - } - - let downscaleSize = CGSize(width: self.size.width / scale, height: self.size.height / scale) - let ratio = size.width/downscaleSize.width < size.height/downscaleSize.height ? size.width/downscaleSize.width : size.height/downscaleSize.height - - let fitSize = CGSize(width: downscaleSize.width * ratio * scale, height: downscaleSize.height * ratio * scale) - return render(fitSize) - case .scaleAspectFill: - if size.width * scale > self.size.width || size.height * scale > self.size.height { - return self - } - - let downscaleSize = CGSize(width: self.size.width / scale, height: self.size.height / scale) - let ratio = size.width/downscaleSize.width > size.height/downscaleSize.height ? size.width/downscaleSize.width : size.height/downscaleSize.height - - let fitSize = CGSize(width: downscaleSize.width * ratio * scale, height: downscaleSize.height * ratio * scale) - return render(fitSize) - default: - return self - } - } - - func render(_ size: CGSize) -> UIImage { - lock.lock() - defer { lock.unlock() } - - if size.width == 0 || size.height == 0 { - return self - } - - UIGraphicsBeginImageContext(size) - draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height)) - - return UIGraphicsGetImageFromCurrentImageContext()! - } - - internal static func process(data: Data) -> UIImage? { - switch data.fileType { - case .gif: - guard let source = CGImageSourceCreateWithData(data as CFData, nil) else { - return nil - } - - let result = source.process() - return UIImage.animatedImage(with: result.images, duration: result.duration) - case .png, .jpeg, .tiff, .webp, .Unknown: - return UIImage(data: data) - } - } - - static func decode(_ data: Data) -> UIImage? { - lock.lock() - defer { lock.unlock() } - - return UIImage(data: data) - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Extension/UIImageView+ImageLoader.swift b/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Extension/UIImageView+ImageLoader.swift deleted file mode 100644 index 53901d7..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/Extension/UIImageView+ImageLoader.swift +++ /dev/null @@ -1,82 +0,0 @@ -import UIKit - -private var StoriesCollectionCellLoaderRequestUrlKey = 0 -private let _ioQueue = DispatchQueue(label: "sdk.storiescollectioncellloader.queues", attributes: .concurrent) - -extension UIImageView { - fileprivate var requestUrl: URL? { - get { - var requestUrl: URL? - _ioQueue.sync { - requestUrl = objc_getAssociatedObject(self, &StoriesCollectionCellLoaderRequestUrlKey) as? URL - } - - return requestUrl - } - set(newValue) { - _ioQueue.async { - objc_setAssociatedObject(self, &StoriesCollectionCellLoaderRequestUrlKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - } -} - - -extension SdkImageReloader where Base: UIImageView { - - @discardableResult - public func request(with url: URLLiteralConvertible, options: [Option] = []) -> Loader? { - return request(with: url, placeholder: nil, options: options, onCompletion: { _,_,_ in }) - } - - @discardableResult - public func request(with url: URLLiteralConvertible, options: [Option] = [], onCompletion: @escaping (UIImage?, Error?, FetchOperation) -> Void) -> Loader? { - return request(with: url, placeholder: nil, options: options, onCompletion: onCompletion) - } - - @discardableResult - public func request(with url: URLLiteralConvertible, placeholder: UIImage?, options: [Option] = [], onCompletion: @escaping (UIImage?, Error?, FetchOperation) -> Void) -> Loader? { - guard let storiesCollectionCellLoaderUrl = url.storiesCollectionCellLoaderURL else { - return nil - } - - let imageCompletion: (UIImage?, Error?, FetchOperation) -> Void = { image, error, operation in - guard var image = image else { - return onCompletion(nil, error, operation) - } - - DispatchQueue.main.async { - if options.contains(.adjustSize) { - image = image.adjust(self.base.frame.size, scale: UIScreen.main.scale, contentMode: self.base.contentMode) - } - if let images = image.images, images.count > 0, let gif = UIImage.animatedImage(with: images, duration: 1) { - image = gif - } - self.base.image = image - onCompletion(image, error, operation) - } - } - - let task = Task(base, onCompletion: imageCompletion) - - if let requestUrl = base.requestUrl { - let loader = StoriesCollectionCellLoader.manager.getLoader(with: requestUrl) - loader.operative.remove(task) - if requestUrl != storiesCollectionCellLoaderUrl, loader.operative.tasks.isEmpty { - loader.cancel() - } - } - base.requestUrl = url.storiesCollectionCellLoaderURL - - base.image = placeholder ?? nil - if let data = StoriesCollectionCellLoader.manager.disk.get(storiesCollectionCellLoaderUrl), let image = UIImage.process(data: data) { - task.onCompletion(image, nil, .disk) - return nil - } - - let loader = StoriesCollectionCellLoader.manager.getLoader(with: storiesCollectionCellLoaderUrl, task: task) - loader.resume() - - return loader - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/StoryBlockImageCache.swift b/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/StoryBlockImageCache.swift deleted file mode 100644 index ace629a..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/StoriesImageLoader/StoryBlockImageCache.swift +++ /dev/null @@ -1,166 +0,0 @@ -import Foundation -import UIKit - -public struct StoryBlockImageCache { - enum Error: Swift.Error { - case StoryBlockImageCacheSaveError - } - - public static var internalLogger: ((_ message: String, _ file: String, _ function: String, _ line: Int) -> Void)? - - public static var imageURLProvider: StoryImageURLProviding? - - fileprivate static var urlSession: URLSession = createUrlSession() - - fileprivate static func createUrlSession() -> URLSession { - let config = URLSessionConfiguration.default - config.timeoutIntervalForRequest = 3 - config.waitsForConnectivity = true - let session = URLSession(configuration: config) - return session - } - - @discardableResult public static func image(for key: String, file: String = #file, function: String = #function, line: Int = #line, completion: @escaping (UIImage?) -> Void) -> URLSessionDataTask? { - let dispatchCompletionOnMain: (UIImage?) -> Void = { image in - DispatchQueue.main.async { - completion(image) - } - } - - if let image = inMemoryImage(for: key) { - dispatchCompletionOnMain(image) - - } else if let image = fileSystemImage(for: key) { - inMemory(save: image, for: key) - dispatchCompletionOnMain(image) - - } else { - if let imageURLProvider = imageURLProvider, let url = imageURLProvider.url(for: key) { - let dataTask = urlSession.dataTask(with: url, completionHandler: { (data, response, error) in - if let data = data, let image = UIImage(data: data) { - save(image, for: key) - dispatchCompletionOnMain(image) - } else { - if let error = error, (error as NSError).code != -999 { - print("SDK Error downloading image for block") - } - dispatchCompletionOnMain(nil) - } - }) - dataTask.resume() - return dataTask - - } else { - dispatchCompletionOnMain(nil) - } - } - - return nil - } - - public static func save(_ image: UIImage, for key: String, file: String = #file, function: String = #function, line: Int = #line) -> Void { - inMemory(save: image, for: key) - do { - try fileSystem(save: image, for: key) - } catch { - internalLogger?("SDK Internal Error saving image for key \(key): \(error)", file, function, line) - } - } - - public static func cancelAllDownloads() { - urlSession.invalidateAndCancel() - urlSession = createUrlSession() - } - - public static var shared = StoryBlockImageCache() - public let internalCache = NSCache() - - fileprivate static let cacheDirectory: URL? = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first - - fileprivate init() { - NotificationCenter.default.addObserver(forName: UIApplication.didReceiveMemoryWarningNotification, object: self, queue: OperationQueue.current) { (note) in - StoryBlockImageCache.purgeRecursiveNSCache() - } - } - - fileprivate static func purgeRecursiveNSCache(file: String = #file, function: String = #function, line: Int = #line) { - StoryBlockImageCache.shared.internalCache.removeAllObjects() - } - - fileprivate static func inMemoryImage(for key: String) -> UIImage? { - if let image = StoryBlockImageCache.shared.internalCache.object(forKey: key as NSString) as? UIImage { - return image - } else { - return nil - } - } - - fileprivate static func fileSystemImage(for key: String) -> UIImage? { - if let url = fileUrl(forKey: key), - let data = try? Data(contentsOf: url), - let image = UIImage(data: data) { - return image - } - - return nil - } - - fileprivate static func inMemory(save image: UIImage, for key: String) { - StoryBlockImageCache.shared.internalCache.setObject(image, forKey: key as AnyObject) - } - - fileprivate static func fileSystem(save image: UIImage, for key: String, file: String = #file, function: String = #function, line: Int = #line) throws { -// if let jpeg = image.jpegData(compressionQuality: 1.0), let url = fileUrl(forKey: key) { -// do { -// try jpeg.write(to: url, options: [.atomic]) -// } catch { -// internalLogger?("Error saving image to filesystem for \(key) - \(error)", file, function, line) -// throw Error.StoryBlockImageCacheSaveError -// } -// } - - if let pngAlphaQuality = image.pngData() , let url = fileUrl(forKey: key) { - do { - try pngAlphaQuality.write(to: url, options: [.atomic]) - } catch { - throw Error.StoryBlockImageCacheSaveError - } - } - throw Error.StoryBlockImageCacheSaveError - } - - fileprivate static func fileUrl(forKey key: String) -> URL? { - if let cacheDirectory = cacheDirectory { - let safeKey = key.replacingOccurrences(of: "/", with: "-") - return cacheDirectory.appendingPathComponent("\(safeKey).jpg", isDirectory: false) - } - return nil - } -} - -public protocol StoryImageURLProviding { - func url(for key: String) -> URL? -} - -private var imageTaskKey: Void? -public extension UIImageView { - func setStoryImage(for key: String, file: String = #file, function: String = #function, line: Int = #line) { - let task = StoryBlockImageCache.image(for: key, file: file, function: function, line: line) { image in - self.image = image - } - setImageTask(task) - } - - func cancelStoryImageDownload() { - imageDataTask?.cancel() - setImageTask(nil) - } - - fileprivate var imageDataTask: URLSessionDataTask? { - return objc_getAssociatedObject(self, &imageTaskKey) as? URLSessionDataTask - } - - fileprivate func setImageTask(_ task: URLSessionDataTask?) { - objc_setAssociatedObject(self, &imageTaskKey, task, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/StoriesPreload/PreloadIndicatorProperties/CAPropertyAnimation+Key.swift b/Pods/REES46/REES46/Classes/Extensions/StoriesPreload/PreloadIndicatorProperties/CAPropertyAnimation+Key.swift deleted file mode 100644 index 58fdecc..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/StoriesPreload/PreloadIndicatorProperties/CAPropertyAnimation+Key.swift +++ /dev/null @@ -1,19 +0,0 @@ -import UIKit - -extension CAPropertyAnimation { - enum Key: String { - var path: String { - return rawValue - } - - case flatStart = "strokeStart" - case flatEnd = "strokeEnd" - case flatColor = "strokeColor" - case rotationZ = "transform.rotation.z" - case scale = "transform.scale" - } - - convenience init(key: Key) { - self.init(keyPath: key.path) - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/StoriesPreload/PreloadIndicatorProperties/CGRect+Center.swift b/Pods/REES46/REES46/Classes/Extensions/StoriesPreload/PreloadIndicatorProperties/CGRect+Center.swift deleted file mode 100644 index 7a873b3..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/StoriesPreload/PreloadIndicatorProperties/CGRect+Center.swift +++ /dev/null @@ -1,7 +0,0 @@ -import UIKit - -extension CGRect { - var center: CGPoint { - return CGPoint(x: midX, y: midY) - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/StoriesPreload/PreloadIndicatorProperties/CGSize+Min.swift b/Pods/REES46/REES46/Classes/Extensions/StoriesPreload/PreloadIndicatorProperties/CGSize+Min.swift deleted file mode 100644 index 90546d6..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/StoriesPreload/PreloadIndicatorProperties/CGSize+Min.swift +++ /dev/null @@ -1,7 +0,0 @@ -import UIKit - -extension CGSize { - var min: CGFloat { - return CGFloat.minimum(width, height) - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/StoriesPreload/PreloadIndicatorProperties/UIBezierPath+Circle.swift b/Pods/REES46/REES46/Classes/Extensions/StoriesPreload/PreloadIndicatorProperties/UIBezierPath+Circle.swift deleted file mode 100644 index c40f2de..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/StoriesPreload/PreloadIndicatorProperties/UIBezierPath+Circle.swift +++ /dev/null @@ -1,7 +0,0 @@ -import UIKit - -extension UIBezierPath { - convenience init(center: CGPoint, radius: CGFloat) { - self.init(arcCenter: center, radius: radius, startAngle: 0, endAngle: CGFloat(.pi * 2.0), clockwise: true) - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/StoriesPreload/SdkActivityIndicator.swift b/Pods/REES46/REES46/Classes/Extensions/StoriesPreload/SdkActivityIndicator.swift deleted file mode 100644 index ae2060e..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/StoriesPreload/SdkActivityIndicator.swift +++ /dev/null @@ -1,146 +0,0 @@ -import UIKit - -private let SdkActivityIndicatorKey = "Rotation" - -@IBDesignable open class SdkActivityIndicator: UIView { - @IBInspectable open var lineWidth: CGFloat = 3 { - didSet { - self.flatLayer.lineWidth = lineWidth - } - } - - fileprivate(set) open var flatIsInAnimation = false - - @IBInspectable open var automaticallyStart: Bool = false { - didSet { - if automaticallyStart && self.superview != nil { - self.animate(true) - } - } - } - @IBInspectable open var hideIndicatorWhenStopped: Bool = false { - didSet { - self.isHidden = true - } - } - - @IBInspectable open var indicatorColor: UIColor = UIColor.lightGray { - didSet { - self.flatLayer.strokeColor = indicatorColor.cgColor - } - } - - fileprivate var flatLayer = CAShapeLayer() - - override public init(frame: CGRect) { - super.init(frame: frame) - setupFlat() - } - - required public init?(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - setupFlat() - } - - override open func layoutSubviews() { - super.layoutSubviews() - self.flatLayer.frame = bounds - self.flatLayer.path = self.circlePath().cgPath - } - - override open func willMove(toSuperview newSuperview: UIView?) { - super.willMove(toSuperview: newSuperview) - - if newSuperview != nil { - if self.automaticallyStart { - self.animate(true) - } - } else { - self.animate(false) - } - } - - open func startAnimating() { - self.isHidden = false - self.animate(true) - } - - open func stopAnimating() { - self.isHidden = true - self.animate(false) - } - - fileprivate func animate(_ animated: Bool) { - if animated { - self.isHidden = false - - if self.flatIsInAnimation == false { - if self.flatLayer.animation(forKey: SdkActivityIndicatorKey) == nil { - self.createFlatAnimationLayer(self.flatLayer) - } else { - self.resumeLayer(self.flatLayer) - } - } - - self.flatIsInAnimation = true - - } else { - - self.flatIsInAnimation = false - self.pauseLayer(self.flatLayer) - if self.hideIndicatorWhenStopped { - self.isHidden = true - } - } - } - - fileprivate func pauseLayer(_ layer: CALayer) { - let pausedTime = layer.convertTime(CACurrentMediaTime(), from: nil) - layer.speed = 0 - layer.timeOffset = pausedTime - } - - fileprivate func resumeLayer(_ layer: CALayer) { - let pausedTime = layer.timeOffset - layer.speed = 1 - layer.timeOffset = 0 - layer.beginTime = 0 - let timePreloadPaused = layer.convertTime(CACurrentMediaTime(), from: nil) - pausedTime - layer.beginTime = timePreloadPaused - } - - fileprivate func createFlatAnimationLayer(_ layer: CALayer) { - let flatAniation = CABasicAnimation(keyPath: "transform.rotation.z") - flatAniation.fromValue = NSNumber(value: 0 as Float) - flatAniation.toValue = NSNumber(value: 2 * CGFloat(Double.pi)) - flatAniation.duration = 1.5 - flatAniation.isRemovedOnCompletion = false - flatAniation.repeatCount = Float.infinity - layer.add(flatAniation, forKey: SdkActivityIndicatorKey) - } - - fileprivate func flatCircleFrame() -> CGRect { - let diameter = min(self.flatLayer.bounds.size.width, self.flatLayer.bounds.size.height) - var flatCircleFrame = CGRect(x: 0, y: 0, width: diameter, height: diameter) - flatCircleFrame.origin.x = flatLayer.bounds.midX - flatCircleFrame.midX - flatCircleFrame.origin.y = flatLayer.bounds.midY - flatCircleFrame.midY - - let inset = self.flatLayer.lineWidth / 2 - flatCircleFrame = flatCircleFrame.insetBy(dx: inset, dy: inset) - return flatCircleFrame - } - - fileprivate func circlePath() -> UIBezierPath { - return UIBezierPath(ovalIn: self.flatCircleFrame()) - } - - fileprivate func setupFlat() { - flatLayer.frame = bounds - flatLayer.lineWidth = self.lineWidth - flatLayer.fillColor = UIColor.clear.cgColor - flatLayer.strokeColor = self.indicatorColor.cgColor - flatLayer.strokeEnd = 0.9 - layer.addSublayer(flatLayer) - backgroundColor = UIColor.clear - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/StoriesPreload/StoriesSlideReloadIndicator.swift b/Pods/REES46/REES46/Classes/Extensions/StoriesPreload/StoriesSlideReloadIndicator.swift deleted file mode 100644 index 674a66b..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/StoriesPreload/StoriesSlideReloadIndicator.swift +++ /dev/null @@ -1,147 +0,0 @@ -import UIKit -import QuartzCore - -@IBDesignable -public final class StoriesSlideReloadIndicator: UIView { - public var animationDuration: Double = 1 - public var rotationDuration: Double = 10 - - @IBInspectable - public var numSegments: Int = 12 { - didSet { - updateSegments() - } - } - @IBInspectable - public var strokeColor : UIColor = .white { - didSet { - indSegmentLayer?.strokeColor = strokeColor.cgColor - } - } - @IBInspectable - public var lineWidth : CGFloat = 8 { - didSet { - indSegmentLayer?.lineWidth = lineWidth - updateSegments() - } - } - - public var hidesSlidesWhenStopped: Bool = true - public private(set) var slideIndicatorIsAnimating = false - private weak var indReplicatorLayer: CAReplicatorLayer! - private weak var indSegmentLayer: CAShapeLayer! - - public override init(frame: CGRect) { - super.init(frame: frame) - setupIndicator() - } - - public required init?(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - setupIndicator() - } - - private func setupIndicator() { - let indReplicatorLayer = CAReplicatorLayer() - - layer.addSublayer(indReplicatorLayer) - - let ind_dot = CAShapeLayer() - ind_dot.lineCap = CAShapeLayerLineCap.round - ind_dot.strokeColor = strokeColor.cgColor - ind_dot.lineWidth = lineWidth - ind_dot.fillColor = nil - - indReplicatorLayer.addSublayer(ind_dot) - - self.indReplicatorLayer = indReplicatorLayer - self.indSegmentLayer = ind_dot - } - - override public func layoutSubviews() { - super.layoutSubviews() - - let maxSize = max(0,min(bounds.width, bounds.height)) - indReplicatorLayer.bounds = CGRect(x: 0, y: 0, width: maxSize, height: maxSize) - indReplicatorLayer.position = CGPoint(x: bounds.width / 2, y:bounds.height / 2) - - updateSegments() - } - - private func updateSegments() { - guard numSegments > 0, let indSegmentLayer = indSegmentLayer else { - return - } - - let angle = 2*CGFloat.pi / CGFloat(numSegments) - indReplicatorLayer.instanceCount = numSegments - indReplicatorLayer.instanceTransform = CATransform3DMakeRotation(angle, 0.0, 0.0, 1.0) - indReplicatorLayer.instanceDelay = 1.5*animationDuration/Double(numSegments) - - let maxRadius = max(0,min(indReplicatorLayer.bounds.width, indReplicatorLayer.bounds.height))/2 - let radius: CGFloat = maxRadius - lineWidth / 2 - - indSegmentLayer.bounds = CGRect(x:0, y:0, width: 2*maxRadius, height: 2*maxRadius) - indSegmentLayer.position = CGPoint(x: indReplicatorLayer.bounds.width / 2, y: indReplicatorLayer.bounds.height/2) - - let path = UIBezierPath(arcCenter: CGPoint(x: maxRadius, y: maxRadius), radius: radius, startAngle: -angle/2 - CGFloat.pi/2, endAngle: angle/2 - CGFloat.pi/2, clockwise: true) - - indSegmentLayer.path = path.cgPath - } - - public func startAnimating() { - self.isHidden = false - slideIndicatorIsAnimating = true - - let rotate = CABasicAnimation(keyPath: "transform.rotation") - rotate.byValue = CGFloat.pi*2 - rotate.duration = rotationDuration - rotate.repeatCount = Float.infinity - - let shrinkStart = CABasicAnimation(keyPath: "strokeStart") - shrinkStart.fromValue = 0.0 - shrinkStart.toValue = 0.5 - shrinkStart.duration = animationDuration - shrinkStart.autoreverses = true - shrinkStart.repeatCount = Float.infinity - shrinkStart.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut) - - let shrinkEnd = CABasicAnimation(keyPath: "strokeEnd") - shrinkEnd.fromValue = 1.0 - shrinkEnd.toValue = 0.5 - shrinkEnd.duration = animationDuration - shrinkEnd.autoreverses = true - shrinkEnd.repeatCount = Float.infinity - shrinkEnd.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut) - - let fade = CABasicAnimation(keyPath: "lineWidth") - fade.fromValue = lineWidth - fade.toValue = 0.0 - fade.duration = animationDuration - fade.autoreverses = true - fade.repeatCount = Float.infinity - fade.timingFunction = CAMediaTimingFunction(controlPoints: 0.55, 0.0, 0.45, 1.0) - - indReplicatorLayer.add(rotate, forKey: "rotate") - indSegmentLayer.add(shrinkStart, forKey: "start") - indSegmentLayer.add(shrinkEnd, forKey: "end") - indSegmentLayer.add(fade, forKey: "fade") - } - - public func stopAnimating() { - slideIndicatorIsAnimating = false - - indReplicatorLayer.removeAnimation(forKey: "rotate") - indSegmentLayer.removeAnimation(forKey: "start") - indSegmentLayer.removeAnimation(forKey: "end") - indSegmentLayer.removeAnimation(forKey: "fade") - - if hidesSlidesWhenStopped { - self.isHidden = true - } - } - - public override var intrinsicContentSize: CGSize { - return CGSize(width: SdkConfiguration.stories.storiesSlideReloadIndicatorSize, height: SdkConfiguration.stories.storiesSlideReloadIndicatorSize) - } -} diff --git a/Pods/REES46/REES46/Classes/Extensions/UserDefaultsExtension.swift b/Pods/REES46/REES46/Classes/Extensions/UserDefaultsExtension.swift deleted file mode 100644 index 2f27015..0000000 --- a/Pods/REES46/REES46/Classes/Extensions/UserDefaultsExtension.swift +++ /dev/null @@ -1,63 +0,0 @@ -import Foundation - -struct User:Codable { - let slideId:String - let slideUrl:String -} - -@propertyWrapper - - struct UserDefault { - let key: String - let defaultValue: T - - init(_ key: String, defaultValue: T) { - self.key = key - self.defaultValue = defaultValue - } - - var wrappedValue: T { - get { - - if let data = UserDefaults.standard.object(forKey: key) as? Data, - let user = try? JSONDecoder().decode(T.self, from: data) { - return user - - } - - return defaultValue - } - set { - if let encoded = try? JSONEncoder().encode(newValue) { - UserDefaults.standard.set(encoded, forKey: key) - } - } - } - } - -enum GlobalSettings { - @UserDefault("user", defaultValue: User(slideId:"", slideUrl:"")) static var user: User -} - - -extension UserDefaults { - - public struct Key { - fileprivate let name: String - public init(_ name: String) { - self.name = name - } - } - - public func getValue(for key: Key) -> Any? { - return object(forKey: key.name) - } - - public func setValue(_ value: Any?, for key: Key) { - set(value, forKey: key.name) - } - - public func removeValue(for key: Key) { - removeObject(forKey: key.name) - } -} diff --git a/Pods/REES46/REES46/Classes/Model/CartItem.swift b/Pods/REES46/REES46/Classes/Model/CartItem.swift deleted file mode 100644 index cbf79ce..0000000 --- a/Pods/REES46/REES46/Classes/Model/CartItem.swift +++ /dev/null @@ -1,16 +0,0 @@ -import Foundation - -public struct CartItem { - var productId: String - var quantity: Int = 1 - - public init(productId: String, quantity: Int = 1) { - self.productId = productId - self.quantity = quantity - } - - public init(json: [String: Any]) { - self.productId = json["uniqid"] as? String ?? "" - self.quantity = json["quantity"] as? Int ?? 1 - } -} diff --git a/Pods/REES46/REES46/Classes/Model/InitResponse.swift b/Pods/REES46/REES46/Classes/Model/InitResponse.swift deleted file mode 100644 index 9794c7c..0000000 --- a/Pods/REES46/REES46/Classes/Model/InitResponse.swift +++ /dev/null @@ -1,57 +0,0 @@ -public struct InitResponse: Codable { - var deviceId: String = "" - var seance: String = "" - var currency: String = "" - var search: Search = Search() - - init(json: [String: Any]) { - deviceId = json["did"] as? String ?? "" - seance = json["seance"] as? String ?? "" - currency = json["currency"] as? String ?? "" - if let search = json["search"] as? [String: Any] { - self.search = Search(json: search) - } - } - - init() { - } -} - -struct Search: Codable { - var enable: Int = 0 - var landing: String = "" - var settings: Settings = Settings() - - init(json: [String: Any]) { - enable = json["enabled"] as? Int ?? 0 - landing = json["landing"] as? String ?? "" - let settings = json["settings"] as? [String: Any] ?? [:] - self.settings = Settings(json: settings) - } - - init() { - } -} - -struct Settings: Codable { - var categoriesTitle: String = "" - var itemsTitle: String = "" - var lastProductTitle: String = "" - var lastQueriesTitle: String = "" - var redirects: [String: String] = [:] - var suggestionTitles: String = "" - var showAllTitle: String = "" - - init(json: [String: Any]) { - categoriesTitle = json["categories_title"] as? String ?? "" - itemsTitle = json["items_title"] as? String ?? "" - lastProductTitle = json["last_products_title"] as? String ?? "" - lastQueriesTitle = json["last_queries_title"] as? String ?? "" - redirects = json["redirects"] as? [String: String] ?? [:] - suggestionTitles = json["suggestions_title"] as? String ?? "" - showAllTitle = json["show_all_title"] as? String ?? "" - } - - init() { - } -} diff --git a/Pods/REES46/REES46/Classes/Model/ProductsResponse.swift b/Pods/REES46/REES46/Classes/Model/ProductsResponse.swift deleted file mode 100644 index 107e074..0000000 --- a/Pods/REES46/REES46/Classes/Model/ProductsResponse.swift +++ /dev/null @@ -1,114 +0,0 @@ -import Foundation - -public struct ProductsListResponse { - public var brands: [String]? - public var filters: [String: Filter]? - public var priceRange: PriceRange? - public var products: [Product] - public var productsTotal: Int - - init(json: [String: Any]) { - if let brandsJSON = json["brands"] as? [[String: Any]] { - var brandsResult = [String]() - for item in brandsJSON { - if let name = item["name"] as? String { - brandsResult.append(name) - } - } - self.brands = brandsResult - } - - if let filtersJSON = json["filters"] as? [String: Any] { - var filtersResult = [String: Filter]() - for item in filtersJSON { - if let dict = item.value as? [String: Any] { - filtersResult[item.key] = Filter(json: dict) - } - } - self.filters = filtersResult - } - - if let priceRangeJSON = json["price_range"] as? [String: Any] { - self.priceRange = PriceRange(json: priceRangeJSON) - } - - let prods = json["products"] as? [[String: Any]] ?? [] - var prodsTemp = [Product]() - for item in prods { - prodsTemp.append(Product(json: item)) - } - products = prodsTemp - - productsTotal = (json["products_total"] as? Int) ?? 0 - } -} - -public struct ProductInfo { - public var id: String = "" - public var name: String = "" - public var brand: String = "" - public var model: String = "" - public var description: String = "" - public var imageUrl: String = "" - public var resizedImageUrl: String = "" - public var resizedImages: [String: String] = [:] - public var url: String - public var deeplinkIos: String - - public var categories: [Category] - - public var price: Double - public var priceFormatted: String - public var priceFull: Double - public var priceFullFormatted: String - public var oldPrice: Double - public var oldPriceFormatted: String - public var oldPriceFull: Double - public var oldPriceFullFormatted: String - - public var currency: String - public var salesRate: Int = 0 - public var discount: Int = 0 - public var relativeSalesRate: Float = 0.0 - public var barcode: String = "" - public var isNew: Bool? - public var params: [[String: Any]]? - - init(json: [String: Any]) { - - id = json["uniqid"] as? String ?? "" - name = json["name"] as? String ?? "" - brand = json["brand"] as? String ?? "" - model = json["model"] as? String ?? "" - description = json["description"] as? String ?? "" - imageUrl = json["image_url"] as? String ?? "" - resizedImageUrl = json["picture"] as? String ?? "" - resizedImages = json["image_url_resized"] as? [String: String] ?? [:] - url = json["url"] as? String ?? "" - deeplinkIos = json["deeplink_ios"] as? String ?? "" - - let categoriesJson = json["categories"] as? [[String: Any]] ?? [] - var categoriesAll = [Category]() - for item in categoriesJson { - categoriesAll.append(Category(json: item)) - } - categories = categoriesAll - - price = json["price"] as? Double ?? 0 - priceFormatted = json["price_formatted"] as? String ?? "" - priceFull = json["price_full"] as? Double ?? 0 - priceFullFormatted = json["price_full_formatted"] as? String ?? "" - oldPrice = json["oldprice"] as? Double ?? 0 - oldPriceFormatted = json["oldprice_formatted"] as? String ?? "" - oldPriceFull = json["oldprice_full"] as? Double ?? 0 - oldPriceFullFormatted = json["oldprice_full_formatted"] as? String ?? "" - currency = json["currency"] as? String ?? "" - barcode = json["barcode"] as? String ?? "" - isNew = json["is_new"] as? Bool - params = json["params"] as? [[String: Any]] - - discount = json["discount"] as? Int ?? 0 - salesRate = json["sales_rate"] as? Int ?? 0 - relativeSalesRate = json["relative_sales_rate"] as? Float ?? 0.0 - } -} diff --git a/Pods/REES46/REES46/Classes/Model/RecommendResponse.swift b/Pods/REES46/REES46/Classes/Model/RecommendResponse.swift deleted file mode 100644 index 741572b..0000000 --- a/Pods/REES46/REES46/Classes/Model/RecommendResponse.swift +++ /dev/null @@ -1,199 +0,0 @@ -import Foundation - -struct Constants { - struct JSONKeys { - static let recommends = "recommends" - static let title = "title" - static let locations = "locations" - static let id = "id" - static let barcode = "barcode" - static let name = "name" - static let brand = "brand" - static let model = "model" - static let description = "description" - static let imageUrl = "image_url" - static let picture = "picture" - static let url = "url" - static let deeplinkIos = "deeplink_ios" - static let price = "price" - static let priceFormatted = "price_formatted" - static let priceFull = "price_full" - static let priceFullFormatted = "price_full_formatted" - static let oldPrice = "oldprice" - static let oldPriceFormatted = "oldprice_formatted" - static let oldPriceFull = "oldprice_full" - static let oldPriceFullFormatted = "oldprice_full_formatted" - static let currency = "currency" - static let salesRate = "sales_rate" - static let relativeSalesRate = "relative_sales_rate" - static let discount = "discount" - static let rating = "rating" - static let image_url_resized = "image_url_resized" - static let categories = "categories" - static let withLocations = "with_locations" - static let extended = "extended" - static let fashionOriginalSizes = "fashion_original_sizes" - static let fashionSizes = "fashion_sizes" - static let fashionColors = "fashion_colors" - static let params = "params" - } - - struct RecommendedBy { - static let recommendedBy = "recommended_by" - static let recommendedCode = "recommended_code" - static let webPushDigestCode = "web_push_digest_code" - } -} - -public struct RecommenderResponse { - public var recommended: [Recommended] - public var title: String = "" - public var locations: [Location]? - - init(json: [String: Any]) { - let recs = json[Constants.JSONKeys.recommends] as? [[String: Any]] ?? [] - var recsTemp = [Recommended]() - for item in recs { - recsTemp.append(Recommended(json: item)) - } - recommended = recsTemp - title = (json[Constants.JSONKeys.title] as? String) ?? "" - - if let locationsArray = json[Constants.JSONKeys.locations] as? [[String: Any]] { - var locationsTemp = [Location]() - for locationItem in locationsArray { - locationsTemp.append(Location(json: locationItem)) - } - locations = locationsTemp - } - } -} - -public struct Recommended { - public var id: String = "" - public var barcode: String = "" - public var name: String = "" - public var brand: String = "" - public var model: String = "" - public var description: String = "" - public var imageUrl: String = "" - public var resizedImageUrl: String = "" - public var url: String = "" - public var deeplinkIos: String = "" - public var categories = [Category]() - public var locations = [Location]() - - public var price: Double = 0 - public var priceFormatted: String? - public var priceFull: Double = 0 - public var priceFullFormatted: String? - public var oldPrice: Double = 0 - public var oldPriceFormatted: String? - public var oldPriceFull: Double = 0 - public var oldPriceFullFormatted: String? - - public var currency: String = "" - public var salesRate: Int = 0 - public var discount: Int = 0 - public var rating: Int = 0 - public var relativeSalesRate: Float = 0.0 - public var paramsRaw: [[String: Any]]? - public var fashionOriginalSizes: [String] = [] - public var fashionSizes: [String] = [] - public var fashionColors: [String] = [] - public var resizedImages: [String: String] = [:] - - init(json: [String: Any]) { - id = json[Constants.JSONKeys.id] as? String ?? "" - barcode = json[Constants.JSONKeys.barcode] as? String ?? "" - name = json[Constants.JSONKeys.name] as? String ?? "" - brand = json[Constants.JSONKeys.brand] as? String ?? "" - model = json[Constants.JSONKeys.model] as? String ?? "" - description = json[Constants.JSONKeys.description] as? String ?? "" - imageUrl = json[Constants.JSONKeys.imageUrl] as? String ?? "" - resizedImageUrl = json[Constants.JSONKeys.picture] as? String ?? "" - url = json[Constants.JSONKeys.url] as? String ?? "" - deeplinkIos = json[Constants.JSONKeys.deeplinkIos] as? String ?? "" - price = json[Constants.JSONKeys.price] as? Double ?? 0 - priceFormatted = json[Constants.JSONKeys.priceFormatted] as? String - priceFull = json[Constants.JSONKeys.priceFull] as? Double ?? 0 - priceFullFormatted = json[Constants.JSONKeys.priceFullFormatted] as? String - oldPrice = json[Constants.JSONKeys.oldPrice] as? Double ?? 0 - oldPriceFormatted = json[Constants.JSONKeys.oldPriceFormatted] as? String - oldPriceFull = json[Constants.JSONKeys.oldPriceFull] as? Double ?? 0 - oldPriceFullFormatted = json[Constants.JSONKeys.oldPriceFullFormatted] as? String - currency = json[Constants.JSONKeys.currency] as? String ?? "" - salesRate = json[Constants.JSONKeys.salesRate] as? Int ?? 0 - relativeSalesRate = json[Constants.JSONKeys.relativeSalesRate] as? Float ?? 0.0 - discount = json[Constants.JSONKeys.discount] as? Int ?? 0 - rating = json[Constants.JSONKeys.rating] as? Int ?? 0 - resizedImages = json[Constants.JSONKeys.image_url_resized] as? [String: String] ?? [:] - - let categoriesArray = json[Constants.JSONKeys.categories] as? [[String: Any]] ?? [] - var categoriesTemp = [Category]() - for item in categoriesArray { - categoriesTemp.append(Category(json: item)) - } - categories = categoriesTemp - - if let withLocations = json[Constants.JSONKeys.withLocations] as? Bool, withLocations, - let extended = json[Constants.JSONKeys.extended] as? Bool, extended, - let locationsArray = json[Constants.JSONKeys.locations] as? [[String: Any]] { - self.locations = locationsArray.map { Location(json: $0) } - } - - if let locationsArray = json[Constants.JSONKeys.locations] as? [[String: Any]] { - var locationsTemp = [Location]() - for item in locationsArray { - locationsTemp.append(Location(json: item)) - } - locations = locationsTemp - } - - fashionOriginalSizes = json[Constants.JSONKeys.fashionOriginalSizes] as? [String] ?? [] - fashionSizes = json[Constants.JSONKeys.fashionSizes] as? [String] ?? [] - fashionColors = json[Constants.JSONKeys.fashionColors] as? [String] ?? [] - - // TODO: convert to objects - paramsRaw = json[Constants.JSONKeys.params] as? [[String: Any]] - - } -} - -public enum RecommendedByCase: String { - case dynamic = "dynamic" - case chain = "chain" - case transactional = "transactional" - case fullSearch = "full_search" - case instantSearch = "instant_search" - case bulk = "bulk" - case webPushDigest = "web_push_digest" - - func getCodeField() -> String { - switch self { - case .webPushDigest: - return Constants.RecommendedBy.webPushDigestCode - default: - return Constants.RecommendedBy.recommendedCode - } - } -} - -public class RecomendedBy { - - var code: String = "" - var type: RecommendedByCase = .chain - - public init(type: RecommendedByCase, code: String) { - self.type = type - self.code = code - } - - func getParams() -> [String: String] { - let params = [ - Constants.RecommendedBy.recommendedBy: type.rawValue, - type.getCodeField(): code - ] - return params - } -} diff --git a/Pods/REES46/REES46/Classes/Model/SearchResponse.swift b/Pods/REES46/REES46/Classes/Model/SearchResponse.swift deleted file mode 100644 index 5b8c9f2..0000000 --- a/Pods/REES46/REES46/Classes/Model/SearchResponse.swift +++ /dev/null @@ -1,287 +0,0 @@ -import Foundation - -public struct Filter { - public var count: Int - public var values: [String: Int] - - init(json: [String: Any]) { - self.count = json["count"] as? Int ?? 0 - self.values = json["values"] as? [String: Int] ?? [:] - } -} - -public struct IndustrialFilters { - public var fashionSizes: [FashionSizes] - public var fashionColors: [FashionColors] - - init(json: [String: Any]) { - let sizes = json["fashion_sizes"] as? [[String: Any]] ?? [] - var fashionSizesTemp = [FashionSizes]() - for item in sizes { - fashionSizesTemp.append(FashionSizes(json: item)) - } - fashionSizes = fashionSizesTemp - - let colors = json["colors"] as? [[String: Any]] ?? [] - var fashionColorsTemp = [FashionColors]() - for item in colors { - fashionColorsTemp.append(FashionColors(json: item)) - } - fashionColors = fashionColorsTemp - } -} - -public struct FashionSizes { - public var count: Int - public var size: String - - init(json: [String: Any]) { - self.count = json["count"] as? Int ?? 0 - self.size = json["size"] as? String ?? "" - } -} - -public struct FashionColors { - public var count: Int - public var color: String - - init(json: [String: Any]) { - self.count = json["count"] as? Int ?? 0 - self.color = json["color"] as? String ?? "" - } -} - -public struct PriceRange { - public var min: Double - public var max: Double - - init(json: [String: Any]) { - self.min = json["min"] as? Double ?? 0 - self.max = json["max"] as? Double ?? 0 - } -} - -public struct Suggest { - public var name: String - public var url: String - public var deeplinkIos: String - - init(json: [String: Any]) { - self.name = json["name"] as? String ?? "" - self.url = json["url"] as? String ?? "" - self.deeplinkIos = json["deeplink_ios"] as? String ?? "" - } -} - -public struct SearchBlankResponse { - public var lastQueries: [Query] - public var suggests: [Suggest] - public var lastProducts: Bool - public var products: [Product] - - init(json: [String: Any]) { - let lastQueriesTemp = json["last_queries"] as? [[String: Any]] ?? [] - var quyArr = [Query]() - for item in lastQueriesTemp { - quyArr.append(Query(json: item)) - } - lastQueries = quyArr - - let suggestsTemp = json["suggests"] as? [[String: Any]] ?? [] - var sugArr = [Suggest]() - for item in suggestsTemp { - sugArr.append(Suggest(json: item)) - } - suggests = sugArr - - lastProducts = json["last_products"] as? Bool ?? true - - let productsTemp = json["products"] as? [[String: Any]] ?? [] - var productArr = [Product]() - for item in productsTemp { - productArr.append(Product(json: item)) - } - products = productArr - } -} - -public struct Redirect { - public var query: String = "" - public var redirectUrl: String = "" - public var deeplink: String? - public var deeplinkIos: String? - - init(json: [String: Any]) { - self.query = json["query"] as? String ?? "" - self.redirectUrl = json["redirect_link"] as? String ?? "" - self.deeplink = json["deep_link"] as? String - self.deeplinkIos = json["deeplink_ios"] as? String - } -} - -public struct SearchResponse { - public var categories: [Category] - public var products: [Product] - public var productsTotal: Int - public var queries: [Query] - public var filters: [String: Filter]? - public var industrialFilters: IndustrialFilters? - public var brands: [String]? - public var priceRange: PriceRange? - public var redirect: Redirect? - - init(json: [String: Any]) { - let cats = json["categories"] as? [[String: Any]] ?? [] - var catsTemp = [Category]() - for item in cats { - catsTemp.append(Category(json: item)) - } - categories = catsTemp - - let prods = json["products"] as? [[String: Any]] ?? [] - var prodsTemp = [Product]() - for item in prods { - prodsTemp.append(Product(json: item)) - } - products = prodsTemp - - let quers = json["queries"] as? [[String: Any]] ?? [] - var quersTemp = [Query]() - for item in quers { - quersTemp.append(Query(json: item)) - } - queries = quersTemp - - productsTotal = (json["products_total"] as? Int) ?? 0 - - if let filtersJSON = json["filters"] as? [String: Any] { - var filtersResult = [String: Filter]() - for item in filtersJSON { - if let dict = item.value as? [String: Any] { - filtersResult[item.key] = Filter(json: dict) - } - } - self.filters = filtersResult - } - - if let brandsJSON = json["brands"] as? [[String: Any]] { - var brandsResult = [String]() - for item in brandsJSON { - if let name = item["name"] as? String { - brandsResult.append(name) - } - } - self.brands = brandsResult - } - - if let industrialFiltersJSON = json["industrial_filters"] as? [String: Any] { - self.industrialFilters = IndustrialFilters(json: industrialFiltersJSON) - } - - if let priceRangeJSON = json["price_range"] as? [String: Any] { - self.priceRange = PriceRange(json: priceRangeJSON) - } - - if let redirectJSON = json["search_query_redirects"] as? [String: Any] { - self.redirect = Redirect(json: redirectJSON) - } - } -} - -public struct Product { - public var id: String = "" - public var barcode: String = "" - public var name: String = "" - public var brand: String = "" - public var model: String = "" - public var description: String = "" - public var imageUrl: String = "" - public var resizedImageUrl: String = "" - public var resizedImages: [String: String] = [:] - public var url: String - public var deeplinkIos: String - - public var price: Double - public var priceFormatted: String - public var priceFull: Double - public var priceFullFormatted: String - public var oldPrice: Double - public var oldPriceFormatted: String - public var oldPriceFull: Double - public var oldPriceFullFormatted: String - - public var currency: String - public var salesRate: Int = 0 - public var discount: Int = 0 - public var relativeSalesRate: Float = 0.0 - public var isNew: Bool? - public var params: [[String: Any]]? - - init(json: [String: Any]) { - id = json["id"] as? String ?? "" - barcode = json["barcode"] as? String ?? "" - name = json["name"] as? String ?? "" - brand = json["brand"] as? String ?? "" - model = json["model"] as? String ?? "" - description = json["description"] as? String ?? "" - imageUrl = json["image_url"] as? String ?? "" - resizedImageUrl = json["picture"] as? String ?? "" - resizedImages = json["image_url_resized"] as? [String: String] ?? [:] - url = json["url"] as? String ?? "" - deeplinkIos = json["deeplink_ios"] as? String ?? "" - - price = json["price"] as? Double ?? 0 - priceFormatted = json["price_formatted"] as? String ?? "" - priceFull = json["price_full"] as? Double ?? 0 - priceFullFormatted = json["price_full_formatted"] as? String ?? "" - oldPrice = json["oldprice"] as? Double ?? 0 - oldPriceFormatted = json["oldprice_formatted"] as? String ?? "" - oldPriceFull = json["oldprice_full"] as? Double ?? 0 - oldPriceFullFormatted = json["oldprice_full_formatted"] as? String ?? "" - currency = json["currency"] as? String ?? "" - isNew = json["is_new"] as? Bool - params = json["params"] as? [[String: Any]] - - discount = json["discount"] as? Int ?? 0 - salesRate = json["sales_rate"] as? Int ?? 0 - relativeSalesRate = json["relative_sales_rate"] as? Float ?? 0.0 - } -} - -public struct Query { - public var name: String - public var url: String - public var deeplinkIos: String - - init(json: [String: Any]) { - name = json["name"] as? String ?? "" - url = json["url"] as? String ?? "" - deeplinkIos = json["deeplink_ios"] as? String ?? "" - } -} - -public struct Category { - public var id: String = "" - public var name: String = "" - public var url: String? - public var alias: String? - public var parentId: String? - - init(json: [String: Any]) { - id = json["id"] as? String ?? "" - name = json["name"] as? String ?? "" - url = json["url"] as? String - alias = json["alias"] as? String - parentId = json["parent"] as? String - } -} - -public struct Location { - public var id: String = "" - public var name: String = "" - - init(json: [String: Any]) { - id = json["id"] as? String ?? "" - name = json["name"] as? String ?? "" - } -} diff --git a/Pods/REES46/REES46/Classes/Model/Stories.swift b/Pods/REES46/REES46/Classes/Model/Stories.swift deleted file mode 100644 index 8101e2d..0000000 --- a/Pods/REES46/REES46/Classes/Model/Stories.swift +++ /dev/null @@ -1,447 +0,0 @@ -import Foundation -import UIKit -import AVFoundation - -public class StoryContent { - var id: String - let ids: Int - let settings: StoriesSettings - let stories: [Story] - - public init(json: [String: Any]) { - self.id = json["id"] as? String ?? "-1" - self.ids = json["id"] as? Int ?? -1 - let _settings = json["settings"] as? [String: Any] ?? [:] - self.settings = StoriesSettings(json: _settings) - let _stories = json["stories"] as? [[String: Any]] ?? [] - self.stories = _stories.map({Story(json: $0)}) - - if let ids = json["id"] as? Int { - self.id = String(ids) - } - } -} - - -// MARK: - Settings -public class StoriesSettings { - let color: String - let fontSize: Int - let avatarSize: Int - let closeColor: String - let borderViewed, backgroundPin, borderNotViewed: String - let backgroundProgress: String - let pinSymbol: String - - public init(json: [String: Any]) { - self.color = json["color"] as? String ?? "" - self.fontSize = json["font_size"] as? Int ?? 12 - self.avatarSize = json["avatar_size"] as? Int ?? 20 - self.closeColor = json["close_color"] as? String ?? "" - self.borderViewed = json["border_viewed"] as? String ?? "" - self.backgroundPin = json["background_pin"] as? String ?? "" - self.borderNotViewed = json["border_not_viewed"] as? String ?? "" - self.backgroundProgress = json["background_progress"] as? String ?? "" - self.pinSymbol = json["pin_symbol"] as? String ?? "" - } -} - - -// MARK: - Story -class Story { - var id: String - let ids: Int - let avatar: String - let viewed: Bool - let startPosition: Int - let name: String - let pinned: Bool - let slides: [Slide] - - public init(json: [String: Any]) { - self.id = json["id"] as? String ?? "-1" - self.ids = json["id"] as? Int ?? -1 - self.avatar = json["avatar"] as? String ?? "" - self.viewed = json["viewed"] as? Bool ?? false - self.startPosition = json["start_position"] as? Int ?? 0 - self.name = json["name"] as? String ?? "" - self.pinned = json["pinned"] as? Bool ?? false - let _slides = json["slides"] as? [[String: Any]] ?? [] - self.slides = _slides.map({Slide(json: $0)}) - - if let ids = json["id"] as? Int { - self.id = String(ids) - } - } -} - - -// MARK: - Slide -class Slide { - var id: String - var duration: Int - let background: String - let backgroundColor: String - let preview: String? - let ids: Int - let type: SlideType - let elements: [StoriesElement] - var videoURL: URL? = nil - var downloadedImage: UIImage? = nil - var previewImage: UIImage? = nil - - public let vDownloadManager = VideoDownloadManager.shared - var sdkDirectoryName: String = "SDKCacheDirectory" - - public init(json: [String: Any]) { - self.id = json["id"] as? String ?? "-1" - self.ids = json["id"] as? Int ?? -1 - self.duration = json["duration"] as? Int ?? 10 - self.background = json["background"] as? String ?? "" - self.backgroundColor = json["background_color"] as? String ?? "" - self.preview = json["preview"] as? String - let _type = json["type"] as? String ?? "" - self.type = SlideType(rawValue: _type) ?? .unknown - let _elements = json["elements"] as? [[String: Any]] ?? [] - self.elements = _elements.map({StoriesElement(json: $0)}) - - if let ids = json["id"] as? Int { - self.id = String(ids) - } - - if type == .video { - if preview != nil { - setImage(imageURL: preview!, isPreview: true) - } else { - print("SDK Success video preview for \(self.id) is downloaded") - } - - downloadVideo { result in - switch result { - case .success(let url): - self.videoURL = url - self.completionCached(slideWithId: self.id, actualSlideUrl: "") - case .failure(let error): - print("SDK Video for \(self.id) is not downloaded with error \(error.localizedDescription)") - } - } - - } else if type == .image { - setImage(imageURL: self.background, isPreview: false) - } else { - self.completionCached(slideWithId: self.id, actualSlideUrl: "") - } - } - - func downloadVideo(completion: @escaping (Result) -> Void) { - - guard let url = URL(string: self.background) else { - completion(.failure(NSError(domain: "SDK Invalid URL", code: -1, userInfo: nil))) - return - } - - let temporaryDirectoryURL = URL(fileURLWithPath: NSTemporaryDirectory()) - let temporaryFileURL = temporaryDirectoryURL.appendingPathComponent("\(self.id).mp4") - - let fileManager = FileManager.default - if fileManager.fileExists(atPath: temporaryFileURL.path) { - completion(.success(temporaryFileURL)) - //print("SDK Load cached video for story id = \(self.id)") - return - } - - let request = URLRequest(url: url) - _ = self.vDownloadManager.downloadStoryMediaFile(withRequest: request, - inDirectory: sdkDirectoryName, - shouldDownloadInBackground: true, - //shouldDownloadInBackground: false, - onProgress: {(progress) in - }) {(error, url) in - if let error = error { - print("Error is \(error as NSError)") - } else { - if let url = url { - do { - try fileManager.moveItem(at: url, to: temporaryFileURL) - - let duration = AVURLAsset(url: temporaryFileURL).duration.seconds - let vTime = String(format:"%d", Int(duration.truncatingRemainder(dividingBy: 60))) - //print(vTime) - - DispatchQueue.main.async { - SdkGlobalHelper.sharedInstance.saveVideoParamsToDictionary(parentSlideId: self.id, paramsDictionary: [self.id : vTime]) - } - - //print("SDK Downloaded video for story id = \(self.id)") - completion(.success(temporaryFileURL)) - } catch { - completion(.failure(error)) - } - } - } - } - } - - func getVideoData(from fileURL: URL) -> Data? { - do { - let videoData = try Data(contentsOf: fileURL) - return videoData - } catch { - print("SDK Error reading video data: \(error)") - return nil - } - } - - private func setImage(imageURL: String, isPreview: Bool) { - guard let url = URL(string: imageURL) else { - return - } - - StoryBlockImageCache.image(for: url.absoluteString) { cachedImage in - if isPreview { - self.previewImage = cachedImage - //print("Downloaded preview for image for video story with id = \(self.id)") - } else { - self.downloadedImage = cachedImage - } - - if cachedImage != nil { - self.completionCached(slideWithId: self.id, actualSlideUrl: "") - //print("SDK Load cached image for story id = \(String(describing: self.id))") - } else { - let task = URLSession.shared.dataTask(with: url, completionHandler: { data, _, error in - if error == nil { - guard let unwrappedData = data, let image = UIImage(data: unwrappedData) else { - return - } - if isPreview { - self.previewImage = image - } else { - self.downloadedImage = image - - StoryBlockImageCache.save(image, for: url.absoluteString) - self.completionCached(slideWithId: self.id, actualSlideUrl: "") - //print("SDK Downloaded image for story id = \(self.id)") - } - } - }) - task.resume() - } - } - } - - private func completionCached(slideWithId: String, actualSlideUrl: String) { - let storySlideMediaId = "cached.slide." + slideWithId - - var slidesDownloadedArray: [String] = UserDefaults.standard.getValue(for: UserDefaults.Key(storySlideMediaId)) as? [String] ?? [] - let slideWithIdExists = slidesDownloadedArray.contains(where: { - $0.range(of: storySlideMediaId) != nil - }) - - if !slideWithIdExists { - slidesDownloadedArray.append(storySlideMediaId) - UserDefaults.standard.setValue(slidesDownloadedArray, for: UserDefaults.Key(storySlideMediaId)) - } - - let userInfo = ["url": actualSlideUrl] as [String: Any] - NotificationCenter.default.post(name:Notification.Name(storySlideMediaId), object: userInfo) - } -} - - -// MARK: - Slide -public class StoriesElement { - public var link: String? - public var deeplinkIos: String? - let uID: String? - let fontType: FontType? - let fontSize: Double? - let textItalic: Bool? - let textBackgroundColorOpacity: String? - let textBackgroundColor: String? - let textColor: String? - let textInput: String? - let textAlignment: TextAlignment? - let textLineSpacing: Double? - let yOffset: Double? - let type: ElementType - let color: String? - let title, linkIos: String? - let textBold: Bool? - let background: String? - let cornerRadius: Int - let labels: Labels? - let products: [StoriesProduct]? - let product: StoriesPromoCodeElement? - - public init(json: [String: Any]) { - self.link = json["link"] as? String - self.deeplinkIos = json["deeplink_ios"] as? String - self.fontType = FontType(rawValue: json["font_type"] as? String ?? "") - self.fontSize = Double(json["font_size"] as? String ?? "") - self.textItalic = json["italic"] as? Bool ?? false - self.textBackgroundColorOpacity = json["text_background_color_opacity"] as? String - self.textBackgroundColor = json["text_background_color"] as? String ?? "" - self.textColor = json["text_color"] as? String ?? "" - self.textInput = json["text_input"] as? String - self.textAlignment = TextAlignment(rawValue: json["text_align"] as? String ?? TextAlignment.left.rawValue) - self.textLineSpacing = Double(json["text_line_spacing"] as? String ?? "1.5") - self.yOffset = Double(json["y_offset"] as? String ?? "") - self.uID = json["uniqid"] as? String - let _type = json["type"] as? String ?? "" - self.type = ElementType(rawValue: _type) ?? .unknown - self.color = json["color"] as? String - self.title = json["title"] as? String - self.linkIos = json["link_ios"] as? String - self.textBold = json["text_bold"] as? Bool ?? json["bold"] as? Bool - self.background = json["background"] as? String - self.cornerRadius = json["corner_radius"] as? Int ?? 12 - let _labels = json["labels"] as? [String: Any] ?? [:] - self.labels = Labels(json: _labels) - let _products = json["products"] as? [[String: Any]] ?? [] - self.products = _products.map({StoriesProduct(json: $0)}) - let _product = json["item"] as? [String: Any] ?? [:] - self.product = StoriesPromoCodeElement(json: _product) - } -} - - -// MARK: - Promocodes -public class StoriesPromoCodeElement { - let id, name, brand, price_full, price_formatted, price_full_formatted, image_url, picture, currency: String - let url: String - let deeplinkIos: String - let price: Int - let oldprice: Int - let oldprice_full, oldprice_formatted, oldprice_full_formatted: String - let discount_percent: Int - let price_with_promocode_formatted: String - let promocode: String - let image_url_resized: PromoCodeElementImagesResize? - - public init(json: [String: Any]) { - self.id = json["id"] as? String ?? "" - self.name = json["name"] as? String ?? "" - self.url = json["url"] as? String ?? "" - self.deeplinkIos = json["deeplink_ios"] as? String ?? "" - self.brand = json["brand"] as? String ?? "" - self.image_url = json["image_url"] as? String ?? "" - self.price = json["price"] as? Int ?? 0 - self.price_formatted = json["price_formatted"] as? String ?? "" - self.price_full = json["price_full"] as? String ?? "" - self.price_full_formatted = json["price_full_formatted"] as? String ?? "" - self.picture = json["picture"] as? String ?? "" - self.currency = json["currency"] as? String ?? "" - self.oldprice = json["oldprice"] as? Int ?? 0 - self.oldprice_full = json["oldprice_full"] as? String ?? "" - self.oldprice_formatted = json["oldprice_formatted"] as? String ?? "" - self.oldprice_full_formatted = json["oldprice_full_formatted"] as? String ?? "" - self.discount_percent = json["discount_percent"] as? Int ?? 0 - self.price_with_promocode_formatted = json["price_with_promocode_formatted"] as? String ?? "" - self.promocode = json["promocode"] as? String ?? "" - let _image_url_resized = json["image_url_resized"] as? [String: Any] ?? [:] - self.image_url_resized = PromoCodeElementImagesResize(json: _image_url_resized) - } -} - - -// MARK: - Carousel Product -public class StoriesProduct { - let name: String - let currency: String - let price: Int - let price_full: Int - let price_formatted, price_full_formatted: String - let oldprice: Int? - let oldprice_full: Int - let oldprice_formatted, oldprice_full_formatted: String - let picture: String - let discount: String? - let discount_formatted: String? - let category: StoriesCategory - public var url: String - public var deeplinkIos: String - - public init(json: [String:Any]) { - self.name = json["name"] as? String ?? "" - self.currency = json["currency"] as? String ?? "" - self.price = json["price"] as? Int ?? 0 - self.price_full = json["price_full"] as? Int ?? 0 - self.price_formatted = json["price_formatted"] as? String ?? "" - self.price_full_formatted = json["price_full_formatted"] as? String ?? "" - self.oldprice = json["oldprice"] as? Int ?? 0 - self.oldprice_full = json["oldprice_full"] as? Int ?? 0 - self.oldprice_formatted = json["oldprice_formatted"] as? String ?? "" - self.oldprice_full_formatted = json["oldprice_full_formatted"] as? String ?? "" - self.url = json["url"] as? String ?? "" - self.deeplinkIos = json["deeplink_ios"] as? String ?? "" - self.picture = json["picture"] as? String ?? "" - self.discount = json["discount"] as? String ?? "" - self.discount_formatted = json["discount_formatted"] as? String ?? "0%" - let _category = json["category"] as? [String: Any] ?? [:] - self.category = StoriesCategory(json: _category) - } -} - - -// MARK: - Carousel Labels -class Labels { - let hideCarousel, showCarousel: String - - public init(json: [String: Any]) { - self.hideCarousel = json["hide_carousel"] as? String ?? "" - self.showCarousel = json["show_carousel"] as? String ?? "" - } -} - - -// MARK: - Stories Category -class StoriesCategory { - let name: String - let url: String - - public init(json: [String: Any]) { - self.name = json["name"] as? String ?? "" - self.url = json["url"] as? String ?? "" - } -} - -// MARK: - Image Resized -public class PromoCodeElementImagesResize { - let image_url_resized220: String - let image_url_resized310: String - let image_url_resized520: String - - public init(json: [String:Any]) { - self.image_url_resized220 = json["220"] as? String ?? "" - self.image_url_resized310 = json["310"] as? String ?? "" - self.image_url_resized520 = json["520"] as? String ?? "" - } -} - -enum ElementType: String { - case button = "button" - case products = "products" - case product = "product" - case textBlock = "text_block" - case unknown -} - -public enum FontType: String { - case monospaced - case serif - case sansSerif = "sans-serif" - case unknown -} - -enum SlideType: String { - case image = "image" - case video = "video" - case unknown = "" -} - -enum TextAlignment: String { - case left - case right - case center -} diff --git a/Pods/REES46/REES46/Classes/Model/UserSettings.swift b/Pods/REES46/REES46/Classes/Model/UserSettings.swift deleted file mode 100644 index b4e2125..0000000 --- a/Pods/REES46/REES46/Classes/Model/UserSettings.swift +++ /dev/null @@ -1,96 +0,0 @@ -import Foundation - -public enum Gender: String{ - case male - case female -} - - -public struct UserPayloadResponse { - - public var notifications: [UserNotificationsResponse] - - init(json: [String: Any]) { - let notificationsArray = json["messages"] as? [[String: Any]] ?? [] - var notificationsTemp = [UserNotificationsResponse]() - for item in notificationsArray { - notificationsTemp.append(UserNotificationsResponse(json: item)) - } - notifications = notificationsTemp - } -} - - -public struct UserNotificationsResponse { - - public var type: String? - public var codeId: String? - public var dateString: String? - public var dateSentAt: String? - public var subject: String? - public var bodyData: String? - public var url: String? - public var icon: String? - public var picture: String? - public var campaignsIds: [String]? - public var statistics: [UserNotificationsStatistics] - - init(json: [String: Any]) { - self.type = json["type"] as? String ?? "" - self.codeId = json["code"] as? String ?? "" - self.dateString = json["date"] as? String ?? "" - self.dateSentAt = json["sent_at"] as? String ?? "" - self.subject = json["subject"] as? String ?? "" - self.bodyData = json["body"] as? String ?? "" - self.url = json["url"] as? String ?? "" - self.icon = json["icon"] as? String ?? "" - self.picture = json["picture"] as? String ?? "" - - if let campaignsArr = json["campaign_id"] as? [[String: Any]] { - var campaigns = [String]() - for item in campaignsArr { - if let name = item["name"] as? String { - campaigns.append(name) - } - } - self.campaignsIds = campaigns - } - - let allStats = json["statistics"] as? [[String: Any]] ?? [] - var statItemsTemp = [UserNotificationsStatistics]() - for item in allStats { - statItemsTemp.append(UserNotificationsStatistics(json: item)) - } - statistics = statItemsTemp - } -} - - -public struct UserNotificationsStatistics { - - let opened: Bool? - let clicked: Bool? - let hardBounced: Bool? - let softBounced: Bool? - let complained: Bool? - let unsubscribed: Bool? - let purchased: Bool? - - init(json: [String: Any]) { - opened = json["opened"] as? Bool - clicked = json["clicked"] as? Bool - hardBounced = json["hardBounced"] as? Bool - softBounced = json["softBounced"] as? Bool - complained = json["complained"] as? Bool - unsubscribed = json["unsubscribed"] as? Bool - purchased = json["purchased"] as? Bool - } -} - - -/* -public enum SearchType: String { - case full - case instant -} -*/ diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.swift b/Pods/REES46/REES46/Classes/Resources/Assets.swift deleted file mode 100644 index 5ae77dd..0000000 --- a/Pods/REES46/REES46/Classes/Resources/Assets.swift +++ /dev/null @@ -1 +0,0 @@ -// NOT SHOWING THIS FILE IN THE SWIFT PACKAGE diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/Contents.json b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleDownBlack.imageset/Contents.json b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleDownBlack.imageset/Contents.json deleted file mode 100644 index f9f5b6f..0000000 --- a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleDownBlack.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "angleDownBlack_1x.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleDownBlack.imageset/angleDownBlack_1x.png b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleDownBlack.imageset/angleDownBlack_1x.png deleted file mode 100644 index f961cd2e80d6b2a46fc73ee515e5c4984555f8c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2968 zcmcIm3s4hh9$x`Vz*b)31tQ0=-!) zg`hy(Y{+(H>(gmYw8|M?WCgj~Y6spB6u-o6XSh7U1+#+5Y||pcEo}&F=C#N=r5@MY zlZ0GzYKcQwQ?k;)mE>_69$AtA$Gd3&U=>^p?6z8LPTH+S#&Bt1dmm#6Jm%uc(;|sp zLO5HW0VjzL0oKTIl*4fxj?>7AID#YNj0`J-Nt`4xT#XSblq6||lBNiF;)ei22XCZT z>y}T@fjcdd>vGv?3@a)sk{2oDqQis{8jS|SNsJ^>;DI`eZ7#-*+MIJH5p;r+bC~Te zvuK08hzu(hxU>imJ06AA?t`^CCo%(<{WP{b~?!+FfP$y5Jk&mtuiJh!z3lg;aEMxnQh)67Cf~?&@nDSi-5W*P&^JL zDFXrOM$&|O5w4(deB4zp@@8Z4k6nR>n#RfRxq`mo85i@j&OApOMTeCEA)Bp?Nxnd@y`E09IbDp66Vh~A1Vk-2n|WFzFh&JKs?azk#iEo7*P!45 zj*<#B!QyI_T2PNi0oLn8uE1Mc@A~mh=S2=+e84-g65s1XPai?T+NKqSjMPEfgmL(aB5aX65f9P zj(HL#5ya;NrF2fr%QD6^VOh)x{|kIP<{b{O2p+e_fw1Q@0s@eyRI^t>@dWQ0A>XF} z9_vz?;k?tQML2KU2|P0K*!+z8yig`4))(ap0Q5P{IL_`AjjkfbAtahWEnlGBv7eIf zWD1`zo>NdH$Ep-4#Sk1ykvNYsoEj8V#c>3uX4EV}O$Pr=@k&~$m>iE^CVnC{TrOiX z3E+#4A-_DF7n_xFoj(re2h;v*hBMZx<9&wxum#87J@w6>>}Rl%cun6X25x-YpkM=; za)3=PB7fI?2nv{k9d{ZBHhgFy(2Hbye|3kti(AN%XIA-v*z_)Z*@NE(iVN%B|dyK zS5#bc4t9-pX=8@pKXsz8WpC8BBhjwF^jR}sD@(4($wadMDEWVxpAEQc*8U~y;n$}; z+j6FjgxF^v`uHDplD?NZcKo??xKu3NEo?t@r!ANdySmHjF?s0z*@?aJBOgJd0VBxB zg63(tQ~nzMM7h|LuuIgnHSBEnv@LB34JjSo@x`gFkB{B;JBi(1H+nBG=76%Zx~;H9 z8=9H2B0O_Xour+yJ@hMD_@p4@u{*yZGqT_)5_akDFQ4m)i8+=IZD0Q2P6EE(qTW>B z2PHt?RHZJTf3iBIXY^Z%I}R@1o1(vR(DUx>{h77DRXxh==J)NV^Iw(*o*4{3 zkQZ}$S4q&ukS$5uZyopd)vVLeUk3EPp8okh&*7l`9Tgj{ zXI+ZQ$r>zcnAg-U9U0xh@2%c8{}Vqf5~G{yVT)`qB0{AX+xuiwy}LIXv6A+jrsH>Hy)$CqtvBq|%iis*_uHIWcj}g8+MctiF+)blAb~(tnGjxAXClRzl~z!WPyfm@Zumab4@`Xb%5P zgm8CmYp)@4&D<^ko@bKSa+WSbUjHZSj?Zj`r$ z$(m}n9{u=(^pL~Xq_U>P!>d>IL`I*hp|cIj);}G-^{?O0ZElpZt13<9vgV!(^*6JJ z%K2;ej~ZkPkDS=Ku{6HF;;pvQ8d*u`v6z8yrRD1V4=n!E{qllBO8TIcH8*zWYrYN~ w2ot)aI&Qze;6lBwIW|o8dO%h9uWH^1OOPU8+9c)RFE#|FC9l+-T$WSzU*{Sm^Z)<= diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleDownWhite.imageset/Contents.json b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleDownWhite.imageset/Contents.json deleted file mode 100644 index 89054af..0000000 --- a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleDownWhite.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "angleDownWhite_1x.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleDownWhite.imageset/angleDownWhite_1x.png b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleDownWhite.imageset/angleDownWhite_1x.png deleted file mode 100644 index 3611d3668d7b19df691a28a4d808034738dd1a30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1494 zcmbVMU1%Id9A80;O$jJ%p$NjTJ%UJ@z@(rKblSRrwjW&YFRe!zop$Y=uRZkZ^=*1=445n8S zI=?bgB`b@>@zvvxfnyyc2tvv+=!C5(MIBe|@glL7pA8lCAbinPC#6BK;LU;(ODJ%3 zs1XPuupQmBO=8(~TzeE)(6S6TZkR_k%R>1gDwtq!sKQ|4*U?=0iGexs=BiE3V`LcZ zc3W@fb(S;?({UUFT83q50->edh~thHrH6+MWtx&ChxzxXp4q4;;F!z88&V*&eA6P8|v)$Ee1q%JukCy zTVKL3Gm-MCWg%k_klUiuYB#3F98K9$Lg>`8aPzQK6Qfc>F=t7YvDPqGvqP7GRnQ@L z$ipOvq=<)iZJ}k%sjG^-yCM3)5)Sh z(?KfI)gAQ2JUus9wF1zq1B8jJZ&xKUvD8-wpMyJ&K%chVq=NJx(%pxptj^mwp_2^} zt^ZI^hH&4Iz1UY`{8eP{->$wL!o@I<%WM#dmu!^LNX)N945~kJ_biJcccD_Atd3v& z<%@SmR>6HAUw`q3T)`>){z~XhY;AT+=jV5FUmsY1_QIDtJNE0}Zk8_VKYqIP({oo} zxVH7?m6v{gWZ&w0>-gIBl`-|RLu0GwZls^AN8i8tzPG*h!KJZ-CpVOjj+{Ar<;>bw z-+UK7xp#a1jfL*PQ?rwA;ZyHSTs`spo@ai$xq0*a=c$srf8uoR<^51j-pbTW`R&Kg GuKfx1MB`Zi diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleUpBlack.imageset/Contents.json b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleUpBlack.imageset/Contents.json deleted file mode 100644 index 1b9dfd5..0000000 --- a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleUpBlack.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "angleUpBlack_1x.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleUpBlack.imageset/angleUpBlack_1x.png b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleUpBlack.imageset/angleUpBlack_1x.png deleted file mode 100644 index b6e736bab506cd9fa2b0864577e146e036a3a9a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2941 zcmcIm3s4hh9#0AaL9j(n1ms=4 zLB!V9*6IP$9@-v0VCZ?&o}O*Am2!3jy{XfR)iTsaAGXx0h@9H{0wJ}nwO*%}nce;G z?*IG!e*f2gsmn-T8Xh_$R3edtr>5w$z;(6v2nhmb)9iP)f{V_fF zNQopE<4n0?t}%_IdApoqcrz<6u{(jcM6xik#7WTwtO%J|E9cO`g9qP&A&$|(E8>lq z(V5KVb17?FZ1$RT6TPN@)-rHn0<^G%1ORqcq@WVJ%^{E_I(QV91h)4v3PYnVVu21$ z@)AP1#tbN#cd?LGjv+LLVUSuY$JIDZs4bK^4k9puKrs!9s}O=974f7JhkQR65V{x( znWbOiqXTz3IA0W{OTFXZz-0quYNJpzzjqtVZCPc3%4pF$7~#UKn{Lhk7;m`a^2n#Bryk&9*x z#X#m9Z!}Ia*~L;K?=tbcZM;?)XRNLE;#xB);bg`i7xI>Svu9nzZmPI|V}K?39&7oenDu z`4dSd^ETcEh=DrAs0yQzOmzq%<)GPAy$%LZ%Q=oAaRygt7z#sF8kG`JDzs)q8&6}1 zg4R$f6&7!?u$J-ldY&%w*4DdztkW5u1{mM5VhVy%tCT8)QfQQjic!)Cr2)B7nF%JI zWiX7OiE*^YT^txT%62!ZR~6$`g;}&L4z!pp1db?Ka57UC4T5P@@ia?o%qjx+_Vahl z<0wfWJ^_?c@XgC&%IdRhT*ChXzYz5f2UrA+Sz|!x{TTrP$a4zkRZ!~V&1MVz3ZT(0 zB`MlFeL9%-wjImBzQ^3X>hmC(@U3^}vjFry%{ay`@D|Zcx!5EtsO1B+JNi@d1*-V| z;%SAFpv@`;qNH#dQ4$z~P_zaVR7KM`XfTZ#SB?jNPx0|&ykdMjewlb*YUq5*VP(M= z9ff~+I1e@}V>*8v&JU*j*9>R0Rmb`a{b37^zPsz2Ki`8&$ZAZ4 zLZ%J9);%k4&z3*6yu5xIoEtI_u%l3x(1FeVs_V3&d&eXC=%ZIQ*Y$jIuB_*y?StC~ zgVXoBd-%$i4qdvkz&fKXXQJX(dB+Lqw({H;LZ;1o%21b=3IEz={qE0OPv)CW9$%7| zh%Fg*?DNF*cR>r<&R^cf%{_Iko$L0$dg_(i zlP*V^E=}9A>6Axz;IU(UaUErkNOMh9UDd(Yw!YB$+y46ZlX6XbSM{oHG^U`px;Hz> zoO$+%fVAuR-362PK*UFr0t53At>0Q$w_1WCc z_xdJJ*=D%?ZXoyZ&h*D_w6SaVwR*_@;=1$G?Fvs1A^pQ|HU_wZ=f2vwcco$N%%V*8 zMrsT*wa>czxwk0Y#oX|w=&-WoS7pwbAMTS>xYx^6QGT`rijt2DUF<*4MZwt7~rI^>=DLM<4xW z1uNrZ9bv<*=dTK$r2fT!TYuzGJuhnT5n&r)>!__AmJNvSV*N zTpr#u&vdySGk%!%aC2zwn;Q!^gsXdN(Abotfq!|nQQf}6Bh91FUTiHMdZ_9`%93-( zZI4EESA~C>GL*61AT1BLb$U*O5cX-PYnJN7x2Bu<{|P9XK7n$4YC2mPW_x@PQfIGQ zRrAl%==Q4WTkLpf){~)It()I0&^Pc)IaoZo( diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleUpWhite.imageset/Contents.json b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleUpWhite.imageset/Contents.json deleted file mode 100644 index 59c5af8..0000000 --- a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleUpWhite.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "angleUpWhite_1x.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleUpWhite.imageset/angleUpWhite_1x.png b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/angleUpWhite.imageset/angleUpWhite_1x.png deleted file mode 100644 index 2cf53de6841425c2edcc4c3467f11f0dda68d159..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1689 zcmbVNU1%It6rT9grqPICDN!gLrU;78-1*zxnIU5ucUQCMq-na?1bpb-J9l=*?93hK z-efmXL4E5(@uhuGD@YN2ky^3fgO&zF5b>eV$3Ezb4?;@c1W~AW_Gf4$si6zA^Y`6z zzVCeJo;kBH|MKL-Qxk$9Og83fi~M{rKgRd*|FdTfPx8}&bZ(gn!Xr=Q$C&WZg(*RJ z_=l*u#Fo5Q9YkUU`lN-GUYv5YAWYBnQixVC6I-|)C9ZV)yK9md`L1-TQgY^G&p|f^1)!c|n}+IXpm&85DbQC!tQymHKfVew{xClGul^6<3&_@L>UClcEGmZs~N)eHBR$rt|oP=8HS8xO+q>&uNFp>Mcq_X z@fi=ID9J@Ud)E?NgABV8_sx*iimaJUweOpuKc^awst%wY@uOgUC#b18rSdi??;9U7 z_`hHuIRVLH$R$THY-5lnZAmN&=~PLFWIQovXY^Tkp3_Jug9*Zonk#YDN)-8y9at5p z1xPk4W?43Ir6pT|s>#?wC98zWra4r>*VhPI&AlD1_xXAs`?~ELfox!eWz*0t*)p*& z>t)?);h<&cEi}r1Jd61Df}Q)0lW)4bDV({8a=X@td*UR1b9mK>#C{(*5as>tN+>rL z`_k}nv_l2x9(E64lmx5`Gd$bo)!IWtf!*j+xOQ*yd$VtM^4l8l{>TqY zi$a*RF`t=0%H@E3v^|Mjf@?yfO3g7evyUlwzf-xQM>Cp>h<=kBjhUiA6Qe!Eed zZCYnd;E>Bf2)V$<|k#=yWhjeP|lki%FUuT$NOr5#n|Cq8@t}9ViY>LQ?k5XDP43<9c>3u=$rsJ3O!R1#) zSKfTNN@1gBqwJKH;|VEGSa(0Yc279%6C+za*ZUTCrtQ04C2Do-_-b*duB4mgf}WAX zeh)_8*)k`-u2q;7Dw00mKI*c*TIFLsw~c|CtNFP^cAT6Mk{Zu(j$7r;fyjfa%APFS zFnRaSC)(N*RCwdVrmekpMNe&`tLL4pyr0gE>T@?wsVchT%Pq__DbvJn$+EdWlY7li z2wmipa`MjTnzd-7A>-MFwnZ0{mP!UbT_FBMQ0aQTXT{;Wr@5L$`IOo?0zY|)*wNnhi*tf!nWfA6!K$7A-IRU2%=&dg8GUU}`L zFn@*co28$Y@m_47lQ7%8MDM-*Ly5%fh|53ET6FJP^vI=+rz^=lS@k+sw&~Vs?DuA} zo>`y0c0*aGW87@1$i(|>JUcJ9o#5*JrQLh@l%D=l*_A0Ln^&f|CeA()blgwlQ zbEY(#T*&{dsHxl26s=i$%q@7roY#E(`0SqiYRxb{gVlU%t&bdE{NTUH>bNeSJM?)glhcYQ29*TSORX`0yQy>QF7$joB5wU^zcivxO9q(j8&i_cZu ze10`vU5AsSV6TJR_Urq?GCMyzD1`jedn?YzHN9mv)1EZ*E0qa;Ufm1+-2SHjd#&BE zNBKqX{zg8Wall=>Uu%I-$k_#X-%c|p#R>@MrC(SQAhbG3`|k#=yWhjeP|lki%FU+PvBL{@vMgZ{K!bJI!lvT)oyGfn8^&Z8f@9&KaC`aKekM z>w5zKUY+&t3#Zy@i!GMxQ(xv!w$n3nxRG$papJulXrSZ=5g7#US{&NQ@SI% zNj)|9^P$d|B~}&_C-c7i8I$1gx%u+EE%S?$9KQKf?3%_D9MaR9$vrp6*FeQjOmyiK z!|e(0mmGKzTrIymzPQR+^rUf^!b$PC!>X6f?#3KTNyt`jDQ`NduQ|U({LqXGUyM#p zxSrP z*CuY(MNJ3u*Sz57n>3GU`I$X0#nh8k{e#ZmjyzH(de$Uq^VW>X%BwHgD7_K7@##5J zzE!$r{@+ao$_4xQ@;$ZM6&J1%$)AwCplpR=R_Clm+g2E6_0C%SZNlt}Q*--{mLF$7 zk#F#Iu2$)U9}gVn`~FrJR@xYq6z}yv=iH_JTzjfrJ7axn`GY3h_FI#5QgRdDM9-&3 zv^FU7#+~kXQ`i;7n$l@1f3qrRk$&i;+)mq6m#nvoHwCn=n0SNja&JiO)Y_$gGw*-M z&ZuHhdwQbNvwo`R*5eW>yO+A25v}W2a{L{9dlJ*^bL+IUHyx?#@tGvE(XjeVT4$}K zw8~AHF!rQo)@^k~LbA;|x@*GDdQ3^Mb~{_*T5&(?7}w*1*o|97?kS!*7{w|(>0gvZ z-nRXB^g7<>Wcul5*i^i_c;Wi{soev(IwX2(!%3{I)7h@czz*;$5ez%S>kU ziM$Va#@uu-$1&>Vw4w~(ljx$8$ey%s=juQLR!?^osvco_ds`%^X{D!Y6^#7V9l zDlJE=;Xi>fU_5W7p1}z%^HtZa(3e gB~o;BRh{Nf<`BQqhz}nt13+bir>mdKI;Vst04D(k9{>OV diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconError.imageset/Contents.json b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconError.imageset/Contents.json deleted file mode 100644 index 0bba1f3..0000000 --- a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconError.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "iconError.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconError.imageset/iconError.png b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconError.imageset/iconError.png deleted file mode 100644 index d417540d4d88fb9eb2d335f5fc37d35991cea396..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9326 zcmX|n1yB@R)b=h53+mEHHz+CHv2=HXbS%9{cY`9`ut-Wuw}gmG<5JQoi*$$}()scJ z|2N;AdFGsZ<~cXcoH_U2nH#IEsf7EK@+klSz*SL}*L{>{k3i#q0RW&$L|MsW2k51% zBnzk;r`~()_`{4<>@_q1?2kGQ024?F!1|B!2q=*1|8zwlD**KW>=*z*j1vI!e>s|u z^1nv@i2r>4zXTNl|Cjw}E5i6c_E{0=|8(?!Zu)7N&X3}WyRwNF003(I55TjiLlppk zDOp8cM&BQJX#QluPi|3Z4#gF;O2D8}>Z(9O7^@oJUApwB%$8cJlR_=LX6El}7 zdumgQvFUHdUmDvv!;l56^^GSoG7yBWpIuz=v^!;W!%)y9{mmW9xz$`Rom}D&N95g`!|p%%Ja3V^&O+(K-g# z;w#>vG5n;2=qUkT<%0db+-JitFu7O#v1&2cd>Fm?$?V@T$b2c}CB54%a(=f6ZQPbk zzpmma)eMlf?R**8h;n`))_HTp;2_^#=mVkrGc!Z+c40Y{`$wo?bHNg?m!OYT;t%Zu zDb@+f^tiTWs4$FiYdjzbb&@wInzxCGyaQvsANfRw?WD>6mfoG0`7=zDuNxR#B>w}e zN?u_O6Z<8VMsxBZnL6zED?i;Xnr(RFo#q0E*D;SuM(aFAKkl2ohJF||qxCHGoiOt> z)RPGl+6Mw_RHbDP2mY+47#gUJ^#sl#dpzjX?W%^~RybFvu1M?5&2Co}Hi?F|zMwodh5JI6|}FYS6mu{c=B;q}tA3oJ+fl z$VjYGK5C?+KiF>2JLGx73c}NR$F$|mX2UBDGxtBbDi4ZoUh47q&jj4P2R`#E{7RbT zqT4Y9ek4v6@#E5Eww9|%rgiWjDfNI>(W{yL7~+{fOQrjcyxLI;YKolvhc&YG5>OJ! zw1dIN8aid$4LJ<0IxF*c$0lKlxl%j0X?Sg%?@VU@s$}_vCbo;#YiiM$>^y+ToeGn{ z;QR*&flTL#tfI)7kkTo`*DC=ms1|BX51W=qAX%8A+wR?yuN;oqT9pzk%4WV11XS#- z(O|+VBX`TMR5#eT^SM6AFJis0W--|q`B7vWBi)1Vr3aQBvEO&b%bjJC4>jUZc_75A znDwSb*`Jyp!L|pIGGKFh^KM@UF{<`xg!<(D)eA9`4{_n6_Zlx&6V*KqblFfjA-8kF zX^`-BU-VM}g@9(ua$iwF%8vEV>fC{*lO2net9|LIuiUEj{g@((lNRfz5~tkqp0{-m z#s}J?mBM(5_)Z3Dlkb%W&!%~aSV`7KvzUEfTg#n@(}EfjTT;ZxCb<%(gD)|mbWR>H;>o4DntZNVo@1FKG<0 znn0R}2&t?!I{{mI1T}Jp7Z)!+#McA0L>EG)^yZ8p&62nl-67>D0NM7IWHkxa;R+Y` zGxdx(3)$L7&GdN(fSVhZiC4eUgW;O$?qxWJZybz343enBJj7qlG}7eF#{Wg!#cFH1 z<9KswvX~KbqPua)c*sQc&)sMIDzE498pv|0=^A)T1u8o1uz(}D^d~zy3B>vEz%Fur zE;e&~y!a+K+HYV1=MQ)4JX!}@LwH1yf5Kl?d+W%>DcVWb)|{p`wTVa*FAA3neUY}V z>MX%y<(0wGXCK;`P=Z*VcBTyS)3{TdfwOSTm|IFm5hK(-(=Yw`ITRhy9(ivN$D@}> zg=wt@yO;HLg|Z*$CODB@E@nFZ#+a*hR#C%Vn~)>f0!7+;mGct3_19#V6-*!>!uAg-$kKJLl#iO(@6~Ns z@hVo)L_lxCD;NvW1h}v;m0ho{(a=8k;1cCQ4HGjPe_eNzKG5TZ4ZE07$X|!HZLp)a zoR2H(2gpU;fn3cl)2S$?&wTk)3kRnyxDt8!ulIFUFH__Ow$Kbv0~!?RcF2PZYSg$A zRgUZW9xu;uFA>Nu{!#Mq>E+m<`{v;V^|>pinEZjk8@YXV`w?iC?S9YPvyi;G%*F`C z{G$pyp%6OtdIpAEuKl#~!t}GwB=~iA5xnzL(6@Tvu!l)h*~uHX_NGDwE8(+v zOJD+@k?Vn-jLxLjRy(d0(UyHNFAo>ouT5B$X(*SidO~Z=O_85WIr<|;jNjL0h#_Lh zu?}h*A!P|!i@sQQxG(wHJ44y6`m@YVgcetPRuOP16E0X+=%G#LJa)^0_TR~~Oi={p zubrswrv;ue3+Ac_Wh#!v;QppNEk3*E z+*+674XX55RS=<13;&&GlW zip{Ru4Ti=YUcXR$u+=o216md@Y?V(MiJRleM&1E&atjm#aK1_sa!Uo3tlP_@`=Xy* zbVb!N(5kiWUe)dN)lQzZ6UEP(as3wQiW{6)_#lQva`uvY=@#4bhIrOzms9t4ymk*J^nY*LXhW7(8%6P!h9OX|$ zi<0?7+cC4*2Pp4TG=%=!pQF7hAXJ!ZZO)tlL>i?)0#B5;S5GUmcjiE-qMhK!z)dI%17Woyju2{ zOJh;`EDbqoA02G|v}$GU&-1a(j@7PGGx$(kj%F8^WtJHeqf->Lp_wqUv-3M_-mq|* z?6%Ns-rDr+Z^npXL-n`|kRaL0{2YEpyUniP>N~P;^C137HM|lF71`Pv5F&E;WXT?F zu;bLEI|@S^JUEsO;9!VabTLV*^oD6x2hnl<&6XvtH~!l)Cj2!VvrOV@X`C@8++3-t z`hFO5*sR<2tnudr-Wt8oyUlabCpae|vD%Abvj*81y;`7lrUq z0ia^)^9vw6G=2+`7SPf*xQNaUlLfAyBLPd}^Lftg*%`}B> ze*ofwS#DaZuL9ehIzM(E9B#}c7H3V~A1uP}8PeAMU{;aV^AnV}@hYj@9sHTu0G%Y{ z$&KfCk++SHkvDgiBTJWl3t{^VPcr&C)&3(us0QX^s*+EB#etDW@ly!?<~U*FhfqX8 zf8?~6$OWC_~ z@cDh4GhLf!StUxk@$RT>ZfV+IQijcD=f=_ne@2&?x>;-SESX;Qdjkcup2RSSigzdo zjxxU^!A@3#-{}|%&r!i5KYwN#Z1G_c2Kh7C9FQ6P>@QvhTv>cvPtu;65dl>YU>NNz z?Xwt~cB>YZGIjoi(t>!@e)ti$*-4SH-Uf|k{t*}phhu)(U&U`=P?O%WSS@zaUEZW? z);ucvy{~U{#|qxNLc_EVw(?V=nw{oNhOnq#iH27t2VxVDLJ-P`1SGL0;q{kMiapbCWpr3yUx9)W5yuInmAVX(4{{N)s^}+st=8BAROb z`sf)(ug3MejK8bT^|A!YU;vsx@vV5)4Kc;Meecf;CQ(n-(vB{42K6hSvu>#SP;E)+ z3=RRu$-pz^m0J*MsY@wbIvx>Hm z?qt#H&f~Md;FJ?(mXuY^j%KY&q67Ks*>WW?FQ2K6hB5xIk5z$JjUc5k#0GY1TAjmx z67Pdcu6@B-xVs6$%NiywVFXraXJw89-s6M@rUG1dmMhV4&h0UmxM6@|c?+>29j$Oy8w2qzq(2mzYEa`EEVJi}biEG5}lJuH*t=2M?aPiwQZ zcyGH}2SJM4TYVC5otu72k6X`ku)3p)Kbnr=ey)l&?ORp~e~tu*%?UN~c%$5gg)M;% zHzjGdvGbWr^QbK4L)n!6h!=fP+RM}eCqwY&hSErssG;uMurg1kMCto>fuZ^0a=2AlanRS z9VMCIH(_5plGoeE_(_?3yVy3Dw*TzrVqo0Zg=@NHW@Cy-@JX{6zi?2pZ4J+StL#UL z5`K|{Ugdu~-b{-W6~A_4AS96DlCEHTzNbaxe*cne!HnjP{V9&tCuS#jth<^WKI!^G z^kzsmn)Cx)b7jTw(vA0-fFjBx$e@3ZswDN9==Adt!#_LZlV1#q5nK(Yr&Z%K%38k= zrlg+nb7HcisRv)a^4ef(Bsd~35@&}cX?X3cD`%LlzZlkUWrkd08U*@9p!dd5PL=Z? zI!nqb;GDR#G2YLx{uc41{EI$e{F_1ZcwB$?>OFe;!>L+z*k`ap7c0H0WakC4o-lIN zh!ySow*qIa@GU()F)Ap&Vt@Bb7oqwST3&4 zIBlrD*-4W$BURiEP&e;|K2(vlP@NiiRXJFZ2T||g!DFS9NLef@%5^3K^^v8gy6hJY zB#0Ob08TZT4o|TPkLn;fdz0z`B2jUJ^+&#{Um}PKcCIl5Jv*$|zp!sCw@Qi$v*N2O z)Q|~>be8rpjFcx;2B3C?7c2srm~XgjtA;#TmLjM{b;mI&IMG>UBd|+LNxFr`3vh_mhex z3&*$kY{A|R2@w>)U^h{FhDp35>B5s_;$OSzi#M#~bX*OA8UjA6=jj zl;426m^&3z!YhYm|K!Ys4~cu7v3zZP;Yl*`oRfAmt_Q9`MNA4j{`FyG=Cw#T)d`#B z55+m0>9QC7cb00rwi(y%!sUQh%mi(7kw6-3b}JI)kc><%>`8> zF7KkWMj!5%k>sk`#yiZj?p44O_1JBQJX3T2K#niXGW= zx)SA%BCU>R4`Rq2p|Zn#NU$m9Y4TaRU18D|-@I=`zDk0BcG4`4XlTZp0@ouHI37%5 z%ep)i+|qbzu*9L)(3(iG`(s=++9wC^*OoRfXl9NK=0oKLdc0@|nT zb`z+Q+a?tzE)K*3U9#}iY5L4+1^@D>*7m^npPpd_k)`?>RV?j)bA^KTRTtd-ssWnqEq~xh+K?+V6Qr-E;P%HKiVpHG?R_$=r=H-K1$G|@adl{Bx1xPo zeTtLE-YXJ_`w0>a9NGaaD~zYF^y5=&J8r0hdzboZPQ(s($LV%gCweBP#{alFJaALB zlrVlHr!vqaJr1jGsC!rbhbR0&^E4cn>l-=8=Z6S(clzM^g`%5UTLAvoA4YSUS;Ye= z>>ZlpFjTeB zK#sJLLHtd(S=(y5>ah07QLKh6P$2oLq$=`U*0zrS$pn3RT@5)c1geis@D6`CjyS6} z{2fN-9F0PffOfPSV|%ieck1*QTvRA_SwQ};yrs5QqN-KG98Q}#1leJ09TX;7xUSN< z>E9Is0j!`9TLAy=7!W#hh<+axa6Q*ZIl)7LlutARQA|r}l|c%hX>+L=Tl;FEjI_t! z9$B2c^=W(Day|@D*tSj1qm)WlV`{uYp_FsrW#)tXzVu8t9{~zL%Fv$IbXt^!qN9DvBaN?B{RTxaEdyN8 zSD;WvA#d&O3{g`+_ROKEwwF_7oBDAE><>R*V(1m3!V@C~Do}u$ zNSgI&>DnB1!IUs7*hzuyi!=?&L{HRJs(uEZe&y{8y+19bkWH9Xh$oArRoRJFdh+bQ zcLsa#LWsu()WV_A!1wLbe!I1NJ9RPXvXkVr$^AF>P8*Ba8|IO8yQD>j$_~=!!XMigd5q+UVy<2sBa1pE+#d)nlQ24Nu=@+GZ^r zT&tj2tGM-40@Kn_mO>}xSTJM{@|`}nWJBr6CEB=J^!B1Q@CXvTDhu5{r1GHDq6V)j z*q8pdU4=i{37|H9Lthl~AY{`vb)2VIx|yc|J0KNLyYe=F6ZG)i^ZlL%NlONI?k&+(ttr$^;9j|{M zljAQ5mE}a(=G*dcDu*72)s~s5Zb`{P1#qK*W?)MVlfV?^Evf9-2`PmnEVNpMrdN8@ zH{C2x_RI(M#}p0y2eHappn0r*G5WL*%4AUDkRed zgEHlZ*+c_9H`~dZpb-(5eISTR57OnOm*LTijAioMA1MOA3DVJ=6kgfpJmICwbK2(u z9lhM`(tBj6B&*%L)GY)HUIyWBk%aWaSGAy|Z}~NT+OCD+@Ewhkz$Co;`r68M(O^OU zl|0Y5?scI;M!F7KFyl)NLh?(-#kG7yaq#o2VNtbFMKwBX!F98A&&PB;SX7?vJm+=C zkWuA*-!ax~O5|&aEx2o*bz++#dc=l$6UDD_2wO9Y%qrgK7%MR)2`$7HbR3+S57XYh ztzbREbNH|{0LYpdP$Fg%%UhOcF}I$WypX}|+$j&1gstMUp$Z?Dd1wVF+dB%v9D zfBx$Vjh2BYHKAd<8$#x9bK0@n%;OkCndKbX&bnQcqbRX2QVO!^S9@M?KFP4nBF_?W zcA;D^2$5k8f{t(z;l6@Wnr^fD};Ieb{>b!W^` zozz*`=3eg^vsb}B^U~**%T;3gcdxFq%3wNizA}kLAy!>oZM$1kAa==n^Scf*q*`YH zFK0Z^dD7fpH}XTJaF549?9-4q{?Mo;A2ol+Tp?9*-9`{M{jKPDr@5tvE_Umk^aHLz zMf>fxP?)1%ZL1JCs~kmrq4cIz^vF0L&)F~L?)`^LdUYM>(4mDX1XQiZFqA%eme`l{ z#z#BbZ;fy!&xXe<*C+))KV*A1MuXoQU>{ri`xrgoOfxh4HEZLc^rs@vcKtg(&e(ib zv(R%jozRqE&Q<=`S}Og^Ns=2+{+5cAw`)*anj_vK%3LnSr7vqYOOhR?;6&~*Y)${P z|ClaCW2{HKALVIb|6Wd*3hF<&j^+=v{dq;?k||3 zjU`RO-WHe5nzkR!HY7G@<_lfLtnA=c@QwCXi zg2Js^SuhYLu|VP3+xQ+DPx}q*r{|kLYco6H$|>u!q5vMBa95|D zR>!AiwB z6w!2GoM4cwc5hgYCayA;>HHnsmYK@&3CbT{+3ct5OOxKXFE#m+Xy+x*RAnrKJoQX@ z(esfaa-_?rYPJ~aHX@oXLl=ox$~Zh{+87e@=Y5GvOXdLokS4w@Bb`BS9rffHl0js> z%B#)G%v~!+b=xP{!?qbO!sYDHQ^wIhy%O4hF*>1nP5AR|DJysxf>-?RoUzyLrb=Lz zuel$EBPm(Nt2Wx)#JMh-$Dl#B@4^e1 z>9{}ERDJ*kx0zl5_^vNfU**vY81Nr^5b<`EEv?Ex)513H?;#N@k0r9~kr?5l%zO^? z(Q7r$MA*@9Kbf6P#!u(&daafQRWLM9vYp+aeY48Ed*gI^DId}Vm)cV$npKRw4o_xN zkLg;I2%CC z|MuiVnwOCN34~nGAIKQWV1jbiBV)4PZz-fhzi8KArZWvJ**?pMeJ(lA$-;_GP4}cw$l?=|rgKVIkv3^aTYwJ{xpLCQUab{Xu z5fxWwWpn<<=G^by<3#+f2fo7)SLvRi`?uTY$AMmqH1c5qa-%0@=}_+y2rFoU_gHty zYO)8hk+A$4OC536YkB?tIEURS3nkbUdM8#Rs&++DfqtqqqgR2O@VPKkUx%HZQF z!Ur)Ch1Y;6N+wB#K)t6W&UzHPKoElE9wqOw*7}#)@}t@9ljPPgMaDH}LyBE?kQ$+T z4F!Qq!t=v5>lNx;7H=zRT3P66vuZ=F(c+D18h|t?inCtU%O>Ewzb@~0drDELIAGL9O(c600d`2O+f$vv5yPg%`rJPbZLM0s7v% zm-q?pxZ^k>2>>#gOeT}bWHOmdCN>}7kByc)E%#bJxBqWiG5pnXYXAPy@~q{x{XIv! z-YB%xTK;G`kC1(pazJ>y1x8}dW@Axq3cHV@yA#+N+AT1hoxrYX-;B_WM}cC3 zKM1lQ-oox993jMYqHniJ(C!(Ib}R6g4lG$9C{k#s7l2XVMyAHA;cU=QLR zX(9=pksSh~Fux#5gQpM)1^dAqkjCYlT<|)ckbX@}Hh3Ks><8E2Hus4H*#nyjH>N^* zK_tk6S0NE9$buMS*e4mDB^A7m3ig9G67m5}=_?ruiJ~BLpoD))%shA<3NlB=zT+{( z^t3e=61)xtnL`bx1(6_sza(Vo2!fexl@xQc%^2sl4*Cns6oNcMO2{dNI;UoM5)fpg zfpfbZF}hspolV#5kPQ90thsc*NRVgq6BdeXjpbU=-$MSz`s_LjS4?(EGs&#gmcng~ z&H^ieAg_z7tanlrrU%c|yCptqBF5CLv0vm^e7%!GaC>8YRrO8^LH0q2)z&*H3c21* z#*Cx;m-N{2a&UZp{?0dqw@=wUBcadLWipveCX-2le=E^#w2z4OX8-^I07*qoM6N<$ Eg1#8gq5uE@ diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartFillDark.imageset/Contents.json b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartFillDark.imageset/Contents.json deleted file mode 100644 index 690ab03..0000000 --- a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartFillDark.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "iconLikeHeartFillDark.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartFillDark.imageset/iconLikeHeartFillDark.png b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartFillDark.imageset/iconLikeHeartFillDark.png deleted file mode 100644 index 16abacfe40cfe2a661971946f8bc2ed90ebe4248..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2196 zcmbVOc~BE)6pz73z>(qz)_N`rtyJCYZVp0L0|BBW)gTBJJaMzTBpH%y%&sJes93aK zpj8HJfe~7)Q>R#{_oyvx@ft6L+7>UY_4vbLDpefEYWpomruMEo^XyVK&Yi49#hYO%ZqABrS7fIzZJY;4pHm4T$9sV4KY_t~6RGBc7D~Yk%3`^Zi z`qGpPYH2Q|q2c&AXo{Br3LFeiLSBd6$q`;H+@qHOvhW&(p&kgItA!H;gHVcALwy$v47%wYVwQedpEiYM5r9Crd?!zO5hoYfuR+gnl-uUwZLAX#G?Hd^ z39p5Lv%M@FF27nQ*B2=eGt^7EP+W!yta^Yn<;S^}xa~d0X$ocRjDvCV9Khm!tjo&s zEN5l^Mz#O*a|S?kO(wsMzx2i7@SEWHsd<1#UqJp6&1K}f7<3lHu}j<(Gc^ym87Z)F z5lL=_%1jW^a9H8;%prCGOk|+NaOjAS->voWUvduwS7}Vvoz>q(XL=tOf z-M}#LPSN9q$wU~P98Wqa#;DiAfVIqKqX|_khR2#UG{R_dG>9?>ClQTGMIo4yjKvsC zt%xP%{pa;8wM58m|9SdubUKq#b@E+35Bv?SS{zE~bzopm1HFPLekP8xtLWbJL#K_VVty?(5gigv8-LTrT9|?$&J` zZ))58%K3`#g6dL+M@J0~+ad`*C0QxlRE)Gky4n9Z#fB?-9eKRjunsZ9RhA zZaQ>hx!NEpFCE-ava!wZwETp0v$RV7EK9=34QJ*P~yXJ^u~K?BMll$Fwzy2VXL(@&+_g=ep~bZEnhyoXTByH?C+{dR1fD z#LU}@c`3Gv;>mB-`^<@*+Uf_}+Cwf)TVxztSXd=u-=20|nGqA@zMx$+%zH0>6aDyt zw&khx<-NJ*X2gRy9H}35b!e8v^r~sXo_8c6JLRJm6fq6T)*VV9Oa;QN%J!3 zSx~fLgfZ%Pya2t^Zs#R&t4~MHS$KAhW1uXN*#ZqFmfN%86-o4#=$TgoVv1h6)@G=P z_mw`lGAuvpS)tU?__zzJepns2@ZsoR&s@pcbnno_isV}6!BK91@}eEkVkE6Q=*oez zf&t5YkAJm%zrJv1Uhit>c#1Y84eRZkX;)oLV&fK|mGmC2GnLFRt zb%+yoHc!tywmMYWnZ9ZIjScf|cso4NMGaT)kDGpN^h*U}lY)!)ue5x5y5M-*nhP!B zZ?A-=Tq`-BXbvjQgC8NjR?kpel338#dg4gz_?D!^M#-ut`4=uPvn0LMq*6I=ABO4H z_XZ|TwjgOlM|;a_p=-9IgDQP?YnZgYxuEQR! zSNu1RDuYHww?8Yp8ql@<6nDH-!9=2(uB~tQ%i1tJ`eyu$-67#KAMUCY{u_)_Q}nwN H7p?jYoHHRJ diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartFillLight.imageset/Contents.json b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartFillLight.imageset/Contents.json deleted file mode 100644 index ad1bbe9..0000000 --- a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartFillLight.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "iconLikeHeartFillLight.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartFillLight.imageset/iconLikeHeartFillLight.png b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartFillLight.imageset/iconLikeHeartFillLight.png deleted file mode 100644 index 0ede0561b29752fe14ee8ba896097e2757521d4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2708 zcmcgueN+=y77yX82()4=V0T&Ogdl=UW+opbGY}*gkRXAGY$dL)oy<%^jwBN@0|~UY zhCQO}vBk}H!KG5IAFU!77p;Pd(o;*RSZfiat z^%HOo?W7SaRA*1QDg_+b$tWx~pIIw2r4*+bH&KwyY7ziGA+d#YDQ)K*bL=D&EVNooV`W&}N>CcLQouzmGMh<^lHwFercj_k ziYh=UE*FCaM3Mr^Nf`wrD2z&Evg!3|nke_?*1LYP(n*@&Y<%xkP9ZpsA~0w)h!GGq zN~IvGkjp@+3^j67axqRCrmYp&&D_U^m)>vH%ZlVI$`ml7FrXwzp+*#x8W9{sWikSU zrMLp7V7Wwri@o(cQ6gB5nc`+!tDLZ$lq_v-4z~lKhYSgMC=a%bRhL>D`qcdVV z$7xLUR?tWgTU{f{z*IQjEjkPPvHZS}o*>!d+wwC~bkFy6V9nQh>XY@gmztoSfG=;R z>g#vCzeSVy?yb+Y*LZ~qp{(#h?X%W*2<=+_X200xtqB7``vcXtzX@w`wI#h??8(f% zdSqoz;?|undD>#{3?Se3-;I9tQs;Z?6|0WrBzm$}c;v37?lnYDqLP*y2uZOVm!)!`soK^+=2TKezU!`D|*aupeu9x3te>A zDdj7|j^VD3*jdHA6ZhW!t8nXD?K$W|K)!D5wc~NQVSdl<#D^~ad!A!)eefyOr`nc1 zf%&cm{IaH=DO&x>jy-{*nvKFG8(Yuz^I!k${NTxF4j$*aP^Q{Fk6E)`Gc+(-ChRq> zS^r!}!P-IH2f|aAsFuTB0#aC8*dMBY+VSTqRg@w;GW$s0mw_vXgvHTU$M*fPXRrN5 z(&cSm@Uu1ovpy~8+!R=0qO0{$?IBT%+R_F?UyGcVndJuf@6}zMJ2qb}tZn#4nC3Eig-9i#-x@Si9@>sUOw+1Gl$>H z9BMlAam?rwAMzWD)B7s^{#Y`4Hukq6^5~$`TDD2IW~e>*qs9H`@^hx_syEAWSMRe6cI#Jf zWGOFLYZPB^;;XbSWdxm+w{5QKq;7Ut(+Z(3LHFp2x>~pEifZ${K{;Nr>CLjJZeZq-x~Ra2Z&M#9G~%e;y*A5N7v28f zy#ok|h(~fS$6vo^=pR3GvRH&S%^CgE^9{Em<11#zH%4|R&3x$?znsxa`c7{^Li4JT h+b)ee5c9RMsH45uz2zVNMd|(DsL9G#@5_9;`oED1(F_0p diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartLight.imageset/Contents.json b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartLight.imageset/Contents.json deleted file mode 100644 index a24503d..0000000 --- a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartLight.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "iconLikeHeartLight.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartLight.imageset/iconLikeHeartLight.png b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconLikeHeartLight.imageset/iconLikeHeartLight.png deleted file mode 100644 index 1620238aadfae5c3cacf1e7fc95204a5f47cf0d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2593 zcmbVO2~-nj9-kmbK@cqkL8XlW#4DM}A%u|#78Ih1A_=!tCdq_El1xZ~36~5Ao^3^} zN&zj0u(E4uE49lC3$b*iJQZC*6qN-8g{Pw6^8gXt2?DQnyI1qxWWI0a_x=9=-~W2E zFJx1Yoy`Ip008W`!GWQ~J;ZdqXG#2jKJV$*#LZeA9Hj+-l^abLsho4P5&+Df$%T=+ zNInl1V@et#!9*y{pi~oR0PyuQs1b1jsw0cgc)5y0c~aXzA-s4A`7G(#Y&6>H>b zog7nLOVV*DgtKo|DAhBxD(zIHh?s!}L=DnukV(}fP$HhesgpE{N#hbRh$>Je zs?uo*EPV#6mSH+fE5rT`^~~#c3=q-f^Ji@QrY}n6j0vr7-3~&=R6u?ctraG#Q7{zM zVo4e?x^4&IrkhEP8V=B)hz`>TF-$R?tB`4z$qW_^A}{45V!6sBV%aZ_pn-@ELHZxk{T8Ohq&hvK zLD$9;(fS_>3MAYIO}+S53HWP~lka}fx6^Q97?_qbgNWG7j51V3%r6ZwsE!AbvxxcE z$_-pAG!zXMJv?;V>w}zw%n7U_3v$e_ByX^YiYQL9IJzP?^!##1nIN;>G1xV@3g=k} zt(yG&J+>Cq)fk5E^?Z5$QK!wd?UZS>1{e74c{X;e zqSUF_zOFPpFS>crV9oNQU9POTj-AgAH+rZkqrr@MkIKW2mo<5Kec$z2+~!r5(mB>_ zdt+E({GRLrcuu$8qa&}#owe(aC-Xkvr3y+Gj%~ayTeZ9ja&B^u%#{=28R%RORUNCo0mLBw6{N@RK@K2e~@qKp|&#|^=>0i>07d$V-DAstW z;m0@Ehvhq~mJh#46AApvypG*0I@Drb){o=&D>AaRQR7C7?gQIaR=0(*k6pJf00bpH z4LiTP6dK>NHQG;R#>?Iv@lDA6%0l(y*zvfiBMCS7F^MGSrSoz5wza&F${$1yaf{p1 zpExx0j@a~n(#eYjChogjT6FgPme>bYd_2CS=gEolm$qcs^w+oB-*P&l(dm2qhI$(g zorG*}35$o}+dCXaDbCwcb6DVDwzmJim6D^j=yrD=J(P;%J<8H=+}L!cB=M;tF}J$w-i7)N8^)rC z&P#);SFgxSPCsOM)9k)eMzu@f-q8Hjs^x9Viht%Z7ixDUzc_5$IcviQFD`_ex%$Sm z0MA;Z^tqd{JeARO%t%pAHc;&2b zwhy`1xTpO!?BvF~u7Cb|#PVdOp>L?x#xkb~z{!7!Fi+~KnVXu^Usx;L z#w-Q}q55^Znmz>1`TH_jYVt$gc>Hu~=%$1J{JlPnW%_CV`|3=hbtWubpzK5 zUk2P;WE z>)h_9r;gj~iR#N=kZ=GaRmYXRYA|;ix2wJr68P=C)8D1U#V*WOI_?X)eP!U5hMrpi z%)Lrwwui-K4_EO89p&4MTX%!|&qeTL2Rem-ndM!ppL_3~>WwX|&{%sv2daGw!kfIE zza86BI*%2G+R{vVl PM;v$ErogI?8FV@yB-3?hT@{xXC}3^oQyFoFNY7YSVN4kO?)f05uLOyCx~0%hFo9c3(W z(LpkX>KbZj4Gj$$eM5CkeND8Mez1Rls*IL~mKH+80HLX;rlp0{)fk@gN_c1!iV9oGP@l818}i;6F30&Us^;){lgX;^S7k{n;{7PQ3y?Sja{w&A`C?T zLl+erjrmJ>AQ};b35pED;$r|>&3|a4LUDLpOepSu!}_1c|49H~U3>d~Wc;^SA|wA1 z5remi1JwB2Apb3Oj7vgP5W*=a1{WKR4zh{^V9M=k6NR*l4)Vw2qFrz}%)fo*_;1KE zS~}_)GD`OT=rHWA63YK!N)XB)A7lat{HCp@simf=>7uEF)CGR^RW!7b8XEs1wZ{d9 z1t%O=*SG(kANc<{|73I+kY4_n|1qE4q}vS&q-|IX;I4$f zbHX|3?B7?IFqyyN0O^n3jc*e;de^Z*f$+bF!~Vw>_!ryw&>(>6|H0k=B8$NVdB9C z3J3&uIfk-uA(Ssq$CtZ(xzfKnIAl>E2)$F8_bijsii8e8)a4(p4IR-HNB54rZLYn6 zxp@{%Bp$o`?9u%R6y#=|`yE;S>HtBM71*K?uMAg;+%eEbQuhA|o{Jw$_|`qMzNCxz zc{i#k=!tR9yy?2J?$TJ3B?|SYwE%05s=)}7;qZa~@@EpIFXLo2#j%wUM>*4pFf_*=jHvI!rOlwXzjh(rx&bhjtP=W z-Il_8Ji-OpL-x-KGu`%BgW|!<)#4@5j;w;~mokn~e5fh5`;-V)rmZS*>Kk7^+#=*)S5?voR%K!=(5bI4xn4nrvH!(Ilq(grW*q{`z{VlNK6z|Cc?5AUmD2u+YJ zC}zY1!eN@6Ew(|4ep9f-_x2tqs4Bxc)#y#xt^!=3#3cY&Kx$wTMqcokiM(*^N&71+DLV7@lT zA#OatGFh2m6(D)u1TQZ5A=dyf&a)|zq=mSnc)3rORF%>kwe+O)^LNBcm;l{yG$iqT z6AMu3>tjK2#Dr!i|I3_AH+lQsjF%MpyF%MFWy0YWVerzOvKKUU+PQ~lz~GAwXF8e} zc2?{L+PEjdO%Xkle$bqzbQ|SCQQGm0rRuVai-5&C)Y1oN_aCODM`qC5%-D5X5uSb- z9_#(fzclbmnH`bKzAdYfW+Sn*wWFmmKwP|nQ5@QQQ_`Q9r}^2a1{(SMAF+=?M8Sv} zo%~^@oGq;`+!(|I1Y0IlgDpI!M{Ceii6D()Z@7|UZ$TU&wO0D@x7Ca*wUb;lh=Bx+ zn^t&T^kERpC%upInBq-}w2e_B1jQtRYywm!swf94BSLLznN-jDgUq|om;9V9m^xmf znec<&jA@d|#E25XOy^)3UcnHE8)7#NLQ3h)A`4?X#7PNbsOIs2W1VJ~7SA9e?kqZj#1(tnWFzi$Ev zcq+m}X=s}0@)sZyW?Mhm&jeB2-toBUt)w#B{Ijv2@bey>15eeB{uuIjPmp)GiY%+j zpdPEW^LrWM3+~rlz8$Buy|cIdB1ry96Mn>F)Fk7SFGRUFr1A5^DOT-AC&rZdAdph} zJ|NSg=AD;^msg)7ISv)`K5$*IyDLS(a-Le4yPTQhVe~G^QRt&leTsY z0Z2c>?o(%!DY~?uN)xTI6g!5A-|6MsEmZoO25NI5;=RzSFL+y}b6=PtXUpwdl=Tc~ zwfM1TPJY7doKfw%PZWR#X^41c zZ}UP6+%m4cm=n7R6a90u{+B?M9($iT4~kk=(M^2M(|bq!<&YP{-;al-!;j*GW>EgA_yJN4D!8 zR!<~|7)U-s0Ev4wvm?=z;{q3~2wTH*6^tgvJYTOo-IS|LF{IQmOrK?Bb|4)%u++J^ zxrtudE4Di0EyL$kphTQSJ-h$-QR-Cm4){+9UO3fzu+Ny3?Dlbbt*ZM zBw9Cbqd$Bi9+I{vHMd(-Vf*KSrW!%=+xLzfPSj5sEk@t)d!c_JDU@$nnr z+nmgfuWYXE{TM(Yfj7NH9b3ZJML!&$FyTw)sDLT!a^l`g@P6R>S%9rM`j9lb9Likt z%GZS%h)jdL5_#yaD)J){pQ%eUo^`IDonc3s`?=`nl?W<7TPTP-WpxxSh9XV>*C(25 zjg$%M(wY)MAHmn(H|DRX+DxrIb4*M)U{+$K7^t&%7}KrN5Z_{Kfc7`=lWYg&nqUR? z0sC2rAi2)p_s*IfULH!}-+XSmFB=>Fjf<;#=!&%xK|GE(?yX&cE69u^#}8L_4Divo zky;_Z?ru{~p*QqG9`+9ZEQwop5Ty_2?UeXy88GEs`Q3c@?NAEehC);Sg zQm6i6yO`-uli~f-XDMJMyz`oB)BzsvFpeg|+iMvr)nzn_2SZ#b%DMJz(Xgt=>Li{N zaR(R-WS9$fDtAd4NM$$cSWaZEpJ2=_DClX383=ZbpBUER=-yUQbDV3+=_Q_Nt#{}2 z+W+SWP%%fenD(t^K$-gGI>uNoHrZdFkF6QQGfOR}K_$&1#2=5ffi>Wd%B-tpJj16F zjhAbC9&jI*jqUu#X&ov9Y+kyY$z0c9bS@|mhfKKao9rg` zGjv+#)kTl=O5t!!u^*wANawYLI=?oE&({rIIU!_1h)6fe>nZ=fLLpJg8KyO7_5J$$ z=)j^@(6Zpk>jvTGUS}N;?u-D+=<`C5wY9$Nms6h^CM6sGbL#>6s7C0w>b&sKUy6E# zF_#ZmO@}WON=lypsmKhM%Es!AaoqQ0{ZNEho?5U=zr(c>X+B8#J)3@s1fDA`45DNP zZ-3Y%>c6XX0ro+!gfs~)prXBvJ0cjb%D@O+mb-Q;-IlROXW$gaXrrfF-N~n$;FFwV zX$K9&yzvV`N-P4fL3(XFYus_!>zymP8WJ)1%(aup+w3H0rk=6lSrECUgg?B`iia)@ zPU0L*6-Y9|o^ssM+Ei!7ikYP)No(wVJ9OooV9)2!su1NX+w%m?eX`<@GZOra<~#3` zIzA~Fj0=@;yj<#SYxyYM85=9q2_J?hc&)N~n?qKm!VI~}^c4Oz;!~Km@MK^4yq7bI z=Lk-PUMFiH-RGc{m)Gh}cO~oZ8TkX|@#e3;W86eI34V?oPZstJ>iAp>;V)VHtW3E5 z^ytugpM|R&CAKCRmKl*5lIf>uf|Lnhqt*0i>?Q(n&HGkS+CnN{cC+nee@Zs6i@<(f zIg=;3LM|zvuDF&fgyYpK_CMKw(>Xn5=n4}~|IOhBz8&#tu#2zDKhS#A=#{xt=DGl- zVn8?7|Dl)Fvq2dq`A>TA_8&t)isk7gCAoyX^lL=rK%Z3J@)h@!D5k(Nsxk$dRuM~E z9b8rWres;q-LfuIZbccO1oYp82aOAKwYEN1ndVjN!@?7)?RtDh@1_>TpNr{Maa<@M zZ1Rsnz0;d1FOF;{p1$_IU|l15{mgAnc3h((TrVIt+`5N-Rz7i3_KVQUc==Mw=;K>? z6u0Q#5goP-D)bD>dDsDg(qW93z`O9t1s4MB8{heW;$rF^?k`Jjr&Wyw-);RQ z2_P-9s!}PpZD*7@TjnqI-!>RKSn|B^xk5pL?OZL(B{SZJfp%zn4%vxn zI1DdibFf10d2k14r}f@FNDcutRfK!byV#(P%qAplyew)HyJE+>HRlqdm)g@+U>o$U zzZQ~cFj_yLaQ6VY3u0LjK7FoYMyRBfkaBQZy354ag@>9{;9Rku;aL%$Z~Oiaf0yA? z%Z;x&f|={?_mF&yBtK8ok&e9^mzmW1pGo&48H1UKIDr zs=0VB5(nZ#j_{YvZ5pNWO%$DNcwf1|Seu-Ygf`*<@NXZ&9=)$0%Xf$s6BH#+X8>rn z==DW;try%_Qb!r-KVL9R4t3=iMj#kTo}@gTnI9AZSS(V&;E0wMfe+uHJq8fF^h-L# zl1eLLEnp>8TVvGjU$^?bD*d##fJk8RM5|p2254 z&QCjNn#>}_^F3B!a+^b(guOt{NF_+@V6wgS=hTl7_~II7*Uq`18eT7{wO>r3*D=-( zIg$3hofdj|KP|vB`^=PdPf4qE-d=iSx{2iC2?}l@2jG5$;h&4_3K%T+vf8sE!`$yZ zreH8~poB?C=Ifw_$UeH2$1r(OKR^I1R$91^5}u1ZbNd#}_EgsTX-u&#>U)G3tJJbW z7N$EkD@kr5iYq=~^WiU?sM)){=!iZrM6Vj)CTGQq_!;FQk#A+3_7@{Z77BkX_tL3G z2SVo^LmpW2^1q}DGI<}Wwmo&wf3ynoDXw3^0WVF;1z|Mpvc_em<1B(B6N#quFO6U;7(PnBtyzi6dp%j@o zl_KaMV;Z*b(b0yg;-rcw-AbloH&pk7XBf*XjyO@%EM3&IK?z1|E;5^!-e}J`2ZRB? z*$P9uk=$a*OVKBo6h(x#sW_d`mI!Au93d=TpW-y7;$k`YCtR&1Z*fOBz-oH3DyQEf zf`3(is>&LdE0*rdYUfNuj=XctveoQ%U@M9zLcFz_!5f^o_)53ux~^41Ew-n+!Q`^D zg-xt8GQvj)*Q!i>O70|HV%mW5HR&q!M&Eu<;#1ss#D%rkq+1f;x#ZaUrS>D7 zv&EGR@4LF@ZmZjRj?YRzpN+TV&!6QdORaZ4 z=3EKL6_av%ao$#gb zV7kT*zThWRqxV%gY=Tw6OF627=Vlu^uAi{{T{pAOMC^acw`EtYHiTeI+DpccL)$>%^Aw&L`Ekzs2i4~t5(I)&< zBWjhk4P$REP?RbxiMbJHl7_3EC&Dx1OPwpS$`|u&^Kua}veM-0BT(;xeFD0o8X#qq4$M zvRHM})`hj*S3eL1)Ile2>G*~p*PScYMjAcmqx*((kbXE)kcm|lw9Qg`L9@%9(_%Tqr(@(UORyAOKCsQPO;0H(f9Iy~J z%*x+G0!tMJSRbTg8)A$T&)dr*kl=gB(eE20)0Hn66`6ym%A$>}T)~p7hTz*Bqrr@r z#x{!*YM1b%!TPa!hgeii&_Gnf4>!L;=cYmw;4ok*wDG?uj*|EG{20Fn-{@SyWyQU6 zi4p;e^#B9A24KlEf=r3MnKb5*ZnQ{dH9uSNr6ka%F!0ja9~Fzn9OPM-`xfu0(5MdQ ziYE&~0VOWHeRH8nhh|;wol@Sjvb8ZCvV+(a9Ht)C@Nf@dsNS{OX)pcmMpI&LbuI>8 zKf$wc*|~|E=$35>tmL40CKZQzvUEzL>{rJ43G;JBk?v ziqO?OjE6Xry$Xi4&5e!iOCfT7Z6vrc;+vZl2HgVCwR5mzz} zk`~pt9^3B$|6YYdj&)u-2Y`V3qS#UpD^Twecfd^xw8c&m4+{lsXHz+WN zHDQnu$Los4{L7~zn3L>OhqXEM%=ij&^u9Z=sT`#g7Of?MXMi23leKRjFx$GsZ{cXC ziVrd0N}FZm(SC3WdUMX@WX*|0{~6EeibXXDS1Bzl2U*`tpqeUt`0U;S(HJJ(vc2I| z2y8*SFI)*+I64WSGNs*eOzOX>2wpcB6HxA~qRbBHa&x?|h;UW?B7~rbZ!{-@oBQUU znv`gT^8R`Hcy6aOYT@W_z^azXGbAZc@@s%;iFd({;pFF@v>yk^{P*cNM*Qk6ph9w| ze)9Su%v1^=cAA-OdZ^7Zev;HZ$gv4}ydffAT4|FmC$ZGc$2`~W``B4puap;GdUS56up618?cDsxZum`l}~96ezJO( zWb@Cfs+8OlLeL_*`Q6yb{05qp&9=8Bj=nk7tn%{I!qIJ@EvXQY)N)JM|DJ?TOtVTU zw+Tr+E6HfQA~VHTA?CKn;qUFAnzZ4S!F!>gJ&*`Ul5F z3zpXlUgSRE-p^OJY2)W*J}vxu$rVDgDZ8;zSlGCNVYX)3PE_z**jKj+BSQC`l$p9r z2E2AF&_~E+Gx(<+=>>=}RyjGNcn{FVXLT&$AkD1un*{S)-G}Xdk+2N4^n2;vkZ{F> zj3DRF34NaPKb~QlanKKi(|n3fdg#1;-b$1kzu|jU0x|f&b6cc)kKsYla#484`S~(o6JCY!tG$d3HVVkkeP*d_; z77sB}11v=_z8x0<5HKI&@gs-}SdK@MMiAxF2M z@~dz`0VQ_UP*b~E|EDLT2WYT+l&lk$BDjq+y!j6g2l%?8^L%1+ShDI`g*na zOOG>|B216cd7?`4ox(o$?U?wWe8GWG26;gtJ)U$;-tO!@f6;caMRImGjfm{zXI`HY zFy8?hDdadxZSvg%ouClM(xL2VP6VxsUeb$S6wh3XK}AVBnPz3!q-Rx&*T>3|TI9P_ zJXx70p_{3AfwuPkCt!8HZcpHk38soh6A_Zd1u=)Hy9~1Wl!+f0twrW^Um)(6g=j*(Y^JQgqtZB(2})xR1cJ z?YRfsIB``b&|s~(wN9E1zPq_`_=W*=Gp#-XFSmAr3kHuX@T=4MwmQ}!X0Wep{YF6? z?X_?Rs5>*M}TsGKo8Q54Z$jO zs|?M9a=}2?E8mqZgsb>U`AGS*V6CTdfN-dbU1Nz+DTOqp;~*zXd=}KHZ2WQQ&PqlT zPE0Q{%>ggRdnhACJM2-X&K#PiNm|*n{_dg`En!V0YtuFdI1_Ltnap%li-%F9XpU>X z98;X@@UII6De&J=wv$7+FnY%MQoxk$c{V{@?@-eH#^ZRoLiapgT~VRwymPzMlSqCrcfQC|M z$y@h~<+ZItNtvpB??j zM{vUqFK}8zXhV_(ViBSc3GpEIE2bi8eCWrwM5giTB*4{y>gnwZ!h$?(^qme1WNeZ~ zS@L#?_QwU5VdVu)nB3>>PP!4qOTwK(ckO^)zWyQTj4>JWPH@mKD@%$?>hRlrSbiir zsm%uc!-QQNd2ew$-vpJU&{+aM#R>+_d`Qfv3)Wg%(q&tTX6*-W<(Yg@&uXV+(9ZMP zjBTI2Jyi4{MqIda#aiD#b&m8KQIlL7! z{8KHGCsxyD8*vhBklJ0SAJm4rH1C87jitk0xxJ3Ygbu!@oM4J?o@RPnPoS~;I37Uf z2F%wdTOuQR;wY{Uw}>+`NvE1GHsN%m4(m-jXw@>-Mx~Rql3nm}`#dsDh)LqmuXo** zdU#cP*%xP8wmkAp!f?E;^;;y}Ay`@b&|P+avw6p4%eS>{gD+>=`M1Hz{F{Mrm>^m6 z$^PVP-xHVOLC7wd33=Wm~msYgV-pVHh*hm}(8u!Cmf=Lg`uX(D=OG|;C6b9qu zEvaR-AKgLH2d48rPeN(@&v$@x0pOs|eky^IcCq+8?64#Pttey-xeo+AmlEOqIA_`Z zSpGPMZ;fV5#%*-c<4%T-KM(y6?I3jKb$VogXUQ{Fiqv)Q^W9*jd}r3&pev;(K(>6o zY=6xcpMLr|^1kZ=AI|G!Wa{^HLgpd2dyDoSOE}T5kh{fEmL_WmoIdr8QA8<+X|$ut z&5G%#DAKm^ugYA^sh+C+{^J9;VXb`MtQyclQQT2bJ%SGp@Zbc52r}jEQnvU$Z^ck& zxH8wGl@D;@NNs&NEHBXh-lE!LomU}z{_{BLJ+9B%<<6X9UA0NWC=DtSyBY1IW!t7v zT170HI8}ZxH%?Anko=`pF-n-F$yC=|T|dOy%SvKQFnpff$aLdEuTv}b?6*+)*x2~A z*;bnSL!oz>`r*5bE5EtGHY2H$Mcs|EZ`bwOLpC*7N-QsoQ7I2+i%#%yh787!?Z?n) z6{D96(S+6qIc7=A=Qyh*kCh6No$A3fdvY%^xpr5|%d7b=Bw}!hyLl94)l`PKhapq=~ zh+h*3pS@)88z5AjNg{`W{bak4&AQ3}90IMDeV?!W$hWNQ?`(JXbx^N@`)x0i{B5>hXNH~SAZpM;n8*lAr+WZ5K=+tAn?c{ZlXEu zq2stO@YhO62=?Z;^Pk)Q48l7tJcm0PjcS9zV0F&3(KChM>2z8Tg5VMWt^we40=8u4 z86rLs(c+YYWP&9t*L8=8*pCHV13(C1<~kyNjQ(Thxoz9+PN%ahbAVK^Qc5zrHyH}- z4ghA!tc)5>X1GyM>(di<%ybDBhk#*`l*wpJU z0Iapv^)m8i1yxGT0pJS&WJD0dJ9tzNGu-w#$2{ELX1F9eoy4RgWf z8vO%+w*^avM(QOIHC`xVaj(llseRvHitSmJ)hO$?c?T?t7q4+>9(i}KtP+tYF!LYJ z^O7Ac3=;>-hTj12Y`J~ke?Y`<0FdbkNy`kc05cCf&l3esUZ%520=W)&05%dyzpb7l zdAzeB;@7pID+sO0#tU*B9n@C-i$%2`0)7(d(Mx~({ zjpQd897M5&*1DAi&m4V>Z1R$bf6J&N-Yb3{*`K_O@~NAw*NAw%*=**n>(0${nef74 z&-7R6Ff#BREx9s?IMZ6+McJ8oEf-!0jz|*Bah&i@+O}QW?RG22ah6$TQv@#!KKWh& yKpy;6!E)FnJQ{~y9h`vIqkjJ;;IuNm8~8tli;6B5|7f280000t!%h!O+<07)lD zoF{)Z+%r*O{)|$3N98XdvZsR$z!*5Vz~6|G9DT?DATGOSAb|SY0Y1Qoc-))f?TSYQ zMMb~@f};Wnu!IN_9}NKL1Qg$mAW#CJ2@&CuWK;r1?K=X+_xHkZHRyK;ZBOW*@mHM`V#t4$ zBFTTZ#cvS4cLFzpA>jXT^Hb4#QIvZOk-%5prwB(a_$#Z=c#-Du*zEy;lf)>4>ayK_mibEi&JRZ-+#@5zW#WLw& z@PpS&oSho4vpRC3&&_z4hOy=53yYBv5zBZ-$N8RT&*qh@(e7Ub(5BRf%ahGxD*N~6 z3eul8H#gq^@+I1IIo-U7k4&nS{<RW)qi`UFJXt*AL{ykcGgu~RMb(x zSI<90eJXLjthN>*@}?erj_ZhQDz-{v1(edtnwrMI^J(}gh2woN5YZGMT!FNx@r`wN5%63TnBYZ46XGTd$g(-JZMmF*tQ( zV&t!li}ecj!P54tlTJWl1YjmE}Cf~eokwnxQ? zD{p^+9fjGFG#hyS)9lPl?rPq~r?;P`SiwAPTVnRHVsoELgw_e?vFNSB$vVOft>p)7 zOzK@HdgW`xn@blN3kwTOpiTm$9cF2vvK;1xe-~R{Xlta7Mvo6*wO|-upfLKuAHD?+0ODsVVh@OxE!5FyoMUaLUabHk)0Y*Og1L}wvoPm_4-hm3l=_2`XM8>ysT_^DmvKH%PUIj z@snGbPUs`?AIEKb{9cN>mR>h$3qc}fYGaOSzgSuAFEH=5O)$~^-BUQ$pS;N#9X%Z+ ztI*LZNDw?6Ww@?+xiMcs(v_9M905vvwIoKmYnVPQ1hLQ6RaK2&UaXJ=-^I@LETM651v&j_|73O!dv$;~L#(zZOI!hgHq5=a0?`&<=jY)qS(CA?|EeMM% z*7Q}~1#KC$jlK+(%2tq60(U+xHC5RzmEGj8Xx^(Jv_V*1*_ z>v(_ApIH3czB?c#xD42%P}46sMeWqpFSW1zlUteTcgP}VI)qRjufXBx4&~DV6bFYi zuyx(Qz8OgWqdst&IlCpvVJ!WcH0iuj$qH>s%DJ=-VYPURmC|i+8#Q{Ap%}}N{gQ&# zUfS){DAN(6^%Nn88$eXo!<#QYVQVJH#^+O4&<|`_n7pfQmxgEJ5Pu9Hiq3xo0oo)k!8kJIHNL{IpCBc2M>B0NgLOq%eV?oX9gTEr zJInxgn{u-f_jII5W=O0;Tu(!H(2CY`K?;dP0#ZVu#wXU=Yl3Pj!v#!sJ;xsX6zV6; zX6dB!j=2{W7B*J&;|Aq|QNWB+;mBzUb~T=9ujc3_m+(KE8#WB((A><37~(C!ZaCG^j>IKq_n{=Q0YfKmA?F3 zN+)%f`9XwpFH*ZrtribIy;#!3y1yv+TXvQHzEFRbDb+~1*ZkDNJk5q%kk&OcsC<7Z z@y>vHIZ^OH{rRhk$(fn6$QZGyv69l#LfIPe{j|F~3yPX)Y zv#}i0vaH(kAL(hj1#OWPO{q?#kfX*6Y+hBAhxXMvQG@9k*oD0&5V@F=T*p^l+2i^xrcu>se0pl!sxl+Vr4VKV5TZ#c!ckwA_Qx z4-+%ch&mN?!iohxSd#jzeQxeBT~YYGOk7UGX-Y~wEe*4JXee%euo#!pY##)vcUCHg zwVjJS=eR3>p|#y|acagiQ4oXp&~{1Sm~N{8!TN@Ght(rh%Nw^|4jwwB+r55p@UlYT zg-6jEqV)T+Cv~Rfd~(6zrbPiQ;Rl9hZD4NE{*bqg&%_mT9m2zKiVT)%gi4lfSf11L zIeSMNb!C95U{EYN{PaQ5hSofGIoaBr_|m0P$`a+$cO|>)=*^#+N>l=N)Ye(`xvclL zJ+xv8J3FC=pKd=$GsiY>XHxOj(iuax&ivP*8gbg@q~1N3u#!j%QD!Zt@gfJX0y(dG zr_qjF!hJ@9h(9H532zIrb3#Hx%|Gw^v7n#fvW)W5D@sD_4a-xitgZC` zSx2dZEmhO6Ql4a6{9$JHc)-Z*P1$zSjQmWQq@<)~0{!s&^yc%MZnLl7k$LxVx~tr? zX?Rz{6xI#rR8RWRJttAQs<&&re|LtLe4w_(NMY*8~0)l}bBPa!c~umd2OLf_!H(nJiE~doFS9fbSQXrRU!H5O+nSSo6u=&JHLs={Bf$A!BUYNBI+CXu}lnUkFxj$z}U F`fp&+mqh>o diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconSearchClose.imageset/Contents.json b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconSearchClose.imageset/Contents.json deleted file mode 100644 index 6c46a07..0000000 --- a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconSearchClose.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "iconSearchClose.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconSearchClose.imageset/iconSearchClose.png b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconSearchClose.imageset/iconSearchClose.png deleted file mode 100644 index b580f47183189347fb59f99eb9ea2561f44750f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 781 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9EO-XP4l)OOlRpde#$ zkh>GZx^prwfgF}}M_)$E)e-c?47?>7$x;TbZFuuKgJ5b3{qU~W@Q?=6#0RtAJ z8zN@R-mI;+Lj~Hi7uJ&24{_R?xh0M8YufGNx zZHdrX)_(Y*U2S2F<)Pk^mPDax?f>;_?JQ?JIAYk4^5o2i#7j0>E}iTr>gNBP5!u3h z*j~_H?<2$U$A#q&^WNzQ><4P>=097$`1iqt3(qRIzFNORwtfAl z*Bhf4Hgr6w{INia!9=-2-fjguLobJ58^0Q(gOSsehs}`;6FLMke2wcEkT5UcdS?aIUE)eHer3oGS|emu})5OLda;`N7vsSGPb4}Sh| zFqh$l^ugaB4wf>!kWxJK;b1L;Mz28Xj|Cew?%%Gk@vHo?_I>~FN5x77|2Z^%D!*nH z|J|ooD7)bJ2md?n1=0%+eejQQFOXdD2*`IU5MS`6)pXDHh!^XRhBoM}&w8}&YF@Y0 z9hMiLCvAEaK7+W6aW9=F*cO<&dPR9mTSlVbbZ2iApnAE<_ye6>_v~ zc*a!K!m)}`r%b=1e}UM6qSqbIIkXsU-rW8ub?}qbL;oe=o4k}`ewQA4pP{4tD0_O0 z-dEvu!gULGwna-M&T5$%ub#89Ax>c7wW=fAebx(ayR-L#+M&>R^*4#HPweElUN-lG z@4m|JdUN&P4gWuH$Y0+1;qJ#=VL@~dxG;VF+w!Yr=Df+k)XU)M>gTe~DWM4f4QEf% diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconStoryClose.imageset/Contents.json b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconStoryClose.imageset/Contents.json deleted file mode 100644 index 616218b..0000000 --- a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconStoryClose.imageset/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "filename" : "iconStoryClose_1x.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "iconStoryClose_2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconStoryClose.imageset/iconStoryClose_1x.png b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconStoryClose.imageset/iconStoryClose_1x.png deleted file mode 100644 index 314acfbe88f3532522fc6b392ec12b1f1399ccdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2413 zcmbVM3s4hh9$y}w2r6>o336xG039Alb~g!+1VThYfjc4*umsE5EV~;BB-xlO0xEi; z3I)V!kpq=-cp~U{K0vMHpb}IB#F+{{P^u@|lQ-~RrO z-~Ux2Ul}vcd5JRwLG$8brHSAlwLMOb;P;gaHWz{%+|*G~aw*NgF}PX>^MZUK$Zr>+ zRMrkXxNp7WW3kBP$%)pbRu4}%&x4lDwWe~@9+T}X!^|xf47L>8WJH2g+Bs}$y=dvS zSSg%?eOjwc06zSvNYLlD( zV3Wgqx`F*BfGKJ8IsIpFZ|V@X*ERd`#RsGvSNi)CJ1}2~|LSEe%`HAbXA~WLMA&`^ zZue{Q2?9!XS+gC$IsUuNC50Q)Rkek?4hNL{{cR@}>wr7VmX5&}7Qp6HhvuG3CzVR& z0;ODuD)mYyWvtRqnMqc6pV*0epN}jmo9pTs!Q){8{J-*t(Uq#(=f?`;cK1{s-mdn& zTA;#)p<&%{1^d_Rwd~K>RjCIRNs57!uc=XLU)PJ0J0BE8{3Bt9e21)NMU8JwNQ=h& zN5iNw#n^5wu?jo0yIQv;6w{vVzZ|!>n`MeF%qq;@8o%|$oQ-qty7#z$&lyA-0zOR% zU-3iP1)n(Yp1{P){-^z2R4Mrt`FZ#COOJXbtEvxr)L%HlB$}f-qblEf-Zm(B9y(7} zPVbF5)sWTr=;j0GM`v$@HMHNX>p^?EuPb_`SFBYJ7oIE|p3M$k!)@BD7I!pU{j~E~ z-`S4+eNCN*ujUu_#t-=FyzaQ>r9Inp|M}IJD=EF7UzhmTVfuAfnuZ4UufT)vJ#UoVXvcWwHw2>ho$5mdBJ{MG4dzLs&)PS{)0&&31>c8XLxt) z@nYkV;ZcsFxm)$^>4TlUvr;r^i`rgx4dy?(6TIoRAh+zh8TkEj2 z_@?VylEIwYBlQmsw`ROs6KEdV6lZ;U@<{9Pgtk37Upzn7Ur;pL^{wCJH$P1sFDp&y zq3!>6YYRG7|1A0kue+`<-j8n|AAj}TxCEN->k?DlRGJEAWR5;I)d)c@3vG`bw713s zf*hZzlNF3Y7B3=bEf**0bc&m&)dMsHg-i1EIFU^;a5|Nt)`?jot?evWO^R75K{8aP zkD@Zwu^S9j(uS4E#D;7_NU|gmaCn{w7|>D-4(Dk#I-@90%$l$(0vtb^};~{7$f(3JUJP|)gB*5UQ!vYQs zq)L=1eP_xYcoVZS8AdNcklfr{ZZ4lo8!`|~C=?li$bqceI>TaZ#l z!l2eOYFY=|EaK^O4kKoPU?*8<^)qI5#;Ht!oFRF*9>KV%jnxE@BxZ2>9D`=UIY}Ut zhSE|x#t5+33|5~>Gqf?2{x_y)KL5x8$gWH_RSD?Gcaj3H;ofFEgu*(t-VD0E@~H_Iob~ zva^qqMkXt^J*nz&{s5g@^yQ(E8x@Ta*5x;q-LJL+;LP(i7r` z4sG+1h3wPL(5uoa_x*|!tJ!&}UT!WoA>BmjwW2w1e+yWDkOpTo)KAT znHP_qYq{llCi_d5uCYtk(q3XmhpO%@>U7@`{@#x8w%WbLi#zsL=Eggw-5XP^e$4|c bUN8T~-aBh3>PBS!#Lkb4UMW4cLRt7vfYqZr diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconStoryClose.imageset/iconStoryClose_2x.png b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconStoryClose.imageset/iconStoryClose_2x.png deleted file mode 100644 index d3b025057c3d0f179067380a4367d445dc7598f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2539 zcmbVN2~-nz8Xp7~1r=Ro70+o1eO$>*CP9*DWRbXl5=a9=w64uCGl5Z(2}wADSPh~q zqF4~ti(0xxt);8QqZI)OA_auEN+_bJTj~p_OR2k_*jCy9An@$I?$!T$GxNx?Ka!rw*!H?+KTdAt5vYWY7OQ3)v$EcR+e7E zZ2|hL04Dz!_w1hl-`XIlFF)lglzk*`xN5hn8U#KeeyiU&cj_EB=nHj&5Rue>4A=Ws zaf5)6(*{>(a89mzH$P`nqV{l3(Q*I$@7|om;e0d;4wMhUm!`wjXFi^CF_F}0G}ARo z4XQC{CTSuxzM5omf6Hg@;ogm*I|`D;Up z^h5pn{=I?o1J?)E1@2pOL>;T{KK+t+2=ntyxS=4C&`6e#XOz9^|P1=Lt)f z|5$K|8|mE|penULv^P^b$v*N*OV{Orwve~>ADL5esnV>f4r>Z4efvpmkLZbbs$w^D zF#OEX4aWwq-*X$daBa!a`s?MbXlqNCx=nu7vG4xO(*^ymfs5Djs}9n#hNGRIH=XFX z(C}eLRnzfKOHNxxm7H`QrUlWBky! zvrU!#k9g`+E!uyaJ<`-RF(GB0XYKdRJ(hvni?eTuG76qu3%S`n7}dk8zI*4wVdsT; z*F6@6^rYQ-P;u{gO;UVWKy`0+q~qb~%9@igwFlB}J~?6Eyu;OF(E`h+fPE`Hy@QY`|A<#4*_wfByJJ*02nQVwyV}c;}ne62R9W0vz zK`xK!IJH@=h>{YFj*pW}BE`?t82}oBmWE^+aAG56h7+kIS})@~sHx|`G%4dG1SwF3 zA&g3hXV{6 zNv%{R|J|rL@FwFVo6QC(f@EZ5@H2#b#+ZZ%BoYaNVhD!u0D@<-=*@U0PjB)b(;%lz zgpoFwX+{sT8u3IX%`D>pXJ193GmNX%n?^GQa)xB$21LL|*{DWs{mX3UH!nfW)W$3OqX0LZRFF>d2$ebMR0O_I8h8Zc`%oyVsCS|Nv$}yK=OvFcFUjKsq_vjUp+P(pixXe~C&k1+fr7pvaWnp3!6YHo zGDaN^LZ)?i5``G_NgQ}Qk;gLR&;so2@G7iBOmLfT$Z2A{x;Fa2pWC|$#59NLZGcj6o z25zK6lR&oqhlWCc`v^OWuOdPIHOP@~ug&ck94rHt9A8A>Wqg%Uda%EYU{R@ZD;WrK z+8QYjjZ3x;_B3p0M5pKC)xF#+tI;89RYS#Bj^gf5oChEGh8fKg!J=Iws;By<$tDP61ZWTUvbK{-;xUS6;9u}{g zKd&XM=Ld1T(vRMAdJo}R`kqVl@g_Fa*`VQG1g%Cpd;#JjHR zo6JxNpck1xaP<3@rxn{eerqYdWX&8HYR`Td5M)1au`|$hm!wY$Z@nhw(C&ruPnx`r z+<4oiFE4hGWhV9cS7eo~tiYx%x=pFP?na3{BhE^&qr zq2ht@#1%n(7Sf`S6_F|mMOll2NBfCneX_0@B4et@0lH8 zAxkaIXPRR$7|WnQUO4*RtAD1Lp#L2Kty=VDh6JurU@+Xb`UhKzN%;bUF^LdIMk%BC z%h{kzLIfb004Ay=2#UsFe0)_10B(SlH~}maOF8)7vI;y-3~}(Q8GJGy;ld(uV5%IB zNDYYuQ#XJt2=BWH=c8hy0wk~!z^Nn&QUzPZ!H>#iqhtLt36C3vC^vBMi}ea|QT#9* zS0;yXEFzfzlF4KolSQO3DIk>@4+uPQR5F!HB72c23kg&zo5o<%DY)?;9#trZ;@RQ6 zfN^!`jDr^`l?ahx$A%O=gK)D!E zie*xqULqinB`P_1l>#N^2}nUWh{wUBRujcyh%FE>m=pk{ z5xf{MlR&2k1O$Le_9C!A1{K|k2beT);yh0VChB85aUMd?QyEM$jR`RbUQ8N=K&L@e zf`Bf72@IG<2LupZ0C~X^=R@UUw7h_XKP(5Wf&W@KA!RXYkpc~#V!T3@0K)N6f_RbM zOg&9H6J~f(A&@|)Qpp55ogp9y7Qzq#fFLH748+IBQ$Qb*z8ug)xUtcgAkxP*jwUHP zP^@Q=GOjlQ-Z;qsH=37h0MyqT2M_8K4TkXJ%i{M$x6}LC3>uz!O-FWG<^u!ssz!aCs z$L`o=VC!H!muMasGh?sT9k+3XU#lkln*X1+kyGDb82CgGH>+{Oayt z9yCnPHTN`)HM*XyO|aL}Yc39pw>6ZdrPgkHZe3#kCU>OTu-II6?(Gi^mBmI%*FKNp z^2*n<<~s!!HgNJSRDV%Tjk3``40JtSaEu+Qamecpgc2=9ggz4_sdZyR?Cfbk;n1Ge z0>8rsok`^`Hvf5QeQGEKpExD3|8SPcuzn)&81$<)aER+Qa=3t1rSnG2+C$wASv6Z7 zGQMna+2oz$3m_naud{D)i(?K*Q%An-_o=Gu^r@@3{ZnX0*j|FEyJ%fMrKIC)H{>WQVcK9?7UjSa zY?Z=V>+JonJ3$*ll_n(}X17xg_Lq*3@4Q*|MQ4QLaQ_8^OTIN1Y3i@JErTWIs@Yyl zWYDB|9Ao?7NAegMT~-v_i*$qeHBJMI!k!@|x#I3(hP8er zVtRDTy&mss)AYhu&g;U>&%`JigJ0cumF5@@+NKH1NFMp}-3CnTY0r&i7HZ>CO*gh` z)!$qThu0ga3({8Sls?`=xL9WV)A4DBi`Drrm)CFhA>>_92p_%X?O);dw9%}2RbM$c z<8$+Hmhp_oce8RJC*3Myn!WZmBZ^n;@3h)uMp(?gtZC7O(~F7(!slGl{b)75?&kG7 z9{H*RYyVNN3;BDAMl4VqIeB1f_o?j94}0J$Y`VDy$6OsP?R}$tclq0`Jxj6jF+CKs zY5UU^ev6KKUYQHpdnY75xO*$EYx5Gd#;nDWOk!|S9)w&rKFg{c2PVVingWwTE66BWtJ zQ#Z#Kgd4w#)>Q9)USyRs=W46RH*-M~?ZMiv9X}Jb55rHGKYOUpwOD{S-N?mhZyZ&|+MTL7SHwLx=5>^gaF96zA<2&ehjKcz zu?r1O+g~0@ZTYPAo!he%zH*t_(M!iI-mabbmB-d7waf-4r7h_z837K(i+(r>5=7z!CrwnDAN!oF%wW-}Lq7+IO z+N7yQQ;p45iVba{H0mXl%cjUB@0l*1-S^q|wtwt-o^yV`^E;pK=X?LoGr3_Q{s!}x z%-7J+FbE95M}X@$>RVR_eD?dPE`W<3H(;YcL&JAceQP#oWE5#=Xpb=?qlMALbyymQ z1*gzCR0dqc;(}-m4Nor-mqJTr2w_x45|fPshA&+KU`#p=h{6z&M6NF*nHiADXOJ>O zB59eaGG=H!}4p*p~vkWNkrq#FX|;^^drMPsneDA=b902T7-iP#9d z-zRn88xBYo3b|MWB0W7Fo{old_(=$qySqCA>4b1{as&~Mf(*8hB64I4mVaizGXyj~ zlPhF$*f2FCh0571!~vkOAH864=V;l2Pmuy+h7eJ>2oxNt_UZ$WPMgDVH}lgzD5uj9 zj5G#|!4?WYENTwRP38zWf@IFWp`QEv2L)hsiNrY_e`*VhHK#%#By0iQ_!N*oMGGP` zxC}%DL%`Y0r!fdyKr@%Cz2Rbg`3#DX!;j=}(mv-Z?6b)*CucYkwu(rhG1+P-?0+Z1 zz*B?_902AG?TB=BM7c$xP*@BS>+G@`iN+$4AE87Jotc>Nr%-1s3i$^pST}Tvkn&%_ zbQ(61!)H-ImzgX|5(B|yCjqdzKw^D4X&gSN7_<)k!3rV~8^{(2DQp@e5RU^uui;E4 z9qWd6qf=d6>5gtRB+AhlLvwd@N4ruSsfjLBcMRIa)j5&!Ssu@!ZC2;@vpoI(ln>=I z!SB{)j6C?)j(=Lq(`%nj13Qb+#IDn>3EQ1bwI%fXm2z;bX zPiBCm{~_HUVFFH~FrC6@_#}bR`X34k0h*6c_u@xS5dZ4rhi|{@+s|-t7^t^%g9vH0xWMfT-}yzbhslT)igDz2DFd+a z*8Z(ayXSR9l%#(jJisctJkdg@QR^gx4LKBk&KZ*+IZ$DHH`RJ({0TmHA$-G;CAHoy z$ZLJin4{Zz=P67q5#dBoCc0_%);*P|SI}a1Y}2mGp~B@0H2V|>SMScS94So9BUzhQ zyZebPB_#ZNN`eJ9o@RSOQ@`CoAkpjnqG%Q~646^!Ilnl+%li!)QjphuU12FM1!f_= zs!gURqHeb@8F;3A+w3J?Exyt|CSR^-kjNDW#aXHg_cb4z$#9BrMdg8;?Xhch(a+JY zJGm^8XRNPoaO%WR(V}Z__BM{cCN15*vGwGO?6UQ-Wh!X$$d4;_avLUc$a~-QOo4`f zn*~vZUBW64`MVPu9?oE1%Py$=O zwpirxGFC@!gwu}0zkF31&+FE-xc|N3QZjF*MhpeEdxXC<%@?E5H#>B*gLCOFJ}WWCl+grLtY!pwn~;aWn^6~@AM89m)$$$xw$r1ba1+% zxlFsnmT#zGZ6@nCF8g(Izt2fYWy_kq0z87>eMB_HlYTgmRhkxv}-p^x3M;d!2j4 zeP8bOnAd}P7eYN~*HqQkplCQB-Uuw%;Y~c3Zs&Dk59I#gB$FY?oyD?^3Meq{sxpbq zyC-?T+INmpdC9v9^5S`;VU-marBLW;|4{8IJ6@}ElZDcM%rvO{x;Scs*;!Lt%eD$- zQUCQzp0lfZv)W(#hjmCB&B>PvE2dKRYhGC-y9=o?8MR43Gq0YmwB|5!E-Lou+H{lJ z3LiUTq>@W#Ro$^lcMspCHv>vv+wktZU34w1sXlL8P|r0uZPFoCRx%+xHnAXc za#!Zy0mGA~GME1J^dl{n^Hd^5BESK0T}b;|tk zpmJHx=`P2uxv%#00NdA0+6T4>HtF3qlIa;)n~YM|jaSv$JqRksj8>n z7eEju{p+L?dMCKYYQ0NGDO9h}yoUS<^WG@H)lOvse5E@gELyz-I#@7I5-RPsSCH^S zE^59)<-2?K`}0Ib4q^S<$Vx+4$g*IRjp{~uKfp5O={vW)TRvi0WN9+$LD;4(s%+j^ zuKABC;PeuiM=p(QU%bdXSuFEWF4hb+mWAZ}>Yz&Lq=8iF)pxGiB-Ay}Y*LolsRo&6 z&P=v~r!OJzZTbGviG@a9VM^=4kqIEWd?@_7!SSC*%X7jod6@<22F|cml0oAmq$ha^ zlEJFedK-K(S)rkI-aQrO`X>(f)sqLYjk@O5TZ_F*A7x@$4mExG36hJnWf!j`>-Hm=zJ)`t4RhtJao@*-P^SiAJ^j9oy|sr&NB8%XXiz)@DnvGBcZ$;nnzJ_P&z7xg%FwHNXC+!+Oao0nH!aXudw~#Fh%M7;pJU#D~ zS=j#Dp=@bzB}v}>LPASj6&w0R@seaGSCcYv<^y<8UCD)>Qq|hAhqWC8HpcbDP4P%6 zCM@4w5!GtxMYLl)KgUUsI-1;pGAC@JkQx4m>sQEpL~R@T{pVb zB<2uH`DB6Z)vDI|yT{D>-$1h+!t(bRjlT+SFl_CMepPEC*LtvqdZX8+$jf2|{;p-f zDt2nu53og^o$!dM$)^iyj!x#r#1#x(u^RdxE{Rzp6C$fi$23$(a;(^_d zi5}fLDZ41D;)3@47elax8Z|OPRv|QHcQM{lx;1!Kj+YE7AedWeRIfIs^10=WdrA6G zk0uD_ZkozNrv?wl}Bj+B$RdW;#Xk_b#Je65I4^E9U1;sQ+RH5<>8&*Cy=v EC!;4H6aWAK diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconWebKitClose.imageset/Contents.json b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconWebKitClose.imageset/Contents.json deleted file mode 100755 index 14a2ee9..0000000 --- a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconWebKitClose.imageset/Contents.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "images" : [ - { - "filename" : "iconWebKitClose_1x.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "iconWebKitClose_2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "iconWebKitClose_3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "template-rendering-intent" : "template" - } -} diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconWebKitClose.imageset/iconWebKitClose_1x.png b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconWebKitClose.imageset/iconWebKitClose_1x.png deleted file mode 100644 index a52f5eb93825e3b4b08e5a3a97b3745412cb7fbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+ia!(h>kP619lNi|!81T5>SM&

+o^be3dijj`cn6ew?!Obfdt>Efq?K9H%=tdh|Z> zHffd67w?7tu6#A|edTjeHgd-*4ncP1L&+R&OV%j=&95q1bGUoAn}70Sv%dVq ayts{5T(${1MLY*Ofx*+&&t;ucLK6U88bxma diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconWebKitClose.imageset/iconWebKitClose_2x.png b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconWebKitClose.imageset/iconWebKitClose_2x.png deleted file mode 100644 index 0369a905ad7dd1ff7143fe7a9dd18c2bd4829f15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 253 zcmV_Ti4{Y|SeejaW~Wj_ zg;A*N%*cGG*H>7$W1+Ow8#0O9emZXy3ujxIN#Ixb<8_4|uPe^3Nd9q0@f7=S#Ls@qQ@H|y5biZ4@U6|;+oCxd00000NkvXXu0mjf DO`2ya diff --git a/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconWebKitClose.imageset/iconWebKitClose_3x.png b/Pods/REES46/REES46/Classes/Resources/Assets.xcassets/iconWebKitClose.imageset/iconWebKitClose_3x.png deleted file mode 100644 index bba526c5de6d301a894624376b2f30fe81a7c86e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhaw{&~7MhEy=Vy~fCP*nz?2V&fLe zaL%1MQ$0+X_J#@HxYUuv{fFo1pPdJodxE?)mrnV&(XZK0$yDm9{PD<86ULy$k*?mZ zOmmn#q?gxtOmDVm*i!gyuSRA-AmbAK^!vUm!h(I7=0x_UC>Zw5Jz`mRNwR=v$>wk21zf{!z7VpKQTCK}N>G zs94RHO=#D - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/REES46/REES46/Classes/Resources/StoriesView.xib b/Pods/REES46/REES46/Classes/Resources/StoriesView.xib deleted file mode 100644 index 374ce09..0000000 --- a/Pods/REES46/REES46/Classes/Resources/StoriesView.xib +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/REES46/REES46/Classes/Resources/StoryCollectionViewCell.xib b/Pods/REES46/REES46/Classes/Resources/StoryCollectionViewCell.xib deleted file mode 100644 index db2c3da..0000000 --- a/Pods/REES46/REES46/Classes/Resources/StoryCollectionViewCell.xib +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/REES46/REES46/Classes/Shared/ColorExtensions.swift b/Pods/REES46/REES46/Classes/Shared/ColorExtensions.swift deleted file mode 100644 index 2932b4f..0000000 --- a/Pods/REES46/REES46/Classes/Shared/ColorExtensions.swift +++ /dev/null @@ -1,32 +0,0 @@ -import Foundation -import UIKit - - -extension UIColor { - public func withBrightness(brightness: CGFloat) -> UIColor { - var H: CGFloat = 0, S: CGFloat = 0, B: CGFloat = 0, A: CGFloat = 0 - if getHue(&H, saturation: &S, brightness: &B, alpha: &A) { - B += (brightness - 1.0) - B = max(min(B, 1.0), 0.0) - return UIColor(hue: H, saturation: S, brightness: B, alpha: A) - } - return self - } - - public func withOpacity(from opacityString: String) -> UIColor { - guard let opacityValue = extractOpacity(from: opacityString) else { - return self - } - let colorWithOpacity = self.withAlphaComponent(opacityValue) - - return colorWithOpacity - } - - private func extractOpacity(from opacityString: String) -> CGFloat? { - let percentageString = opacityString.trimmingCharacters(in: CharacterSet(charactersIn: "%")) - if let percentage = Double(percentageString) { - return CGFloat(percentage) / 100.0 - } - return nil - } -} diff --git a/Pods/REES46/REES46/Classes/Stories/CollectionCell/StoriesCollectionViewPreviewCell.swift b/Pods/REES46/REES46/Classes/Stories/CollectionCell/StoriesCollectionViewPreviewCell.swift deleted file mode 100644 index b03be10..0000000 --- a/Pods/REES46/REES46/Classes/Stories/CollectionCell/StoriesCollectionViewPreviewCell.swift +++ /dev/null @@ -1,395 +0,0 @@ -import UIKit - -class StoriesCollectionViewPreviewCell: UICollectionViewCell { - - static let cellId = "NewStoriesPreviewCellId" - - var storyImage = UIImageView() - let storyBackCircle = UIView() - let storyWhiteBackCircle = UIView() - let storySuperClearBackCircle = UIView() - let storyAuthorNameLabel = UILabel() - let pinSymbolView = UIView() - let pinSymbolLabel = UILabel() - public let storiesBlockAnimatedLoader = StoriesSlideReloadIndicator() - - private var task: URLSessionDataTask? - - override init(frame: CGRect) { - super.init(frame: frame) - - let bgColor = UIColor(red: 214/255, green: 214/255, blue: 214/255, alpha: 0.8) - storyBackCircle.backgroundColor = .clear - storyBackCircle.contentMode = .scaleToFill - storyBackCircle.isUserInteractionEnabled = true - storyBackCircle.translatesAutoresizingMaskIntoConstraints = false - storyBackCircle.alpha = 1.0 - addSubview(storyBackCircle) - - storyWhiteBackCircle.backgroundColor = bgColor - storyWhiteBackCircle.contentMode = .scaleToFill - storyWhiteBackCircle.isHidden = true - storyWhiteBackCircle.translatesAutoresizingMaskIntoConstraints = false - storyBackCircle.addSubview(storyWhiteBackCircle) - - storySuperClearBackCircle.backgroundColor = .white - storySuperClearBackCircle.contentMode = .scaleToFill - storySuperClearBackCircle.isHidden = true - storySuperClearBackCircle.translatesAutoresizingMaskIntoConstraints = false - storyBackCircle.addSubview(storySuperClearBackCircle) - - storyImage.isHidden = false - storyImage.backgroundColor = bgColor - storyImage.alpha = 0.0 - storyImage.contentMode = .scaleAspectFit - storyImage.layer.masksToBounds = true - storyImage.translatesAutoresizingMaskIntoConstraints = false - storySuperClearBackCircle.addSubview(storyImage) - - storiesBlockAnimatedLoader.contentMode = .scaleToFill - storiesBlockAnimatedLoader.translatesAutoresizingMaskIntoConstraints = false - storiesBlockAnimatedLoader.lineWidth = SdkConfiguration.stories.iconBorderWidth + 1.6 //3.9 - storiesBlockAnimatedLoader.numSegments = Int(Double(Int.random(in: 9..<17))) - storiesBlockAnimatedLoader.animationDuration = Double(Int.random(in: 2..<3)) - storiesBlockAnimatedLoader.rotationDuration = 7 - storiesBlockAnimatedLoader.alpha = 0 - storyWhiteBackCircle.addSubview(storiesBlockAnimatedLoader) - - storyAuthorNameLabel.textAlignment = .center - storyAuthorNameLabel.numberOfLines = SdkConfiguration.stories.storiesBlockNumberOfLines - if SdkConfiguration.stories.storiesBlockCharWrapping { - storyAuthorNameLabel.lineBreakMode = .byTruncatingTail - } else { - storyAuthorNameLabel.lineBreakMode = .byWordWrapping //.byTruncatingTail - //storyAuthorNameLabel.allowsDefaultTighteningForTruncation = false - } - storyAuthorNameLabel.translatesAutoresizingMaskIntoConstraints = false - storyAuthorNameLabel.backgroundColor = bgColor - addSubview(storyAuthorNameLabel) - - pinSymbolView.backgroundColor = .white - pinSymbolView.translatesAutoresizingMaskIntoConstraints = false - pinSymbolView.isHidden = true - addSubview(pinSymbolView) - - pinSymbolLabel.text = "" - pinSymbolLabel.translatesAutoresizingMaskIntoConstraints = false - pinSymbolView.addSubview(pinSymbolLabel) - - makeStoiesBlockCollectionConstraints() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - deinit { - task?.cancel() - } - - private func setImage(imagePathSdk: String) { - guard let url = URL(string: imagePathSdk) else { - return - } - - self.storyImage.load.request(with: url) - } - - public func configure(story: Story) { - setImage(imagePathSdk: story.avatar) - if SdkConfiguration.stories.storiesBlockCharWrapping { - storyAuthorNameLabel.text = "\(story.name)".truncWords(length: SdkConfiguration.stories.storiesBlockCharCountWrap) - } else { - storyAuthorNameLabel.text = "\(story.name)" - } - pinSymbolView.isHidden = !story.pinned - } - - func configureCell(settings: StoriesSettings?, viewed: Bool, viewedLocalKey: Bool, storyId: String) { - storyWhiteBackCircle.isHidden = false - storySuperClearBackCircle.isHidden = false - layoutIfNeeded() - - if let settings = settings { - storyAuthorNameLabel.font = SdkStyle.shared.currentColorScheme?.storiesBlockSelectFontName.withSize(SdkStyle.shared.currentColorScheme!.storiesBlockSelectFontSize) - let labelColor = settings.color.hexToRGB() - - storiesBlockAnimatedLoader.strokeColor = .white - storyAuthorNameLabel.backgroundColor = .clear - - if (SdkStyle.shared.currentColorScheme?.storiesBlockFontColor == UIColor.sdkDefaultBlackColor) { - storyAuthorNameLabel.textColor = UIColor(red: labelColor.red, green: labelColor.green, blue: labelColor.blue, alpha: 1) - } else { - if SdkConfiguration.isDarkMode { - storyAuthorNameLabel.textColor = SdkConfiguration.stories.storiesBlockTextColorChanged_Dark - } else { - storyAuthorNameLabel.textColor = SdkConfiguration.stories.storiesBlockTextColorChanged_Light - } - } - - if SdkConfiguration.stories.storiesBlockFontNameChanged != nil { - if SdkConfiguration.stories.storiesBlockMinimumFontSizeChanged != nil { - storyAuthorNameLabel.font = SdkStyle.shared.currentColorScheme?.storiesBlockSelectFontName.withSize(SdkStyle.shared.currentColorScheme!.storiesBlockSelectFontSize) - } else { - storyAuthorNameLabel.font = SdkStyle.shared.currentColorScheme?.storiesBlockSelectFontName - } - } else { - if SdkConfiguration.stories.storiesBlockMinimumFontSizeChanged != 0.0 { - let size = SdkStyle.shared.currentColorScheme?.storiesBlockSelectFontSize ?? 15.0 - storyAuthorNameLabel.font = .systemFont(ofSize: CGFloat(size)) - } else { - storyAuthorNameLabel.font = .systemFont(ofSize: CGFloat(settings.fontSize)) - } - } - - storyBackCircle.backgroundColor = .white - - let pinBgColor = settings.backgroundPin.hexToRGB() - if SdkConfiguration.stories.pinColor != "" { - var updPinColor = SdkConfiguration.stories.pinColor.hexToRGB() - - if SdkConfiguration.isDarkMode { - updPinColor = SdkConfiguration.stories.pinColorDarkMode.hexToRGB() - } - - pinSymbolView.backgroundColor = UIColor(red: updPinColor.red, green: updPinColor.green, blue: updPinColor.blue, alpha: 1) - } else { - pinSymbolView.backgroundColor = UIColor(red: pinBgColor.red, green: pinBgColor.green, blue: pinBgColor.blue, alpha: 1) - } - - pinSymbolLabel.text = settings.pinSymbol - - let storiesViewdBg = settings.borderViewed.hexToRGB() - let storiesNotViewBg = settings.borderNotViewed.hexToRGB() - - if (viewed) { - if SdkConfiguration.stories.iconViewedBorderColor == "" { - storyWhiteBackCircle.backgroundColor = viewed ? - UIColor(red: storiesViewdBg.red, green: storiesViewdBg.green, blue: storiesViewdBg.blue, alpha: 1) : - UIColor(red: storiesViewdBg.red, green: storiesViewdBg.green, blue: storiesViewdBg.blue, alpha: 1) - - storiesBlockAnimatedLoader.strokeColor = viewed ? - //UIColor(red: storiesViewdBg.red, green: storiesViewdBg.green, blue: storiesViewdBg.blue, alpha: 1) : - //UIColor(red: storiesNotViewBg.red, green: storiesNotViewBg.green, blue: storiesNotViewBg.blue, alpha: 1) - UIColor(red: 255/255, green: 118/255, blue: 0/255, alpha: 1) : - UIColor(red: 255/255, green: 118/255, blue: 0/255, alpha: 1) - } else { - var updViewedColor = SdkConfiguration.stories.iconViewedBorderColor.hexToRGB() - let animatedLoaderColor = SdkConfiguration.stories.iconAnimatedLoaderColor.hexToRGB() - - if SdkConfiguration.isDarkMode { - updViewedColor = SdkConfiguration.stories.iconViewedBorderColorDarkMode.hexToRGB() - } - - storyWhiteBackCircle.backgroundColor = UIColor(red: updViewedColor.red, green: updViewedColor.green, blue: updViewedColor.blue, alpha: 1) - - storiesBlockAnimatedLoader.strokeColor = UIColor(red: animatedLoaderColor.red, green: animatedLoaderColor.green, blue: animatedLoaderColor.blue, alpha: 1) - } - } else { - if SdkConfiguration.stories.iconNotViewedBorderColor == "" { - storyWhiteBackCircle.backgroundColor = viewedLocalKey ? - UIColor(red: storiesViewdBg.red, green: storiesViewdBg.green, blue: storiesViewdBg.blue, alpha: 1) : - UIColor(red: storiesNotViewBg.red, green: storiesNotViewBg.green, blue: storiesNotViewBg.blue, alpha: 1) - - storiesBlockAnimatedLoader.strokeColor = UIColor(red: storiesViewdBg.red, green: storiesViewdBg.green, blue: storiesViewdBg.blue, alpha: 1) - } else { - var updNotViewedColor = SdkConfiguration.stories.iconNotViewedBorderColor.hexToRGB() - let animatedLoaderColor = SdkConfiguration.stories.iconAnimatedLoaderColor.hexToRGB() - - if SdkConfiguration.isDarkMode { - updNotViewedColor = SdkConfiguration.stories.iconNotViewedBorderColorDarkMode.hexToRGB() - } - - storyWhiteBackCircle.backgroundColor = UIColor(red: updNotViewedColor.red, green: updNotViewedColor.green, blue: updNotViewedColor.blue, alpha: 1) - - storiesBlockAnimatedLoader.strokeColor = UIColor(red: animatedLoaderColor.red, green: animatedLoaderColor.green, blue: animatedLoaderColor.blue, alpha: 1) - } - } - storyWhiteBackCircle.layer.masksToBounds = true - if storyImage.image == nil { - if SdkConfiguration.stories.iconDisplayFormatSquare { - //Square implementation not needed corner - } else { - storyWhiteBackCircle.layer.cornerRadius = storyWhiteBackCircle.frame.width / 2 - } - } - - if SdkConfiguration.stories.iconViewedTransparency != SdkConfiguration.stories.defaultIconViewedTransparency { - UIView.animate(withDuration: 1.0, animations: { - self.storyImage.alpha = SdkConfiguration.stories.iconViewedTransparency - }) - } else { - if (viewed || viewedLocalKey) { - UIView.animate(withDuration: 1.0, animations: { - self.storyImage.alpha = 0.9 - }) - } else { - UIView.animate(withDuration: 1.0, animations: { - self.storyImage.alpha = 1.0 - }) - } - } - - storySuperClearBackCircle.backgroundColor = .white - storySuperClearBackCircle.alpha = 1.0 - storySuperClearBackCircle.layer.masksToBounds = true - if SdkConfiguration.stories.iconDisplayFormatSquare { - //Square implementation coming soon - } else { - storySuperClearBackCircle.layer.cornerRadius = storySuperClearBackCircle.frame.width / 2 - } - } else { - UIView.animate(withDuration: 1.0, animations: { - self.storyImage.alpha = 0.9 - }) - storyBackCircle.backgroundColor = .white - storyWhiteBackCircle.backgroundColor = .white - storySuperClearBackCircle.backgroundColor = .white - pinSymbolView.isHidden = true - } - - let sId = storyId - DispatchQueue.onceTechService(token: sId) { - - if SdkConfiguration.stories.storiesBlockPreloadIndicatorDisabled { - //Cell indicator disabled - } else { - UIView.animate(withDuration: 0.7, animations: { - self.storiesBlockAnimatedLoader.alpha = 1 - }) - } - storiesBlockAnimatedLoader.startAnimating() - - let preffixStart = Double(Int.random(in: 3..<5)) - let preffixEnd = Double(Int.random(in: 8..<11)) - DispatchQueue.main.asyncAfter(deadline: .now() + Double(Double.random(in: preffixStart.. SdkConfiguration.stories.iconSize) { - let delta = (SdkConfiguration.stories.labelWidth / 2) + 10 - storyAuthorNameLabel.leadingAnchor.constraint(equalTo: storyBackCircle.leadingAnchor, constant: -delta).isActive = true - storyAuthorNameLabel.trailingAnchor.constraint(equalTo: storyBackCircle.trailingAnchor, constant: delta).isActive = true - } else { - storyAuthorNameLabel.leadingAnchor.constraint(equalTo: storyBackCircle.leadingAnchor, constant: -10).isActive = true - storyAuthorNameLabel.trailingAnchor.constraint(equalTo: storyBackCircle.trailingAnchor, constant: 10).isActive = true - } - - pinSymbolView.bottomAnchor.constraint(equalTo: storyBackCircle.bottomAnchor).isActive = true - if SdkConfiguration.stories.iconDisplayFormatSquare { - pinSymbolView.trailingAnchor.constraint(equalTo: storyBackCircle.trailingAnchor, constant: 0).isActive = true - } else { - pinSymbolView.trailingAnchor.constraint(equalTo: storyBackCircle.trailingAnchor, constant: -4).isActive = true - } - pinSymbolView.heightAnchor.constraint(equalToConstant: 32).isActive = true - pinSymbolView.widthAnchor.constraint(equalToConstant: 32).isActive = true - - pinSymbolLabel.centerXAnchor.constraint(equalTo: pinSymbolView.centerXAnchor).isActive = true - pinSymbolLabel.centerYAnchor.constraint(equalTo: pinSymbolView.centerYAnchor).isActive = true - } - - public func showSdkPreloadIndicator() { - storiesBlockAnimatedLoader.startAnimating() - } - - public func hideSdkPreloadIndicator() { - storiesBlockAnimatedLoader.stopAnimating() - } - - override func layoutSubviews() { - super.layoutSubviews() - if SdkConfiguration.stories.iconDisplayFormatSquare { - //Square implementation coming soon - } else { - storyBackCircle.layer.cornerRadius = storyBackCircle.frame.width / 2 - storyImage.layer.cornerRadius = storyImage.frame.width / 2 - storyWhiteBackCircle.layer.cornerRadius = storyWhiteBackCircle.frame.width / 2 - storySuperClearBackCircle.layer.cornerRadius = storySuperClearBackCircle.frame.width / 2 - pinSymbolView.layer.cornerRadius = pinSymbolView.frame.width / 2 - - if storyImage.image == nil { - storyBackCircle.layer.cornerRadius = bounds.width / 2 - } - } - } -} - - -private extension UIColor { - private var rgbHexAlpha: (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) { - var red = CGFloat.zero - var green = CGFloat.zero - var blue = CGFloat.zero - var alpha = CGFloat.zero - - guard getRed(&red, green: &green, blue: &blue, alpha: &alpha) else { - return (1.0, 1.0, 1.0, 1.0) - } - return (red, green, blue, alpha) - } - - static func == (lhs: UIColor, rhs: UIColor) -> Bool { - return lhs.rgbHexAlpha == rhs.rgbHexAlpha - } -} - - -extension String { - enum TruncationPosition { - case head - case middle - case tail - } - - public func truncWords(length: Int, trailing: String = "…") -> String { - if (self.count <= length) { - return self - } - var truncated = self.prefix(length) - while truncated.last != " " { - - guard truncated.count > length else { - break - } - truncated = truncated.dropLast() - } - return truncated + trailing - } -} diff --git a/Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/Data/ImageLoader.swift b/Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/Data/ImageLoader.swift deleted file mode 100644 index 240b606..0000000 --- a/Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/Data/ImageLoader.swift +++ /dev/null @@ -1,33 +0,0 @@ -import Foundation -import UIKit - -protocol ImageLoadingProtocol { - func loadImage(from url: URL, completion: @escaping (Result) -> Void) -} - -class DefaultImageLoader: ImageLoadingProtocol { - - func loadImage(from url: URL, completion: @escaping (Result) -> Void) { - let task = URLSession.shared.dataTask(with: url) { data, response, error in - DispatchQueue.main.async { - if let error = error { - completion(.failure(ImageLoaderError.networkError(error))) - return - } - - if let httpResponse = response as? HTTPURLResponse, !(200...299).contains(httpResponse.statusCode) { - completion(.failure(ImageLoaderError.serverError(httpResponse.statusCode))) - return - } - - guard let data = data, let image = UIImage(data: data) else { - completion(.failure(ImageLoaderError.dataConversionError)) - return - } - - completion(.success(image)) - } - } - task.resume() - } -} diff --git a/Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/Entities/ImageData.swift b/Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/Entities/ImageData.swift deleted file mode 100644 index e29d781..0000000 --- a/Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/Entities/ImageData.swift +++ /dev/null @@ -1,8 +0,0 @@ -import Foundation -import UIKit - -public struct ImageData { - let url: URL - let image: UIImage? - let error: Error? -} diff --git a/Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/ErrorHandler/ImageLoaderError.swift b/Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/ErrorHandler/ImageLoaderError.swift deleted file mode 100644 index 2ead731..0000000 --- a/Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/ErrorHandler/ImageLoaderError.swift +++ /dev/null @@ -1,21 +0,0 @@ -import Foundation - -enum ImageLoaderError: Error { - case networkError(Error) - case serverError(Int) - case dataConversionError - case unknownError - - var localizedDescription: String { - switch self { - case .networkError(let error): - return error.localizedDescription - case .serverError(let statusCode): - return "Server returned status code \(statusCode)" - case .dataConversionError: - return "Failed to convert data to image" - case .unknownError: - return "An unknown error occurred" - } - } -} diff --git a/Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/UseCases/ImageLoading.swift b/Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/UseCases/ImageLoading.swift deleted file mode 100644 index a2153db..0000000 --- a/Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/UseCases/ImageLoading.swift +++ /dev/null @@ -1,6 +0,0 @@ -import Foundation -import UIKit - -protocol ImageLoading { - func loadImage(from url: URL, completion: @escaping (Result) -> Void) -} diff --git a/Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/Views/SlideView.swift b/Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/Views/SlideView.swift deleted file mode 100644 index 8214b80..0000000 --- a/Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/Views/SlideView.swift +++ /dev/null @@ -1,9 +0,0 @@ -import UIKit - -protocol SlideView: AnyObject { - func showLoadingIndicator() - func hideLoadingIndicator() - func showImage(_ image: UIImage) - func showError() - func showReloadButton() -} diff --git a/Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/Views/SlideViewController.swift b/Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/Views/SlideViewController.swift deleted file mode 100644 index 9bd1ba4..0000000 --- a/Pods/REES46/REES46/Classes/Stories/ConnectionAwareLoader/Views/SlideViewController.swift +++ /dev/null @@ -1,143 +0,0 @@ -import UIKit - -public class SlideViewController: UIViewController, SlideView { - - var imageView: UIImageView! - var loadingIndicator: UIActivityIndicatorView! - var reloadButton: UIButton! - var errorLabel: UILabel! - var loadTimer: Timer? - var autoReloadTimer: Timer? - var currentURL: URL? - private var reloadTimer: Timer? - private let imageLoader: ImageLoadingProtocol - - struct Constants { - static let imageURL = URL(string: "https://example.com/image.jpg")! - static let loadingTimeout: TimeInterval = 15 - static let reloadIconName = "iconReload" - static let messageKey = "error_message_failed_to_load" - static let errorMessageComment = "Error message for failed data loading" - static let titleKey = "all" - } - - init(imageLoader: ImageLoadingProtocol) { - self.imageLoader = imageLoader - super.init(nibName: nil, bundle: nil) - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - public override func viewDidLoad() { - super.viewDidLoad() - setupUI() - loadImage(from: Constants.imageURL) - loadTimer = Timer.scheduledTimer(timeInterval: Constants.loadingTimeout, target: self, selector: #selector(checkLoadingTimeout), userInfo: nil, repeats: false) - } - - func setupUI() { - imageView = UIImageView(frame: view.bounds) - imageView.contentMode = .scaleAspectFit - view.addSubview(imageView) - - if #available(iOS 13.0, *) { - loadingIndicator = UIActivityIndicatorView(style: .large) - } - loadingIndicator.center = view.center - view.addSubview(loadingIndicator) - - reloadButton = UIButton(type: .system) - reloadButton.setImage(UIImage(named: Constants.reloadIconName), for: .normal) - reloadButton.frame = CGRect(x: (view.bounds.width - 50) / 2, y: view.bounds.height / 2 - 25, width: 50, height: 50) - reloadButton.addTarget(self, action: #selector(reloadData), for: .touchUpInside) - reloadButton.isHidden = true - view.addSubview(reloadButton) - - errorLabel = UILabel(frame: CGRect(x: 20, y: view.bounds.height / 2 + 50, width: view.bounds.width - 40, height: 50)) - errorLabel.textAlignment = .center - errorLabel.numberOfLines = 0 - errorLabel.isHidden = true - view.addSubview(errorLabel) - } - - func showLoadingIndicator() { - loadingIndicator.startAnimating() - reloadButton.isHidden = true - errorLabel.isHidden = true - } - - func hideLoadingIndicator() { - loadingIndicator.stopAnimating() - } - - func showImage(_ image: UIImage) { - hideLoadingIndicator() - imageView.image = image - } - - func showError() { - hideLoadingIndicator() - errorLabel.text = NSLocalizedString(Constants.messageKey, comment: Constants.errorMessageComment) - - errorLabel.isHidden = false - reloadButton.isHidden = false - - autoReloadTimer = Timer.scheduledTimer(timeInterval: Constants.loadingTimeout, target: self, selector: #selector(reloadData), userInfo: nil, repeats: false) - } - - func showReloadButton() { - hideLoadingIndicator() - reloadButton.isHidden = false - } - - @objc func reloadData() { - if let url = currentURL { - loadImage(from: url) - } - } - - @objc func checkLoadingTimeout() { - if imageView.image == nil { - showReloadButton() - } - } - - func loadImage(from url: URL) { - currentURL = url - showLoadingIndicator() - startLoadingTimeout() - - let task = URLSession.shared.dataTask(with: url) { [weak self] data, response, error in - DispatchQueue.main.async { - guard let self = self else { return } - self.loadTimer?.invalidate() - - if let error = error { - self.showError() - return - } - - if let httpResponse = response as? HTTPURLResponse, !(200...299).contains(httpResponse.statusCode) { - self.showError() - return - } - - guard let data = data, let image = UIImage(data: data) else { - self.showError() - return - } - - self.showImage(image) - } - } - task.resume() - } - - private func startLoadingTimeout() { - reloadTimer = Timer.scheduledTimer(withTimeInterval: Constants.loadingTimeout, repeats: false) { [weak self] _ in - self?.showReloadButton() - } - } -} diff --git a/Pods/REES46/REES46/Classes/Stories/StoriesView.swift b/Pods/REES46/REES46/Classes/Stories/StoriesView.swift deleted file mode 100644 index 5162753..0000000 --- a/Pods/REES46/REES46/Classes/Stories/StoriesView.swift +++ /dev/null @@ -1,373 +0,0 @@ -import Foundation -import UIKit - -public protocol StoriesCommunicationProtocol: AnyObject { - func receiveIosLink(text: String) - func receiveSelectedProductData(products: StoriesElement) - func receiveSelectedCarouselProductData(products: StoriesProduct) - func receiveSelectedPromocodeProductData(promoCodeSlide: StoriesPromoCodeElement) -} - -public protocol StoriesViewLinkProtocol: AnyObject { - func linkIosExternalUse(url: String) - func sendStructSelectedStorySlide(storySlide: StoriesElement) - func structOfSelectedCarouselProduct(product: StoriesProduct) - func sendStructSelectedPromocodeSlide(promoCodeSlide: StoriesPromoCodeElement) - func reloadStoriesCollectionSubviews() - func updateBgColor() -} - -public class StoriesView: UIView, UINavigationControllerDelegate { - - let cellId = "StoriesCollectionViewPreviewCell" - - private var collectionView: UICollectionView = { - let testFrame = CGRect(x: 0, y: 0, width: 300, height: 135) - let layout = UICollectionViewFlowLayout() - //layout.horizontalAlignment = .left - layout.minimumLineSpacing = 10 - layout.minimumInteritemSpacing = 10 - layout.scrollDirection = .horizontal - - layout.itemSize = CGSize(width: SdkConfiguration.stories.iconSize, height: 135) - layout.sectionInset = UIEdgeInsets(top: 0, left: SdkConfiguration.stories.iconMarginX, bottom: 0, right: SdkConfiguration.stories.iconMarginX) - - let collectionView = UICollectionView(frame: testFrame, collectionViewLayout: layout) - collectionView.showsHorizontalScrollIndicator = false - collectionView.showsVerticalScrollIndicator = false - return collectionView - }() - - private var stories: [Story]? - private var settings: StoriesSettings? - private var sdk: PersonalizationSDK? - - public weak var communicationDelegate: StoriesCommunicationProtocol? - - private var mainVC: UIViewController? - private var code: String = "" - - private var isInDownloadMode: Bool = true - - override init(frame: CGRect) { - super.init(frame: frame) - commonInit() - } - - required init?(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - commonInit() - } - - private func commonInit() { - self.addSubview(collectionView) - - collectionView.translatesAutoresizingMaskIntoConstraints = false - NSLayoutConstraint(item: collectionView, attribute: NSLayoutConstraint.Attribute.left, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self, attribute: NSLayoutConstraint.Attribute.left, multiplier: 1, constant: 0).isActive = true - NSLayoutConstraint(item: collectionView, attribute: NSLayoutConstraint.Attribute.right, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self, attribute: NSLayoutConstraint.Attribute.right, multiplier: 1, constant: 0).isActive = true - NSLayoutConstraint(item: collectionView, attribute: NSLayoutConstraint.Attribute.top, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self, attribute: NSLayoutConstraint.Attribute.top, multiplier: 1, constant: 0).isActive = true - NSLayoutConstraint(item: collectionView, attribute: NSLayoutConstraint.Attribute.bottom, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self, attribute: NSLayoutConstraint.Attribute.bottom, multiplier: 1, constant: 0).isActive = true - configureView() - - NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(didEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil) - } - - @objc - func willEnterForeground() { - // - } - - @objc - func didEnterBackground() { - // - } - - public override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { - super.traitCollectionDidChange(previousTraitCollection) - let userInterfaceStyle = traitCollection.userInterfaceStyle - if UIApplication.shared.applicationState == .inactive { - switch userInterfaceStyle { - case .unspecified: - DispatchQueue.main.async { - self.collectionView.backgroundColor = SdkConfiguration.stories.storiesBlockBackgroundColorChanged_Light - self.reloadStoriesCollectionSubviews() - self.updateBgColor() - } - case .light: - DispatchQueue.main.async { - self.collectionView.backgroundColor = SdkConfiguration.stories.storiesBlockBackgroundColorChanged_Light - self.reloadStoriesCollectionSubviews() - self.updateBgColor() - } - case .dark: - DispatchQueue.main.async { - self.collectionView.backgroundColor = SdkConfiguration.stories.storiesBlockBackgroundColorChanged_Dark - self.reloadStoriesCollectionSubviews() - self.updateBgColor() - } - @unknown default: - break - } - } else { - DispatchQueue.main.async { - self.updateBgColor() - } - } - } - - private func configureView() { - collectionView.delegate = self - collectionView.dataSource = self - collectionView.register(StoriesCollectionViewPreviewCell.self, forCellWithReuseIdentifier: StoriesCollectionViewPreviewCell.cellId) - self.setBgColor() - - UserDefaults.standard.set(false, forKey: "MuteSoundSetting") - } - - public func configure(sdk: PersonalizationSDK, mainVC: UIViewController, code: String) { - self.sdk = sdk - self.mainVC = mainVC - self.code = code - loadStoriesData() - } - - private func setBgColor() { - if SdkConfiguration.isDarkMode { - DispatchQueue.main.async { - self.collectionView.backgroundColor = SdkConfiguration.stories.storiesBlockBackgroundColorChanged_Dark - self.reloadStoriesCollectionSubviews() - } - } else { - DispatchQueue.main.async { - self.collectionView.backgroundColor = SdkConfiguration.stories.storiesBlockBackgroundColorChanged_Light - self.reloadStoriesCollectionSubviews() - } - } - } - - private func setBgColor(color: String) { - let hex = color.hexToRGB() - DispatchQueue.main.async { - self.collectionView.backgroundColor = UIColor(red: hex.red, green: hex.green, blue: hex.blue, alpha: 0) - } - } - - private func loadStoriesData() { - sdk?.getStories(code: code) { result in - switch result { - case let .success(response): - self.stories = response.stories - self.settings = response.settings - DispatchQueue.main.async { - self.isInDownloadMode = false - self.collectionView.reloadData() - } - case let .failure(error): - switch error { - case let .custom(customError): - print("Error:", customError) - default: - print("Error:", error.description) - } - } - } - } - - public func pauseStoryNow() { - NotificationCenter.default.post(name: NSNotification.Name(rawValue: "ExternalActionStoryPause"), object: nil) - } - - public func playStoryNow() { - NotificationCenter.default.post(name: NSNotification.Name(rawValue: "ExternalActionStoryPlay"), object: nil) - } -} - - -extension StoriesView: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { - public func numberOfSections(in collectionView: UICollectionView) -> Int { - return 1 - } - - public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - return isInDownloadMode ? 4 : stories?.count ?? 0 - } - - public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { - if (SdkConfiguration.stories.labelWidth > SdkConfiguration.stories.iconSize) { - return SdkConfiguration.stories.labelWidth / 2 + SdkConfiguration.stories.iconMarginX * 2 - } else { - return 18 - } - } - - public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { - guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: StoriesCollectionViewPreviewCell.cellId, for: indexPath) as? StoriesCollectionViewPreviewCell else {return UICollectionViewCell()} - - if let currentStory = stories?[indexPath.row] { - - let storyId = currentStory.id - let storyName = "viewed.slide." + storyId - - var allStoriesMainArray: [String] = [] - for (index, _) in currentStory.slides.enumerated() { - //print("Story has \(index + 1): \(currentStory.slides[(index)].id)") - allStoriesMainArray.append(currentStory.slides[(index)].id) - } - - let viewedSlidesStoriesCachedArray: [String] = UserDefaults.standard.getValue(for: UserDefaults.Key(storyName)) as? [String] ?? [] - if (viewedSlidesStoriesCachedArray.count == allStoriesMainArray.count) { - cell.configureCell(settings: settings, viewed: currentStory.viewed, viewedLocalKey: true, storyId: currentStory.id) - cell.configure(story: currentStory) - } else { - cell.configureCell(settings: settings, viewed: currentStory.viewed, viewedLocalKey: false, storyId: currentStory.id) - cell.configure(story: currentStory) - } - } else { - if (isInDownloadMode && stories == nil) { - cell.storyBackCircle.alpha = 0.0 - - var placeholderColor = SdkConfiguration.stories.iconPlaceholderColor.hexToRGB() - - if SdkConfiguration.isDarkMode { - placeholderColor = SdkConfiguration.stories.iconPlaceholderColorDarkMode.hexToRGB() - } - - cell.storyBackCircle.backgroundColor = UIColor(red: placeholderColor.red, green: placeholderColor.green, blue: placeholderColor.blue, alpha: 1.0) - UIView.animate(withDuration: 5.0, animations: { - cell.storyBackCircle.alpha = 1.0 - }) - } - } - - return cell - } - - public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - showStoriesByUserClick(at: indexPath.row) - } - - public func showStories() { - guard let firstStory = stories?.first else { - return - } - - guard let index = stories?.firstIndex(where: { $0.id == firstStory.id }) else { - return - } - - showStories(at: index, for: firstStory) - } - private func showStoriesByUserClick(at index: Int) { - guard let story = stories?[index] else { - return - } - - showStories(at: index, for: story) - } - - private func showStories(at index: Int, for story: Story) { - let storyVC = StoryViewController() - storyVC.sdkLinkDelegate = self - storyVC.sdk = sdk - storyVC.stories = stories ?? [] - - let sId = "viewed.slide." + story.id - - var allSlidesIDs: [String] = [] - for slide in story.slides { - allSlidesIDs.append(slide.id) - } - - let viewedSlidesCachedIDs: [String] = UserDefaults.standard.getValue(for: UserDefaults.Key(sId)) as? [String] ?? [] - - if let lastViewedSlideID = viewedSlidesCachedIDs.last, - let defaultIndex = allSlidesIDs.firstIndex(of: lastViewedSlideID) { - let nextIndex = defaultIndex + 1 - storyVC.currentPosition = IndexPath(row: nextIndex, section: index) - storyVC.startWithIndexPath = IndexPath(row: nextIndex, section: index) - } else { - storyVC.currentPosition = IndexPath(row: story.startPosition, section: index) - storyVC.startWithIndexPath = IndexPath(row: story.startPosition, section: index) - } - - storyVC.modalPresentationStyle = .fullScreen - mainVC?.present(storyVC, animated: true) - } -} - - -extension StoriesView: StoriesViewLinkProtocol { - public func sendStructSelectedStorySlide(storySlide: StoriesElement) { - self.communicationDelegate?.receiveSelectedProductData(products: storySlide) - print("\nSDK Received story slide button tap links for external use:") - printSlideObject(objElementClass: storySlide) - } - - public func structOfSelectedCarouselProduct(product: StoriesProduct) { - self.communicationDelegate?.receiveSelectedCarouselProductData(products: product) - print("\nSDK Received carousel selected product link for external use:") - printCarouselObject(objProductClass: product) - } - - public func sendStructSelectedPromocodeSlide(promoCodeSlide: StoriesPromoCodeElement) { - self.communicationDelegate?.receiveSelectedPromocodeProductData(promoCodeSlide: promoCodeSlide) - print("\nSDK Received promocode slide button tap links for external use:") - printPromoObject(objPromoClass: promoCodeSlide) - } - - public func linkIosExternalUse(url: String) { - self.communicationDelegate?.receiveIosLink(text: url) - print("\nSDK Received linkIos for external use: \(url)\n\n") - } - - public func reloadStoriesCollectionSubviews() { - UICollectionView.performWithoutAnimation { - self.collectionView.layoutIfNeeded() - self.collectionView.reloadData() - } - } - - public func updateBgColor() { - DispatchQueue.main.async { - self.collectionView.reloadItems(at: self.collectionView.indexPathsForVisibleItems) - self.setBgColor() - } - } - - public func printSlideObject(objElementClass: StoriesElement) { - print("Deeplink iOS: \(objElementClass.deeplinkIos ?? "")") - print("Link iOS: \(objElementClass.linkIos ?? "")") - print("Link Web: \(objElementClass.link ?? "")") - } - - public func printCarouselObject(objProductClass: StoriesProduct) { - print("ProductName: \(objProductClass.name)") - print("ProductUrl: \(objProductClass.url)") - print("ProductCategory: \(objProductClass.category.name)") - print("ProductCategoryUrl: \(objProductClass.category.url)") - print("ProductPrice: \(objProductClass.price)") - print("ProductPriceFormatted: \(objProductClass.price_formatted)") - print("ProductPicture: \(objProductClass.picture)\n\n") - } - - public func printPromoObject(objPromoClass: StoriesPromoCodeElement) { - print("Deeplink iOS: \(objPromoClass.deeplinkIos )") - print("Link Web: \(objPromoClass.url )") - } -} - -class CustomCollectionViewCell: UICollectionViewCell { - override var isSelected: Bool { - didSet { - contentView.backgroundColor = isSelected ? .red : .white - } - } -} - - -extension UIViewController { - func embedInNavigationController() -> UINavigationController { - return UINavigationController(rootViewController: self) - } -} diff --git a/Pods/REES46/REES46/Classes/Stories/StoryViewController/CollectionViewCell/StoryCollectionViewCell.swift b/Pods/REES46/REES46/Classes/Stories/StoryViewController/CollectionViewCell/StoryCollectionViewCell.swift deleted file mode 100644 index cc793aa..0000000 --- a/Pods/REES46/REES46/Classes/Stories/StoryViewController/CollectionViewCell/StoryCollectionViewCell.swift +++ /dev/null @@ -1,1121 +0,0 @@ -import UIKit -import AVKit -import AVFoundation - -protocol StoryCollectionViewCellDelegate: AnyObject { - func didTapUrlButton(url: String, slide: Slide) - func didTapOpenLinkExternalServiceMethod(url: String, slide: Slide) - func sendStructSelectedStorySlide(storySlide: StoriesElement) - func sendStructSelectedPromocodeSlide(promoCodeSlide: StoriesPromoCodeElement) - func openProductsCarouselView(withProducts: [StoriesProduct], hideLabel: String) - func closeProductsCarousel() -} - -class StoryCollectionViewCell: UICollectionViewCell { - - static let cellId = "StoryCollectionViewCellId" - - let videoView = UIView() - let storySlideImageView = UIImageView() - let storyButton = StoryButton() - let productsButton = ProductsButton() - let muteButton = UIButton() - let reloadButton = ReloadButton() - - private var currentSlide: Slide? - private var selectedElement: StoriesElement? - private var selectedProductsElement: StoriesElement? - private var selectedPromoCodeElement: StoriesPromoCodeElement? - - public let productWithPromocodeSuperview = PromoCodeView() - public let promocodeBannerView = PromocodeBanner(location: PromocodeBannerLocation.bottomLeft) - public var sdkPopupAlertView = SdkPopupAlertView(title: SdkConfiguration.stories.defaultCopyToClipboardMessageText) - - public weak var cellDelegate: StoryCollectionViewCellDelegate? - public weak var mainStoriesDelegate: StoriesViewLinkProtocol? - - private var customConstraints = [NSLayoutConstraint]() - - var player = AVPlayer() - private let timeObserverKeyPath: String = "timeControlStatus" - - private var audioSession: AVAudioSession! - var outputVolumeObservation: NSKeyValueObservation? - - fileprivate let kVolumeKey = "volume" - fileprivate var kAudioLevel : Float = 0.0 - - override init(frame: CGRect) { - super.init(frame: frame) - - promocodeBannerView.removeFromSuperview() - - if currentSlide?.backgroundColor != nil { - //let color = currentSlide?.backgroundColor.hexToRGB() - //self.backgroundColor = UIColor(red: color!.red, green: color!.green, blue: color!.blue, alpha: 1) - } else { - self.backgroundColor = .black - } - videoView.backgroundColor = .black - - NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(didEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil) - - NotificationCenter.default.addObserver(self, selector: #selector(pauseVideo(_:)), name: .init(rawValue: "PauseVideoLongTap"), object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(playVideo(_:)), name: .init(rawValue: "PlayVideoLongTap"), object: nil) - - audioSession = AVAudioSession.sharedInstance() - listenVolumeButton() - - videoView.contentMode = .scaleToFill - videoView.isOpaque = true - videoView.clearsContextBeforeDrawing = true - videoView.autoresizesSubviews = true - videoView.translatesAutoresizingMaskIntoConstraints = false - addSubview(videoView) - - storySlideImageView.contentMode = .scaleAspectFit - storySlideImageView.clipsToBounds = true - storySlideImageView.translatesAutoresizingMaskIntoConstraints = false - addSubview(storySlideImageView) - - productWithPromocodeSuperview.translatesAutoresizingMaskIntoConstraints = false - productWithPromocodeSuperview.isHidden = true - productWithPromocodeSuperview.autoresizesSubviews = true - addSubview(productWithPromocodeSuperview) - - storyButton.translatesAutoresizingMaskIntoConstraints = false - storyButton.setTitle("Continue", for: .normal) - storyButton.addTarget(self, action: #selector(didTapButton), for: .touchUpInside) - addSubview(storyButton) - - productsButton.translatesAutoresizingMaskIntoConstraints = false - productsButton.setTitle("Continue", for: .normal) - productsButton.addTarget(self, action: #selector(didTapOnProductsButton), for: .touchUpInside) - addSubview(productsButton) - - self.setMuteButtonToDefault() - - makeConstraints() - } - - public func configure(slide: Slide) { - self.currentSlide = slide - - // Set the background color - setupBackgroundColor() - - // Hide sdkPopupAlertView if it exists - hideSdkPopupAlertIfNeeded() - - // Delete previous text blocks - removePreviousTextBlocks() - - // Setting for video or image - configureMedia(for: slide) - - // Create and configure text blocks - setupTextBlocks(for: slide.elements) - - // Button configuration - configureButtons(for: slide) - - // Move important subviews to the top - bringImportantSubviewsToFront() - } - - private func setupBackgroundColor() { - if let backgroundColorHex = currentSlide?.backgroundColor, !backgroundColorHex.isEmpty { - let color = backgroundColorHex.hexToRGB() - self.backgroundColor = UIColor(red: color.red, green: color.green, blue: color.blue, alpha: 1) - } else { - self.backgroundColor = UIColor.black - } - } - - private func hideSdkPopupAlertIfNeeded() { - if sdkPopupAlertView.window != nil { - hideSdkPopupAlertView() - } - } - - private func removePreviousTextBlocks() { - self.subviews.filter { $0 is TextBlockView || $0 is UIStackView }.forEach { $0.removeFromSuperview() } - } - - private func configureMedia(for slide: Slide) { - if slide.type == .video { - configureVideoView(for: slide) - } else { - configureImageView(for: slide) - } - } - - private func setupTextBlocks(for elements: [StoriesElement]) { - let textBlockViews = elements - .filter { $0.type == .textBlock } - .map { TextBlockConfiguration(from: $0) } - .map { TextBlockView(with: $0) } - - guard !textBlockViews.isEmpty else { return } - - let stackView = createStackView() - addStackView(stackView) - - for textBlockView in textBlockViews { - stackView.addArrangedSubview(textBlockView) - } - - addSpacers(to: stackView, with: textBlockViews) - } - - private func createStackView() -> UIStackView { - let stackView = UIStackView() - stackView.axis = .vertical - stackView.distribution = .equalSpacing - stackView.spacing = 32 - stackView.translatesAutoresizingMaskIntoConstraints = false - return stackView - } - - private func addStackView(_ stackView: UIStackView) { - addSubview(stackView) - - NSLayoutConstraint.activate([ - stackView.leadingAnchor.constraint(equalTo: safeAreaLayoutGuide.leadingAnchor, constant: 16), - stackView.trailingAnchor.constraint(equalTo: safeAreaLayoutGuide.trailingAnchor, constant: -16), - stackView.topAnchor.constraint(equalTo: safeAreaLayoutGuide.topAnchor, constant: 16), - stackView.bottomAnchor.constraint(lessThanOrEqualTo: safeAreaLayoutGuide.bottomAnchor, constant: -32) - ]) - } - - private func addSpacers(to stackView: UIStackView, with textBlockViews: [TextBlockView]) { - if let firstTextBlockView = textBlockViews.first { - let topSpacingView = UIView() - topSpacingView.translatesAutoresizingMaskIntoConstraints = false - topSpacingView.heightAnchor.constraint(equalToConstant: 32).isActive = true - stackView.addArrangedSubview(topSpacingView) - - stackView.addArrangedSubview(firstTextBlockView) - } - - for index in 1.. 0 { - let soundSetting: Bool = UserDefaults.standard.bool(forKey: "MuteSoundSetting") - player.volume = soundSetting ? 1 : 0 - muteButton.isHidden = false - updateMuteButtonImage(isMuted: !soundSetting) - } else { - muteButton.isHidden = true - } - - self.videoView.layer.addSublayer(playerLayer) - player.play() - UserDefaults.standard.set(currentSlide!.id, forKey: "LastViewedSlideMemorySetting") - } else { - muteButton.isHidden = true - storySlideImageView.isHidden = false - videoView.isHidden = true - if let preview = slide.previewImage { - self.storySlideImageView.image = preview - } - } - } - - private func updateMuteButtonImage(isMuted: Bool) { - var frameworkBundle = Bundle(for: classForCoder) -#if SWIFT_PACKAGE - frameworkBundle = Bundle.module -#endif - let imageName = isMuted ? "iconStoryMute" : "iconStoryVolumeUp" - muteButton.setImage(UIImage(named: imageName, in: frameworkBundle, compatibleWith: nil), for: .normal) - } - - private func configureImageView(for slide: Slide) { - muteButton.isHidden = true - storySlideImageView.isHidden = false - videoView.isHidden = true - - if let image = slide.downloadedImage { - storySlideImageView.image = image - } - } - - private func setImage(imagePath: String) { - guard let url = URL(string: imagePath) else { - return - } - - let task = URLSession.shared.dataTask(with: url, completionHandler: { data, _, error in - if error == nil { - guard let unwrappedData = data, let image = UIImage(data: unwrappedData) else { - return - } - DispatchQueue.main.async { - self.storySlideImageView.tintColor = UIColor.black - self.storySlideImageView.isOpaque = false - self.storySlideImageView.image = image - } - } else { - self.sdkErrorReloadTapHandle() - } - }) - task.resume() - } - - func listenVolumeButton() { - do { - try audioSession.setActive(true, options: []) - audioSession.addObserver(self, forKeyPath: "outputVolume", options: NSKeyValueObservingOptions.new, context: nil) - kAudioLevel = audioSession.outputVolume - } catch { - print("SDK Output volume listener error") - } - } - - override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { - if keyPath == "outputVolume"{ - if audioSession.outputVolume > kAudioLevel { - kAudioLevel = audioSession.outputVolume - - var frameworkBundle = Bundle(for: classForCoder) -#if SWIFT_PACKAGE - frameworkBundle = Bundle.module -#endif - do { - try audioSession.setCategory(.playback, mode: .default, options: []) - player.volume = audioSession.outputVolume - muteButton.setImage(UIImage(named: "iconStoryVolumeUp", in: frameworkBundle, compatibleWith: nil), for: .normal) - UserDefaults.standard.set(true, forKey: "MuteSoundSetting") - } catch let error { - player.volume = audioSession.outputVolume - muteButton.setImage(UIImage(named: "iconStoryMute", in: frameworkBundle, compatibleWith: nil), for: .normal) - print("Error in AVAudio Session\(error.localizedDescription)") - } - } - if audioSession.outputVolume < kAudioLevel { - player.volume = audioSession.outputVolume - } - if audioSession.outputVolume > 0.999 { - kAudioLevel = 0.9375 - } - if audioSession.outputVolume < 0.001 { - var frameworkBundle = Bundle(for: classForCoder) -#if SWIFT_PACKAGE - frameworkBundle = Bundle.module -#endif - kAudioLevel = 0.0625 - muteButton.setImage(UIImage(named: "iconStoryMute", in: frameworkBundle, compatibleWith: nil), for: .normal) - UserDefaults.standard.set(false, forKey: "MuteSoundSetting") - } - } - } - - @objc - private func didTapOnMute() { - var frameworkBundle = Bundle(for: classForCoder) -#if SWIFT_PACKAGE - frameworkBundle = Bundle.module -#endif - if player.volume == 1.0 { - player.volume = 0.0 - muteButton.setImage(UIImage(named: "iconStoryMute", in: frameworkBundle, compatibleWith: nil), for: .normal) - UserDefaults.standard.set(false, forKey: "MuteSoundSetting") - } else { - player.volume = 1.0 - do { - try audioSession.setCategory(.playback, mode: .default, options: []) - } catch let error { - print("SDK Error in AVAudio Session\(error.localizedDescription)") - } - - muteButton.setImage(UIImage(named: "iconStoryVolumeUp", in: frameworkBundle, compatibleWith: nil), for: .normal) - UserDefaults.standard.set(true, forKey: "MuteSoundSetting") - } - } - - private func setMuteButtonToDefault() { - var frameworkBundle = Bundle(for: classForCoder) -#if SWIFT_PACKAGE - frameworkBundle = Bundle.module -#endif - - let soundSetting: Bool = UserDefaults.standard.bool(forKey: "MuteSoundSetting") - if soundSetting { - player.volume = 1 - muteButton.setImage(UIImage(named: "iconStoryVolumeUp", in: frameworkBundle, compatibleWith: nil), for: .normal) - UserDefaults.standard.set(true, forKey: "MuteSoundSetting") - } else { - player.volume = 0 - muteButton.setImage(UIImage(named: "iconStoryMute", in: frameworkBundle, compatibleWith: nil), for: .normal) - UserDefaults.standard.set(false, forKey: "MuteSoundSetting") - } - - muteButton.translatesAutoresizingMaskIntoConstraints = false - muteButton.isHidden = true - muteButton.addTarget(self, action: #selector(didTapOnMute), for: .touchUpInside) - addSubview(muteButton) - } - - @objc - func sdkNilTap(_ sender: UITapGestureRecognizer? = nil) { - // - } - - @objc - func sdkErrorReloadTapHandle(_ sender: UITapGestureRecognizer? = nil) { - var frameworkBundle = Bundle(for: classForCoder) -#if SWIFT_PACKAGE - frameworkBundle = Bundle.module -#endif - let errorIcon = UIImage(named: "iconError", in: frameworkBundle, compatibleWith: nil)?.withRenderingMode(UIImage.RenderingMode.alwaysTemplate) - - if #available(iOS 13.0, *) { - let popupView = SdkPopupAlertView( - title: "", - titleFont: .systemFont(ofSize: 5, weight: .light), - subtitle: SdkConfiguration.stories.storiesSlideReloadPopupMessageError, - subtitleFont: .systemFont(ofSize: SdkConfiguration.stories.storiesSlideReloadPopupMessageFontSize, weight: SdkConfiguration.stories.storiesSlideReloadPopupMessageFontWeight), - icon: errorIcon, - iconSpacing: 16, - position: .centerCustom, - onTap: { print("SDK Alert popup tapped") - } - ) - popupView.displayRealAlertTime = SdkConfiguration.stories.storiesSlideReloadPopupMessageDisplayTime - popupView.show() - } - } - - func displayPromocodeBanner(promoTitle: String?, promoCodeData: StoriesPromoCodeElement) { - - let screenSize: CGRect = UIScreen.main.bounds - promocodeBannerView.size = CGSize(width: screenSize.width - 32, height: 68) - promocodeBannerView.cornerRadius = 6 - promocodeBannerView.displayTime = 0 - promocodeBannerView.padding = (16, 90) - promocodeBannerView.animationDuration = 0.0 //0.75 - - let presentedBannerLabel = UILabel() - var bgPriceSectionColor = UIColor(red: 252/255, green: 107/255, blue: 63/255, alpha: 1.0) - if SdkConfiguration.stories.bannerPriceSectionBackgroundColor != nil { - bgPriceSectionColor = SdkConfiguration.stories.bannerPriceSectionBackgroundColor! - } - presentedBannerLabel.backgroundColor = bgPriceSectionColor - - let codePromo = promoCodeData.promocode - let clearPriceText = "" - let clearPriceAttributedString = NSMutableAttributedString(string:clearPriceText) - - var oldPriceText = " " - if promoCodeData.oldprice != 0 { - //if Int(promoData.oldprice) >= Int(promoData.price) - oldPriceText = " " + String(promoCodeData.oldprice_formatted) - if (promoCodeData.oldprice_formatted == "") { - oldPriceText = " " + String(promoCodeData.oldprice) - } - - var oldPriceTextColorBySdk = UIColor.white.withAlphaComponent(0.7) - if SdkConfiguration.stories.bannerOldPriceSectionFontColor != nil { - oldPriceTextColorBySdk = (SdkConfiguration.stories.bannerOldPriceSectionFontColor?.withAlphaComponent(0.7))! - } - - var promocodeBannerFontNameBySdk = UIFont.systemFont(ofSize: 16, weight: .heavy) - if SdkConfiguration.stories.promoCodeSlideFontNameChanged != nil { - promocodeBannerFontNameBySdk = UIFont(name: SdkConfiguration.stories.promoCodeSlideFontNameChanged!, size: 16)! - } - - var oldPriceTextAttrs = [NSAttributedString.Key.font: promocodeBannerFontNameBySdk, - NSAttributedString.Key.strikethroughStyle: NSUnderlineStyle.single.rawValue, - .foregroundColor: oldPriceTextColorBySdk] as [NSAttributedString.Key: Any] - - if oldPriceText.utf16.count >= 10 { - //oldPriceText = " " + String(promoData.oldprice) - oldPriceTextAttrs = [NSAttributedString.Key.font: promocodeBannerFontNameBySdk, - NSAttributedString.Key.strikethroughStyle: NSUnderlineStyle.single.rawValue, - .foregroundColor: oldPriceTextColorBySdk] as [NSAttributedString.Key: Any] - } - - let boldString = NSMutableAttributedString(string: oldPriceText, attributes:oldPriceTextAttrs) - clearPriceAttributedString.append(boldString) - - clearPriceAttributedString.addAttributes([ - .strikethroughColor: oldPriceTextColorBySdk.withAlphaComponent(0.5) - ], range: NSRange(location: 0, length: oldPriceText.count)) - - let spaceText = " \n" - let attrsSpace = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 1, weight: .thin), .foregroundColor: UIColor.white] - let boldStringSpace = NSMutableAttributedString(string: spaceText, attributes:attrsSpace) - clearPriceAttributedString.append(boldStringSpace) - } - - var formattedPriceWithPromocode = String(promoCodeData.price_with_promocode_formatted) - if formattedPriceWithPromocode == "" { - formattedPriceWithPromocode = String(promoCodeData.price_formatted) - } - let currentCurrency = promoCodeData.currency - let replaceCurrencyPriceWithPromocode = formattedPriceWithPromocode.replacingOccurrences(of: currentCurrency, with: "") - - let newPriceText = " " + replaceCurrencyPriceWithPromocode - - var priceSectionFontColorBySdk = UIColor.white - if SdkConfiguration.stories.bannerPriceSectionFontColor != nil { - priceSectionFontColorBySdk = SdkConfiguration.stories.bannerPriceSectionFontColor! - } - - var newPriceTextAttributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 28, weight: .black), .foregroundColor: priceSectionFontColorBySdk] - if newPriceText.utf16.count <= 10 { - newPriceTextAttributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 26, weight: .black), .foregroundColor: priceSectionFontColorBySdk] - } else if newPriceText.utf16.count <= 11 { - newPriceTextAttributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 25, weight: .black), .foregroundColor: priceSectionFontColorBySdk] - } else if newPriceText.utf16.count <= 12 { - newPriceTextAttributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 23, weight: .black), .foregroundColor: priceSectionFontColorBySdk] - } else if newPriceText.utf16.count <= 16 { - newPriceTextAttributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 17, weight: .black), .foregroundColor: priceSectionFontColorBySdk] - } else { - newPriceTextAttributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 14, weight: .black), .foregroundColor: priceSectionFontColorBySdk] - } - - let boldString = NSMutableAttributedString(string: newPriceText, attributes:newPriceTextAttributes) - clearPriceAttributedString.append(boldString) - - let currencyText = " " + promoCodeData.currency - var currencyTextAttrs = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 19, weight: .black), .foregroundColor: priceSectionFontColorBySdk] - if newPriceText.utf16.count <= 10 { - currencyTextAttrs = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 26, weight: .black), .foregroundColor: priceSectionFontColorBySdk] - } else if newPriceText.utf16.count <= 11 { - currencyTextAttrs = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 25, weight: .black), .foregroundColor: priceSectionFontColorBySdk] - } else if newPriceText.utf16.count <= 12 { - currencyTextAttrs = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 23, weight: .black), .foregroundColor: priceSectionFontColorBySdk] - } else if newPriceText.utf16.count <= 16 { - currencyTextAttrs = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 17, weight: .black), .foregroundColor: priceSectionFontColorBySdk] - } else { - currencyTextAttrs = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 14, weight: .black), .foregroundColor: priceSectionFontColorBySdk] - } - - //let currencyTextAttrs = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 19, weight: .black), .foregroundColor: UIColor.white] - let currencyTextBoldString = NSMutableAttributedString(string: currencyText, attributes:currencyTextAttrs) - clearPriceAttributedString.append(currencyTextBoldString) - - presentedBannerLabel.numberOfLines = 3 - presentedBannerLabel.attributedText = clearPriceAttributedString - - let nextStepSymbol = " \n" - let percentSymbol = "%" - - var titlePromo = promoTitle! + nextStepSymbol - if codePromo == "" { - titlePromo = "" - } - let attributedDiscountSectionString = NSMutableAttributedString(string:"") - - let titlePromoAttributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 13, weight: .bold), .foregroundColor: UIColor.white] - let discountSectionString = NSMutableAttributedString(string: titlePromo, attributes:titlePromoAttributes) - attributedDiscountSectionString.append(discountSectionString) - - let nextStepSymbolAttributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 1, weight: .thin), .foregroundColor: UIColor.white] - let nextStepSymbolString = NSMutableAttributedString(string: nextStepSymbol, attributes:nextStepSymbolAttributes) - attributedDiscountSectionString.append(nextStepSymbolString) - - if codePromo == "" { - let percentReplacement = "-" + String(promoCodeData.discount_percent) + percentSymbol - - let priceLabelAttributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 27, weight: .heavy), .foregroundColor: UIColor.black] - let promoCodeLabelAttributedString = NSMutableAttributedString(string: percentReplacement, attributes:priceLabelAttributes) - attributedDiscountSectionString.append(promoCodeLabelAttributedString) - } else { - var priceLabelAttributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 25, weight: .heavy), .foregroundColor: UIColor.white] - if codePromo.utf16.count <= 4 { - priceLabelAttributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 31, weight: .heavy), .foregroundColor: UIColor.white] - } else if codePromo.utf16.count <= 8 { - priceLabelAttributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 27, weight: .heavy), .foregroundColor: UIColor.white] - } else if codePromo.utf16.count < 11 { - priceLabelAttributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 25, weight: .heavy), .foregroundColor: UIColor.white] - } else if codePromo.utf16.count <= 12 { - priceLabelAttributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 20, weight: .heavy), .foregroundColor: UIColor.white] - } else if codePromo.utf16.count <= 14 { - priceLabelAttributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 16, weight: .heavy), .foregroundColor: UIColor.white] - } else if codePromo.utf16.count <= 16 { - priceLabelAttributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 15, weight: .bold), .foregroundColor: UIColor.white] - } else if codePromo.utf16.count <= 18 { - priceLabelAttributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 13, weight: .bold), .foregroundColor: UIColor.white] - } else { - priceLabelAttributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 11, weight: .regular), .foregroundColor: UIColor.white] - } - let promoCodeLabelAttributedString = NSMutableAttributedString(string: codePromo, attributes:priceLabelAttributes) - attributedDiscountSectionString.append(promoCodeLabelAttributedString) - } - - let v = UIView() - let tap = UITapGestureRecognizer(target: self, action: #selector(self.sdkNilTap(_:))) - //v.addGestureRecognizer(tap) - promocodeBannerView.addGestureRecognizer(tap) - v.addSubview(presentedBannerLabel) - - let promoBtn = UIButton() - if promoCodeData.discount_percent != 0 || codePromo != "" { - promoBtn.setAttributedTitle(attributedDiscountSectionString, for: .normal) - promoBtn.titleLabel?.textAlignment = .left - promoBtn.titleLabel?.numberOfLines = 3 - - var bgAdditionalColor = SdkConfiguration.stories.bannerPromocodeSectionBackgroundColor ?? UIColor(red: 23/255, green: 170/255, blue: 223/255, alpha: 1.0) - - if codePromo == "" { - bgAdditionalColor = SdkConfiguration.stories.bannerDiscountSectionBackgroundColor ?? UIColor(red: 251/255, green: 184/255, blue: 0/255, alpha: 1.0) - } else { - - var frameworkBundle = Bundle(for: classForCoder) -#if SWIFT_PACKAGE - frameworkBundle = Bundle.module -#endif - let copyIcon = UIImage(named: "iconCopyLight", in: frameworkBundle, compatibleWith: nil) - - let copyIconImageView = UIImageView(image: copyIcon) - copyIconImageView.translatesAutoresizingMaskIntoConstraints = false - promoBtn.addSubview(copyIconImageView) - - let copyIconLength = CGFloat(17) - NSLayoutConstraint.activate([ - copyIconImageView.leadingAnchor.constraint(equalTo: promoBtn.trailingAnchor, constant: -28), - copyIconImageView.centerYAnchor.constraint(equalTo: promoBtn.centerYAnchor, constant: -15), - copyIconImageView.widthAnchor.constraint(equalToConstant: copyIconLength), - copyIconImageView.heightAnchor.constraint(equalToConstant: copyIconLength) - ]) - - promoBtn.addTarget(self, action: #selector(copyPromocodeToClipboard), for: .touchUpInside) - } - - promoBtn.backgroundColor = bgAdditionalColor - v.addSubview(promoBtn) - - } else { - var bgPriceSectionColor = UIColor(red: 252/255, green: 107/255, blue: 63/255, alpha: 1.0) - if SdkConfiguration.stories.bannerPriceSectionBackgroundColor != nil { - bgPriceSectionColor = SdkConfiguration.stories.bannerPriceSectionBackgroundColor! - } - promoBtn.backgroundColor = bgPriceSectionColor - v.addSubview(promoBtn) - } - - promocodeBannerView.setView(view: v) - showInCellPromocodeBanner(promoBanner: promocodeBannerView) - - if codePromo == "" { - presentedBannerLabel.frame = CGRect(x: 0, y: 0, width: v.frame.width * 0.72, height: v.frame.height) - promoBtn.frame = CGRect(x: (v.frame.width * 0.72) - 5, y: 0, width: v.frame.width - (v.frame.width * 0.72) + 10, height: v.frame.height) - } else { - if promoCodeData.discount_percent != 0 || codePromo != "" { - if SdkGlobalHelper.DeviceType.IS_IPHONE_14_PRO_MAX || SdkGlobalHelper.DeviceType.IS_IPHONE_14_PLUS { - if codePromo.utf16.count < 11 { - presentedBannerLabel.frame = CGRect(x: 0, y: 0, width: v.frame.width * 0.6, height: v.frame.height) - promoBtn.frame = CGRect(x: v.frame.width * 0.6, y: 0, width: v.frame.width - (v.frame.width * 0.6), height: v.frame.height) - } else if codePromo.utf16.count <= 12 { - presentedBannerLabel.frame = CGRect(x: 0, y: 0, width: v.frame.width * 0.54, height: v.frame.height) - promoBtn.frame = CGRect(x: v.frame.width * 0.54, y: 0, width: v.frame.width - (v.frame.width * 0.54), height: v.frame.height) - } else { - presentedBannerLabel.frame = CGRect(x: 0, y: 0, width: v.frame.width * 0.6, height: v.frame.height) - promoBtn.frame = CGRect(x: v.frame.width * 0.6, y: 0, width: v.frame.width - (v.frame.width * 0.6), height: v.frame.height) - } - } else { - presentedBannerLabel.frame = CGRect(x: 0, y: 0, width: v.frame.width * 0.53, height: v.frame.height) - promoBtn.frame = CGRect(x: v.frame.width * 0.53, y: 0, width: v.frame.width - (v.frame.width * 0.53), height: v.frame.height) - } - } else { - presentedBannerLabel.frame = CGRect(x: 0, y: 0, width: v.frame.width * 1.0, height: v.frame.height) - promoBtn.frame = CGRect(x: v.frame.width * 1.0, y: 0, width: v.frame.width - (v.frame.width * 1.0), height: v.frame.height) - } - } - } - - @objc - public func copyPromocodeToClipboard() { - let pasteboard = UIPasteboard.general - pasteboard.string = selectedPromoCodeElement?.promocode - - if (sdkPopupAlertView.window != nil) { - return - } - sdkPopupAlertView.show() - } - - @objc - public func hideSdkPopupAlertView() { - sdkPopupAlertView.hideImmediately() - } - - @objc - public func dismissPromocodeBanner() { - promocodeBannerView.dismiss() - } - - @objc - public func dismissPromocodeBannerWithoutAnimation() { - promocodeBannerView.dismissWithoutAnimation() - } - - @objc - private func didTapOnProductsButton() { - if let productsList = selectedProductsElement?.products, productsList.count != 0 { - UserDefaults.standard.set(currentSlide!.id, forKey: "LastViewedSlideMemorySetting") - let products = productsList - cellDelegate?.openProductsCarouselView(withProducts: products, hideLabel: (selectedProductsElement?.labels?.hideCarousel)!) - return - } - } - - @objc - private func didTapButton() { - - if let promoCodeDeeplinkIos = selectedPromoCodeElement?.deeplinkIos, !promoCodeDeeplinkIos.isEmpty { - if let currentSlide = currentSlide { - - UserDefaults.standard.set(currentSlide.id, forKey: "LastViewedSlideMemorySetting") - - cellDelegate?.sendStructSelectedPromocodeSlide(promoCodeSlide: selectedPromoCodeElement!) - cellDelegate?.didTapOpenLinkExternalServiceMethod(url: promoCodeDeeplinkIos, slide: currentSlide) - return - } - } - - if let deeplinkIos = selectedElement?.product?.deeplinkIos, !deeplinkIos.isEmpty { - if let currentSlide = currentSlide { - - UserDefaults.standard.set(currentSlide.id, forKey: "LastViewedSlideMemorySetting") - - cellDelegate?.sendStructSelectedStorySlide(storySlide: selectedElement!) - cellDelegate?.didTapOpenLinkExternalServiceMethod(url: deeplinkIos, slide: currentSlide) - return - } - } - - if let linkIos = selectedElement?.linkIos, !linkIos.isEmpty { - if let currentSlide = currentSlide { - - UserDefaults.standard.set(currentSlide.id, forKey: "LastViewedSlideMemorySetting") - - cellDelegate?.sendStructSelectedStorySlide(storySlide: selectedElement!) - cellDelegate?.didTapOpenLinkExternalServiceMethod(url: linkIos, slide: currentSlide) - return - } - } - - if let link = selectedElement?.link, !link.isEmpty { - if let currentSlide = currentSlide { - cellDelegate?.didTapUrlButton(url: link, slide: currentSlide) - return - } - } - } - - @objc - private func pauseVideo(_ notification: NSNotification) { - if let slideID = notification.userInfo?["slideID"] as? String { - if let currentSlide = currentSlide { - if currentSlide.id == slideID { - player.pause() - } - } - } - } - - @objc - private func playVideo(_ notification: NSNotification) { - if let slideID = notification.userInfo?["slideID"] as? String { - if let currentSlide = currentSlide { - if currentSlide.id == slideID { - player.play() - } - } - } - } - - @objc - func willEnterForeground() { - do { - try audioSession.setCategory(AVAudioSession.Category.playback) - } catch { - print("SDK Error in AVAudio Session\(error.localizedDescription)") - } - player.play() - } - - @objc - func didEnterBackground() { - player.pause() - } - - func stopPlayer() { - player.pause() - } - - func makeConstraints() { - videoView.topAnchor.constraint(equalTo: topAnchor).isActive = true - videoView.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true - videoView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true - videoView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true - - storySlideImageView.topAnchor.constraint(equalTo: topAnchor).isActive = true - storySlideImageView.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true - storySlideImageView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true - storySlideImageView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true - - productWithPromocodeSuperview.topAnchor.constraint(equalTo: topAnchor).isActive = true - productWithPromocodeSuperview.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true - productWithPromocodeSuperview.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true - productWithPromocodeSuperview.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true - - // reloadButton.widthAnchor.constraint(equalToConstant: 76).isActive = true - // reloadButton.heightAnchor.constraint(equalToConstant: 76).isActive = true - // reloadButton.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true - // reloadButton.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true - - if SdkGlobalHelper.sharedInstance.willDeviceHaveDynamicIsland() { - - clearConstraints() - let ds: Bool = UserDefaults.standard.bool(forKey: "DoubleProductButtonSetting") - if ds { - let storyButtonConstraints = [ - storyButton.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 16), - storyButton.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -16), - storyButton.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -18), - storyButton.heightAnchor.constraint(equalToConstant: 56) - ] - - var productsButtonConstraints = [ - productsButton.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 66), - productsButton.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -66), - productsButton.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -89), - productsButton.heightAnchor.constraint(equalToConstant: 36) - ] - if SdkGlobalHelper.DeviceType.IS_IPHONE_5 { - productsButtonConstraints = [ - productsButton.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 52), - productsButton.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -52), - productsButton.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -89), - productsButton.heightAnchor.constraint(equalToConstant: 36) - ] - } - - let muteButtonConstraints = [ - muteButton.leadingAnchor.constraint(equalTo: storyButton.leadingAnchor, constant: -7), - muteButton.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -83), - muteButton.widthAnchor.constraint(equalToConstant: 48), - muteButton.heightAnchor.constraint(equalToConstant: 48) - ] - - self.activate(constraints: storyButtonConstraints) - self.activate(constraints: productsButtonConstraints) - self.activate(constraints: muteButtonConstraints) - - } else { - - let storyButtonConstraints = [ - storyButton.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 16), - storyButton.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -16), - storyButton.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -18), - storyButton.heightAnchor.constraint(equalToConstant: 56) - ] - - var productsButtonConstraints = [ - productsButton.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 66), - productsButton.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -66), - productsButton.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -28), - productsButton.heightAnchor.constraint(equalToConstant: 36) - ] - if SdkGlobalHelper.DeviceType.IS_IPHONE_5 { - productsButtonConstraints = [ - productsButton.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 52), - productsButton.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -52), - productsButton.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -28), - productsButton.heightAnchor.constraint(equalToConstant: 36) - ] - } - - var muteButtonConstraints = [ - muteButton.leadingAnchor.constraint(equalTo: storyButton.leadingAnchor, constant: -7), - muteButton.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -83), - muteButton.widthAnchor.constraint(equalToConstant: 48), - muteButton.heightAnchor.constraint(equalToConstant: 48) - ] - if selectedPromoCodeElement != nil { - muteButtonConstraints = [ - muteButton.leadingAnchor.constraint(equalTo: storyButton.leadingAnchor, constant: -7), - muteButton.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -163), - muteButton.widthAnchor.constraint(equalToConstant: 48), - muteButton.heightAnchor.constraint(equalToConstant: 48) - ] - } - - self.activate(constraints: storyButtonConstraints) - self.activate(constraints: productsButtonConstraints) - self.activate(constraints: muteButtonConstraints) - } - layoutIfNeeded() - - } else { - - clearConstraints() - - let ds: Bool = UserDefaults.standard.bool(forKey: "DoubleProductButtonSetting") - if ds { - let storyButtonConstraints = [ - storyButton.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 16), - storyButton.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -16), - storyButton.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -22), - storyButton.heightAnchor.constraint(equalToConstant: 56) - ] - - var productsButtonConstraints = [ - productsButton.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 66), - productsButton.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -66), - productsButton.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -89), - productsButton.heightAnchor.constraint(equalToConstant: 36) - ] - if SdkGlobalHelper.DeviceType.IS_IPHONE_5 { - productsButtonConstraints = [ - productsButton.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 52), - productsButton.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -52), - productsButton.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -89), - productsButton.heightAnchor.constraint(equalToConstant: 36) - ] - } - - let muteButtonConstraints = [ - muteButton.leadingAnchor.constraint(equalTo: storyButton.leadingAnchor, constant: -7), - muteButton.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -83), - muteButton.widthAnchor.constraint(equalToConstant: 48), - muteButton.heightAnchor.constraint(equalToConstant: 48) - ] - - self.activate(constraints: storyButtonConstraints) - self.activate(constraints: productsButtonConstraints) - self.activate(constraints: muteButtonConstraints) - - } else { - - let storyButtonConstraints = [ - storyButton.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 16), - storyButton.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -16), - storyButton.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -22), - storyButton.heightAnchor.constraint(equalToConstant: 56) - ] - - var productsButtonConstraints = [ - productsButton.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 66), - productsButton.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -66), - productsButton.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -28), - productsButton.heightAnchor.constraint(equalToConstant: 36) - ] - if SdkGlobalHelper.DeviceType.IS_IPHONE_5 { - productsButtonConstraints = [ - productsButton.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 52), - productsButton.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -52), - productsButton.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -28), - productsButton.heightAnchor.constraint(equalToConstant: 36) - ] - } - - var muteButtonConstraints = [ - muteButton.leadingAnchor.constraint(equalTo: storyButton.leadingAnchor, constant: -7), - muteButton.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -83), - muteButton.widthAnchor.constraint(equalToConstant: 48), - muteButton.heightAnchor.constraint(equalToConstant: 48) - ] - if selectedPromoCodeElement != nil { - muteButtonConstraints = [ - muteButton.leadingAnchor.constraint(equalTo: storyButton.leadingAnchor, constant: -7), - muteButton.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -163), - muteButton.widthAnchor.constraint(equalToConstant: 48), - muteButton.heightAnchor.constraint(equalToConstant: 48) - ] - } - - self.activate(constraints: storyButtonConstraints) - self.activate(constraints: productsButtonConstraints) - self.activate(constraints: muteButtonConstraints) - } - layoutIfNeeded() - } - } - - private func clearConstraints() { - customConstraints.forEach { $0.isActive = false } - customConstraints.removeAll() - } - - private func activate(constraints: [NSLayoutConstraint]) { - customConstraints.append(contentsOf: constraints) - customConstraints.forEach { $0.isActive = true } - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - deinit { - audioSession.removeObserver(self, forKeyPath: "outputVolume", context: nil) - } -} - - -extension AVPlayer { - var isAudioAvailable: Bool? { - return self.currentItem?.asset.tracks.filter({$0.mediaType == .audio}).count != 0 - } - - var isVideoAvailable: Bool? { - return self.currentItem?.asset.tracks.filter({$0.mediaType == .video}).count != 0 - } -} diff --git a/Pods/REES46/REES46/Classes/Stories/StoryViewController/ProductsCarousel/CarouselCollectionView.swift b/Pods/REES46/REES46/Classes/Stories/StoryViewController/ProductsCarousel/CarouselCollectionView.swift deleted file mode 100755 index 3cd0c50..0000000 --- a/Pods/REES46/REES46/Classes/Stories/StoryViewController/ProductsCarousel/CarouselCollectionView.swift +++ /dev/null @@ -1,243 +0,0 @@ -import UIKit -import WebKit - -class CarouselCollectionView: UICollectionView, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { - - var cells = [StoriesProduct]() - var hideButton = UIButton() - var hideLabel: String? - - public weak var carouselProductsDelegate: CarouselCollectionViewCellDelegate? - - init() { - let layout = UICollectionViewFlowLayout() - layout.scrollDirection = .horizontal - super.init(frame: .zero, collectionViewLayout: layout) - - backgroundColor = UIColor(red: 240/255, green: 240/255, blue: 240/255, alpha: 255/255) - delegate = self - dataSource = self - register(CarouselCollectionViewCell.self, forCellWithReuseIdentifier: CarouselCollectionViewCell.reuseCarouselId) - - translatesAutoresizingMaskIntoConstraints = false - layout.minimumLineSpacing = CarouselProductsConstants.productCarouselMinimumLineSpacing - - if SdkGlobalHelper.DeviceType.IS_IPHONE_SE { - contentInset = UIEdgeInsets(top: 0, left: CarouselProductsConstants.cLeftDistanceToView, bottom: 70, right: CarouselProductsConstants.cRightDistanceToView) - } else { - contentInset = UIEdgeInsets(top: 0, left: CarouselProductsConstants.cLeftDistanceToView, bottom: 60, right: CarouselProductsConstants.cRightDistanceToView) - } - - showsHorizontalScrollIndicator = false - showsVerticalScrollIndicator = false - - let stackView = UIStackView() - stackView.axis = .horizontal - stackView.distribution = .fill - stackView.backgroundColor = .clear - stackView.translatesAutoresizingMaskIntoConstraints = false - addSubview(stackView) - - if SdkGlobalHelper.DeviceType.IS_IPHONE_XS { - NSLayoutConstraint.activate([ - stackView.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor, constant: 58), - stackView.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor, constant: -58), - stackView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor, constant: 9), - stackView.heightAnchor.constraint(equalToConstant: 36) - ]) - } else if SdkGlobalHelper.DeviceType.IS_IPHONE_XS_MAX { - NSLayoutConstraint.activate([ - stackView.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor, constant: 58), - stackView.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor, constant: -58), - stackView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor, constant: 9), - stackView.heightAnchor.constraint(equalToConstant: 36) - ]) - } else if SdkGlobalHelper.DeviceType.IS_IPHONE_14 { - NSLayoutConstraint.activate([ - stackView.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor, constant: 58), - stackView.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor, constant: -58), - stackView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor, constant: 9), - stackView.heightAnchor.constraint(equalToConstant: 36) - ]) - } else if SdkGlobalHelper.DeviceType.IS_IPHONE_14_PLUS { - NSLayoutConstraint.activate([ - stackView.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor, constant: 58), - stackView.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor, constant: -58), - stackView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor, constant: 9), - stackView.heightAnchor.constraint(equalToConstant: 36) - ]) - } else if SdkGlobalHelper.DeviceType.IS_IPHONE_14_PRO { - NSLayoutConstraint.activate([ - stackView.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor, constant: 58), - stackView.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor, constant: -58), - stackView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor, constant: 9), - stackView.heightAnchor.constraint(equalToConstant: 36) - ]) - } else if SdkGlobalHelper.DeviceType.IS_IPHONE_5 { - NSLayoutConstraint.activate([ - stackView.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor, constant: 58), - stackView.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor, constant: -58), - stackView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor, constant: -6), - stackView.heightAnchor.constraint(equalToConstant: 36) - ]) - } else if SdkGlobalHelper.DeviceType.IS_IPHONE_SE { - NSLayoutConstraint.activate([ - stackView.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor, constant: 58), - stackView.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor, constant: -58), - stackView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor, constant: -19), - stackView.heightAnchor.constraint(equalToConstant: 36) - ]) - } else if SdkGlobalHelper.DeviceType.IS_IPHONE_8_PLUS { - NSLayoutConstraint.activate([ - stackView.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor, constant: 58), - stackView.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor, constant: -58), - stackView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor, constant: -19), - stackView.heightAnchor.constraint(equalToConstant: 36) - ]) - } else { - NSLayoutConstraint.activate([ - stackView.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor, constant: 58), - stackView.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor, constant: -58), - stackView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor, constant: 9), - stackView.heightAnchor.constraint(equalToConstant: 36) - ]) - } - - hideButton = UIButton(frame: CGRect(x: 0, y: 0, width: 85, height: 40)) - hideButton.translatesAutoresizingMaskIntoConstraints = false - hideButton.setTitle(hideLabel ?? SdkConfiguration.stories.defaultHideProductsButtonText, for: .normal) - if hideLabel == nil || hideLabel == "" { - hideButton.setTitle(SdkConfiguration.stories.defaultHideProductsButtonText, for: .normal) - } - - if SdkConfiguration.stories.slideProductsHideButtonFontNameChanged != nil { - hideButton.titleLabel?.font = UIFont(name: (SdkConfiguration.stories.slideProductsHideButtonFontNameChanged)!, size: 14) - } else { - hideButton.titleLabel?.font = .systemFont(ofSize: 14, weight: .bold) - } - hideButton.backgroundColor = .clear - hideButton.setTitleColor(UIColor.black, for: .normal) - hideButton.addTarget(self, action: #selector(self.closeButtonTapped), for: .touchUpInside) - - var frameworkBundle = Bundle(for: classForCoder) - #if SWIFT_PACKAGE - frameworkBundle = Bundle.module - #endif - let image = UIImage(named: "angleDownBlack", in: frameworkBundle, compatibleWith: nil) - - let imageView = UIImageView(image: image) - imageView.translatesAutoresizingMaskIntoConstraints = false - hideButton.addSubview(imageView) - - let length = CGFloat(21) - hideButton.titleEdgeInsets.right += length - - NSLayoutConstraint.activate([ - imageView.leadingAnchor.constraint(equalTo: hideButton.titleLabel!.trailingAnchor, constant: 6), - imageView.centerYAnchor.constraint(equalTo: hideButton.titleLabel!.centerYAnchor, constant: 1), - imageView.widthAnchor.constraint(equalToConstant: length), - imageView.heightAnchor.constraint(equalToConstant: length) - ]) - - stackView.addArrangedSubview(hideButton) - addSubview(stackView) - } - - @objc - func closeButtonTapped(sender: UIButton) { - carouselProductsDelegate?.closeProductsCarousel() - } - - func set(cells: [StoriesProduct]) { - self.cells = cells - redrawSubviews() - - self.hideButton.setTitle(hideLabel ?? SdkConfiguration.stories.defaultHideProductsButtonText, for: .normal) - if hideLabel == nil || hideLabel == "" { - hideButton.setTitle(SdkConfiguration.stories.defaultHideProductsButtonText, for: .normal) - } - } - - func redrawSubviews() { - if cells.count == 1 { - contentInset = UIEdgeInsets(top: 0, left: UIScreen.main.bounds.size.width/4 - 10, bottom: 70, right: 0) - } else { - if SdkGlobalHelper.DeviceType.IS_IPHONE_SE { - contentInset = UIEdgeInsets(top: 0, left: CarouselProductsConstants.cLeftDistanceToView, bottom: 70, right: CarouselProductsConstants.cRightDistanceToView) - } else { - contentInset = UIEdgeInsets(top: 0, left: CarouselProductsConstants.cLeftDistanceToView, bottom: 60, right: CarouselProductsConstants.cRightDistanceToView) - } - } - } - - func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - return cells.count - } - - func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { - let cell = dequeueReusableCell(withReuseIdentifier: CarouselCollectionViewCell.reuseCarouselId, for: indexPath) as! CarouselCollectionViewCell - - let url = URL(string: cells[indexPath.row].picture) - if url != nil { - cell.carouselMainImageView.load.request(with: url!) - } - cell.carouselProductNameLabel.text = cells[indexPath.row].name - - let mainProductText = cells[indexPath.row].oldprice_formatted - let textRange = NSMakeRange(0, mainProductText.count) - let attributedText = NSMutableAttributedString(string: mainProductText) - attributedText.addAttribute(NSAttributedString.Key.strikethroughStyle , value: NSUnderlineStyle.single.rawValue, range: textRange) - cell.carouselOldCostLabel.attributedText = attributedText - - if (cells[indexPath.row].discount_formatted == "0%" || cells[indexPath.row].discount_formatted == nil) { - cell.carouselDiscountLabel.isHidden = true - } else { - let discountPercent = cells[indexPath.row].discount_formatted ?? "10%" - let discountPercentFinal = " -" + discountPercent + " " - cell.carouselDiscountLabel.text = discountPercentFinal - cell.carouselDiscountLabel.isHidden = false - } - - cell.carouselNowCostLabel.text = cells[indexPath.row].price_formatted - - return cell - } - - func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - let selectedCarouselProduct = cells[indexPath.row] - carouselProductsDelegate?.sendStructSelectedCarouselProduct(product: selectedCarouselProduct) - } - - func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { - if SdkGlobalHelper.DeviceType.IS_IPHONE_5 { - return CGSize(width: CarouselProductsConstants.productCarouselItemSlimWidth, height: frame.height * 0.73) - } else { - return CGSize(width: CarouselProductsConstants.productCarouselItemWidth, height: frame.height * 0.73) - } - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } -} - - -extension UIButton { - func addRightIcon(image: UIImage) { - - let imageView = UIImageView(image: image) - imageView.translatesAutoresizingMaskIntoConstraints = false - - addSubview(imageView) - - let length = CGFloat(21) - titleEdgeInsets.right += length - - NSLayoutConstraint.activate([ - imageView.leadingAnchor.constraint(equalTo: self.titleLabel!.trailingAnchor, constant: 6), - imageView.centerYAnchor.constraint(equalTo: self.titleLabel!.centerYAnchor, constant: 1), - imageView.widthAnchor.constraint(equalToConstant: length), - imageView.heightAnchor.constraint(equalToConstant: length) - ]) - } -} diff --git a/Pods/REES46/REES46/Classes/Stories/StoryViewController/ProductsCarousel/CarouselCollectionViewCell.swift b/Pods/REES46/REES46/Classes/Stories/StoryViewController/ProductsCarousel/CarouselCollectionViewCell.swift deleted file mode 100755 index 05d1fd8..0000000 --- a/Pods/REES46/REES46/Classes/Stories/StoryViewController/ProductsCarousel/CarouselCollectionViewCell.swift +++ /dev/null @@ -1,137 +0,0 @@ -import UIKit - -class CarouselCollectionViewCell: UICollectionViewCell { - - static let reuseCarouselId = "CarouselCollectionViewCell" - - let carouselMainImageView: UIImageView = { - let carouselProductImageView = UIImageView() - carouselProductImageView.translatesAutoresizingMaskIntoConstraints = false - carouselProductImageView.contentMode = .scaleAspectFit - return carouselProductImageView - }() - - let carouselProductNameLabel: UILabel = { - let cLabel = UILabel() - - if SdkConfiguration.stories.slideProductsHideButtonFontNameChanged != nil { - cLabel.font = UIFont(name: (SdkConfiguration.stories.slideProductsHideButtonFontNameChanged)!, size: 16) - } else { - cLabel.font = UIFont.systemFont(ofSize: 16, weight: .bold) - } - - cLabel.textColor = #colorLiteral(red: 0.007841579616, green: 0.007844132371, blue: 0.007841020823, alpha: 1) - cLabel.numberOfLines = 0 - cLabel.translatesAutoresizingMaskIntoConstraints = false - return cLabel - }() - - let carouselDescriptionLabel: UILabel = { - let cLabel = UILabel() - - if SdkConfiguration.stories.slideProductsHideButtonFontNameChanged != nil { - cLabel.font = UIFont(name: (SdkConfiguration.stories.slideProductsHideButtonFontNameChanged)!, size: 14) - } else { - cLabel.font = UIFont.systemFont(ofSize: 14, weight: .semibold) - } - - cLabel.textColor = #colorLiteral(red: 0.6000000238, green: 0.6000000238, blue: 0.6000000238, alpha: 1) - cLabel.numberOfLines = 0 - cLabel.translatesAutoresizingMaskIntoConstraints = false - return cLabel - }() - - let carouselLikeImageView: UIImageView = { - let carouselLikeImageView = UIImageView() - carouselLikeImageView.image = UIImage(named: "iconLikeHeart") - carouselLikeImageView.translatesAutoresizingMaskIntoConstraints = false - return carouselLikeImageView - }() - - let carouselOldCostLabel: UILabel = { - let cLabel = UILabel() - - if SdkConfiguration.stories.slideProductsHideButtonFontNameChanged != nil { - cLabel.font = UIFont(name: (SdkConfiguration.stories.slideProductsHideButtonFontNameChanged)!, size: 14) - } else { - cLabel.font = UIFont.systemFont(ofSize: 14, weight: .regular) - } - - cLabel.textColor = #colorLiteral(red: 0.6000000238, green: 0.6000000238, blue: 0.6000000238, alpha: 1) - cLabel.translatesAutoresizingMaskIntoConstraints = false - return cLabel - }() - - let carouselNowCostLabel: UILabel = { - let cLabel = UILabel() - - if SdkConfiguration.stories.slideProductsHideButtonFontNameChanged != nil { - cLabel.font = UIFont(name: (SdkConfiguration.stories.slideProductsHideButtonFontNameChanged)!, size: 18) - } else { - cLabel.font = UIFont.systemFont(ofSize: 18, weight: .bold) - } - - cLabel.textColor = #colorLiteral(red: 0.007841579616, green: 0.007844132371, blue: 0.007841020823, alpha: 1) - cLabel.translatesAutoresizingMaskIntoConstraints = false - return cLabel - }() - - let carouselDiscountLabel: UILabel = { - let cLabel = UILabel() - cLabel.frame = CGRect(x: 0, y: 0, width: 45, height: 20) - - if SdkConfiguration.stories.slideProductsHideButtonFontNameChanged != nil { - cLabel.font = UIFont(name: (SdkConfiguration.stories.slideProductsHideButtonFontNameChanged)!, size: 13) - } else { - cLabel.font = UIFont.systemFont(ofSize: 13, weight: .bold) - } - - cLabel.textColor = .white - cLabel.backgroundColor = UIColor(red: 0.925, green: 0.282, blue: 0.6, alpha: 1) - cLabel.layer.cornerRadius = 3 - cLabel.layer.masksToBounds = true - cLabel.translatesAutoresizingMaskIntoConstraints = false - return cLabel - }() - - override init(frame: CGRect) { - super.init(frame: frame) - - addSubview(carouselMainImageView) - addSubview(carouselProductNameLabel) - addSubview(carouselOldCostLabel) - addSubview(carouselDiscountLabel) - addSubview(carouselNowCostLabel) - - backgroundColor = .white - - carouselMainImageView.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true - carouselMainImageView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true - carouselMainImageView.topAnchor.constraint(equalTo: topAnchor, constant: 20).isActive = true - carouselMainImageView.heightAnchor.constraint(equalTo: heightAnchor, multiplier: 1/2).isActive = true - - carouselProductNameLabel.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 20).isActive = true - carouselProductNameLabel.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -8).isActive = true - carouselProductNameLabel.topAnchor.constraint(equalTo: carouselMainImageView.bottomAnchor, constant: 12).isActive = true - - carouselOldCostLabel.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 20).isActive = true - carouselOldCostLabel.topAnchor.constraint(equalTo: carouselProductNameLabel.bottomAnchor, constant: 14).isActive = true - - carouselDiscountLabel.leadingAnchor.constraint(equalTo: carouselOldCostLabel.trailingAnchor, constant: 10).isActive = true - carouselDiscountLabel.topAnchor.constraint(equalTo: carouselProductNameLabel.bottomAnchor, constant: 11).isActive = true - carouselDiscountLabel.heightAnchor.constraint(equalToConstant: 20).isActive = true - - carouselNowCostLabel.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 20).isActive = true - carouselNowCostLabel.topAnchor.constraint(equalTo: carouselOldCostLabel.bottomAnchor, constant: 8).isActive = true - } - - override func layoutSubviews() { - super.layoutSubviews() - self.layer.cornerRadius = 7 - self.clipsToBounds = false - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } -} diff --git a/Pods/REES46/REES46/Classes/Stories/StoryViewController/ProductsCarousel/CarouselConstants.swift b/Pods/REES46/REES46/Classes/Stories/StoryViewController/ProductsCarousel/CarouselConstants.swift deleted file mode 100755 index c3cf139..0000000 --- a/Pods/REES46/REES46/Classes/Stories/StoryViewController/ProductsCarousel/CarouselConstants.swift +++ /dev/null @@ -1,16 +0,0 @@ -import Foundation -import UIKit - -public struct CarouselProductsConstants { - public static let cLeftDistanceToView: CGFloat = 40 - public static let cRightDistanceToView: CGFloat = 40 - - public static let productCarouselMinimumLineSpacing: CGFloat = 10 - - public static let carouselWidthCoefficient: CGFloat = 1.4 // 1.65 - public static let carouselSlimWidthCoefficient: CGFloat = 1.2 - - public static let productCarouselItemWidth = (UIScreen.main.bounds.width - CarouselProductsConstants.cLeftDistanceToView - CarouselProductsConstants.cRightDistanceToView - (CarouselProductsConstants.productCarouselMinimumLineSpacing / 2)) / carouselWidthCoefficient - - public static let productCarouselItemSlimWidth = (UIScreen.main.bounds.width - CarouselProductsConstants.cLeftDistanceToView - CarouselProductsConstants.cRightDistanceToView - (CarouselProductsConstants.productCarouselMinimumLineSpacing / 2)) / carouselSlimWidthCoefficient -} diff --git a/Pods/REES46/REES46/Classes/Stories/StoryViewController/RecommendationsWidget/RecommendationsWidgetConstants.swift b/Pods/REES46/REES46/Classes/Stories/StoryViewController/RecommendationsWidget/RecommendationsWidgetConstants.swift deleted file mode 100755 index 9fa60af..0000000 --- a/Pods/REES46/REES46/Classes/Stories/StoryViewController/RecommendationsWidget/RecommendationsWidgetConstants.swift +++ /dev/null @@ -1,10 +0,0 @@ -import UIKit -import Foundation - -public struct RecommendationsConstants { - static let recommendationsLeftDistanceToView: CGFloat = 20 - static let recommendationsRightDistanceToView: CGFloat = 20 - static let recommendationsCollectionMinimumLineSpacing: CGFloat = 10 - - static let recommendationsCollectionItemWidth = (UIScreen.main.bounds.width - RecommendationsConstants.recommendationsLeftDistanceToView - RecommendationsConstants.recommendationsRightDistanceToView - (RecommendationsConstants.recommendationsCollectionMinimumLineSpacing / 2)) / 1.65 -} diff --git a/Pods/REES46/REES46/Classes/Stories/StoryViewController/RecommendationsWidget/RecommendationsWidgetView.swift b/Pods/REES46/REES46/Classes/Stories/StoryViewController/RecommendationsWidget/RecommendationsWidgetView.swift deleted file mode 100755 index 4545d2e..0000000 --- a/Pods/REES46/REES46/Classes/Stories/StoryViewController/RecommendationsWidget/RecommendationsWidgetView.swift +++ /dev/null @@ -1,464 +0,0 @@ -import UIKit - -open class RecommendationsWidgetView: UICollectionView, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, RecommendationsWidgetViewCellDelegate { - - public var cells = [Recommended]() - - private static var rowsCount = 9 - - public let recommendationsCollectionWidgetIndicator = StoriesSlideReloadIndicator() - - public weak var recommendationsDelegate: RecommendationsWidgetCommunicationProtocol? - - public var recommendationsIndicatorView: SdkActivityIndicator! - - public var sdk: PersonalizationSDK? - - public init() { - let layout = UICollectionViewFlowLayout() - layout.scrollDirection = .horizontal - super.init(frame: .zero, collectionViewLayout: layout) - - self.setupWidgetBgColor() - - delegate = self - dataSource = self - register(RecommendationsWidgetViewCell.self, forCellWithReuseIdentifier: RecommendationsWidgetViewCell.reuseRecommCellId) - - translatesAutoresizingMaskIntoConstraints = false - layout.minimumLineSpacing = RecommendationsConstants.recommendationsCollectionMinimumLineSpacing - contentInset = UIEdgeInsets(top: 0, left: RecommendationsConstants.recommendationsLeftDistanceToView, bottom: 0, right: RecommendationsConstants.recommendationsRightDistanceToView) - - showsHorizontalScrollIndicator = false - showsVerticalScrollIndicator = false - - } - - public func loadWidget( - sdk: PersonalizationSDK, - blockId: String, - recommendationId: String - ) { - self.sdk = sdk - sdk.recommend(blockId: blockId, currentProductId: recommendationId,timeOut: 0.5) { recommendationsWidgetResponse in - switch recommendationsWidgetResponse { - case let .success(response): - DispatchQueue.main.asyncAfter(deadline: .now() + 1.8) { - self.setWidget(cells: response.recommended) - self.reloadData() - } - case let .failure(error): - switch error { - case let .custom(customError): - print("RecommendationsWidgetView custom Error:", customError) - default: - print("RecommendationsWidgetView default Error:", error.description) - } - } - } - } - - public func setWidget(cells: [Recommended]) { - self.cells = cells - } - - public func setupWidgetBgColor() { - if SdkConfiguration.isDarkMode { - let bgColor = SdkConfiguration.recommendations.widgetBackgroundColorDarkMode.hexToRGB() - backgroundColor = UIColor(red: bgColor.red, green: bgColor.green, blue: bgColor.blue, alpha: 1) - } else { - let bgColor = SdkConfiguration.recommendations.widgetBackgroundColor.hexToRGB() - backgroundColor = UIColor(red: bgColor.red, green: bgColor.green, blue: bgColor.blue, alpha: 1) - } - } - - public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - return cells.count - } - - public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { - let cell = dequeueReusableCell(withReuseIdentifier: RecommendationsWidgetViewCell.reuseRecommCellId, for: indexPath) as! RecommendationsWidgetViewCell - cell.widgetCellDelegate = self - - let url = URL(string: cells[indexPath.row].resizedImageUrl) - if url != nil { - cell.recommendationsImageView.load.request(with: url!) - } - - cell.recommendationsProductNameLabel.text = cells[indexPath.row].name - if SdkConfiguration.isDarkMode { - cell.recommendationsProductNameLabel.textColor = .white - } else { - cell.recommendationsProductNameLabel.textColor = .black - } - - cell.recommendationsClearLabel.text = "" - - let ss = cells[indexPath.row].oldPrice - if ss == 0 { - cell.recommendationsOldPrice.text = "" - } else { - cell.recommendationsOldPrice.attributedText = strikeThrough(str: cells[indexPath.row].oldPriceFormatted ?? "") - } - - cell.recommendationsDiscountLabel.text = " Cashback 20% " //sample coming soon - cell.recommendationsCreditLabel.text = " 0-0-12 " //sample coming soon - - let currentCurrency = cells[indexPath.row].currency - let priceNotFormatted = cells[indexPath.row].priceFullFormatted - let replaceCurrencyPriceWithPromocode = priceNotFormatted?.replacingOccurrences(of: currentCurrency, with: "") ?? cells[indexPath.row].priceFormatted - let updatedPrice = replaceCurrencyPriceWithPromocode! + currentCurrency - - cell.recommendationsPriceLabel.text = updatedPrice - - if SdkConfiguration.isDarkMode { - cell.recommendationsPriceLabel.textColor = .white - } else { - cell.recommendationsPriceLabel.textColor = .black - } - - let ratingForStars = cells[indexPath.row].rating - cell.update(Double(ratingForStars)) - if ratingForStars == 0 { - cell.recommendationsRatingStars.isHidden = true - cell.recommendationsRatingStarsNoReviewsLabel.isHidden = false - cell.recommendationsRatingStarsNoReviewsLabel.text = SdkConfiguration.recommendations.widgetNoReviewsDefaultText - } else { - cell.update(Double(ratingForStars)) - cell.recommendationsRatingStars.isHidden = false - cell.recommendationsRatingStarsNoReviewsLabel.isHidden = true - cell.recommendationsRatingStarsNoReviewsLabel.text = "" - } - - let pId = cells[indexPath.row].id - let productCartId = "cart.product." + pId - let cartItemsCachedArray: [String] = UserDefaults.standard.getValue(for: UserDefaults.Key(productCartId)) as? [String] ?? [] - let itemIdExistInCart = cartItemsCachedArray.contains(where: { - $0.range(of: pId) != nil - }) - configureCartButton(cell: cell, itemIdExistInCart: itemIdExistInCart) - - if SdkConfiguration.isDarkMode { - let widgetCartButtonTextColorDarkMode = SdkConfiguration.recommendations.widgetCartButtonTextColorDarkMode.hexToRGB() - let tColor = UIColor(red: widgetCartButtonTextColorDarkMode.red, green: widgetCartButtonTextColorDarkMode.green, blue: widgetCartButtonTextColorDarkMode.blue, alpha: 1) - cell.recommendationsCartButton.setTitleColor(tColor, for: .normal) - - let widgetCartButtonBackgroundColorDarkMode = SdkConfiguration.recommendations.widgetCartButtonBackgroundColorDarkMode.hexToRGB() - let bgColor = UIColor(red: widgetCartButtonBackgroundColorDarkMode.red, green: widgetCartButtonBackgroundColorDarkMode.green, blue: widgetCartButtonBackgroundColorDarkMode.blue, alpha: 1) - cell.recommendationsCartButton.backgroundColor = bgColor - } else { - let widgetCartButtonTextColor = SdkConfiguration.recommendations.widgetCartButtonTextColor.hexToRGB() - let tColor = UIColor(red: widgetCartButtonTextColor.red, green: widgetCartButtonTextColor.green, blue: widgetCartButtonTextColor.blue, alpha: 1) - cell.recommendationsCartButton.setTitleColor(tColor, for: .normal) - - let widgetCartButtonBackgroundColor = SdkConfiguration.recommendations.widgetCartButtonBackgroundColor.hexToRGB() - let bgColor = UIColor(red: widgetCartButtonBackgroundColor.red, green: widgetCartButtonBackgroundColor.green, blue: widgetCartButtonBackgroundColor.blue, alpha: 1) - cell.recommendationsCartButton.backgroundColor = bgColor - } - - let productFavoritesId = "favorites.product." + pId - let favoritesItemsCachedArray: [String] = UserDefaults.standard.getValue(for: UserDefaults.Key(productFavoritesId)) as? [String] ?? [] - let itemIdExistInFavorites = favoritesItemsCachedArray.contains(where: { - $0.range(of: pId) != nil - }) - configureFavoritesButton(cell: cell, itemIdExistInFavorites: itemIdExistInFavorites) - - return cell - } - - public func didTapWidgetAddToCartButtonInside(cell: RecommendationsWidgetViewCell, position: CGPoint) { - if let indexPath = indexPath(for: cell) { - let selectedProductForCartFromWidget = cells[indexPath.row] - - let productInCartId = "cart.product." + selectedProductForCartFromWidget.id - var viewedSlidesCartCachedArray: [String] = UserDefaults.standard.getValue(for: UserDefaults.Key(productInCartId)) as? [String] ?? [] - let viewedCartSlideIdExists = viewedSlidesCartCachedArray.contains(where: { - $0.range(of: selectedProductForCartFromWidget.id) != nil - }) - - if !viewedCartSlideIdExists { - viewedSlidesCartCachedArray.append(selectedProductForCartFromWidget.id) - UserDefaults.standard.setValue(viewedSlidesCartCachedArray, for: UserDefaults.Key(productInCartId)) - - cell.recommendationsCartButton.setTitle(SdkConfiguration.recommendations.widgetRemoveFromCartButtonText, for: .normal) - sdkAddToCart(productId: selectedProductForCartFromWidget.id) - } else { - if let index = viewedSlidesCartCachedArray.firstIndex(of: selectedProductForCartFromWidget.id) { - viewedSlidesCartCachedArray.remove(at: index) - } - UserDefaults.standard.setValue(viewedSlidesCartCachedArray, for: UserDefaults.Key(productInCartId)) - - cell.recommendationsCartButton.setTitle(SdkConfiguration.recommendations.widgetAddToCartButtonText, for: .normal) - sdkRemoveFromCart(productId: selectedProductForCartFromWidget.id) - } - - configureCartButton(cell: cell, itemIdExistInCart: !viewedCartSlideIdExists) - if SdkConfiguration.recommendations.widgetCartButtonNeedOpenWebUrl { - openWidgetUrl(link: selectedProductForCartFromWidget.url) - } - } - } - - public func didTapWidgetAddToFavoritesButtonInside(cell: RecommendationsWidgetViewCell, position: CGPoint) { - if let indexPath = indexPath(for: cell) { - let selectedProductForFavoritesFromWidget = cells[indexPath.row] - let productFavoritesId = "favorites.product." + selectedProductForFavoritesFromWidget.id - - var viewedSlidesFavoritesCachedArray: [String] = UserDefaults.standard.getValue(for: UserDefaults.Key(productFavoritesId)) as? [String] ?? [] - let viewedFavoritesSlideIdExists = viewedSlidesFavoritesCachedArray.contains(where: { - $0.range(of: selectedProductForFavoritesFromWidget.id) != nil - }) - - var frameworkBundle = Bundle(for: classForCoder) -#if SWIFT_PACKAGE - frameworkBundle = Bundle.module -#endif - if !viewedFavoritesSlideIdExists { - viewedSlidesFavoritesCachedArray.append(selectedProductForFavoritesFromWidget.id) - UserDefaults.standard.setValue(viewedSlidesFavoritesCachedArray, for: UserDefaults.Key(productFavoritesId)) - - sdkAddToFavorites(productId: selectedProductForFavoritesFromWidget.id) - - var heartFillIcon = UIImage(named: "iconLikeHeartFillDark", in: frameworkBundle, compatibleWith: nil) - if SdkConfiguration.isDarkMode { - heartFillIcon = UIImage(named: "iconLikeHeartFillLight", in: frameworkBundle, compatibleWith: nil) - } - let heartFillImageRender = heartFillIcon?.withRenderingMode(.alwaysTemplate) - let heartFillImageView = UIImageView(image: heartFillImageRender) - - cell.recommendationsFavoritesButton.setImage(heartFillImageView.image, for: .normal) - - var customHeartTintColor = SdkConfiguration.recommendations.widgetFavoritesIconColor.hexToRGB() - if SdkConfiguration.isDarkMode { - customHeartTintColor = SdkConfiguration.recommendations.widgetFavoritesIconColorDarkMode.hexToRGB() - } - cell.recommendationsFavoritesButton.tintColor = UIColor(red: customHeartTintColor.red, green: customHeartTintColor.green, blue: customHeartTintColor.blue, alpha: 1) - } else { - if let index = viewedSlidesFavoritesCachedArray.firstIndex(of: selectedProductForFavoritesFromWidget.id) { - viewedSlidesFavoritesCachedArray.remove(at: index) - } - UserDefaults.standard.setValue(viewedSlidesFavoritesCachedArray, for: UserDefaults.Key(productFavoritesId)) - - sdkRemoveFromFavorites(productId: selectedProductForFavoritesFromWidget.id) - - var heartClearIcon = UIImage(named: "iconLikeHeartDark", in: frameworkBundle, compatibleWith: nil) - if SdkConfiguration.isDarkMode { - heartClearIcon = UIImage(named: "iconLikeHeartLight", in: frameworkBundle, compatibleWith: nil) - } - let heartClearImageRender = heartClearIcon?.withRenderingMode(.alwaysTemplate) - let heartClearImageView = UIImageView(image: heartClearImageRender) - - cell.recommendationsFavoritesButton.setImage(heartClearImageView.image, for: .normal) - - var customHeartTintColor = SdkConfiguration.recommendations.widgetFavoritesIconColor.hexToRGB() - if SdkConfiguration.isDarkMode { - customHeartTintColor = SdkConfiguration.recommendations.widgetFavoritesIconColorDarkMode.hexToRGB() - } - cell.recommendationsFavoritesButton.tintColor = UIColor(red: customHeartTintColor.red, green: customHeartTintColor.green, blue: customHeartTintColor.blue, alpha: 1) - } - - recommendationsDelegate?.addToFavoritesProductData(product: selectedProductForFavoritesFromWidget) - } - } - - public func configureCartButton(cell: RecommendationsWidgetViewCell, itemIdExistInCart: Bool) { - if !itemIdExistInCart { - let addTxtStr = SdkConfiguration.recommendations.widgetAddToCartButtonText - if SdkConfiguration.recommendations.widgetFontName != nil { - var fontAddToCartProvidedBySdk = UIFont(name: SdkConfiguration.recommendations.widgetFontName!, size: 17.0) - cell.recommendationsCartButton.titleLabel?.font = fontAddToCartProvidedBySdk - - if SdkConfiguration.recommendations.widgetAddToCartButtonFontSize != nil { - fontAddToCartProvidedBySdk = UIFont(name: SdkConfiguration.recommendations.widgetFontName!, size: SdkConfiguration.recommendations.widgetAddToCartButtonFontSize!) - cell.recommendationsCartButton.titleLabel?.font = fontAddToCartProvidedBySdk - } - } else { - cell.recommendationsCartButton.titleLabel?.font = .systemFont(ofSize: 17.0, weight: .semibold) - - if SdkConfiguration.recommendations.widgetAddToCartButtonFontSize != nil { - cell.recommendationsCartButton.titleLabel?.font = .systemFont(ofSize: SdkConfiguration.recommendations.widgetAddToCartButtonFontSize!, weight: .semibold) - } - } - cell.recommendationsCartButton.setTitle(addTxtStr, for: .normal) - } else { - let removeTxtStr = SdkConfiguration.recommendations.widgetRemoveFromCartButtonText - if SdkConfiguration.recommendations.widgetFontName != nil { - var fontRemoveFromCartProvidedBySdk = UIFont(name: SdkConfiguration.recommendations.widgetFontName!, size: 17.0) - cell.recommendationsCartButton.titleLabel?.font = fontRemoveFromCartProvidedBySdk - - if SdkConfiguration.recommendations.widgetRemoveFromCartButtonFontSize != nil { - fontRemoveFromCartProvidedBySdk = UIFont(name: SdkConfiguration.recommendations.widgetFontName!, size: SdkConfiguration.recommendations.widgetRemoveFromCartButtonFontSize!) - cell.recommendationsCartButton.titleLabel?.font = fontRemoveFromCartProvidedBySdk - } - } else { - cell.recommendationsCartButton.titleLabel?.font = .systemFont(ofSize: 17.0, weight: .semibold) - - if SdkConfiguration.recommendations.widgetRemoveFromCartButtonFontSize != nil { - cell.recommendationsCartButton.titleLabel?.font = .systemFont(ofSize: SdkConfiguration.recommendations.widgetRemoveFromCartButtonFontSize!, weight: .semibold) - } - } - cell.recommendationsCartButton.setTitle(removeTxtStr, for: .normal) - } - } - - public func configureFavoritesButton(cell: RecommendationsWidgetViewCell, itemIdExistInFavorites: Bool) { - var frameworkBundle = Bundle(for: classForCoder) -#if SWIFT_PACKAGE - frameworkBundle = Bundle.module -#endif - if !itemIdExistInFavorites { - var heartClearIcon = UIImage(named: "iconLikeHeartDark", in: frameworkBundle, compatibleWith: nil) - if SdkConfiguration.isDarkMode { - heartClearIcon = UIImage(named: "iconLikeHeartLight", in: frameworkBundle, compatibleWith: nil) - } - let heartClearImageRender = heartClearIcon?.withRenderingMode(.alwaysTemplate) - let heartClearImageView = UIImageView(image: heartClearImageRender) - - cell.recommendationsFavoritesButton.setImage(heartClearImageView.image, for: .normal) - - var customHeartTintColor = SdkConfiguration.recommendations.widgetFavoritesIconColor.hexToRGB() - if SdkConfiguration.isDarkMode { - customHeartTintColor = SdkConfiguration.recommendations.widgetFavoritesIconColorDarkMode.hexToRGB() - } - cell.recommendationsFavoritesButton.tintColor = UIColor(red: customHeartTintColor.red, green: customHeartTintColor.green, blue: customHeartTintColor.blue, alpha: 1) - } else { - var heartFillIcon = UIImage(named: "iconLikeHeartFillDark", in: frameworkBundle, compatibleWith: nil) - if SdkConfiguration.isDarkMode { - heartFillIcon = UIImage(named: "iconLikeHeartFillLight", in: frameworkBundle, compatibleWith: nil) - } - let heartFillImageRender = heartFillIcon?.withRenderingMode(.alwaysTemplate) - let heartFillImageView = UIImageView(image: heartFillImageRender) - - cell.recommendationsFavoritesButton.setImage(heartFillImageView.image, for: .normal) - - var customHeartTintColor = SdkConfiguration.recommendations.widgetFavoritesIconColor.hexToRGB() - if SdkConfiguration.isDarkMode { - customHeartTintColor = SdkConfiguration.recommendations.widgetFavoritesIconColorDarkMode.hexToRGB() - } - cell.recommendationsFavoritesButton.tintColor = UIColor(red: customHeartTintColor.red, green: customHeartTintColor.green, blue: customHeartTintColor.blue, alpha: 1) - } - } - - public func sdkAddToCart(productId: String) { - sdk?.track(event: .productAddedToCart(id: productId)) { trackResponse in - switch trackResponse { - case .success(_): - print("Product id \(productId) added to 'Cart' success") - case let .failure(error): - switch error { - case let .custom(customError): - print("Error:", customError) - default: - print("Error:", error.description) - } - } - } - } - - public func sdkRemoveFromCart(productId: String) { - sdk?.track(event: .productRemovedFromCart(id: productId)) { trackResponse in - switch trackResponse { - case .success(_): - print("Product id \(productId) removed from 'Cart' success") - case let .failure(error): - switch error { - case let .custom(customError): - print("Error:", customError) - default: - print("Error:", error.description) - } - } - } - } - - public func sdkAddToFavorites(productId: String) { - sdk?.track(event: .productAddedToFavorites(id: productId)) { trackResponse in - switch trackResponse { - case .success(_): - print("Product id \(productId) added to 'Favorites' success") - case let .failure(error): - switch error { - case let .custom(customError): - print("Error:", customError) - default: - print("Error:", error.description) - } - } - } - } - - public func sdkRemoveFromFavorites(productId: String) { - sdk?.track(event: .productRemovedFromFavorites(id: productId)) { trackResponse in - switch trackResponse { - case .success(_): - print("Product id \(productId) removed from 'Favorites' success") - case let .failure(error): - switch error { - case let .custom(customError): - print("Error:", customError) - default: - print("Error:", error.description) - } - } - } - } - - public override func traitCollectionDidChange (_ previousTraitCollection: UITraitCollection?) { - super.traitCollectionDidChange(previousTraitCollection) - let userInterfaceStyle = traitCollection.userInterfaceStyle - if UIApplication.shared.applicationState == .inactive { - switch userInterfaceStyle { - case .unspecified: - self.reloadRecommendationsCollectionSubviews() - case .light: - self.reloadRecommendationsCollectionSubviews() - case .dark: - self.reloadRecommendationsCollectionSubviews() - @unknown default: - break - } - } - } - - public func reloadRecommendationsCollectionSubviews() { - self.setupWidgetBgColor() - UICollectionView.performWithoutAnimation { - self.layoutIfNeeded() - self.reloadData() - } - } - - public func openWidgetUrl(link: String) { - if let linkUrl = URL(string: link) { - self.parentViewController?.presentInternalSdkWebKit(webUrl: linkUrl) - } - } - - func formatValue(_ value: Double) -> String { - return String(format: "%.2f", value) - } - - private func strikeThrough(str: String) -> NSAttributedString { - let attributeString = NSMutableAttributedString(string: str) - attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: NSUnderlineStyle.single.rawValue, range: NSMakeRange(0, attributeString.length)) - return attributeString - } - - private class func formatValue(_ value: Double) -> Int { - return Int(value) * 2 - } - - public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - let selectedRecommendationProductFroCell = cells[indexPath.row] - recommendationsDelegate?.didTapOnProduct(product: selectedRecommendationProductFroCell) - openWidgetUrl(link: selectedRecommendationProductFroCell.url) - } - - public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { - return CGSize(width: RecommendationsConstants.recommendationsCollectionItemWidth, height: frame.height * 0.9) - } - - required public init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } -} diff --git a/Pods/REES46/REES46/Classes/Stories/StoryViewController/RecommendationsWidget/RecommendationsWidgetViewCell.swift b/Pods/REES46/REES46/Classes/Stories/StoryViewController/RecommendationsWidget/RecommendationsWidgetViewCell.swift deleted file mode 100755 index f3e58df..0000000 --- a/Pods/REES46/REES46/Classes/Stories/StoryViewController/RecommendationsWidget/RecommendationsWidgetViewCell.swift +++ /dev/null @@ -1,272 +0,0 @@ -import UIKit - -public protocol RecommendationsWidgetViewCellDelegate: AnyObject { - func didTapWidgetAddToCartButtonInside(cell: RecommendationsWidgetViewCell, position: CGPoint) - func didTapWidgetAddToFavoritesButtonInside(cell: RecommendationsWidgetViewCell, position: CGPoint) -} - -public class RecommendationsWidgetViewCell: UICollectionViewCell { - - static let reuseRecommCellId = "RecommendationsWidgetViewCell" - - fileprivate let keyCellTagStarsDefaults = "key" - - public weak var widgetCellDelegate: RecommendationsWidgetViewCellDelegate? - - public let recommendationsCellWidgetIndicator = StoriesSlideReloadIndicator() - - let recommendationsImageView: UIImageView = { - let imageView = UIImageView() - imageView.translatesAutoresizingMaskIntoConstraints = false - imageView.contentMode = .scaleAspectFit - return imageView - }() - - let recommendationsDiscountLabel: UILabel = { - let label = UILabel() - label.textColor = .white - label.backgroundColor = UIColor(red: 175/255, green: 82/255, blue: 222/255, alpha: 1) - label.layer.cornerRadius = 3 - label.layer.masksToBounds = true - label.textAlignment = .center - label.font = UIFont.systemFont(ofSize: 12, weight: .bold) - label.translatesAutoresizingMaskIntoConstraints = false - return label - }() - - let recommendationsCreditLabel: UILabel = { - let label = UILabel() - label.textColor = .white - label.backgroundColor = UIColor(red: 255/255, green: 149/255, blue: 0/255, alpha: 1) - label.layer.cornerRadius = 3 - label.layer.masksToBounds = true - label.textAlignment = .center - label.font = UIFont.systemFont(ofSize: 12, weight: .bold) - label.translatesAutoresizingMaskIntoConstraints = false - return label - }() - - lazy var recommendationsRatingStars: RecommendationsStarsView = { - let starsView = RecommendationsStarsView() - starsView.starsSetupSettings.filledImage = UIImage(named: "starFilled")?.withRenderingMode(.alwaysOriginal) - starsView.starsSetupSettings.emptyImage = UIImage(named: "starEmpty")?.withRenderingMode(.alwaysOriginal) - starsView.rating = 0 - starsView.starsSetupSettings.fillMode = .half - starsView.starsSetupSettings.reloadOnUserTouch = false - starsView.translatesAutoresizingMaskIntoConstraints = false - return starsView - }() - - let recommendationsRatingStarsNoReviewsLabel: UILabel = { - let label = UILabel() - label.font = UIFont.systemFont(ofSize: 16, weight: .medium) - label.textColor = #colorLiteral(red: 0.6, green: 0.6, blue: 0.6, alpha: 1) - label.translatesAutoresizingMaskIntoConstraints = false - return label - }() - - let recommendationsRatingLabel: UILabel = { - let label = UILabel() - label.font = UIFont.systemFont(ofSize: 14, weight: .medium) - label.textColor = #colorLiteral(red: 0.6, green: 0.6, blue: 0.6, alpha: 1) - label.translatesAutoresizingMaskIntoConstraints = false - return label - }() - - let recommendationsProductNameLabel: UILabel = { - let label = UILabel() - label.font = UIFont.systemFont(ofSize: 17, weight: .medium) - label.numberOfLines = 3 - label.textAlignment = .left - label.translatesAutoresizingMaskIntoConstraints = false - return label - }() - - let recommendationsClearLabel: UILabel = { - let label = UILabel() - label.font = UIFont.systemFont(ofSize: 11, weight: .regular) - label.translatesAutoresizingMaskIntoConstraints = false - return label - }() - - let recommendationsOldPrice: UILabel = { - let label = UILabel() - label.font = UIFont.systemFont(ofSize: 15, weight: .regular) - label.numberOfLines = 1 - label.translatesAutoresizingMaskIntoConstraints = false - return label - }() - - let recommendationsPriceLabel: UILabel = { - let label = UILabel() - label.font = UIFont.systemFont(ofSize: 19, weight: .bold) - label.numberOfLines = 1 - label.translatesAutoresizingMaskIntoConstraints = false - return label - }() - - let recommendationsCartButton: UIButton = { - let rAddToCartButton = UIButton() - rAddToCartButton.translatesAutoresizingMaskIntoConstraints = false - rAddToCartButton.layer.cornerRadius = 6 - rAddToCartButton.layer.masksToBounds = true - return rAddToCartButton - }() - - let recommendationsFavoritesButton: UIButton = { - let rAddToFavoritesButton = UIButton() - rAddToFavoritesButton.translatesAutoresizingMaskIntoConstraints = false - - if SdkConfiguration.isDarkMode { - rAddToFavoritesButton.tintColor = .black - rAddToFavoritesButton.setTitleColor(.black, for: .normal) - } else { - rAddToFavoritesButton.tintColor = .white - rAddToFavoritesButton.setTitleColor(.white, for: .normal) - } - return rAddToFavoritesButton - }() - - - @objc - public func didAddToCartTapButton(_ sender: AnyObject) { - let tapCellPosition: CGPoint = sender.convert(CGPoint.zero, to: self) - widgetCellDelegate?.didTapWidgetAddToCartButtonInside(cell: self, position: tapCellPosition) - } - - @objc - public func didAddToFavoritesTapButton(_ sender: AnyObject) { - let tapFavCellPosition: CGPoint = sender.convert(CGPoint.zero, to: self) - widgetCellDelegate?.didTapWidgetAddToFavoritesButtonInside(cell: self, position: tapFavCellPosition) - } - - public override init(frame: CGRect) { - super.init(frame: frame) - recommendationsCartButton.addTarget(self, action: #selector(didAddToCartTapButton(_:)), for: .touchUpInside) - - recommendationsFavoritesButton.addTarget(self, action: #selector(didAddToFavoritesTapButton(_:)), for: .touchUpInside) - - contentView.addSubview(recommendationsImageView) - contentView.addSubview(recommendationsDiscountLabel) - contentView.addSubview(recommendationsCreditLabel) - contentView.addSubview(recommendationsRatingStars) - contentView.addSubview(recommendationsRatingStarsNoReviewsLabel) - contentView.addSubview(recommendationsRatingLabel) - contentView.addSubview(recommendationsProductNameLabel) - contentView.addSubview(recommendationsClearLabel) - contentView.addSubview(recommendationsOldPrice) - contentView.addSubview(recommendationsPriceLabel) - contentView.addSubview(recommendationsCartButton) - contentView.addSubview(recommendationsFavoritesButton) - - backgroundColor = .white - - setupConstraints() - } - - private func setupConstraints() { - NSLayoutConstraint.activate([ - // Image View - recommendationsImageView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 12), - recommendationsImageView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16), - recommendationsImageView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -16), - recommendationsImageView.heightAnchor.constraint(equalToConstant: 140), - - // Discount Label - recommendationsDiscountLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 12), - recommendationsDiscountLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16), - recommendationsDiscountLabel.widthAnchor.constraint(equalToConstant: 55), - recommendationsDiscountLabel.heightAnchor.constraint(equalToConstant: 20), - - // Credit Label - recommendationsCreditLabel.topAnchor.constraint(equalTo: recommendationsDiscountLabel.bottomAnchor, constant: 7), - recommendationsCreditLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16), - recommendationsCreditLabel.widthAnchor.constraint(equalToConstant: 55), - recommendationsCreditLabel.heightAnchor.constraint(equalToConstant: 20), - - // Product Name - recommendationsProductNameLabel.topAnchor.constraint(equalTo: recommendationsImageView.bottomAnchor, constant: 10), - recommendationsProductNameLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16), - recommendationsProductNameLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -16), - - // Rating Stars - recommendationsRatingStars.topAnchor.constraint(equalTo: recommendationsProductNameLabel.bottomAnchor, constant: 10), - recommendationsRatingStars.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16), - recommendationsRatingStars.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -16), - - // Rating Stars No Reviews - recommendationsRatingStarsNoReviewsLabel.topAnchor.constraint(equalTo: recommendationsRatingStars.bottomAnchor, constant: 4), - recommendationsRatingStarsNoReviewsLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16), - recommendationsRatingStarsNoReviewsLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -16), - - // Rating Label - recommendationsRatingLabel.topAnchor.constraint(equalTo: recommendationsRatingStarsNoReviewsLabel.bottomAnchor, constant: 0), - recommendationsRatingLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16), - - // Old Price - recommendationsOldPrice.topAnchor.constraint(equalTo: recommendationsRatingLabel.bottomAnchor, constant: 8), - recommendationsOldPrice.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16), - - // Price - recommendationsPriceLabel.topAnchor.constraint(equalTo: recommendationsOldPrice.bottomAnchor, constant: 4), - recommendationsPriceLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16), - - // Cart Button - recommendationsCartButton.topAnchor.constraint(equalTo: recommendationsPriceLabel.bottomAnchor, constant: 10), - recommendationsCartButton.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16), - recommendationsCartButton.heightAnchor.constraint(equalToConstant: 44), - recommendationsCartButton.widthAnchor.constraint(equalToConstant: 120), - - // Favorites Button - recommendationsFavoritesButton.topAnchor.constraint(equalTo: recommendationsPriceLabel.bottomAnchor, constant: 10), - recommendationsFavoritesButton.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -16), - recommendationsFavoritesButton.widthAnchor.constraint(equalToConstant: 27), - recommendationsFavoritesButton.heightAnchor.constraint(equalToConstant: 27), - - // Buttons Bottom Constraint - recommendationsCartButton.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -16), - recommendationsFavoritesButton.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -16) - ]) - } - - public override func layoutSubviews() { - super.layoutSubviews() - - let backgroundColor = SdkConfiguration.isDarkMode - ? SdkConfiguration.recommendations.widgetCellBackgroundColorDarkMode.hexToRGB() - : SdkConfiguration.recommendations.widgetCellBackgroundColor.hexToRGB() - - layer.backgroundColor = UIColor(red: backgroundColor.red, green: backgroundColor.green, blue: backgroundColor.blue, alpha: 1).cgColor - layer.borderWidth = SdkConfiguration.recommendations.widgetBorderWidth - - let borderColor = SdkConfiguration.isDarkMode - ? SdkConfiguration.recommendations.widgetBorderColorDarkMode.hexToRGB() - : SdkConfiguration.recommendations.widgetBorderColor.hexToRGB() - - layer.borderColor = UIColor(red: borderColor.red, green: borderColor.green, blue: borderColor.blue, alpha: 1).withAlphaComponent(SdkConfiguration.recommendations.widgetBorderTransparent).cgColor - layer.cornerRadius = SdkConfiguration.recommendations.widgetCornerRadius - } - - func saveWidgetStarRating() { - recommendationsRatingStars.didFinishTouchingRecommendationsStars = { stRating in - UserDefaults.standard.set(stRating, forKey: self.keyCellTagStarsDefaults) - } - } - - func loadWidgetStarRating() { - guard let rLoadedStarValue = UserDefaults.standard.object(forKey: keyCellTagStarsDefaults) as? Double else {return} - recommendationsRatingStars.rating = rLoadedStarValue - } - - override public func prepareForReuse() { - recommendationsRatingStars.prepareForReuse() - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - func update(_ rating: Double) { - recommendationsRatingStars.rating = rating - } -} diff --git a/Pods/REES46/REES46/Classes/Stories/StoryViewController/StoryViewController.swift b/Pods/REES46/REES46/Classes/Stories/StoryViewController/StoryViewController.swift deleted file mode 100644 index 0f4e516..0000000 --- a/Pods/REES46/REES46/Classes/Stories/StoryViewController/StoryViewController.swift +++ /dev/null @@ -1,1160 +0,0 @@ -import UIKit -import AVFoundation - -public protocol StoryViewControllerProtocol: AnyObject { - func reloadStoriesCollectionSubviews() -} - -public protocol CarouselCollectionViewCellDelegate: AnyObject { - func closeProductsCarousel() - func sendStructSelectedCarouselProduct(product: StoriesProduct) -} - -public class NavigationStackController: UINavigationController { - - open weak var stackDelegate: UINavigationControllerDelegate? - - public override init(rootViewController: UIViewController) { - super.init(rootViewController: rootViewController) - } - - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - public override func viewDidLoad() { - super.viewDidLoad() - } - - func canBeMadeHeadViewController(viewController: UIViewController) -> Bool { - return viewController.isKind(of: StoryViewController.self) - } - - func resetNavigationStackWithLatestViewControllerAsHead() { - if viewControllers.count > 1 { - viewControllers.removeFirst((viewControllers.count - 1)) - } - } -} - -class StoryViewController: UINavigationController, UINavigationControllerDelegate, UIGestureRecognizerDelegate, CarouselCollectionViewCellDelegate { - private var collectionView: UICollectionView = { - let frame = CGRect(x: 0, y: 0, width: 300, height: 100) - let layout = UICollectionViewFlowLayout() - layout.scrollDirection = .horizontal - layout.itemSize = CGSize(width: 100, height: 130) - layout.minimumInteritemSpacing = 0 - layout.minimumLineSpacing = 0 - let collectionView = UICollectionView(frame: frame, collectionViewLayout: layout) - collectionView.isPagingEnabled = true - collectionView.isScrollEnabled = false - collectionView.backgroundColor = .black - collectionView.showsVerticalScrollIndicator = false - collectionView.showsHorizontalScrollIndicator = false - collectionView.isPrefetchingEnabled = false - return collectionView - }() - - public var closeButton: UIButton = { - let closeButton = UIButton() - return closeButton - }() - - private var pageIndicator: UIStackView = { - let view = UIStackView() - view.axis = .horizontal - view.distribution = .fillEqually - view.spacing = 8 - return view - }() - - public var stories: [Story] = [] - - public var startWithIndexPath: IndexPath? = .init(item: 1, section: 0) - public var currentPosition: IndexPath = IndexPath() - - private var timer = Timer() - - private var storyTime = 8 - - private var timeLeft: TimeInterval = 8 - private var endTime: Date? - - private var currentProgressView: UIProgressView? - private var currentDuration: Float = 0 - - private var lastContentStoryOffset = CGPoint.zero - private var needSaveStoryLocal = true - - public var sdk: PersonalizationSDK? - public var sdkLinkDelegate: StoriesViewLinkProtocol? - - private let carouselProductsSlideTintBlurView = UIView() - private var carouselProductsSlideCollectionView = CarouselCollectionView() - - private let storiesSlideReloadIndicator = StoriesSlideReloadIndicator() - - - override func viewDidLoad() { - super.viewDidLoad() - commonInit() - setupGestureRecognizerOnCollection() - - NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(didEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil) - - NotificationCenter.default.addObserver(self, selector: #selector(pauseTimer), name: .init(rawValue: "ExternalActionStoryPause"), object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(continueTimer), name: .init(rawValue: "ExternalActionStoryPlay"), object: nil) - UserDefaults.standard.set(false, forKey: "CarouselTimerStopMemorySetting") - UserDefaults.standard.set(false, forKey: "LastTapButtonMemorySdkSetting") - } - - @objc - func willEnterForeground() { - let ds: Bool = UserDefaults.standard.bool(forKey: "CarouselTimerStopMemorySetting") - if !ds { - let sIdDetect: String = UserDefaults.standard.string(forKey: "LastViewedSlideMemorySetting") ?? "" - NotificationCenter.default.post(name: .init(rawValue: "PlayVideoLongTap"), object: nil, userInfo: ["slideID": sIdDetect]) - continueTimer() - } - } - - @objc - func didEnterBackground() { - let sIdDetect: String = UserDefaults.standard.string(forKey: "LastViewedSlideMemorySetting") ?? "" - NotificationCenter.default.post(name: .init(rawValue: "PauseVideoLongTap"), object: nil, userInfo: ["slideID": sIdDetect]) - pauseTimer() - } - - override func viewWillDisappear(_ animated: Bool) { - super.viewWillDisappear(animated) - timer.invalidate() - } - - func applicationWillResignActive(notification: NSNotification) { - viewWillDisappear(true) - } - - func applicationWillEnterBackground(notification: NSNotification) { - viewWillAppear(true) - } - - public override func traitCollectionDidChange (_ previousTraitCollection: UITraitCollection?) { - super.traitCollectionDidChange(previousTraitCollection) - let userInterfaceStyle = traitCollection.userInterfaceStyle - if UIApplication.shared.applicationState == .inactive { - switch userInterfaceStyle { - case .unspecified: - let storySlideId = stories[currentPosition.section].id - let cachedSlideId = "cached.slide." + storySlideId - let userInfo = ["url": cachedSlideId] as [String: Any] - NotificationCenter.default.post(name:Notification.Name(cachedSlideId), object: userInfo) - self.sdkLinkDelegate?.reloadStoriesCollectionSubviews() - self.sdkLinkDelegate?.updateBgColor() - self.collectionView.reloadData() - case .light: - let storySlideId = stories[currentPosition.section].id - let cachedSlideId = "cached.slide." + storySlideId - let userInfo = ["url": cachedSlideId] as [String: Any] - NotificationCenter.default.post(name:Notification.Name(cachedSlideId), object: userInfo) - self.sdkLinkDelegate?.reloadStoriesCollectionSubviews() - self.sdkLinkDelegate?.updateBgColor() - self.collectionView.reloadData() - case .dark: - let storySlideId = stories[currentPosition.section].id - let cachedSlideId = "cached.slide." + storySlideId - let userInfo = ["url": cachedSlideId] as [String: Any] - NotificationCenter.default.post(name:Notification.Name(cachedSlideId), object: userInfo) - self.sdkLinkDelegate?.reloadStoriesCollectionSubviews() - self.sdkLinkDelegate?.updateBgColor() - self.collectionView.reloadData() - @unknown default: - break - } - } - } - - private func commonInit() { - view.addSubview(collectionView) - view.addSubview(closeButton) - view.addSubview(pageIndicator) - - storiesSlideReloadIndicator.contentMode = .scaleToFill - storiesSlideReloadIndicator.translatesAutoresizingMaskIntoConstraints = false - - let customIndicatorColor = SdkConfiguration.stories.storiesSlideReloadIndicatorBackgroundColor.hexToRGB() - storiesSlideReloadIndicator.strokeColor = UIColor(red: customIndicatorColor.red, green: customIndicatorColor.green, blue: customIndicatorColor.blue, alpha: 1) - - storiesSlideReloadIndicator.lineWidth = SdkConfiguration.stories.storiesSlideReloadIndicatorBorderLineWidth - storiesSlideReloadIndicator.numSegments = SdkConfiguration.stories.storiesSlideReloadIndicatorSegmentCount - storiesSlideReloadIndicator.animationDuration = SdkConfiguration.stories.storiesSlideReloadIndicatorAnimationDuration - storiesSlideReloadIndicator.rotationDuration = SdkConfiguration.stories.storiesSlideReloadIndicatorRotationDuration - storiesSlideReloadIndicator.alpha = 0.0 - view.addSubview(storiesSlideReloadIndicator) - - collectionView.translatesAutoresizingMaskIntoConstraints = false - NSLayoutConstraint(item: collectionView, attribute: NSLayoutConstraint.Attribute.left, relatedBy: NSLayoutConstraint.Relation.equal, toItem: view, attribute: NSLayoutConstraint.Attribute.left, multiplier: 1, constant: 0).isActive = true - NSLayoutConstraint(item: collectionView, attribute: NSLayoutConstraint.Attribute.right, relatedBy: NSLayoutConstraint.Relation.equal, toItem: view, attribute: NSLayoutConstraint.Attribute.right, multiplier: 1, constant: 0).isActive = true - NSLayoutConstraint(item: collectionView, attribute: NSLayoutConstraint.Attribute.top, relatedBy: NSLayoutConstraint.Relation.equal, toItem: view, attribute: NSLayoutConstraint.Attribute.top, multiplier: 1, constant: 0).isActive = true - NSLayoutConstraint(item: collectionView, attribute: NSLayoutConstraint.Attribute.bottom, relatedBy: NSLayoutConstraint.Relation.equal, toItem: view, attribute: NSLayoutConstraint.Attribute.bottom, multiplier: 1, constant: 0).isActive = true - - pageIndicator.translatesAutoresizingMaskIntoConstraints = false - NSLayoutConstraint(item: pageIndicator, - attribute: NSLayoutConstraint.Attribute.left, - relatedBy: NSLayoutConstraint.Relation.equal, - toItem: view, attribute: NSLayoutConstraint.Attribute.left, - multiplier: 1, - constant: 11).isActive = true - NSLayoutConstraint(item: pageIndicator, - attribute: NSLayoutConstraint.Attribute.right, - relatedBy: NSLayoutConstraint.Relation.equal, - toItem: view, attribute: NSLayoutConstraint.Attribute.right, - multiplier: 1, - constant: -11).isActive = true - NSLayoutConstraint(item: pageIndicator, - attribute: NSLayoutConstraint.Attribute.height, - relatedBy: NSLayoutConstraint.Relation.equal, - toItem: nil, - attribute: NSLayoutConstraint.Attribute.notAnAttribute, - multiplier: 1, - constant: 4).isActive = true - if SdkGlobalHelper.sharedInstance.willDeviceHaveDynamicIsland() { - NSLayoutConstraint(item: pageIndicator, - attribute: NSLayoutConstraint.Attribute.top, - relatedBy: NSLayoutConstraint.Relation.equal, - toItem: view, - attribute: NSLayoutConstraint.Attribute.top, - multiplier: 1, - constant: 62).isActive = true } - else { - NSLayoutConstraint(item: pageIndicator, - attribute: NSLayoutConstraint.Attribute.top, - relatedBy: NSLayoutConstraint.Relation.equal, - toItem: view, - attribute: NSLayoutConstraint.Attribute.top, - multiplier: 1, - constant: 40).isActive = true - } - - closeButton.translatesAutoresizingMaskIntoConstraints = false - if SdkGlobalHelper.sharedInstance.willDeviceHaveDynamicIsland() { - NSLayoutConstraint(item: closeButton, attribute: NSLayoutConstraint.Attribute.right, relatedBy: NSLayoutConstraint.Relation.equal, toItem: view, attribute: NSLayoutConstraint.Attribute.right, multiplier: 1, constant: -10).isActive = true - NSLayoutConstraint(item: closeButton, attribute: NSLayoutConstraint.Attribute.top, relatedBy: NSLayoutConstraint.Relation.equal, toItem: pageIndicator, attribute: NSLayoutConstraint.Attribute.bottom, multiplier: 1, constant: 26).isActive = true - NSLayoutConstraint(item: closeButton, attribute: NSLayoutConstraint.Attribute.width, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 30).isActive = true - NSLayoutConstraint(item: closeButton, attribute: NSLayoutConstraint.Attribute.height, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 30).isActive = true - } else { - NSLayoutConstraint(item: closeButton, attribute: NSLayoutConstraint.Attribute.right, relatedBy: NSLayoutConstraint.Relation.equal, toItem: view, attribute: NSLayoutConstraint.Attribute.right, multiplier: 1, constant: -10).isActive = true - NSLayoutConstraint(item: closeButton, attribute: NSLayoutConstraint.Attribute.top, relatedBy: NSLayoutConstraint.Relation.equal, toItem: pageIndicator, attribute: NSLayoutConstraint.Attribute.bottom, multiplier: 1, constant: 5).isActive = true - NSLayoutConstraint(item: closeButton, attribute: NSLayoutConstraint.Attribute.width, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 30).isActive = true - NSLayoutConstraint(item: closeButton, attribute: NSLayoutConstraint.Attribute.height, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 30).isActive = true - } - - if SdkConfiguration.stories.storiesSlideReloadIndicatorDisabled { - //Disable implementation - } else { - storiesSlideReloadIndicator.translatesAutoresizingMaskIntoConstraints = false - storiesSlideReloadIndicator.centerXAnchor.constraint(equalTo: collectionView.centerXAnchor).isActive = true - storiesSlideReloadIndicator.centerYAnchor.constraint(equalTo: collectionView.centerYAnchor).isActive = true - } - - configureView() - closeButton.addTarget(self, action: #selector(didTapCloseButton), for: .touchUpInside) - } - - @objc - private func didSingleTapOnScreen(_ gestureRecognizer: UITapGestureRecognizer) { - let tapLocation = gestureRecognizer.location(in: self.view) - let halfWidth = self.view.bounds.width / 2.0 - if tapLocation.x < halfWidth { - handleLeftTap() - } else { - handleRightTap() - } - } - - private func handleRightTap() { - needSaveStoryLocal = false - - guard currentPosition.section < stories.count else { - print("Section index out of range") - return - } - - let storyId = stories[currentPosition.section].id - let storyName = "viewed.slide." + storyId - - guard currentPosition.row < stories[currentPosition.section].slides.count else { - print("Row index out of range") - return - } - - let slideId = stories[currentPosition.section].slides[currentPosition.row].id - - var viewedSlidesStoriesCachedArray: [String] = UserDefaults.standard.getValue(for: UserDefaults.Key(storyName)) as? [String] ?? [] - let viewedStorySlideIdExists = viewedSlidesStoriesCachedArray.contains(where: { - $0.range(of: slideId) != nil - }) - - if !viewedStorySlideIdExists { - viewedSlidesStoriesCachedArray.append(slideId) - UserDefaults.standard.setValue(viewedSlidesStoriesCachedArray, for: UserDefaults.Key(storyName)) - needSaveStoryLocal = true - } - - if currentPosition.row < stories[currentPosition.section].slides.count - 1 { - currentPosition.row += 1 - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - - DispatchQueue.main.async { - self.updateSlides() - } - } else if currentPosition.section >= stories.count - 1 { - self.dismiss(animated: true) - } else if currentPosition.section < stories.count - 1 { - - currentPosition.row = 0 - - guard currentPosition.section + 1 < stories.count else { - print("Section index out of range") - return - } - - let storyId = stories[currentPosition.section + 1].id - let storyName = "viewed.slide." + storyId - - guard currentPosition.row < stories[currentPosition.section + 1].slides.count else { - print("Row index out of range") - return - } - - let slideId = stories[currentPosition.section + 1].slides[currentPosition.row].id - - var allStoriesMainArray: [String] = [] - for (index, _) in stories[currentPosition.section + 1].slides.enumerated() { - allStoriesMainArray.append(stories[currentPosition.section + 1].slides[index].id) - } - - let viewedSlidesStoriesCachedArray: [String] = UserDefaults.standard.getValue(for: UserDefaults.Key(storyName)) as? [String] ?? [] - let viewedStorySlideIdExists = viewedSlidesStoriesCachedArray.contains(where: { - $0.range(of: slideId) != nil - }) - - if viewedStorySlideIdExists { - let lastViewedSlideIndexValue = viewedSlidesStoriesCachedArray.last - var currentDefaultIndex = 0 - for name in allStoriesMainArray { - if name == lastViewedSlideIndexValue { - break - } - currentDefaultIndex += 1 - } - - if (currentDefaultIndex + 1 < stories[currentPosition.section + 1].slides.count) { - currentPosition.section += 1 - currentPosition.row = currentDefaultIndex + 1 - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - } else if (currentDefaultIndex + 1 == stories[currentPosition.section + 1].slides.count) { - currentPosition.section += 1 - currentPosition.row = currentDefaultIndex - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - } else { - currentPosition.section += 1 - currentPosition.row = 0 - - scrollToFirstRow() - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - } - } else { - currentPosition.section += 1 - currentPosition.row = 0 - - scrollToFirstRow() - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - } - - DispatchQueue.main.async { - self.updateSlides() - } - } - } - - private func handleLeftTap() { - if currentPosition.row > 0 { - currentPosition.row -= 1 - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - DispatchQueue.main.async { - self.updateSlides() - } - } else if currentPosition.section == 0 { - self.dismiss(animated: true) - } else if currentPosition.section >= 1 { - - currentPosition.row = 0 - - let storyId = stories[currentPosition.section - 1].id - let storyName = "viewed.slide." + storyId - let slideId = stories[currentPosition.section - 1].slides[currentPosition.row].id - - var allStoriesMainArray: [String] = [] - for (index, _) in stories[currentPosition.section - 1].slides.enumerated() { - allStoriesMainArray.append(stories[currentPosition.section - 1].slides[(index)].id) - } - - let viewedSlidesStoriesCachedArray: [String] = UserDefaults.standard.getValue(for: UserDefaults.Key(storyName)) as? [String] ?? [] - let viewedStorySlideIdExists = viewedSlidesStoriesCachedArray.contains(where: { - $0.range(of: slideId) != nil - }) - - if viewedStorySlideIdExists { - let lastViewedSlideIndexValue = viewedSlidesStoriesCachedArray.last - var currentDefaultIndex = 0 - for name in allStoriesMainArray { - if name == lastViewedSlideIndexValue { - break - } - currentDefaultIndex += 1 - } - - if (currentDefaultIndex + 1 < stories[currentPosition.section - 1].slides.count) { - if currentDefaultIndex == 0 { - currentPosition.section -= 1 - currentPosition.row = currentDefaultIndex - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - } else { - if (currentDefaultIndex + 1 <= stories[currentPosition.section - 1].slides.count) { - currentPosition.section -= 1 - currentPosition.row = currentDefaultIndex + 1 - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - } else { - currentPosition.section -= 1 - currentPosition.row = currentDefaultIndex - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - } - } - } else { - currentPosition.section -= 1 - currentPosition.row = 0 - - scrollToFirstRow() - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - } - } else { - currentPosition.section -= 1 - currentPosition.row = 0 - - scrollToFirstRow() - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - } - - DispatchQueue.main.async { - self.updateSlides() - } - } - } - - @objc - func didSwipeLeft() { - if currentPosition.section >= stories.count - 1{ - dismiss(animated: true) - } else { - needSaveStoryLocal = false - currentPosition.row = 0 - - let storyId = stories[currentPosition.section + 1].id - let storyName = "viewed.slide." + storyId - let slideId = stories[currentPosition.section + 1].slides[currentPosition.row].id - - var allStoriesMainArray: [String] = [] - for (index, _) in stories[currentPosition.section + 1].slides.enumerated() { - allStoriesMainArray.append(stories[currentPosition.section + 1].slides[(index)].id) - } - - let viewedSlidesStoriesCachedArray: [String] = UserDefaults.standard.getValue(for: UserDefaults.Key(storyName)) as? [String] ?? [] - let viewedStorySlideIdExists = viewedSlidesStoriesCachedArray.contains(where: { - $0.range(of: slideId) != nil - }) - - if viewedStorySlideIdExists { - let lastViewedSlideIndexValue = viewedSlidesStoriesCachedArray.last - var currentDefaultIndex = 0 - for name in allStoriesMainArray { - if name == lastViewedSlideIndexValue { - break - } - currentDefaultIndex += 1 - } - - if (currentDefaultIndex + 1 < stories[currentPosition.section + 1].slides.count) { - currentPosition.section += 1 - currentPosition.row = currentDefaultIndex + 1 - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - } else if (currentDefaultIndex + 1 == stories[currentPosition.section + 1].slides.count) { - currentPosition.section += 1 - currentPosition.row = 0 //currentDefaultIndex - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - } else { - currentPosition.section += 1 - currentPosition.row = 0 - - scrollToFirstRow() - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - } - } else { - needSaveStoryLocal = false - currentPosition.section += 1 - currentPosition.row = 0 - scrollToFirstRow() - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - } - - DispatchQueue.main.async { - self.updateSlides() - } - } - } - - private func scrollToFirstRow() { - let sectionFrame = collectionView.layoutAttributesForItem(at: IndexPath(item: 0, section: currentPosition.section))?.frame ?? .zero - collectionView.setContentOffset(CGPoint(x: sectionFrame.origin.x - collectionView.contentInset.left, y: 0), animated: false) - } - - @objc - func didSwipeRight() { - if currentPosition.section > 0 { - currentPosition.row = 0 - - let storyId = stories[currentPosition.section - 1].id - let storyName = "viewed.slide." + storyId - let slideId = stories[currentPosition.section - 1].slides[currentPosition.row].id - - var allStoriesMainArray: [String] = [] - for (index, _) in stories[currentPosition.section - 1].slides.enumerated() { - allStoriesMainArray.append(stories[currentPosition.section - 1].slides[(index)].id) - } - - let viewedSlidesStoriesCachedArray: [String] = UserDefaults.standard.getValue(for: UserDefaults.Key(storyName)) as? [String] ?? [] - let viewedStorySlideIdExists = viewedSlidesStoriesCachedArray.contains(where: { - $0.range(of: slideId) != nil - }) - - if viewedStorySlideIdExists { - let lastViewedSlideIndexValue = viewedSlidesStoriesCachedArray.last - var currentDefaultIndex = 0 - for name in allStoriesMainArray { - if name == lastViewedSlideIndexValue { - break - } - currentDefaultIndex += 1 - } - - if (currentDefaultIndex + 1 < stories[currentPosition.section - 1].slides.count) { - if (currentDefaultIndex + 1 <= stories[currentPosition.section - 1].slides.count) { - currentPosition.section -= 1 - currentPosition.row = currentDefaultIndex + 1 - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - } else { - currentPosition.section -= 1 - currentPosition.row = currentDefaultIndex - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - } - } else { - currentPosition.section -= 1 - currentPosition.row = 0 - - scrollToFirstRow() - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - } - } else { - currentPosition.section -= 1 - currentPosition.row = 0 - - scrollToFirstRow() - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - } - - DispatchQueue.main.async { - self.updateSlides() - } - } else { - dismiss(animated: true) - } - } - - private func configureView() { - collectionView.delegate = self - collectionView.dataSource = self - - var frameworkBundle = Bundle(for: classForCoder) -#if SWIFT_PACKAGE - frameworkBundle = Bundle.module -#endif - let image = UIImage(named: "iconStoryClose", in: frameworkBundle, compatibleWith: nil) - let imageRender = image?.withRenderingMode(.alwaysTemplate) - let imageView = UIImageView(image: imageRender) - closeButton.setImage(imageView.image, for: .normal) - - let customTintColor = SdkConfiguration.stories.closeIconColor.hexToRGB() - closeButton.tintColor = UIColor(red: customTintColor.red, green: customTintColor.green, blue: customTintColor.blue, alpha: 1) - collectionView.register(StoryCollectionViewCell.self, forCellWithReuseIdentifier: StoryCollectionViewCell.cellId) - - updateSlides() - } - - private func updateSlides() { - // Check if stories array is not empty and currentPosition indices are valid - guard !stories.isEmpty else { - print("Error: Stories array is empty") - return - } - - guard stories.indices.contains(currentPosition.section) else { - print("Error: Section index \(currentPosition.section) is out of range") - return - } - - let story = stories[currentPosition.section] - - guard story.slides.indices.contains(currentPosition.row) else { - print("Error: Row index \(currentPosition.row) is out of range for section \(currentPosition.section)") - return - } - - let storySlideMedia = story.slides[currentPosition.row] - storyTime = storySlideMedia.duration - - if storySlideMedia.type == .video { - let videoDurationInCache = SdkGlobalHelper.sharedInstance.retrieveVideoCachedParamsDictionary(parentSlideId: storySlideMedia.id) - if let videoDurationSeconds = videoDurationInCache[storySlideMedia.id] { - storyTime = Int(videoDurationSeconds) ?? storySlideMedia.duration - } else { - // Handle case where video duration cannot be retrieved - } - } - - timeLeft = TimeInterval(storyTime) - - // Clear existing arranged subviews - for view in pageIndicator.arrangedSubviews { - pageIndicator.removeArrangedSubview(view) - } - - // Update page indicators - let slides = story.slides - for (index, _) in slides.enumerated() { - let progressView = UIProgressView() - progressView.tintColor = .white - if index == currentPosition.row { - progressView.progress = 0 - startProgress(progressView: progressView) - } else if index < currentPosition.row { - progressView.progress = 1 - } else { - progressView.progress = 0 - } - pageIndicator.addArrangedSubview(progressView) - } - } - - private func startProgress(progressView: UIProgressView) { - endTime = Date().addingTimeInterval(timeLeft) - let duration: Float = Float(timeLeft) - currentProgressView = progressView - currentDuration = duration - - let superviewSlideId = stories[currentPosition.section].slides[currentPosition.row].id - let cachedSlideMediaId = "cached.slide." + superviewSlideId - - let imagesForStoriesDownloadedArray: [String] = UserDefaults.standard.getValue(for: UserDefaults.Key(cachedSlideMediaId)) as? [String] ?? [] - let imageStoryIdDownloaded = imagesForStoriesDownloadedArray.contains(where: { - $0.range(of: cachedSlideMediaId) != nil - }) - - if imageStoryIdDownloaded { - if SdkConfiguration.stories.storiesSlideReloadIndicatorDisabled { - //Implementation - } else { - UIView.animate(withDuration: 0.3, animations: { - self.storiesSlideReloadIndicator.alpha = 0.0 - }) - } - - timer.invalidate() - timer = Timer.scheduledTimer(timeInterval: 0.05, target: self, selector: #selector(updateTime), userInfo: nil, repeats: true) - } else { - timer.invalidate() - - if SdkConfiguration.stories.storiesSlideReloadIndicatorDisabled { - UIView.animate(withDuration: 0.5, animations: { - self.storiesSlideReloadIndicator.alpha = 0.0 - }) - } else { - UIView.animate(withDuration: 0.5, animations: { - self.storiesSlideReloadIndicator.alpha = 1.0 - }) - } - - NotificationCenter.default.removeObserver(self, name: NSNotification.Name(cachedSlideMediaId), object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(self.updateVisibleCells(notification:)), - name: Notification.Name(cachedSlideMediaId), object: nil) - } - } - - @objc - func updateVisibleCells(notification: NSNotification) { - DispatchQueue.main.async { - if let visibleCell = self.collectionView.indexPathsForVisibleItems.first { - UIView.animate(withDuration: 0.5, animations: { - self.storiesSlideReloadIndicator.alpha = 0.0 - }) - self.currentPosition = visibleCell - self.collectionView.reloadItems(at: self.collectionView.indexPathsForVisibleItems) - DispatchQueue.main.async { - self.updateSlides() - } - } - } - } - - @objc - func updateTime() { - if timeLeft > 0 { - timeLeft = endTime?.timeIntervalSinceNow ?? 0 - currentProgressView?.progress = 1 - Float(timeLeft) / currentDuration - } else { - currentProgressView?.progress = 0 - timer.invalidate() - needSaveStoryLocal = true - if currentPosition.row < stories[currentPosition.section].slides.count - 1 { - currentPosition.row += 1 - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - DispatchQueue.main.async { - self.updateSlides() - } - } else if currentPosition.section >= stories.count - 1 { - self.dismiss(animated: true) - } else if currentPosition.section < stories.count - 1 { - - currentPosition.row = 0 - - let storyId = stories[currentPosition.section + 1].id - let storyName = "viewed.slide." + storyId - let slideId = stories[currentPosition.section + 1].slides[currentPosition.row].id - - var allStoriesMainArray: [String] = [] - for (index, _) in stories[currentPosition.section + 1].slides.enumerated() { - allStoriesMainArray.append(stories[currentPosition.section + 1].slides[(index)].id) - } - - let viewedSlidesStoriesCachedArray: [String] = UserDefaults.standard.getValue(for: UserDefaults.Key(storyName)) as? [String] ?? [] - let viewedStorySlideIdExists = viewedSlidesStoriesCachedArray.contains(where: { - $0.range(of: slideId) != nil - }) - - if viewedStorySlideIdExists { - let lastViewedSlideIndexValue = viewedSlidesStoriesCachedArray.last - var currentDefaultIndex = 0 - for name in allStoriesMainArray { - if name == lastViewedSlideIndexValue { - break - } - currentDefaultIndex += 1 - } - - if (currentDefaultIndex + 1 < stories[currentPosition.section + 1].slides.count) { - currentPosition.section += 1 - currentPosition.row = currentDefaultIndex + 1 - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - } else if (currentDefaultIndex + 1 == stories[currentPosition.section + 1].slides.count) { - currentPosition.section += 1 - currentPosition.row = currentDefaultIndex - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - } else { - currentPosition.section += 1 - currentPosition.row = 0 - - scrollToFirstRow() - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - } - } else { - currentPosition.section += 1 - currentPosition.row = 0 - collectionView.scrollToItem(at: currentPosition, at: .left, animated: true) - } - - DispatchQueue.main.async { - self.updateSlides() - } - } - } - } - - private func saveStorySlideWatching(index: IndexPath) { - let storyId = stories[index.section].id - let storyName = "viewed.slide." + storyId - let slideId = stories[index.section].slides[index.row].id - - var viewedSlidesStoriesCachedArray: [String] = UserDefaults.standard.getValue(for: UserDefaults.Key(storyName)) as? [String] ?? [] - let viewedStorySlideIdExists = viewedSlidesStoriesCachedArray.contains(where: { - $0.range(of: slideId) != nil - }) - - if !viewedStorySlideIdExists { - viewedSlidesStoriesCachedArray.append(slideId) - UserDefaults.standard.setValue(viewedSlidesStoriesCachedArray, for: UserDefaults.Key(storyName)) - } - } - - public func openUrl(link: String) { -#if DEBUG - print("Opening product in device browser") -#endif - - if let linkUrl = URL(string: link) { - pauseTimer() - - let carouselOpenedBoolKey: Bool = UserDefaults.standard.bool(forKey: "CarouselTimerStopMemorySetting") - if !carouselOpenedBoolKey { - NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "WebKitClosedContinueTimerSetting"), object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(continueTimer), name: Notification.Name("WebKitClosedContinueTimerSetting"), object: nil) - } - - UIApplication.shared.open(linkUrl, options: [:], completionHandler: nil) - - let sIdDetect: String = UserDefaults.standard.string(forKey: "LastViewedSlideMemorySetting") ?? "" - NotificationCenter.default.post(name: .init(rawValue: "PauseVideoLongTap"), object: nil, userInfo: ["slideID": sIdDetect]) - - dismiss(animated: true) - } - } - - @objc - private func pauseTimer() { - timer.invalidate() - } - - @objc - private func continueTimer() { - endTime = Date().addingTimeInterval(timeLeft) - timer = Timer.scheduledTimer(timeInterval: 0.05, target: self, selector: #selector(updateTime), userInfo: nil, repeats: true) - } - - private func trackViewSlide(index: IndexPath) { - let storyId = stories[index.section].id - let slideId = stories[index.section].slides[index.row].id - sdk?.track(event: .slideView(storyId: storyId, slideId: slideId), recommendedBy: nil, completion: { result in - }) - } - - private func trackClickSlide(index: IndexPath) { - let storyId = stories[index.section].id - let slideId = stories[index.section].slides[index.row].id - sdk?.track(event: .slideClick(storyId: storyId, slideId: slideId), recommendedBy: nil, completion: { result in - }) - } - - private func setupGestureRecognizerOnCollection() { - let longPressedGesture = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress(gestureRecognizer:))) - - collectionView.gestureRecognizers = [] - longPressedGesture.isEnabled = true - longPressedGesture.minimumPressDuration = 0.20 - - longPressedGesture.allowableMovement = 50 - longPressedGesture.delaysTouchesBegan = true - longPressedGesture.cancelsTouchesInView = true - let singleTap = UITapGestureRecognizer(target: self, action: #selector(didSingleTapOnScreen(_:))) - singleTap.require(toFail: longPressedGesture) - collectionView.addGestureRecognizer(longPressedGesture) - collectionView.addGestureRecognizer(singleTap) - - let leftSwipe = UISwipeGestureRecognizer(target: self, action: #selector(didSwipeLeft)) - leftSwipe.direction = .left - leftSwipe.require(toFail: longPressedGesture) - let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(didSwipeRight)) - rightSwipe.direction = .right - rightSwipe.require(toFail: longPressedGesture) - let downSwipe = UISwipeGestureRecognizer(target: self, action: #selector(didSwipeDown)) - downSwipe.direction = .down - downSwipe.require(toFail: longPressedGesture) - - collectionView.addGestureRecognizer(leftSwipe) - collectionView.addGestureRecognizer(rightSwipe) - collectionView.addGestureRecognizer(downSwipe) - } - - func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer) -> Bool { - return false - } - - @objc - private func handleLongPress(gestureRecognizer: UILongPressGestureRecognizer) { - let positionNumber = gestureRecognizer.location(in: collectionView) - if gestureRecognizer.state == .ended { - if let indexPath = collectionView.indexPathForItem(at: positionNumber) { - let slide = stories[indexPath.section].slides[indexPath.row] - NotificationCenter.default.post(name: .init(rawValue: "PlayVideoLongTap"), object: nil, userInfo: ["slideID": slide.id]) - continueTimer() - } - return - } - if (gestureRecognizer.state != .began) { - if let indexPath = collectionView.indexPathForItem(at: positionNumber) { - let slide = stories[indexPath.section].slides[indexPath.row] - NotificationCenter.default.post(name: .init(rawValue: "PauseVideoLongTap"), object: nil, userInfo: ["slideID": slide.id]) - pauseTimer() - } - return - } else { - if let indexPath = collectionView.indexPathForItem(at: positionNumber) { - let slide = stories[indexPath.section].slides[indexPath.row] - NotificationCenter.default.post(name: .init(rawValue: "PauseVideoLongTap"), object: nil, userInfo: ["slideID": slide.id]) - pauseTimer() - } - } - } - - class CustomFlowLayout: UICollectionViewFlowLayout { - var currentScrollDirection = "" - func currentScroll(direction: String) { - currentScrollDirection = direction - } - } - - public func openProductsCarouselView(withProducts: [StoriesProduct], hideLabel: String) { - pauseTimer() - view.backgroundColor = .clear - - carouselProductsSlideTintBlurView.backgroundColor = UIColor(white: 0, alpha: 0.8) - carouselProductsSlideTintBlurView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height) - carouselProductsSlideCollectionView.hideLabel = hideLabel - view.addSubview(carouselProductsSlideTintBlurView) - - view.addSubview(self.carouselProductsSlideCollectionView) - - self.carouselProductsSlideCollectionView.center = CGPoint(x: self.view.center.x, y: self.view.center.y + self.view.frame.size.height) - self.view.addSubview(self.carouselProductsSlideCollectionView) - self.view.bringSubviewToFront(self.carouselProductsSlideCollectionView) - - UIView.animate(withDuration: 0.6, delay: 0.0, - usingSpringWithDamping: 1.0, initialSpringVelocity: 1.0, - options: .allowAnimatedContent, animations: { - self.carouselProductsSlideCollectionView.center = self.view.center - }) { (isFinished) in - self.view.layoutIfNeeded() - } - - carouselProductsSlideCollectionView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true - carouselProductsSlideCollectionView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true - carouselProductsSlideCollectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true - - if SdkGlobalHelper.DeviceType.IS_IPHONE_14_PRO { - carouselProductsSlideCollectionView.heightAnchor.constraint(equalToConstant: 420).isActive = true - } else if SdkGlobalHelper.DeviceType.IS_IPHONE_SE || SdkGlobalHelper.DeviceType.IS_IPHONE_8_PLUS { - carouselProductsSlideCollectionView.heightAnchor.constraint(equalToConstant: 430).isActive = true - } else { - carouselProductsSlideCollectionView.heightAnchor.constraint(equalToConstant: 450).isActive = true - } - - carouselProductsSlideCollectionView.carouselProductsDelegate = self - carouselProductsSlideCollectionView.cells.removeAll() - carouselProductsSlideCollectionView.set(cells: withProducts) - - carouselProductsSlideCollectionView.reloadData() - - let sIdDetect: String = UserDefaults.standard.string(forKey: "LastViewedSlideMemorySetting") ?? "" - NotificationCenter.default.post(name: .init(rawValue: "PauseVideoLongTap"), object: nil, userInfo: ["slideID": sIdDetect]) - - UserDefaults.standard.set(true, forKey: "CarouselTimerStopMemorySetting") - } - - public func closeProductsCarousel() { - UIView.animate(withDuration: 0.4, delay: 0.0,usingSpringWithDamping: 1.0, initialSpringVelocity: 1.0, - options: .allowAnimatedContent, animations: { - - self.carouselProductsSlideCollectionView.center = CGPoint(x: self.view.center.x, - y: self.view.center.y + self.view.frame.size.height) - - }) { (isFinished) in - self.carouselProductsSlideTintBlurView.removeFromSuperview() - self.carouselProductsSlideCollectionView.removeFromSuperview() - } - - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - let sIdDetect: String = UserDefaults.standard.string(forKey: "LastViewedSlideMemorySetting") ?? "" - NotificationCenter.default.post(name: .init(rawValue: "PlayVideoLongTap"), object: nil, userInfo: ["slideID": sIdDetect]) - DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) { - self.continueTimer() - } - } - UserDefaults.standard.set(false, forKey: "CarouselTimerStopMemorySetting") - } - - public func didTapOpenLinkExternalServiceMethod(url: String, slide: Slide) { - let stateButton: Bool = UserDefaults.standard.bool(forKey: "LastTapButtonMemorySdkSetting") - if stateButton { - continueTimer() - - let sIdDetect: String = UserDefaults.standard.string(forKey: "LastViewedSlideMemorySetting") ?? "" - NotificationCenter.default.post(name: .init(rawValue: "PlayVideoLongTap"), object: nil, userInfo: ["slideID": sIdDetect]) - print("SDK Start Timer Play Content") - UserDefaults.standard.set(false, forKey: "LastTapButtonMemorySdkSetting") - } else { - print("SDK Pause Timer\n") - UserDefaults.standard.set(true, forKey: "LastTapButtonMemorySdkSetting") - } - } - - public func sendStructSelectedStorySlide(storySlide: StoriesElement) { - pauseTimer() - - let sIdDetect: String = UserDefaults.standard.string(forKey: "LastViewedSlideMemorySetting") ?? "" - NotificationCenter.default.post(name: .init(rawValue: "PauseVideoLongTap"), object: nil, userInfo: ["slideID": sIdDetect]) - self.sdkLinkDelegate?.sendStructSelectedStorySlide(storySlide: storySlide) - } - - func sendStructSelectedCarouselProduct(product: StoriesProduct) { - sdkLinkDelegate?.structOfSelectedCarouselProduct(product: product) - if (product.deeplinkIos != "") { - openUrl(link: product.deeplinkIos) - } else { - openUrl(link: product.url) - } - } - - public func sendStructSelectedPromocodeSlide(promoCodeSlide: StoriesPromoCodeElement) { - pauseTimer() - - let sIdDetect: String = UserDefaults.standard.string(forKey: "LastViewedSlideMemorySetting") ?? "" - NotificationCenter.default.post(name: .init(rawValue: "PauseVideoLongTap"), object: nil, userInfo: ["slideID": sIdDetect]) - self.sdkLinkDelegate?.sendStructSelectedPromocodeSlide(promoCodeSlide: promoCodeSlide) - } - - @objc - func didSwipeDown() { - dismiss(animated: true) - } - - @objc - func didTapCloseButton() { - self.sdkLinkDelegate?.reloadStoriesCollectionSubviews() - dismiss(animated: true) - } -} - - -extension StoryViewController: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { - func numberOfSections(in collectionView: UICollectionView) -> Int { - stories.count - } - - func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - stories[section].slides.count - } - - func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { - - storiesSlideReloadIndicator.startAnimating() - - guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: StoryCollectionViewCell.cellId, for: indexPath) as? StoryCollectionViewCell else { - return UICollectionViewCell() - } - let slide = stories[indexPath.section].slides[indexPath.row] - cell.configure(slide: slide) - cell.cellDelegate = self - return cell - } - - func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { - let screenSize = UIScreen.main.bounds.size - return screenSize - } - - func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { - if let visibleCell = collectionView.indexPathsForVisibleItems.first { - currentPosition = visibleCell - DispatchQueue.main.async { - self.updateSlides() - } - } - } - - func collectionView(_ collectionView: UICollectionView, didEndDisplaying cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { - if let _cell = cell as? StoryCollectionViewCell { - _cell.stopPlayer() - - let currentOffset = collectionView.contentOffset - let scrollDirection = (currentOffset.x > lastContentStoryOffset.x) ? "Left" : "Right" - if let flowLayout = collectionView.collectionViewLayout as? CustomFlowLayout { - flowLayout.currentScroll(direction: scrollDirection) - } - lastContentStoryOffset = currentOffset - if (scrollDirection == "Left" && needSaveStoryLocal) { - saveStorySlideWatching(index: indexPath) - } - } - } - - func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { -// timer.invalidate() - } - - func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { - return true - } - - func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - guard let cell = collectionView.cellForItem(at: indexPath) as? StoryCollectionViewCell else {return} - cell.stopPlayer() - } - - func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { - trackViewSlide(index: indexPath) - if let startWithIndexPath = startWithIndexPath { - if collectionView.isValid(indexPath: startWithIndexPath) { - self.collectionView.scrollToItem(at: startWithIndexPath, at: .left, animated: false) - } - self.startWithIndexPath = nil - } - } -} - - -extension StoryViewController: StoryCollectionViewCellDelegate { - public func didTapUrlButton(url: String, slide: Slide) { - self.openUrl(link: url) - for (section, story) in stories.enumerated() { - for (row, storySlide) in story.slides.enumerated() { - if storySlide.id == slide.id { - self.trackClickSlide(index: IndexPath(row: row, section: section)) - } - } - } - } -} - - -extension UICollectionView { - func isValid(indexPath: IndexPath) -> Bool { - guard indexPath.section < numberOfSections, - indexPath.row < numberOfItems(inSection: indexPath.section) - else { - return false - } - return true - } -} - - -extension NavigationStackController: UINavigationControllerDelegate { - public func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) { - if canBeMadeHeadViewController(viewController: viewController) { - viewController.navigationItem.setHidesBackButton(false, animated: false) - } - } - - public func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) { - if canBeMadeHeadViewController(viewController: viewController) { - resetNavigationStackWithLatestViewControllerAsHead() - } - } -} diff --git a/Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockConfiguration/TBSubConfigurations/TBAppearanceConfiguration.swift b/Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockConfiguration/TBSubConfigurations/TBAppearanceConfiguration.swift deleted file mode 100644 index 804081c..0000000 --- a/Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockConfiguration/TBSubConfigurations/TBAppearanceConfiguration.swift +++ /dev/null @@ -1,32 +0,0 @@ -import UIKit -import Foundation - -protocol TBAppearanceConfigurable { - var textColor: UIColor { get } - var cornerRadius: CGFloat { get } - var clipsToBounds: Bool { get } - var backgroundColor: UIColor { get } - var yOffset: CGFloat { get } -} - -public struct TBAppearanceConfiguration: TBAppearanceConfigurable { - let yOffset: CGFloat - let textColor: UIColor - let backgroundColor: UIColor - let cornerRadius: CGFloat - let clipsToBounds: Bool - - init(from textBlockObject: StoriesElement, clipsToBounds: Bool = true) { - self.yOffset = textBlockObject.yOffset ?? 0 - self.textColor = textBlockObject.textColor != nil - ? UIColor(hexString: textBlockObject.textColor!) - : .black - - self.backgroundColor = textBlockObject.textBackgroundColor != nil - ? UIColor(hexString: textBlockObject.textBackgroundColor!).withOpacity(from: textBlockObject.textBackgroundColorOpacity ?? "") - : UIColor.clear - - self.cornerRadius = CGFloat(textBlockObject.cornerRadius) - self.clipsToBounds = clipsToBounds - } -} diff --git a/Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockConfiguration/TBSubConfigurations/TBFontConfiguration.swift b/Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockConfiguration/TBSubConfigurations/TBFontConfiguration.swift deleted file mode 100644 index 143159f..0000000 --- a/Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockConfiguration/TBSubConfigurations/TBFontConfiguration.swift +++ /dev/null @@ -1,51 +0,0 @@ -import Foundation -import UIKit - -public struct TBFontConfiguration { - let font: UIFont - - init(from textBlockObject: StoriesElement) { - let fontType = textBlockObject.fontType ?? .unknown - let fontSize = textBlockObject.fontSize ?? UIFont.systemFontSize - let isFontBold = textBlockObject.textBold ?? false - let isFontItalic = textBlockObject.textItalic ?? false - - self.font = TBFontConfiguration.getFont(for: fontType, - isBold: isFontBold, - isItalic: isFontItalic, - fontSize: fontSize) - } - - private static func getFont(for fontType: FontType, - isBold: Bool = false, - isItalic: Bool = false, - fontSize: CGFloat) -> UIFont { - let fontMap: [FontType: String] = [ - .monospaced: StoryTextBlockConstants.FontConstants.monospaced, - .serif: StoryTextBlockConstants.FontConstants.serif, - .sansSerif: StoryTextBlockConstants.FontConstants.sansSerif, - .unknown: UIFont.systemFont(ofSize: fontSize).fontName - ] - - var font: UIFont - if let fontName = fontMap[fontType], !fontName.isEmpty { - font = UIFont(name: fontName, size: fontSize) ?? UIFont.systemFont(ofSize: fontSize) - } else { - font = UIFont.systemFont(ofSize: fontSize) - } - - var symbolicTraits: UIFontDescriptor.SymbolicTraits = [] - if isBold { - symbolicTraits.insert(.traitBold) - } - if isItalic { - symbolicTraits.insert(.traitItalic) - } - - if let descriptor = font.fontDescriptor.withSymbolicTraits(symbolicTraits) { - font = UIFont(descriptor: descriptor, size: fontSize) - } - - return font - } -} diff --git a/Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockConfiguration/TBSubConfigurations/TBTextConfiguration.swift b/Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockConfiguration/TBSubConfigurations/TBTextConfiguration.swift deleted file mode 100644 index 037ee42..0000000 --- a/Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockConfiguration/TBSubConfigurations/TBTextConfiguration.swift +++ /dev/null @@ -1,36 +0,0 @@ -import Foundation -import UIKit - -protocol TBTextConfigurable { - var text: NSAttributedString { get } - var textAlignment: NSTextAlignment { get } -} - -public struct TBTextConfiguration: TBTextConfigurable { - let text: NSAttributedString - let textAlignment: NSTextAlignment - - init(from textBlockObject: StoriesElement) { - if let textLineSpacing = textBlockObject.textLineSpacing, - let textBlockInput = textBlockObject.textInput { - let paragraphStyle = NSMutableParagraphStyle() - paragraphStyle.lineSpacing = textLineSpacing - self.text = NSAttributedString(string: textBlockInput, attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle]) - } else { - self.text = NSAttributedString(string: textBlockObject.textInput ?? "") - } - - self.textAlignment = { - switch textBlockObject.textAlignment { - case .left: - return .left - case .right: - return .right - case .center: - return .center - default: - return .left - } - }() - } -} diff --git a/Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockConfiguration/TexBlockConfiguration.swift b/Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockConfiguration/TexBlockConfiguration.swift deleted file mode 100644 index 5695e8d..0000000 --- a/Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockConfiguration/TexBlockConfiguration.swift +++ /dev/null @@ -1,14 +0,0 @@ -import Foundation -import UIKit - -public struct TextBlockConfiguration { - let fontConfiguration: TBFontConfiguration - let appearanceConfiguration: TBAppearanceConfigurable - let textConfiguration: TBTextConfigurable - - init(from textBlockObject: StoriesElement) { - self.fontConfiguration = TBFontConfiguration(from: textBlockObject) - self.appearanceConfiguration = TBAppearanceConfiguration(from: textBlockObject) - self.textConfiguration = TBTextConfiguration(from: textBlockObject) - } -} diff --git a/Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockConstants.swift b/Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockConstants.swift deleted file mode 100644 index 70a2efa..0000000 --- a/Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockConstants.swift +++ /dev/null @@ -1,20 +0,0 @@ -import Foundation -import UIKit - -public struct StoryTextBlockConstants { - - public struct FontConstants { - public static let monospaced = "Menlo" - public static let serif = "Georgia" - public static let sansSerif = "Arial" - } - - public static let leftAnchorOffsetConstant: CGFloat = 5 - public static let rightAnchorOffsetConstant: CGFloat = -5 - public static let topAnchorOffsetConstant: CGFloat = 2 - public static let bottomAnchorOffsetConstant: CGFloat = -2 - public static let constantToAvoidProgressViewNoNotch: CGFloat = 44 - public static let constantToAvoidProgressViewWithNotch: CGFloat = 10 - public static let aspectRationRelatedConstant: CGFloat = 20 -} - diff --git a/Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockView.swift b/Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockView.swift deleted file mode 100644 index d523f6e..0000000 --- a/Pods/REES46/REES46/Classes/Stories/TextBlockView/TextBlockView.swift +++ /dev/null @@ -1,54 +0,0 @@ -import UIKit -import Foundation - -class TextBlockView: UIView { - let yOffset: CGFloat - - private let label: UILabel = { - let label = UILabel() - label.numberOfLines = 0 - label.translatesAutoresizingMaskIntoConstraints = false - return label - }() - - init(with textBlockConfiguration: TextBlockConfiguration) { - self.yOffset = textBlockConfiguration.appearanceConfiguration.yOffset - super.init(frame: .zero) - configureLabel(with: textBlockConfiguration) - setupView(hasBackground: textBlockConfiguration.appearanceConfiguration.backgroundColor != .clear) - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - private func setupView(hasBackground: Bool) { - addSubview(label) - - NSLayoutConstraint.activate([ - label.topAnchor.constraint(equalTo: topAnchor, constant: 8), - label.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -8), - label.leadingAnchor.constraint(equalTo: leadingAnchor, constant: hasBackground ? 16 : 0), - label.trailingAnchor.constraint(equalTo: trailingAnchor, constant: hasBackground ? -16 : 0) - ]) - } - - private func configureLabel(with config: TextBlockConfiguration) { - label.font = config.fontConfiguration.font - label.textColor = config.appearanceConfiguration.textColor - self.layer.cornerRadius = config.appearanceConfiguration.cornerRadius - self.clipsToBounds = config.appearanceConfiguration.clipsToBounds - self.backgroundColor = config.appearanceConfiguration.backgroundColor - label.attributedText = config.textConfiguration.text - label.textAlignment = config.textConfiguration.textAlignment - } - - override var intrinsicContentSize: CGSize { - let labelSize = label.intrinsicContentSize - return CGSize(width: labelSize.width + 32, height: labelSize.height + 16) - } - - override func layoutSubviews() { - super.layoutSubviews() - } -} diff --git a/Pods/REES46/REES46/Classes/Stories/WebKit/RView_Extensions.swift b/Pods/REES46/REES46/Classes/Stories/WebKit/RView_Extensions.swift deleted file mode 100644 index fe2e04d..0000000 --- a/Pods/REES46/REES46/Classes/Stories/WebKit/RView_Extensions.swift +++ /dev/null @@ -1,37 +0,0 @@ -import UIKit - -extension UIView { - - var safeTopAnchor: NSLayoutYAxisAnchor { - return self.safeAreaLayoutGuide.topAnchor - } - - var safeLeadingAnchor: NSLayoutXAxisAnchor { - return self.safeAreaLayoutGuide.leadingAnchor - } - - var safeTrailingtAnchor: NSLayoutXAxisAnchor { - return self.safeAreaLayoutGuide.trailingAnchor - } - - var safeBottomAnchor: NSLayoutYAxisAnchor { - return self.safeAreaLayoutGuide.bottomAnchor - } - - func bindFrameToSuperviewBounds() { - guard let superview = self.superview else { - print("Error! `superview` was nil – call `addSubview(view: UIView)`") - return - } - - self.translatesAutoresizingMaskIntoConstraints = false - self.topAnchor.constraint( - equalTo: superview.topAnchor, constant: 0).isActive = true - self.bottomAnchor.constraint( - equalTo: superview.bottomAnchor, constant: 0).isActive = true - self.leadingAnchor.constraint( - equalTo: superview.leadingAnchor, constant: 0).isActive = true - self.trailingAnchor.constraint( - equalTo: superview.trailingAnchor, constant: 0).isActive = true - } -} diff --git a/Pods/REES46/REES46/Classes/Stories/WebKit/RWebViewController.swift b/Pods/REES46/REES46/Classes/Stories/WebKit/RWebViewController.swift deleted file mode 100644 index 3a91b9f..0000000 --- a/Pods/REES46/REES46/Classes/Stories/WebKit/RWebViewController.swift +++ /dev/null @@ -1,286 +0,0 @@ -import UIKit -import WebKit - -public class RWebViewController:UIViewController, WKUIDelegate { - - enum WebViewKeyPath:String { - case estimatedProgress - case title - } - - private lazy var container = UIView(frame: CGRect.zero) - private lazy var progressView = UIProgressView(progressViewStyle: .bar) - public private(set) lazy var rWebView:WKWebView = WKWebView(frame: CGRect.zero) - - private lazy var toolbar:UIView = { - let v = UIView(frame: CGRect.zero) - v.isUserInteractionEnabled = true - v.heightAnchor.constraint(equalToConstant: 44.0).isActive = true - v.translatesAutoresizingMaskIntoConstraints = false - - let blurEffect = UIBlurEffect(style: .light) - let blurEffectView = UIVisualEffectView(effect: blurEffect) - v.addSubview(blurEffectView) - blurEffectView.bindFrameToSuperviewBounds() - return v - }() - - private lazy var titleLabel:UILabel = { - let lbl = UILabel(frame: CGRect(x: 0.0, y: 0.0, width: 250.0, height: 16.0)) - lbl.adjustsFontSizeToFitWidth = true - lbl.minimumScaleFactor = 0.9 - lbl.textAlignment = .center - lbl.font = UIFont.boldSystemFont(ofSize: 16) - return lbl - }() - - private lazy var urlLabel:UILabel = { - let lbl = UILabel(frame: CGRect(x: 0.0, y: 0.0, width: 250.0, height: 10.0)) - lbl.adjustsFontSizeToFitWidth = true - lbl.minimumScaleFactor = 0.9 - lbl.textAlignment = .center - lbl.font = UIFont.systemFont(ofSize: 10) - return lbl - }() - - private let topMargin:CGFloat = 10.0 - private var lastLocation:CGPoint = .zero - public var request:URLRequest! - - public override var title: String? { - didSet { - titleLabel.text = title - } - } - - var detail:String? { - didSet { - urlLabel.text = detail - } - } - - public var titleHidden:Bool = false - - override public func loadView() { - super.loadView() - setupMainLayout() - setupToolbar() - } - - override public func viewDidLoad() { - super.viewDidLoad() - addPanGestureRecognizer() - titleLabel.text = titleHidden ? "" : NSLocalizedString("Loading...", comment: "Loading...") - rWebView.navigationDelegate = self - rWebView.uiDelegate = self - rWebView.load(request) - } - - public override func viewDidAppear(_ animated: Bool) { - super.viewDidAppear(animated) - addWebViewObservers() - } - - public override func viewDidDisappear(_ animated: Bool) { - super.viewDidDisappear(animated) - removeWebViewObservers() - } - - private func setupToolbar() { - let closeButton = createImageButton(imageName: "iconWebKitClose") - closeButton.addTarget(self, action: #selector(dismissWebView(_:)), for: .touchUpInside) - closeButton.tintColor = .gray - closeButton.widthAnchor.constraint(equalTo: closeButton.heightAnchor).isActive = true - - let titleStackView = UIStackView(arrangedSubviews: [titleLabel, urlLabel]) - titleStackView.axis = .vertical - - let toolbarStackView = UIStackView(arrangedSubviews: [closeButton, titleStackView]) - toolbarStackView.spacing = 2.0 - toolbarStackView.axis = .horizontal - toolbar.addSubview(toolbarStackView) - - toolbarStackView.translatesAutoresizingMaskIntoConstraints = false - toolbarStackView.topAnchor.constraint(equalTo: toolbar.topAnchor, constant: 5).isActive = true - toolbarStackView.leadingAnchor.constraint(equalTo: toolbar.leadingAnchor, constant: 5).isActive = true - toolbarStackView.bottomAnchor.constraint(equalTo: toolbar.bottomAnchor, constant: -5).isActive = true - toolbarStackView.trailingAnchor.constraint(equalTo: toolbar.trailingAnchor, constant: -49).isActive = true - } - - private func createImageButton(imageName: String) -> UIButton { - var frameworkBundle = Bundle(for: classForCoder) -#if SWIFT_PACKAGE - frameworkBundle = Bundle.module -#endif - let image = UIImage(named: "iconWebKitClose", in: frameworkBundle, compatibleWith: nil) - - let closeButton = UIButton(type: .custom) - closeButton.setImage(image, for: .normal) - return closeButton - } - - private func setupMainLayout() { - view = UIView() - view.autoresizingMask = [.flexibleHeight, .flexibleWidth] - view.backgroundColor = .clear - view.addSubview(container) - container.translatesAutoresizingMaskIntoConstraints = false - container.topAnchor.constraint( - equalTo: view.safeTopAnchor, constant: topMargin).isActive = true - container.bottomAnchor.constraint( - equalTo: view.bottomAnchor).isActive = true - container.leadingAnchor.constraint( - equalTo: view.safeLeadingAnchor, constant: 0).isActive = true - container.trailingAnchor.constraint( - equalTo: view.safeTrailingtAnchor, constant: 0).isActive = true - container.layer.cornerRadius = 16.0 - container.clipsToBounds = true - - let progressViewContainer = UIView() - progressViewContainer.backgroundColor = UIColor.white - progressViewContainer.addSubview(progressView) - progressView.bindFrameToSuperviewBounds() - progressViewContainer.heightAnchor.constraint(equalToConstant: 1) - .isActive = true - - let mainStackView = UIStackView(arrangedSubviews: [ - toolbar, - progressViewContainer, - rWebView]) - - mainStackView.axis = .vertical - container.addSubview(mainStackView) - mainStackView.bindFrameToSuperviewBounds() - } - - private func addWebViewObservers() { - rWebView.addObserver(self, forKeyPath: #keyPath(WKWebView.estimatedProgress), options: .new, context: nil) - rWebView.addObserver(self, forKeyPath: #keyPath(WKWebView.title), options: .new, context: nil) - rWebView.addObserver(self, forKeyPath: #keyPath(WKWebView.canGoBack), options: .new, context: nil) - rWebView.addObserver(self, forKeyPath: #keyPath(WKWebView.canGoForward), options: .new, context: nil) - } - - private func removeWebViewObservers() { - rWebView.removeObserver(self, forKeyPath: #keyPath(WKWebView.estimatedProgress)) - rWebView.removeObserver(self, forKeyPath: #keyPath(WKWebView.title)) - rWebView.removeObserver(self, forKeyPath: #keyPath(WKWebView.canGoBack)) - rWebView.removeObserver(self, forKeyPath: #keyPath(WKWebView.canGoForward)) - } - - @objc - private func dismissWebView(_ sender: UIButton) { - dismiss(completion: nil) - } - - public func dismiss(completion: (() -> Void)? = nil) { - dismiss(animated: true, completion: { - NotificationCenter.default.post(name: NSNotification.Name(rawValue: "WebKitClosedContinueTimerSetting"), object: nil) - - let carouselOpenedBoolKey: Bool = UserDefaults.standard.bool(forKey: "CarouselTimerStopMemorySetting") - if !carouselOpenedBoolKey { - let sIdDetect: String = UserDefaults.standard.string(forKey: "LastViewedSlideMemorySetting") ?? "" - NotificationCenter.default.post(name: .init(rawValue: "PlayVideoLongTap"), object: nil, userInfo: ["slideID": sIdDetect]) - } - }) - } - - override public func observeValue(forKeyPath keyPath: String?, of object: Any?, - change: [NSKeyValueChangeKey : Any]?, - context: UnsafeMutableRawPointer?) { - - switch keyPath { - case WebViewKeyPath.estimatedProgress.rawValue: - progressView.progress = Float(rWebView.estimatedProgress) - if progressView.progress == 1.0 { - progressView.alpha = 0.0 - - } else if progressView.alpha != 1.0 { - progressView.alpha = 1.0 - - } - case WebViewKeyPath.title.rawValue: - title = titleHidden ? "" : rWebView.title - if !titleHidden, let scheme = rWebView.url?.scheme, - let host = rWebView.url?.host { - detail = "\(scheme)://\(host)" - - } else { - detail = "" - } - default: - break - } - } -} - - -extension RWebViewController:UIGestureRecognizerDelegate { - - fileprivate func addPanGestureRecognizer() { - let panRecognizer = UIPanGestureRecognizer( - target: self, - action: #selector(self.handlePanning(_:))) - panRecognizer.delegate = self - panRecognizer.maximumNumberOfTouches = 1 - panRecognizer.minimumNumberOfTouches = 1 - panRecognizer.cancelsTouchesInView = true - toolbar.gestureRecognizers?.forEach { - $0.require(toFail: panRecognizer) - } - toolbar.gestureRecognizers = [panRecognizer] - } - - @objc - private func handlePanning(_ gestureRecognizer: UIPanGestureRecognizer?) { - - if gestureRecognizer?.state == .began { - lastLocation = container.center - } - - if gestureRecognizer?.state != .cancelled { - guard let translation: CGPoint = gestureRecognizer? - .translation(in: view) else { - return - } - container.center = CGPoint( - x: container.center.x, - y: lastLocation.y + translation.y) - } - - if gestureRecognizer?.state == .ended { - if container.frame.origin.y > view.frame.size.height/2.0 { - dismiss() - return - } - - UIView.animate( - withDuration: 0.7, - delay: 0.0, - usingSpringWithDamping: 0.5, - initialSpringVelocity: 0.5, - options: .allowUserInteraction, - animations: { - self.container.center = self.lastLocation - - }) { finished in - - } - } - } -} - - -extension RWebViewController:WKNavigationDelegate { - - public func webView(_ webView: WKWebView, - decidePolicyFor navigationAction: WKNavigationAction, - decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { - switch navigationAction.navigationType { - case .linkActivated: - webView.load(navigationAction.request) - default: - break - } - decisionHandler(.allow) - } -} diff --git a/Pods/REES46/REES46/Classes/Stories/WebKit/RWebViewController_Extensions.swift b/Pods/REES46/REES46/Classes/Stories/WebKit/RWebViewController_Extensions.swift deleted file mode 100644 index 8e0bf03..0000000 --- a/Pods/REES46/REES46/Classes/Stories/WebKit/RWebViewController_Extensions.swift +++ /dev/null @@ -1,19 +0,0 @@ -import UIKit - -public extension UIViewController { - - @objc - func presentWebKit(urlRequest: URLRequest, titleHidden:Bool = false, completion: (() -> Void)? = nil) { - let rweb = RWebViewController() - rweb.request = urlRequest - rweb.modalPresentationStyle = .overCurrentContext - rweb.titleHidden = titleHidden - present(rweb, animated: true, completion: completion) - } - - @objc - func presentInternalSdkWebKit(webUrl: URL, titleHidden:Bool = false, completion: (() -> Void)? = nil) { - let urlRequest = URLRequest(url: webUrl) - presentWebKit(urlRequest: urlRequest, titleHidden: titleHidden, completion: completion) - } -} diff --git a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-Info.plist b/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-Info.plist deleted file mode 100644 index 19cf209..0000000 --- a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - ${PODS_DEVELOPMENT_LANGUAGE} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-acknowledgements.markdown b/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-acknowledgements.markdown deleted file mode 100644 index 0fa39d1..0000000 --- a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-acknowledgements.markdown +++ /dev/null @@ -1,51 +0,0 @@ -# Acknowledgements -This application makes use of the following third party libraries: - -## REES46 - -Copyright REES46 (c) 2024. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above Copyright notice and this permission notice shall be included in -all copies or substantial portions of the REES46 Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE REES46 SOFTWARE. - - -## Resolver - -MIT License - -Copyright (c) 2018 Michael Long - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-acknowledgements.plist b/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-acknowledgements.plist deleted file mode 100644 index 89cb085..0000000 --- a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-acknowledgements.plist +++ /dev/null @@ -1,89 +0,0 @@ - - - - - PreferenceSpecifiers - - - FooterText - This application makes use of the following third party libraries: - Title - Acknowledgements - Type - PSGroupSpecifier - - - FooterText - Copyright REES46 (c) 2024. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above Copyright notice and this permission notice shall be included in -all copies or substantial portions of the REES46 Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE REES46 SOFTWARE. - - License - MIT - Title - REES46 - Type - PSGroupSpecifier - - - FooterText - MIT License - -Copyright (c) 2018 Michael Long - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - License - MIT - Title - Resolver - Type - PSGroupSpecifier - - - FooterText - Generated by CocoaPods - https://cocoapods.org - Title - - Type - PSGroupSpecifier - - - StringsTable - Acknowledgements - Title - Acknowledgements - - diff --git a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-dummy.m b/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-dummy.m deleted file mode 100644 index abc3da4..0000000 --- a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_demo_store_ios : NSObject -@end -@implementation PodsDummy_Pods_demo_store_ios -@end diff --git a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-frameworks-Debug-input-files.xcfilelist b/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-frameworks-Debug-input-files.xcfilelist deleted file mode 100644 index 31f2737..0000000 --- a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-frameworks-Debug-input-files.xcfilelist +++ /dev/null @@ -1,3 +0,0 @@ -${PODS_ROOT}/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-frameworks.sh -${BUILT_PRODUCTS_DIR}/REES46/REES46.framework -${BUILT_PRODUCTS_DIR}/Resolver/Resolver.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-frameworks-Debug-output-files.xcfilelist b/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-frameworks-Debug-output-files.xcfilelist deleted file mode 100644 index c356a31..0000000 --- a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-frameworks-Debug-output-files.xcfilelist +++ /dev/null @@ -1,2 +0,0 @@ -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/REES46.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Resolver.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-frameworks-Release-input-files.xcfilelist b/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-frameworks-Release-input-files.xcfilelist deleted file mode 100644 index 31f2737..0000000 --- a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-frameworks-Release-input-files.xcfilelist +++ /dev/null @@ -1,3 +0,0 @@ -${PODS_ROOT}/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-frameworks.sh -${BUILT_PRODUCTS_DIR}/REES46/REES46.framework -${BUILT_PRODUCTS_DIR}/Resolver/Resolver.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-frameworks-Release-output-files.xcfilelist b/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-frameworks-Release-output-files.xcfilelist deleted file mode 100644 index c356a31..0000000 --- a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-frameworks-Release-output-files.xcfilelist +++ /dev/null @@ -1,2 +0,0 @@ -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/REES46.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Resolver.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-frameworks.sh b/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-frameworks.sh deleted file mode 100755 index 3e6fd18..0000000 --- a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-frameworks.sh +++ /dev/null @@ -1,188 +0,0 @@ -#!/bin/sh -set -e -set -u -set -o pipefail - -function on_error { - echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" -} -trap 'on_error $LINENO' ERR - -if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then - # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy - # frameworks to, so exit 0 (signalling the script phase was successful). - exit 0 -fi - -echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" -mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - -COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" -SWIFT_STDLIB_PATH="${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" -BCSYMBOLMAP_DIR="BCSymbolMaps" - - -# This protects against multiple targets copying the same framework dependency at the same time. The solution -# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html -RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") - -# Copies and strips a vendored framework -install_framework() -{ - if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then - local source="${BUILT_PRODUCTS_DIR}/$1" - elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then - local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" - elif [ -r "$1" ]; then - local source="$1" - fi - - local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - - if [ -L "${source}" ]; then - echo "Symlinked..." - source="$(readlink -f "${source}")" - fi - - if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then - # Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied - find "${source}/${BCSYMBOLMAP_DIR}" -name "*.bcsymbolmap"|while read f; do - echo "Installing $f" - install_bcsymbolmap "$f" "$destination" - rm "$f" - done - rmdir "${source}/${BCSYMBOLMAP_DIR}" - fi - - # Use filter instead of exclude so missing patterns don't throw errors. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" - - local basename - basename="$(basename -s .framework "$1")" - binary="${destination}/${basename}.framework/${basename}" - - if ! [ -r "$binary" ]; then - binary="${destination}/${basename}" - elif [ -L "${binary}" ]; then - echo "Destination binary is symlinked..." - dirname="$(dirname "${binary}")" - binary="${dirname}/$(readlink "${binary}")" - fi - - # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then - strip_invalid_archs "$binary" - fi - - # Resign the code if required by the build settings to avoid unstable apps - code_sign_if_enabled "${destination}/$(basename "$1")" - - # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. - if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then - local swift_runtime_libs - swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) - for lib in $swift_runtime_libs; do - echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" - rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" - code_sign_if_enabled "${destination}/${lib}" - done - fi -} -# Copies and strips a vendored dSYM -install_dsym() { - local source="$1" - warn_missing_arch=${2:-true} - if [ -r "$source" ]; then - # Copy the dSYM into the targets temp dir. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" - - local basename - basename="$(basename -s .dSYM "$source")" - binary_name="$(ls "$source/Contents/Resources/DWARF")" - binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" - - # Strip invalid architectures from the dSYM. - if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then - strip_invalid_archs "$binary" "$warn_missing_arch" - fi - if [[ $STRIP_BINARY_RETVAL == 0 ]]; then - # Move the stripped file into its final destination. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" - else - # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. - mkdir -p "${DWARF_DSYM_FOLDER_PATH}" - touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" - fi - fi -} - -# Used as a return value for each invocation of `strip_invalid_archs` function. -STRIP_BINARY_RETVAL=0 - -# Strip invalid architectures -strip_invalid_archs() { - binary="$1" - warn_missing_arch=${2:-true} - # Get architectures for current target binary - binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" - # Intersect them with the architectures we are building for - intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" - # If there are no archs supported by this binary then warn the user - if [[ -z "$intersected_archs" ]]; then - if [[ "$warn_missing_arch" == "true" ]]; then - echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." - fi - STRIP_BINARY_RETVAL=1 - return - fi - stripped="" - for arch in $binary_archs; do - if ! [[ "${ARCHS}" == *"$arch"* ]]; then - # Strip non-valid architectures in-place - lipo -remove "$arch" -output "$binary" "$binary" - stripped="$stripped $arch" - fi - done - if [[ "$stripped" ]]; then - echo "Stripped $binary of architectures:$stripped" - fi - STRIP_BINARY_RETVAL=0 -} - -# Copies the bcsymbolmap files of a vendored framework -install_bcsymbolmap() { - local bcsymbolmap_path="$1" - local destination="${BUILT_PRODUCTS_DIR}" - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" -} - -# Signs a framework with the provided identity -code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then - # Use the current code_sign_identity - echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" - - if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - code_sign_cmd="$code_sign_cmd &" - fi - echo "$code_sign_cmd" - eval "$code_sign_cmd" - fi -} - -if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/REES46/REES46.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Resolver/Resolver.framework" -fi -if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/REES46/REES46.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Resolver/Resolver.framework" -fi -if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - wait -fi diff --git a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-umbrella.h b/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-umbrella.h deleted file mode 100644 index 2c10e87..0000000 --- a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double Pods_demo_store_iosVersionNumber; -FOUNDATION_EXPORT const unsigned char Pods_demo_store_iosVersionString[]; - diff --git a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios.debug.xcconfig b/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios.debug.xcconfig deleted file mode 100644 index 9652d66..0000000 --- a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios.debug.xcconfig +++ /dev/null @@ -1,15 +0,0 @@ -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/REES46" "${PODS_CONFIGURATION_BUILD_DIR}/Resolver" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/REES46/REES46.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Resolver/Resolver.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "REES46" -framework "Resolver" -framework "UIKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_PODFILE_DIR_PATH = ${SRCROOT}/. -PODS_ROOT = ${SRCROOT}/Pods -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios.modulemap b/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios.modulemap deleted file mode 100644 index b5ea3c6..0000000 --- a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Pods_demo_store_ios { - umbrella header "Pods-demo-store-ios-umbrella.h" - - export * - module * { export * } -} diff --git a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios.release.xcconfig b/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios.release.xcconfig deleted file mode 100644 index 9652d66..0000000 --- a/Pods/Target Support Files/Pods-demo-store-ios/Pods-demo-store-ios.release.xcconfig +++ /dev/null @@ -1,15 +0,0 @@ -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/REES46" "${PODS_CONFIGURATION_BUILD_DIR}/Resolver" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/REES46/REES46.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Resolver/Resolver.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_LDFLAGS = $(inherited) -framework "REES46" -framework "Resolver" -framework "UIKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_PODFILE_DIR_PATH = ${SRCROOT}/. -PODS_ROOT = ${SRCROOT}/Pods -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/REES46/REES46-Info.plist b/Pods/Target Support Files/REES46/REES46-Info.plist deleted file mode 100644 index c642454..0000000 --- a/Pods/Target Support Files/REES46/REES46-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - ${PODS_DEVELOPMENT_LANGUAGE} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.6.40 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/REES46/REES46-dummy.m b/Pods/Target Support Files/REES46/REES46-dummy.m deleted file mode 100644 index 1fd05c0..0000000 --- a/Pods/Target Support Files/REES46/REES46-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_REES46 : NSObject -@end -@implementation PodsDummy_REES46 -@end diff --git a/Pods/Target Support Files/REES46/REES46-prefix.pch b/Pods/Target Support Files/REES46/REES46-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/Pods/Target Support Files/REES46/REES46-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/Pods/Target Support Files/REES46/REES46-umbrella.h b/Pods/Target Support Files/REES46/REES46-umbrella.h deleted file mode 100644 index 35e49c2..0000000 --- a/Pods/Target Support Files/REES46/REES46-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double REES46VersionNumber; -FOUNDATION_EXPORT const unsigned char REES46VersionString[]; - diff --git a/Pods/Target Support Files/REES46/REES46.debug.xcconfig b/Pods/Target Support Files/REES46/REES46.debug.xcconfig deleted file mode 100644 index 9607f60..0000000 --- a/Pods/Target Support Files/REES46/REES46.debug.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/REES46 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/REES46 -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/REES46/REES46.modulemap b/Pods/Target Support Files/REES46/REES46.modulemap deleted file mode 100644 index 651159b..0000000 --- a/Pods/Target Support Files/REES46/REES46.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module REES46 { - umbrella header "REES46-umbrella.h" - - export * - module * { export * } -} diff --git a/Pods/Target Support Files/REES46/REES46.release.xcconfig b/Pods/Target Support Files/REES46/REES46.release.xcconfig deleted file mode 100644 index 9607f60..0000000 --- a/Pods/Target Support Files/REES46/REES46.release.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/REES46 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/REES46 -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/demo-store-ios.xcodeproj/project.pbxproj b/demo-store-ios.xcodeproj/project.pbxproj index 1cae0df..1f7f1c8 100644 --- a/demo-store-ios.xcodeproj/project.pbxproj +++ b/demo-store-ios.xcodeproj/project.pbxproj @@ -28,17 +28,9 @@ 758713D32C64E539008E5E4E /* SearchBarView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 758713D12C64E519008E5E4E /* SearchBarView.struct.swift */; }; 758713D62C64E577008E5E4E /* SearchHistoryView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 758713D52C64E577008E5E4E /* SearchHistoryView.struct.swift */; }; 758713E02C64E6C3008E5E4E /* SearchErrorView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 758713DF2C64E6C3008E5E4E /* SearchErrorView.struct.swift */; }; - 758713E12C64E6C3008E5E4E /* SearchErrorView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 758713DF2C64E6C3008E5E4E /* SearchErrorView.struct.swift */; }; - 758713E22C64E6C3008E5E4E /* SearchErrorView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 758713DF2C64E6C3008E5E4E /* SearchErrorView.struct.swift */; }; - 758713F92C64ED00008E5E4E /* RemoteImageView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A4D60D2C5CD80500929368 /* RemoteImageView.struct.swift */; }; - 758713FA2C64ED11008E5E4E /* SearchViewAllProductsButton.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 758713CD2C64E00B008E5E4E /* SearchViewAllProductsButton.struct.swift */; }; 758713FE2C64EE7A008E5E4E /* SearchResultsListView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 758713E32C64E6E0008E5E4E /* SearchResultsListView.struct.swift */; }; 758714012C64EEC5008E5E4E /* RecommendedProduct.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75674CF62C3D92E0007FAB88 /* RecommendedProduct.struct.swift */; }; - 758714042C64F021008E5E4E /* RemoteImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75674D002C3DA0FA007FAB88 /* RemoteImageLoader.swift */; }; - 758714052C64F039008E5E4E /* RemoteImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75674D002C3DA0FA007FAB88 /* RemoteImageLoader.swift */; }; 758714102C66411B008E5E4E /* SearchResultInfoView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7587140F2C66411B008E5E4E /* SearchResultInfoView.struct.swift */; }; - 758714112C66411B008E5E4E /* SearchResultInfoView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7587140F2C66411B008E5E4E /* SearchResultInfoView.struct.swift */; }; - 758714122C66411B008E5E4E /* SearchResultInfoView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7587140F2C66411B008E5E4E /* SearchResultInfoView.struct.swift */; }; 758714132C66414D008E5E4E /* SearchResultProductGridView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 758714062C664093008E5E4E /* SearchResultProductGridView.struct.swift */; }; 758714142C66415E008E5E4E /* SearchResultHeaderView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7587140A2C6640CA008E5E4E /* SearchResultHeaderView.struct.swift */; }; 75A3F4232C383CEF00AAC175 /* SettingsInputCodeView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A3F4222C383CEF00AAC175 /* SettingsInputCodeView.struct.swift */; }; @@ -49,11 +41,7 @@ 75A4D5B22C579A4900929368 /* SdkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A4D5B12C579A4900929368 /* SdkManager.swift */; }; 75A4D60F2C5CD84800929368 /* RemoteImageView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A4D60D2C5CD80500929368 /* RemoteImageView.struct.swift */; }; 75A4D6162C5D0AD400929368 /* Sizes.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A4D6152C5D0AD400929368 /* Sizes.struct.swift */; }; - 75A4D6172C5D0AD400929368 /* Sizes.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A4D6152C5D0AD400929368 /* Sizes.struct.swift */; }; - 75A4D6182C5D0AD400929368 /* Sizes.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A4D6152C5D0AD400929368 /* Sizes.struct.swift */; }; 75A4D61A2C5D0AE800929368 /* AppColors.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A4D6192C5D0AE800929368 /* AppColors.struct.swift */; }; - 75A4D61B2C5D0AE800929368 /* AppColors.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A4D6192C5D0AE800929368 /* AppColors.struct.swift */; }; - 75A4D61C2C5D0AE800929368 /* AppColors.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A4D6192C5D0AE800929368 /* AppColors.struct.swift */; }; 75B935572C3564360063E814 /* DemoStoreApp.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75B935562C3564360063E814 /* DemoStoreApp.struct.swift */; }; 75B935592C3564360063E814 /* ContentView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75B935582C3564360063E814 /* ContentView.struct.swift */; }; 75B9355B2C3564370063E814 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 75B9355A2C3564370063E814 /* Assets.xcassets */; }; @@ -67,26 +55,14 @@ 75BAD4902C60EB4D00DFFF02 /* ProductImagesSectionView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD48F2C60EB4D00DFFF02 /* ProductImagesSectionView.struct.swift */; }; 75BAD4942C60ED4A00DFFF02 /* ActionSectionView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD4932C60ED4A00DFFF02 /* ActionSectionView.struct.swift */; }; 75BAD4992C60EE8100DFFF02 /* CounterSectionView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD4982C60EE8100DFFF02 /* CounterSectionView.struct.swift */; }; - 75BAD49A2C60EE8100DFFF02 /* CounterSectionView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD4982C60EE8100DFFF02 /* CounterSectionView.struct.swift */; }; - 75BAD49B2C60EE8100DFFF02 /* CounterSectionView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD4982C60EE8100DFFF02 /* CounterSectionView.struct.swift */; }; 75BAD49E2C60EF8A00DFFF02 /* ProductDetailsSectionView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD49D2C60EF8A00DFFF02 /* ProductDetailsSectionView.struct.swift */; }; 75BAD4A32C60F54300DFFF02 /* PriceSectionView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD4A22C60F54300DFFF02 /* PriceSectionView.struct.swift */; }; 75BAD4A92C60F7D500DFFF02 /* SettingsErrorScreenView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD4A82C60F7D500DFFF02 /* SettingsErrorScreenView.struct.swift */; }; - 75BAD4AA2C60F7D500DFFF02 /* SettingsErrorScreenView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD4A82C60F7D500DFFF02 /* SettingsErrorScreenView.struct.swift */; }; - 75BAD4AB2C60F7D500DFFF02 /* SettingsErrorScreenView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD4A82C60F7D500DFFF02 /* SettingsErrorScreenView.struct.swift */; }; 75BAD4B02C60F8ED00DFFF02 /* CartActionButtonsView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD4AF2C60F8ED00DFFF02 /* CartActionButtonsView.struct.swift */; }; 75BAD4B42C60F9C300DFFF02 /* CartTotalPriceSection.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD4B32C60F9C300DFFF02 /* CartTotalPriceSection.struct.swift */; }; - 75BAD4B52C60F9C300DFFF02 /* CartTotalPriceSection.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD4B32C60F9C300DFFF02 /* CartTotalPriceSection.struct.swift */; }; - 75BAD4B62C60F9C300DFFF02 /* CartTotalPriceSection.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD4B32C60F9C300DFFF02 /* CartTotalPriceSection.struct.swift */; }; 75BAD4B92C61021800DFFF02 /* EmptyCartView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD4B82C61021800DFFF02 /* EmptyCartView.struct.swift */; }; - 75BAD4BA2C61021800DFFF02 /* EmptyCartView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD4B82C61021800DFFF02 /* EmptyCartView.struct.swift */; }; - 75BAD4BB2C61021800DFFF02 /* EmptyCartView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD4B82C61021800DFFF02 /* EmptyCartView.struct.swift */; }; 75BAD56A2C63A4F000DFFF02 /* Typography.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD5692C63A4F000DFFF02 /* Typography.struct.swift */; }; - 75BAD56B2C63A4F000DFFF02 /* Typography.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD5692C63A4F000DFFF02 /* Typography.struct.swift */; }; - 75BAD56C2C63A4F000DFFF02 /* Typography.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD5692C63A4F000DFFF02 /* Typography.struct.swift */; }; 75BAD56E2C63BFAA00DFFF02 /* LoadingStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD56D2C63BFAA00DFFF02 /* LoadingStateView.swift */; }; - 75BAD56F2C63BFAA00DFFF02 /* LoadingStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD56D2C63BFAA00DFFF02 /* LoadingStateView.swift */; }; - 75BAD5702C63BFAA00DFFF02 /* LoadingStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75BAD56D2C63BFAA00DFFF02 /* LoadingStateView.swift */; }; 75C930752CCB841700FCA295 /* InAppNotificationScreen.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C930742CCB841700FCA295 /* InAppNotificationScreen.struct.swift */; }; 75C930792CCBB8AD00FCA295 /* NotificationWidgetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C930782CCBB8AD00FCA295 /* NotificationWidgetController.swift */; }; 75C9307D2CCBD41100FCA295 /* NotificationWidgetRepresentable.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C9307B2CCBD3F100FCA295 /* NotificationWidgetRepresentable.struct.swift */; }; @@ -94,12 +70,6 @@ 75E1C8EB2C3E9401005018B4 /* FullRecommendationListView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E1C8EA2C3E9401005018B4 /* FullRecommendationListView.struct.swift */; }; 75E1C8ED2C3EACDA005018B4 /* DetailsToolbarView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E1C8EC2C3EACDA005018B4 /* DetailsToolbarView.struct.swift */; }; 75E1C8EF2C3ECC95005018B4 /* ProductListItemView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E1C8EE2C3ECC95005018B4 /* ProductListItemView.struct.swift */; }; - 75E979862C4935170081B069 /* Core.h in Headers */ = {isa = PBXBuildFile; fileRef = 75E979852C4935170081B069 /* Core.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 75E979892C4935170081B069 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 75E979832C4935170081B069 /* Core.framework */; }; - 75E9798A2C4935170081B069 /* Core.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 75E979832C4935170081B069 /* Core.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 75E979962C49561B0081B069 /* Feature.h in Headers */ = {isa = PBXBuildFile; fileRef = 75E979952C49561B0081B069 /* Feature.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 75E979992C49561B0081B069 /* Feature.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 75E979932C49561B0081B069 /* Feature.framework */; }; - 75E9799A2C49561B0081B069 /* Feature.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 75E979932C49561B0081B069 /* Feature.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 75E979C72C496E1C0081B069 /* HomeResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E979C62C496E1C0081B069 /* HomeResolver.swift */; }; 75E979CC2C4973DA0081B069 /* CartResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E979CB2C4973DA0081B069 /* CartResolver.swift */; }; 75E979D02C4974440081B069 /* CartListView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E979CF2C4974440081B069 /* CartListView.struct.swift */; }; @@ -108,41 +78,19 @@ 75E979E72C4AE8870081B069 /* TabItem.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E979E62C4AE8870081B069 /* TabItem.struct.swift */; }; 75E979ED2C4D2BAE0081B069 /* AppState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E979EC2C4D2BAE0081B069 /* AppState.swift */; }; 75E979F12C4D2DBE0081B069 /* Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E979F02C4D2DBE0081B069 /* Timer.swift */; }; - 75E979F22C4D2DBE0081B069 /* Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E979F02C4D2DBE0081B069 /* Timer.swift */; }; - 75E979F32C4D2DBE0081B069 /* Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E979F02C4D2DBE0081B069 /* Timer.swift */; }; 75E979F72C4D37940081B069 /* ViewState.enum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E979F62C4D37940081B069 /* ViewState.enum.swift */; }; 75E97A172C501B120081B069 /* ScreenWrapper.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A162C501B120081B069 /* ScreenWrapper.struct.swift */; }; 75E97A1C2C501D660081B069 /* ScreenTypeProvider.protocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A1A2C501D660081B069 /* ScreenTypeProvider.protocol.swift */; }; 75E97A232C5023600081B069 /* SearchFilter.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A222C5023600081B069 /* SearchFilter.struct.swift */; }; - 75E97A242C5023600081B069 /* SearchFilter.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A222C5023600081B069 /* SearchFilter.struct.swift */; }; - 75E97A252C5023600081B069 /* SearchFilter.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A222C5023600081B069 /* SearchFilter.struct.swift */; }; 75E97A272C50237F0081B069 /* SearchIndustrialFilters.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A262C50237F0081B069 /* SearchIndustrialFilters.struct.swift */; }; - 75E97A282C50237F0081B069 /* SearchIndustrialFilters.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A262C50237F0081B069 /* SearchIndustrialFilters.struct.swift */; }; - 75E97A292C50237F0081B069 /* SearchIndustrialFilters.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A262C50237F0081B069 /* SearchIndustrialFilters.struct.swift */; }; 75E97A2B2C5023960081B069 /* SearchFashionSize.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A2A2C5023960081B069 /* SearchFashionSize.struct.swift */; }; - 75E97A2C2C5023960081B069 /* SearchFashionSize.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A2A2C5023960081B069 /* SearchFashionSize.struct.swift */; }; - 75E97A2D2C5023960081B069 /* SearchFashionSize.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A2A2C5023960081B069 /* SearchFashionSize.struct.swift */; }; 75E97A2F2C5023B10081B069 /* SearchFashionColor.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A2E2C5023B10081B069 /* SearchFashionColor.struct.swift */; }; - 75E97A302C5023B10081B069 /* SearchFashionColor.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A2E2C5023B10081B069 /* SearchFashionColor.struct.swift */; }; - 75E97A312C5023B10081B069 /* SearchFashionColor.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A2E2C5023B10081B069 /* SearchFashionColor.struct.swift */; }; 75E97A392C5024CD0081B069 /* SearchProduct.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A382C5024CD0081B069 /* SearchProduct.struct.swift */; }; - 75E97A3A2C5024CD0081B069 /* SearchProduct.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A382C5024CD0081B069 /* SearchProduct.struct.swift */; }; - 75E97A3B2C5024CD0081B069 /* SearchProduct.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A382C5024CD0081B069 /* SearchProduct.struct.swift */; }; 75E97A3D2C5024EF0081B069 /* SearchRedirect.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A3C2C5024EF0081B069 /* SearchRedirect.struct.swift */; }; - 75E97A3E2C5024EF0081B069 /* SearchRedirect.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A3C2C5024EF0081B069 /* SearchRedirect.struct.swift */; }; - 75E97A3F2C5024EF0081B069 /* SearchRedirect.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A3C2C5024EF0081B069 /* SearchRedirect.struct.swift */; }; 75E97A412C5025080081B069 /* SearchCategory.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A402C5025080081B069 /* SearchCategory.struct.swift */; }; - 75E97A422C5025080081B069 /* SearchCategory.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A402C5025080081B069 /* SearchCategory.struct.swift */; }; - 75E97A432C5025080081B069 /* SearchCategory.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A402C5025080081B069 /* SearchCategory.struct.swift */; }; 75E97A452C5025240081B069 /* SearchQuery.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A442C5025240081B069 /* SearchQuery.struct.swift */; }; - 75E97A462C5025240081B069 /* SearchQuery.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A442C5025240081B069 /* SearchQuery.struct.swift */; }; - 75E97A472C5025240081B069 /* SearchQuery.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A442C5025240081B069 /* SearchQuery.struct.swift */; }; 75E97A492C50253A0081B069 /* SearchSuggest.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A482C50253A0081B069 /* SearchSuggest.struct.swift */; }; - 75E97A4A2C50253A0081B069 /* SearchSuggest.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A482C50253A0081B069 /* SearchSuggest.struct.swift */; }; - 75E97A4B2C50253A0081B069 /* SearchSuggest.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A482C50253A0081B069 /* SearchSuggest.struct.swift */; }; 75E97A4D2C50255A0081B069 /* SearchPriceRange.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A4C2C50255A0081B069 /* SearchPriceRange.struct.swift */; }; - 75E97A4E2C50255A0081B069 /* SearchPriceRange.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A4C2C50255A0081B069 /* SearchPriceRange.struct.swift */; }; - 75E97A4F2C50255A0081B069 /* SearchPriceRange.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A4C2C50255A0081B069 /* SearchPriceRange.struct.swift */; }; 75E97A5A2C502DBF0081B069 /* SearchProductResponseMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A342C5024280081B069 /* SearchProductResponseMapper.swift */; }; 75E97A5F2C502F3C0081B069 /* Product.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75674CF42C3D92CC007FAB88 /* Product.struct.swift */; }; 75E97A642C50320F0081B069 /* RecommendedProductMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75674CFB2C3D9964007FAB88 /* RecommendedProductMapper.swift */; }; @@ -150,8 +98,6 @@ 75E97A712C5041920081B069 /* ImageItem.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A6F2C5041780081B069 /* ImageItem.struct.swift */; }; 75E97A782C512F8C0081B069 /* DependenciesInitialization.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A772C512F8C0081B069 /* DependenciesInitialization.struct.swift */; }; 75E97A822C5133AD0081B069 /* LoadingView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A812C5133AD0081B069 /* LoadingView.struct.swift */; }; - 75E97A832C5133AD0081B069 /* LoadingView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A812C5133AD0081B069 /* LoadingView.struct.swift */; }; - 75E97A842C5133AD0081B069 /* LoadingView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A812C5133AD0081B069 /* LoadingView.struct.swift */; }; 75E97A882C51414D0081B069 /* CartRepository.protocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A872C51414D0081B069 /* CartRepository.protocol.swift */; }; 75E97A8D2C5142F10081B069 /* ProductsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A8C2C5142F10081B069 /* ProductsViewModel.swift */; }; 75E97A922C5143630081B069 /* ProductsResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97A912C5143630081B069 /* ProductsResolver.swift */; }; @@ -159,8 +105,6 @@ 75E97AA52C5147FC0081B069 /* HomeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97AA42C5147F30081B069 /* HomeViewModel.swift */; }; 75E97AAC2C514B4D0081B069 /* SearchResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97AAB2C514B4D0081B069 /* SearchResolver.swift */; }; 75E97AB02C514D2D0081B069 /* AppConvigVariables.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97AAF2C514D2D0081B069 /* AppConvigVariables.struct.swift */; }; - 75E97AB12C514D2D0081B069 /* AppConvigVariables.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97AAF2C514D2D0081B069 /* AppConvigVariables.struct.swift */; }; - 75E97AB22C514D2D0081B069 /* AppConvigVariables.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E97AAF2C514D2D0081B069 /* AppConvigVariables.struct.swift */; }; 75ECCD0B2C36BDF500D6D346 /* HomeScreenView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75ECCD0A2C36BDF500D6D346 /* HomeScreenView.struct.swift */; }; 75ECCD102C36BE2000D6D346 /* ProductsScreenView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75ECCD0F2C36BE2000D6D346 /* ProductsScreenView.struct.swift */; }; 75ECCD122C36BE2D00D6D346 /* CartScreenView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75ECCD112C36BE2D00D6D346 /* CartScreenView.struct.swift */; }; @@ -169,23 +113,6 @@ 75ECCD1A2C36F94800D6D346 /* BottomBarView.struct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75ECCD192C36F94800D6D346 /* BottomBarView.struct.swift */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - 75E979872C4935170081B069 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 75B9354B2C3564360063E814 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 75E979822C4935170081B069; - remoteInfo = Core; - }; - 75E979972C49561B0081B069 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 75B9354B2C3564360063E814 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 75E979922C49561B0081B069; - remoteInfo = Feature; - }; -/* End PBXContainerItemProxy section */ - /* Begin PBXCopyFilesBuildPhase section */ 752F1D6D2C46F411002D4AC3 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -193,8 +120,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - 75E9799A2C49561B0081B069 /* Feature.framework in Embed Frameworks */, - 75E9798A2C4935170081B069 /* Core.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -269,9 +194,7 @@ 75E1C8EA2C3E9401005018B4 /* FullRecommendationListView.struct.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FullRecommendationListView.struct.swift; sourceTree = ""; }; 75E1C8EC2C3EACDA005018B4 /* DetailsToolbarView.struct.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailsToolbarView.struct.swift; sourceTree = ""; }; 75E1C8EE2C3ECC95005018B4 /* ProductListItemView.struct.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductListItemView.struct.swift; sourceTree = ""; }; - 75E979832C4935170081B069 /* Core.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Core.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 75E979852C4935170081B069 /* Core.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Core.h; sourceTree = ""; }; - 75E979932C49561B0081B069 /* Feature.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Feature.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 75E979952C49561B0081B069 /* Feature.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Feature.h; sourceTree = ""; }; 75E979C62C496E1C0081B069 /* HomeResolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeResolver.swift; sourceTree = ""; }; 75E979CB2C4973DA0081B069 /* CartResolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CartResolver.swift; sourceTree = ""; }; @@ -324,22 +247,6 @@ buildActionMask = 2147483647; files = ( 37CF7497084E2A6C5AB03AAF /* Pods_demo_store_ios.framework in Frameworks */, - 75E979992C49561B0081B069 /* Feature.framework in Frameworks */, - 75E979892C4935170081B069 /* Core.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 75E979802C4935170081B069 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 75E979902C49561B0081B069 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( ); runOnlyForDeploymentPostprocessing = 0; }; @@ -488,8 +395,6 @@ isa = PBXGroup; children = ( 75B935532C3564360063E814 /* demo-store-ios.app */, - 75E979832C4935170081B069 /* Core.framework */, - 75E979932C49561B0081B069 /* Feature.framework */, ); name = Products; sourceTree = ""; @@ -1213,25 +1118,6 @@ }; /* End PBXGroup section */ -/* Begin PBXHeadersBuildPhase section */ - 75E9797E2C4935170081B069 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 75E979862C4935170081B069 /* Core.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 75E9798E2C49561B0081B069 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 75E979962C49561B0081B069 /* Feature.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - /* Begin PBXNativeTarget section */ 75B935522C3564360063E814 /* demo-store-ios */ = { isa = PBXNativeTarget; @@ -1247,50 +1133,12 @@ buildRules = ( ); dependencies = ( - 75E979882C4935170081B069 /* PBXTargetDependency */, - 75E979982C49561B0081B069 /* PBXTargetDependency */, ); name = "demo-store-ios"; productName = "demo-store-ios"; productReference = 75B935532C3564360063E814 /* demo-store-ios.app */; productType = "com.apple.product-type.application"; }; - 75E979822C4935170081B069 /* Core */ = { - isa = PBXNativeTarget; - buildConfigurationList = 75E9798B2C4935170081B069 /* Build configuration list for PBXNativeTarget "Core" */; - buildPhases = ( - 75E9797E2C4935170081B069 /* Headers */, - 75E9797F2C4935170081B069 /* Sources */, - 75E979802C4935170081B069 /* Frameworks */, - 75E979812C4935170081B069 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Core; - productName = Core; - productReference = 75E979832C4935170081B069 /* Core.framework */; - productType = "com.apple.product-type.framework"; - }; - 75E979922C49561B0081B069 /* Feature */ = { - isa = PBXNativeTarget; - buildConfigurationList = 75E9799B2C49561B0081B069 /* Build configuration list for PBXNativeTarget "Feature" */; - buildPhases = ( - 75E9798E2C49561B0081B069 /* Headers */, - 75E9798F2C49561B0081B069 /* Sources */, - 75E979902C49561B0081B069 /* Frameworks */, - 75E979912C49561B0081B069 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Feature; - productName = Feature; - productReference = 75E979932C49561B0081B069 /* Feature.framework */; - productType = "com.apple.product-type.framework"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -1304,14 +1152,6 @@ 75B935522C3564360063E814 = { CreatedOnToolsVersion = 15.4; }; - 75E979822C4935170081B069 = { - CreatedOnToolsVersion = 15.4; - LastSwiftMigration = 1540; - }; - 75E979922C49561B0081B069 = { - CreatedOnToolsVersion = 15.4; - LastSwiftMigration = 1540; - }; }; }; buildConfigurationList = 75B9354E2C3564360063E814 /* Build configuration list for PBXProject "demo-store-ios" */; @@ -1328,8 +1168,6 @@ projectRoot = ""; targets = ( 75B935522C3564360063E814 /* demo-store-ios */, - 75E979822C4935170081B069 /* Core */, - 75E979922C49561B0081B069 /* Feature */, ); }; /* End PBXProject section */ @@ -1345,20 +1183,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 75E979812C4935170081B069 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 75E979912C49561B0081B069 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -1511,85 +1335,8 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 75E9797F2C4935170081B069 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 758714042C64F021008E5E4E /* RemoteImageLoader.swift in Sources */, - 75BAD56F2C63BFAA00DFFF02 /* LoadingStateView.swift in Sources */, - 75E97A302C5023B10081B069 /* SearchFashionColor.struct.swift in Sources */, - 75E97A3A2C5024CD0081B069 /* SearchProduct.struct.swift in Sources */, - 75E97A4A2C50253A0081B069 /* SearchSuggest.struct.swift in Sources */, - 75E979F22C4D2DBE0081B069 /* Timer.swift in Sources */, - 75BAD4AA2C60F7D500DFFF02 /* SettingsErrorScreenView.struct.swift in Sources */, - 75E97A422C5025080081B069 /* SearchCategory.struct.swift in Sources */, - 75A4D61B2C5D0AE800929368 /* AppColors.struct.swift in Sources */, - 75BAD56B2C63A4F000DFFF02 /* Typography.struct.swift in Sources */, - 75E97A832C5133AD0081B069 /* LoadingView.struct.swift in Sources */, - 75A4D6172C5D0AD400929368 /* Sizes.struct.swift in Sources */, - 75BAD4BA2C61021800DFFF02 /* EmptyCartView.struct.swift in Sources */, - 75E97A242C5023600081B069 /* SearchFilter.struct.swift in Sources */, - 758713E12C64E6C3008E5E4E /* SearchErrorView.struct.swift in Sources */, - 75E97A3E2C5024EF0081B069 /* SearchRedirect.struct.swift in Sources */, - 75E97A4E2C50255A0081B069 /* SearchPriceRange.struct.swift in Sources */, - 75E97AB12C514D2D0081B069 /* AppConvigVariables.struct.swift in Sources */, - 75E97A282C50237F0081B069 /* SearchIndustrialFilters.struct.swift in Sources */, - 75BAD49A2C60EE8100DFFF02 /* CounterSectionView.struct.swift in Sources */, - 75E97A2C2C5023960081B069 /* SearchFashionSize.struct.swift in Sources */, - 75BAD4B52C60F9C300DFFF02 /* CartTotalPriceSection.struct.swift in Sources */, - 75E97A462C5025240081B069 /* SearchQuery.struct.swift in Sources */, - 758714112C66411B008E5E4E /* SearchResultInfoView.struct.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 75E9798F2C49561B0081B069 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 758714052C64F039008E5E4E /* RemoteImageLoader.swift in Sources */, - 758713FA2C64ED11008E5E4E /* SearchViewAllProductsButton.struct.swift in Sources */, - 758713F92C64ED00008E5E4E /* RemoteImageView.struct.swift in Sources */, - 75BAD5702C63BFAA00DFFF02 /* LoadingStateView.swift in Sources */, - 75E97A312C5023B10081B069 /* SearchFashionColor.struct.swift in Sources */, - 75E97A4B2C50253A0081B069 /* SearchSuggest.struct.swift in Sources */, - 75E97A4F2C50255A0081B069 /* SearchPriceRange.struct.swift in Sources */, - 75E97A472C5025240081B069 /* SearchQuery.struct.swift in Sources */, - 75BAD4AB2C60F7D500DFFF02 /* SettingsErrorScreenView.struct.swift in Sources */, - 75E97A432C5025080081B069 /* SearchCategory.struct.swift in Sources */, - 75A4D61C2C5D0AE800929368 /* AppColors.struct.swift in Sources */, - 75BAD56C2C63A4F000DFFF02 /* Typography.struct.swift in Sources */, - 758714122C66411B008E5E4E /* SearchResultInfoView.struct.swift in Sources */, - 75E97A842C5133AD0081B069 /* LoadingView.struct.swift in Sources */, - 75A4D6182C5D0AD400929368 /* Sizes.struct.swift in Sources */, - 75BAD4BB2C61021800DFFF02 /* EmptyCartView.struct.swift in Sources */, - 75E979F32C4D2DBE0081B069 /* Timer.swift in Sources */, - 758713E22C64E6C3008E5E4E /* SearchErrorView.struct.swift in Sources */, - 75E97A252C5023600081B069 /* SearchFilter.struct.swift in Sources */, - 75E97A292C50237F0081B069 /* SearchIndustrialFilters.struct.swift in Sources */, - 75E97AB22C514D2D0081B069 /* AppConvigVariables.struct.swift in Sources */, - 75E97A3B2C5024CD0081B069 /* SearchProduct.struct.swift in Sources */, - 75BAD49B2C60EE8100DFFF02 /* CounterSectionView.struct.swift in Sources */, - 75E97A2D2C5023960081B069 /* SearchFashionSize.struct.swift in Sources */, - 75BAD4B62C60F9C300DFFF02 /* CartTotalPriceSection.struct.swift in Sources */, - 75E97A3F2C5024EF0081B069 /* SearchRedirect.struct.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - 75E979882C4935170081B069 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 75E979822C4935170081B069 /* Core */; - targetProxy = 75E979872C4935170081B069 /* PBXContainerItemProxy */; - }; - 75E979982C49561B0081B069 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 75E979922C49561B0081B069 /* Feature */; - targetProxy = 75E979972C49561B0081B069 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - /* Begin XCBuildConfiguration section */ 75B935752C3564370063E814 /* Debug */ = { isa = XCBuildConfiguration; @@ -1778,158 +1525,6 @@ }; name = Release; }; - 75E9798C2C4935170081B069 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUILD_LIBRARY_FOR_DISTRIBUTION = YES; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_NSHumanReadableCopyright = ""; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; - MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = "demo-store.Core"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_INSTALL_OBJC_HEADER = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 75E9798D2C4935170081B069 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUILD_LIBRARY_FOR_DISTRIBUTION = YES; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_NSHumanReadableCopyright = ""; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; - MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; - PRODUCT_BUNDLE_IDENTIFIER = "demo-store.Core"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_INSTALL_OBJC_HEADER = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 75E9799C2C49561B0081B069 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUILD_LIBRARY_FOR_DISTRIBUTION = YES; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_NSHumanReadableCopyright = ""; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; - MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = "demo-store.Feature"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_INSTALL_OBJC_HEADER = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 75E9799D2C49561B0081B069 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUILD_LIBRARY_FOR_DISTRIBUTION = YES; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_NSHumanReadableCopyright = ""; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; - MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; - PRODUCT_BUNDLE_IDENTIFIER = "demo-store.Feature"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SKIP_INSTALL = YES; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_INSTALL_OBJC_HEADER = NO; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -1951,24 +1546,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 75E9798B2C4935170081B069 /* Build configuration list for PBXNativeTarget "Core" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 75E9798C2C4935170081B069 /* Debug */, - 75E9798D2C4935170081B069 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 75E9799B2C49561B0081B069 /* Build configuration list for PBXNativeTarget "Feature" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 75E9799C2C49561B0081B069 /* Debug */, - 75E9799D2C49561B0081B069 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; /* End XCConfigurationList section */ }; rootObject = 75B9354B2C3564360063E814 /* Project object */; diff --git a/demo-store-ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/demo-store-ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/demo-store-ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/demo-store-ios.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/demo-store-ios.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/demo-store-ios.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/demo-store-ios.xcodeproj/xcuserdata/borystrubitsun.xcuserdatad/xcschemes/xcschememanagement.plist b/demo-store-ios.xcodeproj/xcuserdata/borystrubitsun.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 3e8dcc6..0000000 --- a/demo-store-ios.xcodeproj/xcuserdata/borystrubitsun.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,52 +0,0 @@ - - - - - SchemeUserState - - Core.xcscheme_^#shared#^_ - - orderHint - 5 - - Feature.xcscheme_^#shared#^_ - - orderHint - 4 - - common.xcscheme_^#shared#^_ - - orderHint - 8 - - data.xcscheme_^#shared#^_ - - orderHint - 7 - - demo-store-ios.xcscheme_^#shared#^_ - - orderHint - 0 - - - SuppressBuildableAutocreation - - 75B935522C3564360063E814 - - primary - - - 75B935622C3564370063E814 - - primary - - - 75B9356C2C3564370063E814 - - primary - - - - - diff --git a/demo-store-ios.xcworkspace/contents.xcworkspacedata b/demo-store-ios.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index a41d896..0000000 --- a/demo-store-ios.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/demo-store-ios.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/demo-store-ios.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/demo-store-ios.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/version.properties b/version.properties index aa2f7a5..8d471d3 100644 --- a/version.properties +++ b/version.properties @@ -1,2 +1,2 @@ -VERSION_CODE=1 -VERSION_NAME=1.0.0 +VERSION_CODE=3 +VERSION_NAME=1.0.3