Compare commits

...

682 Commits

Author SHA1 Message Date
Ivan Smolin 3d57f5ccc4 Merge pull request 'HolderViewSkeletonsConfiguration, CALayer support for DashedBoundsLayer' (#29) from feature/skeletons_holder_configuration into master
Reviewed-on: #29
2024-02-12 10:52:50 +03:00
Ivan Smolin e8780d0238 Update: `ViewSkeletonsConfiguration`. It's possible to enable or disable animation for specific skeletons now.
Added: `HolderViewSkeletonsConfiguration` for skeleton root view configuration
Added: `DashedBoundsLayer` can now be applied to `CALayer`
2024-02-09 16:14:32 +03:00
Ivan Smolin b7862cb891 Merge pull request 'fix: revert `TextSkeletonsConfiguration` line height calculation' (#28) from fix/skeleton_line_height_calculation into master
Reviewed-on: #28
2024-02-01 14:41:53 +03:00
Ivan Smolin e8ca5ad039 fix: revert `TextSkeletonsConfiguration` line height calculation 2024-02-01 14:35:27 +03:00
Ivan Smolin 8fe2bfd6e8 Merge pull request 'feature/update_table_kit_repo' (#27) from feature/update_table_kit_repo into master
Reviewed-on: #27
2024-02-01 10:45:47 +03:00
Ivan Smolin 18e5421e14 feat: Update: use TouchInstinct `TableKit` fork instead of original one
Update: remove default value from `BoolValueDefaultsStorage`
2024-02-01 10:14:21 +03:00
Ivan Smolin 5549854c75 feat: update tablekit repo 2024-01-31 12:18:40 +03:00
Ivan Smolin af7c5bc9fd Merge pull request 'fix: build and warnings' (#26) from fix/build_and_warnings into master
Reviewed-on: #26
2024-01-30 21:27:35 +03:00
Ivan Smolin 6a7af59ffc fix: build and warnings 2024-01-30 21:25:13 +03:00
Ivan Smolin 36b4f84306 Merge pull request 'Added: `xcprivacy` files' (#25) from fix/minor_fixes_and_xcprivacy into master
Reviewed-on: #25
2024-01-30 20:51:04 +03:00
Ivan Smolin 5c7df9373d Added: `xcprivacy` files
Update: Correctly detect app reinstall in `AppInstallLifetimeSingleValueStorage`
Update: use `xHeight` instead of `pointSize` for default skeleton line height calculation
Update: update `linkTextAttributes` in `UITextView` when setting interactive url parts
2024-01-30 20:40:14 +03:00
Ivan Smolin 5c44471dbb Merge pull request 'fix: change UIButton event propogation avoidance method' (#24) from fix/uibutton_event_propogation_fix into master
Reviewed-on: #24
2023-11-24 12:57:00 +03:00
Ivan Smolin 7a7987239d fix: change UIButton event propogation avoidance method 2023-11-23 21:16:36 +03:00
Ivan Smolin b65029056f Merge pull request 'fix: StatefulButton state configuration for iOS 15+' (#23) from fix/stateful_button_state into master
Reviewed-on: #23
2023-11-08 18:20:01 +03:00
Ivan Smolin 815d749bd9 fix: StatefulButton state configuration for iOS 15+ 2023-11-08 18:17:10 +03:00
Ivan Smolin 03059969b2 Merge pull request 'feat: Set reasonable defaults for SkeletonConfiguration' (#22) from feature/skeleton_configuration_defaults into master
Reviewed-on: #22
2023-11-07 16:39:55 +03:00
Ivan Smolin 1a9ed8353b feat: Set reasonable defaults for SkeletonConfiguration 2023-11-07 16:29:10 +03:00
Ivan Smolin 03aa25e529 Merge pull request 'fix: Changed access level from internal to public of title and subtitle view in BaseTitleSubtitleView' (#21) from fix/base_title_subtitle_view_access_level into master
Reviewed-on: #21
2023-11-03 22:24:57 +03:00
Ivan Smolin 48a2b47428 fix: Changed access level from internal to public of title and subtitle view in BaseTitleSubtitleView 2023-11-03 22:21:05 +03:00
Ivan Smolin d06c1c35d4 Merge pull request 'feat: Added: BaseTitleSubtitleView which can be inherited for fine-tuning skeletons and other behavior.' (#20) from feature/base_title_subtitle_view into master
Reviewed-on: #20
2023-11-03 19:38:19 +03:00
Ivan Smolin 9fab98b560 feat: Added: BaseTitleSubtitleView which can be inherited for fine-tuning skeletons and other behavior.
Update: Changed lines number calculation method in TextSkeletonsConfiguration.
2023-11-03 18:56:26 +03:00
Ivan Smolin 94cf900f7c Merge pull request 'feat: Added: maxWidth parameter to BaseViewSkeletonsConfiguration.' (#19) from feature/skeletons_configuration into master
Reviewed-on: #19
2023-11-02 21:55:21 +03:00
Ivan Smolin c1e96eee35 feat: Added: maxWidth parameter to BaseViewSkeletonsConfiguration.
Added: custom SkeletonConfigurations for nested SkeletonPresenters.
Update: Many fixes and improvements to TextSkeletonsConfiguration.
2023-11-02 21:40:01 +03:00
Ivan Smolin ed8a2113c4 Merge pull request 'feat: Skeletonable can now control custom geometry change notification.' (#18) from feature/skeletons_tuning into master
Reviewed-on: #18
2023-11-01 15:55:48 +03:00
Ivan Smolin 8652795ddb feat: Skeletonable can now control custom geometry change notification.
Filter hidden views from skeletonable views by default.
2023-11-01 14:45:57 +03:00
Ivan Smolin 38dc604cbc Merge pull request 'feat: DefaultTitleSubtitleView support for separated configuration of title and subtitle labels layout.' (#17) from feature/layout_improvenments into master
Reviewed-on: #17
2023-10-30 16:36:31 +03:00
Ivan Smolin abe9ad5dc1 feat: DefaultTitleSubtitleView support for separated configuration of title and subtitle labels layout.
BaseListItemView fixed trailing insets when trailing view is hidden.
2023-10-30 15:21:55 +03:00
Ivan Smolin abd18d848c Merge pull request 'fix: layout DSL heuristics' (#16) from feature/layout_dsl_heuristics into master
Reviewed-on: #16
2023-10-23 14:05:16 +03:00
Ivan Smolin 4a076b8865 fix: layout DSL heuristics 2023-10-20 20:40:21 +03:00
Ivan Smolin 767c19d17b Merge pull request 'feat: Custom string attributes to `BaseTextAttributes`' (#15) from feature/uiviewbackground into master
Reviewed-on: #15
2023-10-09 23:52:09 +03:00
Ivan Smolin 90cd941eff docs: update docs 2023-10-09 23:30:37 +03:00
Ivan Smolin 2bf1fc052a feat: Custom string attributes to `BaseTextAttributes`
- Customizeable `UIViewBackground` and `UIViewBorder` for `UIView.Appearance`
- Keychain single value storage for codable models -`CodableSingleValueKeychainStorage`
- Renamed methods `startAnimation` and `stopAnimation` of `SkeletonPresenter`, so it won't conflict with `Animatable` protocol anymore
2023-10-09 23:03:51 +03:00
Ivan Smolin a03fc1f7ee Merge pull request 'build: fix compile issue' (#14) from build/fix_compile_issue into master
Reviewed-on: #14
2023-09-06 12:07:18 +03:00
Ivan Smolin 7945aa3a62 build: fix compile issue 2023-09-06 11:51:16 +03:00
Ivan Smolin 93b0f61b00 Merge pull request 'feat: TIApplication module and other fixes and improvements' (#13) from feature/ti_application into master
Reviewed-on: #13
2023-09-06 11:31:36 +03:00
Ivan Smolin a0c7faa4a3 fix: code review notes 2023-09-05 16:49:05 +03:00
Ivan Smolin 60734996f6 feat: add universal DSL to TISwiftUtils, remove unused code 2023-08-24 12:07:43 +03:00
Ivan Smolin eaea4abd75 feat: TIApplication module and other fixes and improvements 2023-08-23 20:49:23 +03:00
Ivan Smolin b8611321fb Merge pull request 'feature/bottom-sheet' (#11) from feature/bottom-sheet into master
Reviewed-on: #11
2023-07-28 16:18:36 +03:00
Ivan Smolin 13a5925443 fix: review notes 2023-07-28 16:08:35 +03:00
Ivan Smolin c485434f51 build: add makefile for parallel execution of pod repo push action 2023-07-26 22:24:02 +03:00
Ivan Smolin 843a887ec7 fix: move presentation detents settings to modal view controller appearance, force use nan for undefined layout dimension, fix related layout issues 2023-07-26 17:31:28 +03:00
Ivan Smolin 8007532351 fix: keyboard overlapping for footer and content view of BaseModalViewController 2023-07-25 19:09:21 +03:00
Ivan Smolin 0ef1edfacb build: move included pan modal sources to separate dependency 2023-07-25 17:32:21 +03:00
Ivan Smolin 27d5a3a9ca fix: fix code review notes 2023-07-24 20:48:46 +03:00
Ivan Smolin 4e8f60543d Merge branch 'master' into feature/bottom-sheet 2023-07-24 11:23:40 +03:00
Ivan Smolin c2b31a90d6 Merge pull request 'feature/stateful_button_improvements' (#12) from feature/stateful_button_improvements into master
Reviewed-on: #12
2023-07-24 10:00:37 +03:00
Ivan Smolin 1a4c42fa46 fix: StatefulButton appearance configuration 2023-07-17 18:51:41 +03:00
Ivan Smolin 094c0c40d8 build: prevent compile-time failure in application extensions 2023-07-11 16:30:34 +03:00
Ivan Smolin b22fd239e9 fix: text size calculation in cluster icon renderer 2023-07-10 18:38:41 +03:00
Ivan Smolin 65ae079e62 fix: conform TemplateDrawingOperation to OrientationAwareDrawingOperation 2023-07-10 17:25:24 +03:00
Ivan Smolin 7c8a29a7f9 build: update changelog and podspec versions 2023-07-10 16:37:27 +03:00
Ivan Smolin df2faa4cd5 feat: MarkerIconFactory can now return optional image. In this case MapManagers will show the default marker icon 2023-07-10 16:17:29 +03:00
Ivan Smolin 36019f7429 feat: TICoreGraphicsUtils module for drawing operations and other CoreGraphics related functionality 2023-07-10 16:17:29 +03:00
Ivan Smolin 5245d48a8a feat: stateful button improvements 2023-07-10 16:17:28 +03:00
Nikita Semenov 83655d2bac Merge pull request 'feat: migrating storages' (#10) from feature/migrating_storage into master
Reviewed-on: #10
2023-07-09 22:33:51 +03:00
Nikita Semenov 6b7be340f5 fix: added default logger parameter 2023-07-09 22:15:36 +03:00
Nikita Semenov 6084dd5fec fix: move tifoundationlogger to it's own folder 2023-07-09 22:05:58 +03:00
Nikita Semenov 85b206bf18 fix: move tifoundationlogger to it's own folder 2023-07-09 21:51:41 +03:00
Nikita Semenov da527644a7 fix: move tifoundationlogger to it's own folder 2023-07-07 15:39:11 +03:00
Nikita Semenov 45c060403f fix: logic of getting value from storage 2023-07-07 15:17:54 +03:00
Nikita Semenov a79ff67a38 fix: logic of deletion 2023-07-07 14:00:43 +03:00
Nikita Semenov c631053131 fix: code review notes 2023-07-07 09:01:17 +03:00
Nikita Semenov c55b8f73a9 fix: code review notes 2023-07-06 18:42:18 +03:00
Nikita Semenov 25c0d04d11 feat: update tests, migration fixes, factory method for migration storage added 2023-07-06 12:34:48 +03:00
Nikita Semenov b97ea5bc8f docs: update appearance of view controller in documentation 2023-07-03 10:17:47 +03:00
Nikita Semenov 06a83190ab fix: refactoring with new layout configuration api 2023-07-03 08:46:16 +03:00
Nikita Semenov 3f112d2d26 Merge branch 'master' into feature/bottom-sheet
# Conflicts:
#	CHANGELOG.md
#	TIAppleMapUtils/TIAppleMapUtils.podspec
#	TIAuth/TIAuth.podspec
#	TIDeeplink/TIDeeplink.podspec
#	TIDeveloperUtils/TIDeveloperUtils.podspec
#	TIEcommerce/TIEcommerce.podspec
#	TIFoundationUtils/TIFoundationUtils.podspec
#	TIGoogleMapUtils/TIGoogleMapUtils.podspec
#	TIKeychainUtils/TIKeychainUtils.podspec
#	TILogging/TILogging.podspec
#	TIMapUtils/TIMapUtils.podspec
#	TIMoyaNetworking/TIMoyaNetworking.podspec
#	TINetworking/TINetworking.podspec
#	TINetworkingCache/TINetworkingCache.podspec
#	TIPagination/TIPagination.podspec
#	TISwiftUICore/TISwiftUICore.podspec
#	TISwiftUtils/TISwiftUtils.podspec
#	TITableKitUtils/TITableKitUtils.podspec
#	TITextProcessing/TITextProcessing.podspec
#	TIUIElements/Sources/Views/Helpers/WrappedViewLayout+Helpers.swift
#	TIUIElements/Sources/Views/Placeholder/Views/BasePlaceholderImageView.swift
#	TIUIElements/Sources/Views/Placeholder/Views/BasePlaceholderView.swift
#	TIUIElements/Sources/Wrappers/Constraints/CenterConstraints.swift
#	TIUIElements/TIUIElements.podspec
#	TIUIKitCore/TIUIKitCore.podspec
#	TIWebView/TIWebView.podspec
#	TIYandexMapUtils/TIYandexMapUtils.podspec
2023-07-03 07:31:44 +03:00
Nikita Semenov 808d40eca5 feat: added bodal wrapper view controller 2023-07-03 01:47:52 +03:00
Nikita Semenov 46ecd6970f fix: migration api refactoring + test coverage 2023-07-02 18:00:38 +03:00
Nikita Semenov 0776c99e38 Merge branch 'master' into feature/migrating_storage
# Conflicts:
#	CHANGELOG.md
#	TIAppleMapUtils/TIAppleMapUtils.podspec
#	TIAuth/TIAuth.podspec
#	TIDeeplink/TIDeeplink.podspec
#	TIDeveloperUtils/TIDeveloperUtils.podspec
#	TIEcommerce/TIEcommerce.podspec
#	TIFoundationUtils/TIFoundationUtils.podspec
#	TIGoogleMapUtils/TIGoogleMapUtils.podspec
#	TIKeychainUtils/TIKeychainUtils.app/Contents/MacOS/TIKeychainUtils.playground/Pages/SingleValueStorage.xcplaygroundpage/Contents.swift
#	TIKeychainUtils/TIKeychainUtils.podspec
#	TILogging/TILogging.podspec
#	TIMapUtils/TIMapUtils.podspec
#	TIMoyaNetworking/TIMoyaNetworking.podspec
#	TINetworking/TINetworking.podspec
#	TINetworkingCache/TINetworkingCache.podspec
#	TIPagination/TIPagination.podspec
#	TISwiftUICore/TISwiftUICore.podspec
#	TISwiftUtils/TISwiftUtils.podspec
#	TITableKitUtils/TITableKitUtils.podspec
#	TITextProcessing/TITextProcessing.podspec
#	TIUIElements/TIUIElements.podspec
#	TIUIKitCore/TIUIKitCore.podspec
#	TIWebView/TIWebView.podspec
#	TIYandexMapUtils/TIYandexMapUtils.podspec
#	docs/tikeychainutils/singlevaluestorage.md
2023-06-30 22:03:35 +03:00
Nikita Semenov a06f4952b9 fix: reimagine migration storage api 2023-06-28 09:26:15 +03:00
Ivan Smolin 77559babdb Merge pull request 'feature/stack_appearance_layout' (#9) from feature/stack_appearance_layout into master
Reviewed-on: #9
2023-06-26 19:51:15 +03:00
Ivan Smolin 86413b3bb4 build: fix code review notes 2023-06-26 14:06:56 +03:00
Nikita Semenov 9056b2fe8c feat: migrating storages 2023-06-25 20:14:06 +03:00
Ivan Smolin 0e45bb462d build: update changelog and up version 2023-06-17 01:56:50 +03:00
Ivan Smolin e8b026302e BaseStackView with configurable items appearance
CollectionTableViewCell self-sizing
ViewAppearance.WrappedViewLayout support for all WrappedViewHolders
ViewCallbacks support for all BaseInitializeableViews
2023-06-17 01:42:14 +03:00
Ivan Smolin 818d4dbe8d Merge pull request 'feature/flat_map_async_operation_result_type_codable_storage' (#8) from feature/flat_map_async_operation_result_type_codable_storage into master
Reviewed-on: #8
2023-06-15 13:30:22 +03:00
Nikita Semenov 86fddafcdf docs: added playground for bottom sheet 2023-06-13 10:33:20 +03:00
Nikita Semenov 919423ecda feat: completed bottom sheet api 2023-06-13 09:29:53 +03:00
Nikita Semenov c06bb56964 fix: remove unused file 2023-06-13 05:59:22 +03:00
Nikita Semenov b141dc5a45 feat: pan modal changes 2023-06-12 22:05:03 +03:00
Ivan Smolin 1e3b986c83 fix: iOS 12 crash - failed to demangle superclass of UIClosureObserverOperation from mangled name '\M^? \^Hp\M-}\M^?' 2023-06-09 16:09:17 +03:00
Ivan Smolin 2ea88a94aa build: fix excluded files pattern in TIFoundationUtils 2023-06-09 12:42:55 +03:00
Ivan Smolin 1be28959bc docs: update playground pages for AsyncOperation and SingleValueExpirationStorage 2023-06-09 11:45:55 +03:00
Ivan Smolin bf613b99e8 build: update changelog and podspec version, fix playground compile issues 2023-06-09 10:14:07 +03:00
Ivan Smolin 23c17c9d85 feat: Added flatMap operator for AsyncOperation
CodableKeyValueStorage now returns Swift.Result with typed errors.
SingleValueExpirationStorage for time aware entries (expirable api tokens, etc.)
AsyncOperation variants of process methods in NetworkServices.
2023-06-09 10:00:12 +03:00
Ivan Smolin f50bb09ad8 Merge pull request 'feature/async_single_value_storage_map_ui_settings' (#7) from feature/async_single_value_storage_map_ui_settings into master
Reviewed-on: #7
2023-06-07 20:00:41 +03:00
Ivan Smolin 005d80c531 feat: Added UserLocationFetcher helper that requests authorization and subscribes to user location updates 2023-06-05 14:36:45 +03:00
Ivan Smolin 33cc31b957 docs: update podspecs and changelog 2023-05-31 18:19:43 +03:00
Ivan Smolin 19a319f03c build: fix playground and podspec issues 2023-05-31 17:33:22 +03:00
Ivan Smolin 193a060cff feat: add AsyncSingleValueStorage for TINetworkingCache 2023-05-31 17:33:22 +03:00
Ivan Smolin a5bc2dc8f0 feat: current location marker and other ui settings to supported maps 2023-05-31 17:33:22 +03:00
Ivan Smolin 5a74c342d9 Merge pull request 'feature/single_value_storages' (#6) from feature/single_value_storages into master
Reviewed-on: #6
2023-05-31 17:18:13 +03:00
Ivan Smolin 5bb3092726 build: podspec and misc fixes 2023-05-29 12:27:59 +03:00
Ivan Smolin 83a3e5b491 build: fix swiftlint issues 2023-05-26 16:07:40 +03:00
Ivan Smolin 7b9e8b0885 feat: add RecoverableErrorType typealias to DefaultRecoverableNetworkService 2023-05-26 10:49:17 +03:00
Ivan Smolin 529277d098 feat: use DecodingError instead of untyped error in TINetworking decoding 2023-05-25 18:17:49 +03:00
Ivan Smolin ecfb83bafa feat: add TILogging module and TINetworking error logging 2023-05-25 11:42:56 +03:00
Ivan Smolin c0189dc7ae fix: fingerprints update in DefaultFingerprintsProvider 2023-05-24 16:14:39 +03:00
Ivan Smolin a0401bc9fa build: bump podspec versions 2023-05-24 15:51:28 +03:00
Ivan Smolin 43a12e322f feat: add TIKeychainUtils playground with SingleValueStorage examples 2023-05-24 15:50:59 +03:00
Ivan Smolin 5ca564476a feat: `SingleValueStorage` implementations + `AppInstallLifetimeSingleValueStorage` for automatically removing keychain items on app reinstall.
`DefaultRecoverableJsonNetworkService` supports iOS 12.
2023-05-24 10:57:17 +03:00
Ivan Smolin 0e0a8d733e Merge pull request 'feature/http_status_codes_for_error_responses' (#5) from feature/http_status_codes_for_error_responses into master
Reviewed-on: #5
2023-05-24 10:04:07 +03:00
Ivan Smolin 7fd33b6157 build: update build scripts, disable autocorrection dy default 2023-05-24 09:28:20 +03:00
Ivan Smolin 4f0c9a8ed1 build: update min deployment target for Xcode 14 2023-05-22 13:35:04 +03:00
Ivan Smolin e7517c23f8 build: update podspec version 2023-05-22 11:57:27 +03:00
Ivan Smolin 975435bb90 build: update podspecs 2023-05-19 18:30:53 +03:00
Ivan Smolin fd0365a370 fix: code lint issues in TINetworking 2023-05-19 18:23:19 +03:00
Ivan Smolin 4ea76a8499 feat: add SwiftLint 2023-05-19 17:48:08 +03:00
Ivan Smolin 6358386303 feat: added HTTP status codes to `EndpointErrorResult.apiError` responses 2023-05-19 16:30:37 +03:00
Nikita Semenov dd4c9072a9 Merge pull request 'feat: updated gitmodules urls' (#4) from fix/git_modules into master
Reviewed-on: #4
2023-04-27 13:59:21 +03:00
Nikita Semenov 5aff5f99bb docs: bumbed version + changelog update 2023-04-27 13:50:52 +03:00
Nikita Semenov 4fe395d295 feat: updated gitmodules urls 2023-04-27 13:47:58 +03:00
Vladimir Makarov a925f70c04 Merge pull request 'fix: `Antlr4` dependency added to podspec' (#3) from fix/Antlr4_dependency into master
Reviewed-on: #3
2023-04-21 12:17:46 +03:00
Vladimir Makarov 41d18bf3a6 fix: `Antlr4` dependency added to podspec 2023-04-21 11:57:07 +03:00
Vladimir Makarov fc6a735d94 Merge pull request 'TITextProcessing' (#1) from feature/TITextProcessing into master
Reviewed-on: #1
2023-04-21 11:27:15 +03:00
Vladimir Makarov 77ce6a1c95 feat: `Private methods` MARK changed to `Public methods` 2023-04-21 11:23:15 +03:00
Vladimir Makarov cf54d8c798 feat: Protocols, default implementations, playground and markdown added 2023-04-20 12:31:09 +03:00
Vladimir Makarov 93a8ee68f3 `TITextProcessing` for regex and text formatting added 2023-04-19 14:22:05 +03:00
Vladimir Makarov 5a14c61a9a Merge pull request 'fix: Podspecs' source and homepage urls' (#2) from fix/pods_source_url into master
Reviewed-on: #2
2023-04-19 14:00:21 +03:00
Vladimir Makarov 4a9355fd80 fix: Podspecs' source and homepage urls 2023-04-19 13:20:18 +03:00
Nikita Semenov 45e2b9ff19 Merge branch 'feature/deeplink_api' into 'master'
Feature/deeplink api

See merge request touchinstinct/LeadKit!13
2023-04-14 09:56:53 +00:00
Nikita Semenov 26866427a9 fix: source path to TIDeeplink library 2023-04-14 12:55:37 +03:00
Nikita Semenov 26a7578dc8 refactor: minor code style refactoring 2023-04-14 12:09:12 +03:00
Nikita Semenov 0612370587 docs: docs refactoring + extensions reorganization for handler and mapper 2023-04-13 14:53:57 +03:00
Nikita Semenov fe80863656 fix: remove meta doc file 2023-04-12 13:46:35 +03:00
Nikita Semenov 3dd0c34d27 fix: code review notes 2023-04-12 13:35:04 +03:00
Nikita Semenov 56527b6dba fix: code review notes 2023-04-12 13:02:20 +03:00
Nikita Semenov af044aa591 feat: integrate new base navigation deeplink handler 2023-04-04 13:21:50 +03:00
Nikita Semenov c442ee2623 Merge branch 'deeplink_generics_experimential' into feature/deeplink_api
# Conflicts:
#	TIDeepLink/Sources/DeeplinkHandler/BaseNavigationStackDeeplinkHandler.swift
#	TIDeepLink/Sources/DeeplinkHandler/Helpers/UIViewController+DeeplinkHandler.swift
2023-04-04 12:10:21 +03:00
Nikita Semenov 3ccadd07b4 fix: remove tiuielements updates 2023-04-04 12:08:39 +03:00
Nikita Semenov 9a9b57df4b refactor: code refactoring 2023-04-04 12:04:45 +03:00
Ivan Smolin 06b687c47e feat: experiments with deeplink generics 2023-04-03 14:01:12 +03:00
Nikita Semenov a99c29ea73 feat: update findHandler method to findAction 2023-04-01 17:46:13 +03:00
Nikita Semenov 270ac1a4d5 fix: code review notes 2023-03-31 10:19:45 +03:00
Nikita Semenov 22b133648b feat: bumped podspecs versions 2023-03-30 15:19:57 +03:00
Nikita Semenov 2245765b27 Merge branch 'master' into feature/deeplink_api
# Conflicts:
#	CHANGELOG.md
2023-03-30 15:19:27 +03:00
Nikita Semenov 30479ae8b8 Merge branch 'feature/skeletons_status' into 'master'
feat: added callbacks for views when skeletons status changed

See merge request touchinstinct/LeadKit!14
2023-03-30 12:10:12 +00:00
Nikita Semenov 8d253d1458 docs: added documentation for new Skeletonable callbacks API 2023-03-30 15:07:43 +03:00
Nikita Semenov dcc9d23676 docs: small refactoring of documentation 2023-03-30 13:44:30 +03:00
Nikita Semenov d9e4ea5ae8 feat: updated deeplink model + documentation for deeplinks api added 2023-03-30 13:41:06 +03:00
Nikita Semenov 775f95a931 fix: podspecs file for TIUIElements 2023-03-29 15:28:38 +03:00
Nikita Semenov 39bad32c49 fix: changed names of views properties in SkeletonLayer 2023-03-29 11:50:48 +03:00
Nikita Semenov 05a6236425 fix: podfile for TIUIElements 2023-03-29 10:00:22 +03:00
Nikita Semenov 7f45ce0594 Merge branch 'master' into feature/skeletons_status
# Conflicts:
#	CHANGELOG.md
2023-03-29 09:58:28 +03:00
Nikita Semenov c407dabdf5 Merge branch 'master' into feature/deeplink_api
# Conflicts:
#	CHANGELOG.md
2023-03-28 17:42:10 +03:00
Nikita Semenov 29d7a6ca65 Merge branch 'feature/placeholder_api' into 'master'
feat: placeholder api

See merge request touchinstinct/LeadKit!11
2023-03-28 12:22:55 +00:00
Nikita Semenov 2d0819064a Merge branch 'feature/image_placeholder_api' into 'feature/placeholder_api'
feat: placeholder image view

See merge request touchinstinct/LeadKit!12
2023-03-28 12:06:50 +00:00
Nikita Semenov 76da4ab223 feat: added callbacks for views when skeletons status changed 2023-03-28 13:15:07 +03:00
Nikita Semenov 66508d505d feat: bump pods version + changelog updates 2023-03-27 10:36:09 +03:00
Nikita Semenov c8985cde1e Merge branch 'master' into feature/deeplink_api
# Conflicts:
#	LeadKit.podspec
#	Package.swift
#	TIAppleMapUtils/TIAppleMapUtils.podspec
#	TIAuth/TIAuth.podspec
#	TIDeveloperUtils/TIDeveloperUtils.podspec
#	TIEcommerce/TIEcommerce.podspec
#	TIFoundationUtils/TIFoundationUtils.podspec
#	TIGoogleMapUtils/TIGoogleMapUtils.podspec
#	TIKeychainUtils/TIKeychainUtils.podspec
#	TIMapUtils/TIMapUtils.podspec
#	TIMoyaNetworking/TIMoyaNetworking.podspec
#	TINetworking/TINetworking.podspec
#	TINetworkingCache/TINetworkingCache.podspec
#	TIPagination/TIPagination.podspec
#	TISwiftUICore/TISwiftUICore.podspec
#	TISwiftUtils/TISwiftUtils.podspec
#	TITableKitUtils/TITableKitUtils.podspec
#	TITransitions/TITransitions.podspec
#	TIUIElements/TIUIElements.podspec
#	TIUIKitCore/TIUIKitCore.podspec
#	TIYandexMapUtils/TIYandexMapUtils.podspec
#	project-scripts/push_to_podspecs.sh
2023-03-27 10:34:04 +03:00
Nikita Semenov 1bc200034c fix: typos 2023-03-20 13:47:55 +03:00
Nikita Semenov cde2420f7d fix: code review notes 2023-03-18 12:51:58 +03:00
Nikita Semenov 026700b4c7 feat: placeholder image view 2023-03-17 16:39:35 +03:00
Nikita Semenov 4ccebe8e8b fix: code review notes 2023-03-17 11:46:44 +03:00
Nikita Semenov f3ed27e83f fix: typo 2023-03-17 11:38:58 +03:00
Nikita Semenov a234943394 fix: code review notes 2023-03-17 11:34:21 +03:00
Nikita Semenov 1374c4df1f feat: update placeholders interactions with opend keyboard 2023-03-17 11:10:07 +03:00
Nikita Semenov 318fd40f0b docs: updated first example of usage PlaceholderFactory 2023-03-16 19:12:46 +03:00
Nikita Semenov 5ebb97de4c fix: applyBaseStyle method signature 2023-03-16 18:09:29 +03:00
Nikita Semenov 507fc8fa05 fix: defaults string names changed by code style 2023-03-16 15:49:55 +03:00
Nikita Semenov 1932262ad5 fix: code review notes 2023-03-16 14:25:42 +03:00
Nikita Semenov 2c23e86852 fix: Constaints usage 2023-03-15 17:24:20 +03:00
Nikita Semenov 164edf9a5d feat: placeholder api 2023-03-15 17:10:10 +03:00
Nikita Semenov 2f71b10dc0 Merge branch 'feature/new_appearance_configurations' into 'master'
feat: new appearance configurations

See merge request touchinstinct/LeadKit!10
2023-03-15 13:55:42 +00:00
Nikita Semenov 9d99d4e4e3 feat: moved corner configuration to UIViewBorder 2023-03-14 18:27:40 +03:00
Nikita Semenov 9cc412208c docs: updated documentation for skeletons 2023-03-14 16:20:18 +03:00
Nikita Semenov a8fc13ff1e fix: CHANGELOG last version number 2023-03-14 15:44:26 +03:00
Nikita Semenov 22fc660e56 fix: code review notes 2023-03-14 15:43:43 +03:00
Nikita Semenov 5d2bea19fb fix: access control for wrappedViewLayout changed to internal 2023-03-14 14:31:37 +03:00
Nikita Semenov e2c9c6c102 feat: new appearance configurations 2023-03-14 14:29:29 +03:00
Vladimir Makarov 332e895659 Merge branch 'feature/maps_placemark_icon_updating' into 'master'
feat: Placemark appearance updating added

See merge request touchinstinct/LeadKit!3
2023-03-13 09:55:44 +00:00
Vladimir Makarov 9dca21afd9 `BaseItemPlacemarkManager` for single placemark managers added 2023-03-13 10:54:37 +01:00
Vladimir Makarov 511c2b9653 Optional for `placemarkPosition` removed 2023-03-13 10:47:35 +01:00
Vladimir Makarov 2b1511657d `BaseClusterPlacemarkManager` inheritance updated, optional casts removed 2023-03-13 10:47:35 +01:00
Vladimir Makarov f91453a065 Libraries versions updated to 1.38.0, CHANGELOG updated 2023-03-13 10:47:35 +01:00
Vladimir Makarov 23b74ec3d5 `CacheKeyProvider` updated 2023-03-13 10:47:35 +01:00
Vladimir Makarov 4c973b393d `BaseClusterPlacemarkManager` added 2023-03-13 10:47:35 +01:00
Vladimir Makarov 0090c83f87 Libraries versions updated to 1.36.2 2023-03-13 10:47:35 +01:00
Vladimir Makarov 144ea7b703 feat: Placemark appearance updating added 2023-03-13 10:47:35 +01:00
Nikita Semenov 278e175f3a Merge branch 'feature/update_TIDeveloperUtils_dependencies' into 'master'
fix: dependencies

See merge request touchinstinct/LeadKit!9
2023-03-13 08:33:52 +00:00
Nikita Semenov 6af9a64135 fix: dependencies 2023-03-13 11:24:12 +03:00
Nikita Semenov efde6153a8 Merge branch 'feature/skeletons_api' into 'master'
Feature/skeletons api

See merge request touchinstinct/LeadKit!1
2023-03-13 07:46:08 +00:00
Nikita Semenov e3ae781f1d fix: typo + small refactoring 2023-03-13 10:42:17 +03:00
Nikita Semenov 23c2cbacea fix: code review notes 2023-03-11 22:07:06 +03:00
Nikita Semenov 40aa2876d1 fix: code review notes 2023-03-09 22:01:45 +03:00
Nikita Semenov 2250b1b4d9 fix: code review notes 2023-03-09 20:51:25 +03:00
Nikita Semenov 19bb08aa66 feat: added new sys of hidding views below the skeletons 2023-03-09 17:49:37 +03:00
Nikita Semenov 597755474c fix: url to source in podspecs 2023-03-09 12:49:56 +03:00
Nikita Semenov cb29a3e9ca fix: code review notes 2023-03-09 12:48:24 +03:00
Nikita Semenov eafb434c88 Merge branch 'feature/skeletons_docs' into 'feature/skeletons_api'
Feature/skeletons docs

See merge request touchinstinct/LeadKit!5
2023-03-07 17:51:06 +00:00
Nikita Semenov cfd5d5f2f8 fix: code review notes 2023-03-07 20:23:58 +03:00
Nikita Semenov 9c8510af14 feat: updated skeletons documentation for new api and code review comment 2023-03-07 18:42:03 +03:00
Nikita Semenov e942d08503 Merge branch 'feature/skeletons_api' into feature/skeletons_docs 2023-03-07 14:42:07 +03:00
Nikita Semenov 2c081d508f Merge branch 'master' into feature/skeletons_api 2023-03-07 14:39:22 +03:00
Nikita Semenov f01644b408 Merge branch 'feature/changed_skeletons_presenting_system' into 'feature/skeletons_api'
feat: removed SkeletonsPresenter and move all logic to extensions of UIView and UIViewController

See merge request touchinstinct/LeadKit!6
2023-03-07 10:08:20 +00:00
Nikita Semenov b533eaaae6 fix: remove useless baseView 2023-03-07 13:00:34 +03:00
Vladimir Makarov 9db353b360 Merge branch 'feature/yandex_min_deployment_target' into 'master'
TIYandexMapUtils min deployment target updated

See merge request touchinstinct/LeadKit!8
2023-03-07 09:55:09 +00:00
Vladimir Makarov e4c84ca511 `TIYandexMapUtils` min deployment target updated 2023-03-07 10:32:35 +01:00
Vladimir Makarov ce2f3ca064 Merge branch 'feature/yandex_maps' into 'master'
YandexMapsMobile version updated, map manager memory leak removed

See merge request touchinstinct/LeadKit!7
2023-03-07 09:13:08 +00:00
Vladimir Makarov cbd38b84e2 Podspec versions updated 2023-03-07 09:44:26 +01:00
Vladimir Makarov c8a4b0bd51 `YandexMapsMobile` version updated, map manager memory leak removed 2023-03-07 09:41:18 +01:00
Nikita Semenov 7a0747843a feat: removed computed @objc properties 2023-03-07 11:38:09 +03:00
Nikita Semenov 343d36cb85 feat: removed SkeletonsPresenter and move all logic to extensions of UIView and UIViewController 2023-03-07 10:11:56 +03:00
Nikita Semenov 29347d77e1 fix: code review notes 2023-03-06 19:27:56 +03:00
Nikita Semenov 64604bdce0 Merge branch 'master' into feature/skeletons_api
# Conflicts:
#	CHANGELOG.md
#	TIAppleMapUtils/TIAppleMapUtils.podspec
#	TIAuth/TIAuth.podspec
#	TIDeveloperUtils/TIDeveloperUtils.podspec
#	TIEcommerce/TIEcommerce.podspec
#	TIFoundationUtils/TIFoundationUtils.podspec
#	TIGoogleMapUtils/TIGoogleMapUtils.podspec
#	TIKeychainUtils/TIKeychainUtils.podspec
#	TILogging/TILogging.podspec
#	TIMapUtils/TIMapUtils.podspec
#	TIMoyaNetworking/TIMoyaNetworking.podspec
#	TINetworking/TINetworking.podspec
#	TINetworkingCache/TINetworkingCache.podspec
#	TIPagination/TIPagination.podspec
#	TISwiftUICore/TISwiftUICore.podspec
#	TISwiftUtils/TISwiftUtils.podspec
#	TITableKitUtils/TITableKitUtils.podspec
#	TIUIElements/TIUIElements.podspec
#	TIUIKitCore/TIUIKitCore.podspec
#	TIWebView/TIWebView.podspec
#	TIYandexMapUtils/TIYandexMapUtils.podspec
2023-03-06 19:27:47 +03:00
Nikita Semenov e27c844f92 Merge branch 'fix/remove_logger_api' into 'master'
fix: removed custom logger wrapper

See merge request touchinstinct/LeadKit!4
2023-03-06 11:58:52 +00:00
Nikita Semenov 01d99cb246 docs: change release version 2023-03-06 14:57:52 +03:00
Nikita Semenov 48f6655efc fix: logic of font size determination 2023-03-06 14:55:36 +03:00
Nikita Semenov bc9ac01463 fix: compilation of the projects 2023-03-06 13:40:12 +03:00
Nikita Semenov dda06ece3c fix: dependencies of TIDeveloperUtils module 2023-03-06 10:59:55 +03:00
Nikita Semenov 5ea58f3746 feat: update TIDeveloperUtils module, removed TILogger module 2023-03-06 10:47:09 +03:00
Nikita Semenov 2061050c78 fix: removed custom logger wrapper 2023-03-05 17:52:00 +03:00
Nikita Semenov e199cd4220 docs: skeletons playground page 2023-03-05 17:42:45 +03:00
Nikita Semenov 6e30957fe5 docs: skeletons api playground page 2023-03-05 17:41:11 +03:00
Nikita Semenov 84e7093903 Merge branch 'fix/repo_urls' into 'master'
Fix/repo urls

See merge request touchinstinct/LeadKit!2
2023-03-03 16:30:51 +00:00
Nikita Semenov 1da2d4d501 fix: bump version back + update push to podspec script 2023-03-03 17:47:25 +03:00
Nikita Semenov 118bca1c9d feat: added default implementation of to protocol 2023-03-03 14:39:32 +03:00
Nikita Semenov fbab4a491b fix: code review notes 2023-03-03 14:35:46 +03:00
Nikita Semenov fd2fa45909 feat: padding configuration for skeleton layer 2023-03-03 14:01:48 +03:00
Nikita Semenov e471bae469 docs: bumps podspec version of pods 2023-03-02 16:54:47 +03:00
Nikita Semenov 698243ee39 fix: updated url to ti repositories 2023-03-02 16:48:17 +03:00
Nikita Semenov 59ef1093c7 fix: change default shape of UIImageViews 2023-03-01 20:40:33 +03:00
Nikita Semenov 7442884856 fix: minor changes 2023-03-01 20:39:04 +03:00
Nikita Semenov 6e506aa385 feat: updated exporting of environment variable 2023-03-01 19:16:33 +03:00
Nikita Semenov 9f5d7387d7 feat: skeletons api 2023-03-01 19:05:52 +03:00
Ivan Smolin e9b32ce326
Merge pull request #345 from TouchInstinct/fix/push_podspecs_fixups
build: push podspecs fixups
2023-03-01 09:54:44 +03:00
Ivan Smolin a9a8ddde9e build: push podspecs fixups 2023-02-28 16:59:57 +03:00
Ivan Smolin 893f6f191d
Merge pull request #344 from TouchInstinct/feature/documentation_generation
feat: Auto documentation generation
2023-02-28 15:04:08 +03:00
Ivan Smolin 56d1ee998d build: remove --use-cache flag due build failure 2023-02-28 14:56:36 +03:00
Ivan Smolin 55fe6b7126 docs: fix review notes 2023-02-28 14:56:36 +03:00
Ivan Smolin 5f7e0bf273 feat: Auto documentation generation for `TIFoundationUtils` playground and compile checks for playground before release
`AsyncOperation` fixed ordering of chain operations execution
2023-02-28 14:56:36 +03:00
Nikita Semenov 3a321a7fbf
Merge pull request #343 from TouchInstinct/feature/swiftui_previews
feat: extensions for SwiftUI previews
2023-02-21 09:04:31 +03:00
Nikita Semenov 275afb655f fix: push to podspec update 2023-02-15 12:46:29 +03:00
Nikita Semenov f3c5002f4e feat: added dashed layer support for UIViewController 2023-02-14 20:12:33 +03:00
Nikita Semenov 3406962d21 docs: updated release version in changelog 2023-02-14 19:54:14 +03:00
Nikita Semenov f1d5b27f3d feat: DashedBoundsLayer for debugging frames of the views visually 2023-02-14 19:53:14 +03:00
Nikita Semenov f4a516bf86 feat: rebase preview extensions to new framework TIDeveloperUtils 2023-02-14 17:52:20 +03:00
Nikita Semenov 46be3ce9de feat: extensions for SwiftUI previews 2023-02-14 16:34:46 +03:00
Nikita Semenov 30c5b72b26
Merge pull request #342 from TouchInstinct/feature/base_views
Feature/base views
2023-02-14 14:34:29 +03:00
Nikita Semenov f67005df71
Merge pull request #339 from TouchInstinct/feature/appearance_customization_model
feat: api for configuration Views' appearance and layout
2023-02-14 11:51:55 +03:00
Nikita Semenov 05fa3dad31
Merge pull request #340 from TouchInstinct/feature/view_containers
feat: container views
2023-02-14 11:39:28 +03:00
Nikita Semenov 0c3b987370 fix: code review notes 2023-02-13 21:19:35 +03:00
Nikita Semenov 7765c01074 fix: code review notes 2023-02-12 18:35:28 +03:00
Nikita Semenov f2c390f71a feat: updated method to hide and show subtitle of DefaultTitleSubtitleView 2023-02-12 18:15:31 +03:00
Nikita Semenov 7e41552521 feat: DefaultTitleSubtileView, BaseListItemView, StatefulButton appearance configuration update 2023-02-11 21:22:03 +03:00
Nikita Semenov bd7d31cf67 fix: code review notes 2023-02-10 17:53:21 +03:00
Nikita Semenov 4e1270205e docs: added change log information 2023-02-10 16:28:53 +03:00
Nikita Semenov c5209dc9f6 feat: container views 2023-02-10 15:27:35 +03:00
Nikita Semenov 3ef71a6892 fix: updated 1.33.0 version in changelog 2023-02-09 23:18:11 +03:00
Nikita Semenov 04ee83b8df fix: code review notes 2023-02-09 21:41:52 +03:00
Nikita Semenov 6ff2c8bf37 fix: access to with(appearance:) method 2023-02-09 17:48:14 +03:00
Nikita Semenov 2d3e12164d feat: api for configuration Views' appearance and layout 2023-02-09 15:17:02 +03:00
Nikita Semenov fffe5bd8d4
Merge pull request #336 from TouchInstinct/feature/web_view
Feature/web view
2023-01-30 13:22:26 +03:00
Nikita Semenov f6e00bb53a fix: code review notes 2023-01-30 11:42:06 +03:00
Nikita Semenov a67c42886d Merge branch 'master' into feature/web_view
# Conflicts:
#	CHANGELOG.md
#	LeadKit.podspec
#	TIAppleMapUtils/TIAppleMapUtils.podspec
#	TIAuth/TIAuth.podspec
#	TIEcommerce/TIEcommerce.podspec
#	TIFoundationUtils/TIFoundationUtils.podspec
#	TIGoogleMapUtils/TIGoogleMapUtils.podspec
#	TIKeychainUtils/TIKeychainUtils.podspec
#	TILogging/TILogging.podspec
#	TIMapUtils/TIMapUtils.podspec
#	TIMoyaNetworking/TIMoyaNetworking.podspec
#	TINetworking/TINetworking.podspec
#	TINetworkingCache/TINetworkingCache.podspec
#	TIPagination/TIPagination.podspec
#	TISwiftUICore/TISwiftUICore.podspec
#	TISwiftUtils/TISwiftUtils.podspec
#	TITableKitUtils/TITableKitUtils.podspec
#	TITransitions/TITransitions.podspec
#	TIUIElements/TIUIElements.podspec
#	TIUIKitCore/TIUIKitCore.podspec
#	TIYandexMapUtils/TIYandexMapUtils.podspec
2023-01-30 11:37:24 +03:00
Nikita Semenov 407995db35 Merge branch 'master' into feature/deeplink_api
# Conflicts:
#	LeadKit.podspec
#	TIAppleMapUtils/TIAppleMapUtils.podspec
#	TIAuth/TIAuth.podspec
#	TIEcommerce/TIEcommerce.podspec
#	TIFoundationUtils/TIFoundationUtils.podspec
#	TIGoogleMapUtils/TIGoogleMapUtils.podspec
#	TIKeychainUtils/TIKeychainUtils.podspec
#	TILogging/TILogging.podspec
#	TIMapUtils/TIMapUtils.podspec
#	TIMoyaNetworking/TIMoyaNetworking.podspec
#	TINetworking/TINetworking.podspec
#	TINetworkingCache/TINetworkingCache.podspec
#	TIPagination/TIPagination.podspec
#	TISwiftUICore/TISwiftUICore.podspec
#	TISwiftUtils/TISwiftUtils.podspec
#	TITableKitUtils/TITableKitUtils.podspec
#	TITransitions/TITransitions.podspec
#	TIUIElements/TIUIElements.podspec
#	TIUIKitCore/TIUIKitCore.podspec
#	TIYandexMapUtils/TIYandexMapUtils.podspec
2023-01-22 20:11:32 +03:00
Nikita Semenov 63777fef99 fix: update an approach to handling operation in TIDeeplinkService 2023-01-22 20:09:24 +03:00
Ivan Smolin 79a5cc3665
Merge pull request #335 from TouchInstinct/feature/uitextview_url_interactive
feat: URLInteractiveTextView for terms and conditions hints in login flow
2023-01-11 18:28:01 +03:00
Nikita Semenov 0204aa9b10 feat: added json decoder parameter for js error model init 2023-01-11 14:46:37 +03:00
Nikita Semenov 79a5ed4149 fix: remove redundant constants 2023-01-11 14:35:19 +03:00
Nikita Semenov 3bab367ce2 fix: code review notes 2023-01-11 14:19:21 +03:00
Nikita Semenov caeded9561 fix: searching deeplink handler in navigation stack 2023-01-11 13:25:20 +03:00
Nikita Semenov 3d5aa7a41d fix: remove default implementation of deeplink handler in service object 2023-01-11 12:02:07 +03:00
Nikita Semenov 47217f7a59 fix: paramenters for js error model to correspond to js exception models 2023-01-10 20:00:03 +03:00
Nikita Semenov e4c8118b6b fix: code review notes 2023-01-10 19:53:47 +03:00
Nikita Semenov f885183499 fix: updated push to podspecs script 2023-01-10 19:27:53 +03:00
Nikita Semenov aff54859eb feat: complete deeplink api 2023-01-10 19:26:46 +03:00
Nikita Semenov 3e7307424a fix: change types of parameters for js errors 2023-01-09 15:29:41 +03:00
Nikita Semenov a7e44a3d9a feat: initial deep link settings 2023-01-06 07:20:10 +07:00
Nikita Semenov c75ff4c1d0 fix: code review notes 2022-12-30 17:15:46 +07:00
Nikita Semenov b98678b235 fix: code review notes 2022-12-30 02:24:19 +03:00
Ivan Smolin c7ba0d1f30 fix: add link to each part of attributed text 2022-12-27 14:03:08 +03:00
Nikita Semenov 9d3bbc9c71 fix: code review notes 2022-12-27 00:36:31 +03:00
Nikita Semenov 7add7c46ab fix: bump podspec version 2022-12-26 11:19:47 +03:00
Ivan Smolin 724ed400c4 style: review notes 2022-12-26 10:50:29 +03:00
Ivan Smolin ad5fbc96fb fix: initializEable -> initializAble 2022-12-26 10:50:13 +03:00
Nikita Semenov d12e07484d feat: custom webview api 2022-12-26 10:36:58 +03:00
Ivan Smolin 5017e7e7b7 feat: URLInteractiveTextView for terms and conditions hints in login flow 2022-12-23 11:09:55 +03:00
Ivan Smolin 6e442ce37f
Merge pull request #334 from TouchInstinct/feature/pin_code_token_storage
feat: Base classes for encryption and decryption user token with pin code or biometry + Pin code validators
2022-12-21 15:29:11 +03:00
Ivan Smolin e6864f3911 build: move TIFoundationUitls/DataStorage/* to TIFoundationUitls/DataStorage/Sources/ 2022-12-21 15:24:48 +03:00
Ivan Smolin 18cd001ab9 feat: Base classes for encryption and decryption user token with pin code or biometry
Pin code validators
2022-12-19 16:32:44 +03:00
Ivan Smolin 8c696af6d9
Merge pull request #333 from TouchInstinct/feature/base_text_attributes_fixes
fix: correct detection of the necessity of using attributed string
2022-12-15 19:46:22 +05:00
Ivan Smolin 1fb3ca883b
fix typo 2022-12-15 15:50:12 +05:00
Ivan Smolin 3730736319 fix: correct detection of the necessity of using attributed string 2022-12-15 14:03:08 +05:00
Ivan Smolin 9dcdd1c63c
Merge pull request #331 from TouchInstinct/feature/1.29.0_features
BaseTextAttributes, Operation and other
2022-12-09 13:38:54 +03:00
Ivan Smolin ba929fd344 fix: code review notes 2022-12-07 11:05:16 +03:00
Ivan Smolin 2a89de15e3 feat: - Added: BaseTextAttributes can now measure text size and provides paragraph style configuration API.
- Removed: ViewText. Was fully replaced with BaseTextAttributes
- Fixed: Operation.flattenDependencies used in Operation.add(to:waitUntilFinished:) now works correctly.
- Added: Now it's possible to add dependent operation to start of the queue.
2022-12-03 22:55:08 +03:00
Nikita Semenov f7596a73d8
Merge pull request #330 from TouchInstinct/fix/push_to_podspecs
feat: added new pod to the script
2022-11-18 19:25:51 +03:00
Nikita Semenov 39ddcf498f feat: added new pod to the script 2022-11-18 19:23:54 +03:00
Nikita Semenov 98ee540aac
Merge pull request #327 from TouchInstinct/feature/logging_api
Логирование
2022-11-18 19:04:22 +03:00
Nikita Semenov 4778f2e70d feat: code review notes 2022-11-18 18:53:28 +03:00
Nikita Semenov 1c1fa1290b feat: added new system of registering for shacking motion event 2022-11-18 17:13:22 +03:00
Nikita Semenov d2ed1e837a fix: ambiguous usage of view output protocol 2022-11-17 10:32:04 +03:00
Nikita Semenov 401d9365d0 fix: code review notes 2022-11-17 10:30:11 +03:00
Nikita Semenov 5159ee5a4d fix: code review notes 2022-11-11 09:07:25 +03:00
Nikita Semenov dffb4c6015 fix: code review notes 2022-11-10 17:46:25 +03:00
Nikita Semenov f8b7934204 fix: code review notes + change gcd on async/await 2022-11-09 21:14:58 +03:00
Nikita Semenov 9fa4b7c058
Merge branch 'master' into feature/logging_api 2022-11-08 18:15:19 +03:00
Nikita Semenov e1c9596010 fix: default value for presenting method 2022-11-08 18:11:39 +03:00
Nikita Semenov d0576acd95 fix: chacking for opend logging list view controller 2022-11-08 18:06:32 +03:00
Nikita Semenov 13cf92c9c1 refactor: change podspec version + changelog updated 2022-11-08 17:47:01 +03:00
Nikita Semenov d6069db9df Merge branch 'filters_api' into feature/logging_api 2022-11-08 17:36:31 +03:00
Nikita Semenov 69c2a85718 feat: change logic of registration on shaking motion 2022-11-08 17:34:55 +03:00
Nikita Semenov 4ac0eace66 fix: os log store scope 2022-11-08 15:15:48 +03:00
Nikita Semenov 77abc2c5a5 fix: typo 2022-11-08 15:13:01 +03:00
Nikita Semenov 8ffd2b589b fix: check on shacking motion in toggling window 2022-11-08 15:08:29 +03:00
Vladimir Makarov 6ccb8fcdc3
Merge pull request #329 from TouchInstinct/fix/weak_target_reference
Weak target reference capturing in `RefreshControl` fixed
2022-10-18 20:13:42 +05:00
Vladimir Makarov 8e0043cd48 fix: weak target reference in `RefreshControl` fixed 2022-10-18 16:21:38 +05:00
Nikita Semenov 31ddf69dc0
Merge pull request #328 from TouchInstinct/filters_api
fix: podspec configuration
2022-10-11 10:47:36 +03:00
Nikita Semenov 592036951a fix: update min version 2022-10-11 10:47:21 +03:00
Nikita Semenov 01931a9e62 fix: podspec configuration 2022-10-11 09:36:35 +03:00
Nikita Semenov ea13f317b9
Merge pull request #320 from TouchInstinct/filters_api
Фильтры с тегами
2022-10-11 09:28:50 +03:00
Nikita Semenov 7e62f9b571 Merge branch 'master' into filters_api
# Conflicts:
#	CHANGELOG.md
#	LeadKit.podspec
#	TIAppleMapUtils/TIAppleMapUtils.podspec
#	TIAuth/TIAuth.podspec
#	TIEcommerce/TIEcommerce.podspec
#	TIFoundationUtils/TIFoundationUtils.podspec
#	TIGoogleMapUtils/TIGoogleMapUtils.podspec
#	TIKeychainUtils/TIKeychainUtils.podspec
#	TIMapUtils/TIMapUtils.podspec
#	TIMoyaNetworking/TIMoyaNetworking.podspec
#	TINetworking/TINetworking.podspec
#	TINetworkingCache/TINetworkingCache.podspec
#	TIPagination/TIPagination.podspec
#	TISwiftUICore/TISwiftUICore.podspec
#	TISwiftUtils/TISwiftUtils.podspec
#	TITableKitUtils/TITableKitUtils.podspec
#	TITransitions/TITransitions.podspec
#	TIUIElements/TIUIElements.podspec
#	TIUIKitCore/TIUIKitCore.podspec
#	TIYandexMapUtils/TIYandexMapUtils.podspec
2022-10-11 08:56:10 +03:00
Grigory Boyko 7cfd6f8424 feat: update version 2022-10-11 08:52:46 +03:00
Grigory Boyko 4f0a652e09 fix: add escaping 2022-10-11 08:52:14 +03:00
Grigory Boyko da98e5ff35 fix: add optional 2022-10-11 08:52:14 +03:00
Grigory Boyko 83e5caa13a feat: add failure completion in RequestExecutor 2022-10-11 08:52:14 +03:00
Ivan Smolin a53c015b79 fix: Use OperationQueue instead of NSLock in `DefaultTokenInterceptor` 2022-10-11 08:51:41 +03:00
Grigory Boyko 873b2ecbcb feat: change push_to_podspecs.sh 2022-10-11 08:50:39 +03:00
Nikita Semenov 3157cac5d5
Merge pull request #324 from TouchInstinct/feature/range_filters
Range filters
2022-10-11 08:29:11 +03:00
Nikita Semenov f60a443eed fix: file creator prefix removed 2022-10-04 15:32:42 +03:00
Nikita Semenov f230add1ed refactor: naming changes 2022-10-04 12:41:32 +03:00
Nikita Semenov 444d3b159d fix: code review notes 2022-10-04 12:35:46 +03:00
Nikita Semenov f4dc72b61f refactor: typos 2022-10-04 12:08:38 +03:00
Nikita Semenov 54a01db216 feat: open logs on shacking motion + code review notes 2022-10-04 11:02:05 +03:00
Nikita Semenov 72aabd4412 fix: code review notes + small fixes 2022-10-03 12:42:26 +03:00
Nikita Semenov 070d7c199a fix: code review notes 2022-10-03 12:01:32 +03:00
Nikita Semenov 2d9bb4a5d5 refactor: added license and replace some helper objects 2022-10-03 08:03:25 +03:00
Nikita Semenov 3af9cc5b35 refactor: remove blank space 2022-10-02 22:28:13 +03:00
Nikita Semenov f6f4d2f214 fix: added more visibility for logging presenter button 2022-10-02 21:38:40 +03:00
Nikita Semenov e9edf3ab21 feat: added logger views 2022-10-02 21:11:52 +03:00
Nikita Semenov ff720fca0d feat: initial list view version 2022-09-29 15:44:27 +03:00
Nikita Semenov 31582b3bc5 fix: errors 2022-09-27 20:12:55 +03:00
Nikita Semenov 3bb9e74461 fix: package file update 2022-09-27 20:05:28 +03:00
Nikita Semenov 37818d3153 feat: basic logger 2022-09-27 20:00:44 +03:00
Grigory Boyko e2f9b481ab
Merge pull request #326 from TouchInstinct/feature/add_escaping
fix: add escaping
2022-09-26 14:37:55 +03:00
Grigory Boyko fffa5aa6eb feat: update version 2022-09-26 14:33:11 +03:00
Grigory Boyko 826c66f8af fix: add escaping 2022-09-26 12:34:53 +03:00
Grigory Boyko 91097e2f65
Merge pull request #325 from TouchInstinct/fix/add_failure_completion
feat: add failure completion in RequestExecutor
2022-09-23 18:44:35 +03:00
Grigory Boyko da4389aa03 fix: add optional 2022-09-23 18:34:37 +03:00
Grigory Boyko 81792aba72 feat: add failure completion in RequestExecutor 2022-09-23 15:03:54 +03:00
Nikita Semenov a8785b35e8 fix: code review notes 2022-09-21 19:58:24 +03:00
Nikita Semenov ca7bf6326d refactor: naming fixes 2022-09-21 18:05:17 +03:00
Nikita Semenov 116d2154f8 feat: range filters view 2022-09-21 17:50:13 +03:00
Nikita Semenov dde0eba7a8
Merge pull request #322 from TouchInstinct/feature/list_filters
Фильтры в виде списка
2022-09-06 18:48:26 +03:00
Nikita Semenov f3081861a0 fix: review notes 2022-09-06 15:42:12 +03:00
Nikita Semenov 698b79d10f refactor: spaces in switch 2022-09-05 17:19:28 +03:00
Nikita Semenov 21a73a8f7c fix: code review notes 2022-09-05 17:13:02 +03:00
Nikita Semenov 3696269635 fix: picker selection 2022-09-02 12:01:51 +03:00
Nikita Semenov 92f06c83a4 fix: code review notes 2022-09-02 11:51:37 +03:00
Nikita Semenov 2eea25b4af docs: changelog update 2022-08-31 19:09:48 +03:00
Nikita Semenov 090b86563d fix: multiselection table setup 2022-08-31 19:01:10 +03:00
Nikita Semenov c25ff8c431 fix: picker system 2022-08-31 18:53:40 +03:00
Nikita Semenov 77f6208ff5 fix: logic of picking cells + refactoring 2022-08-31 17:52:56 +03:00
Nikita Semenov eaa787e00f fix: image view size determination 2022-08-30 22:04:44 +03:00
Nikita Semenov 8cbf5b96e6 fix: container table view cell subviews 2022-08-30 22:01:06 +03:00
Nikita Semenov fa130aecdb fix: style in init of table view 2022-08-30 21:58:24 +03:00
Nikita Semenov 635a9bb9b0 fix: image of selected view 2022-08-30 21:51:16 +03:00
Nikita Semenov d16fc21d7e fix: table view delegate methods 2022-08-30 21:45:36 +03:00
Nikita Semenov 4880dcad27 fix: initialisation of table view logic 2022-08-30 21:42:51 +03:00
Nikita Semenov 0bc8574a32 fix: update table director with diffable data source 2022-08-30 21:34:29 +03:00
Nikita Semenov ec1fe892ad fix: merging filters_api 2022-08-30 14:13:11 +03:00
Nikita Semenov d9cdfdec0f Merge branch 'filters_api' into feature/list_filters
# Conflicts:
#	TIEcommerce/Sources/Filters/FiltersCollectionCell/Models/FilterCellStateAppearance.swift
#	TIEcommerce/Sources/Filters/FiltersCollectionCell/Models/FilterCellViewModelProtocol.swift
#	TIEcommerce/Sources/Filters/FiltersCollectionCell/ViewModels/DefaultFilterCellViewModel.swift
#	TIEcommerce/Sources/Filters/FiltersCollectionCell/Views/DefaultFilterCollectionCell.swift
#	TIEcommerce/Sources/Filters/FiltersCollectionView/Helpers/Array+FilterPropertyValueRepresenter.swift
#	TIEcommerce/Sources/Filters/FiltersCollectionView/Helpers/UICollectionViewLayout+DefaultLayout.swift
#	TIEcommerce/Sources/Filters/FiltersCollectionView/Models/DefaultFilterPropertyValue.swift
#	TIEcommerce/Sources/Filters/FiltersCollectionView/Models/FiltersLayoutConfiguration.swift
#	TIEcommerce/Sources/Filters/FiltersCollectionView/Protocols/FilterPropertyValueRepresenter.swift
#	TIEcommerce/Sources/Filters/FiltersCollectionView/ViewModels/DefaultFilterViewModel.swift
#	TIEcommerce/Sources/Filters/FiltersCollectionView/Views/BaseFiltersCollectionView.swift
#	TIEcommerce/Sources/Filters/Helpers/UICollectionViewLayout+DefaultLayout.swift
#	TIEcommerce/Sources/Filters/Models/BaseFilterCellAppearance.swift
#	TIEcommerce/Sources/Filters/Models/DefaultFilterModel.swift
#	TIEcommerce/Sources/Filters/Models/DefaultFilterPropertyValue.swift
#	TIEcommerce/Sources/Filters/Models/FilterCellViewModelProtocol.swift
#	TIEcommerce/Sources/Filters/Models/FiltersLayoutConfiguration.swift
#	TIEcommerce/Sources/Filters/Protocols/FilterCellAppearanceProtocol.swift
#	TIEcommerce/Sources/Filters/Protocols/FilterPropertyValueRepresenter.swift
#	TIEcommerce/Sources/Filters/Protocols/FilterRepresenter.swift
#	TIEcommerce/Sources/Filters/TagsFilters/Helpers/UICollectionViewLayout+DefaultLayout.swift
#	TIEcommerce/Sources/Filters/TagsFilters/Models/BaseFilterCellAppearance.swift
#	TIEcommerce/Sources/Filters/TagsFilters/Models/DefaultFilterModel.swift
#	TIEcommerce/Sources/Filters/TagsFilters/Models/DefaultFilterPropertyValue.swift
#	TIEcommerce/Sources/Filters/TagsFilters/Models/FiltersLayoutConfiguration.swift
#	TIEcommerce/Sources/Filters/TagsFilters/Protocols/FilterCellAppearanceProtocol.swift
#	TIEcommerce/Sources/Filters/TagsFilters/Protocols/FilterCellViewModelProtocol.swift
#	TIEcommerce/Sources/Filters/TagsFilters/Protocols/FilterPropertyValueRepresenter.swift
#	TIEcommerce/Sources/Filters/TagsFilters/Protocols/FilterRepresenter.swift
#	TIEcommerce/Sources/Filters/TagsFilters/Protocols/FiltersViewModelProtocol.swift
#	TIEcommerce/Sources/Filters/TagsFilters/ViewModels/DefaultFilterCellViewModel.swift
#	TIEcommerce/Sources/Filters/TagsFilters/ViewModels/DefaultFiltersViewModel.swift
#	TIEcommerce/Sources/Filters/TagsFilters/Views/BaseFiltersCollectionView.swift
#	TIEcommerce/Sources/Filters/TagsFilters/Views/DefaultFilterCollectionCell.swift
#	TIEcommerce/Sources/Filters/ViewModels/DefaultFilterCellViewModel.swift
#	TIEcommerce/Sources/Filters/Views/BaseFiltersCollectionView.swift
#	TIEcommerce/Sources/Filters/Views/DefaultFilterCollectionCell.swift
#	TIEcommerce/TIEcommerce.podspec
#	TISwiftUtils/Sources/Extensions/Array/Array+SafeSubscript.swift
2022-08-30 13:59:09 +03:00
Ivan Smolin 6abac15fc7
Merge pull request #323 from TouchInstinct/fix/token_interactor
fix: Use OperationQueue instead of NSLock in `DefaultTokenInterceptor`
2022-08-29 10:40:41 +03:00
Ivan Smolin 0171f9d64f fix: Use OperationQueue instead of NSLock in `DefaultTokenInterceptor` 2022-08-26 22:08:52 +03:00
Nikita Semenov fc6ec80a29 fix: code review notes 2022-08-11 20:01:52 +03:00
Nikita Semenov 9eaf42aa4e fix: code review notes 2022-08-11 14:13:21 +03:00
Nikita Semenov 0abda665bf fix: code review notes 2022-08-11 02:25:58 +03:00
Nikita Semenov 95651b2b58 refactor: remove comments 2022-08-11 00:47:54 +03:00
Nikita Semenov 60d1fd2044 fix: public typealias 2022-08-11 00:45:23 +03:00
Nikita Semenov a253639073 fix: additional appearance configuration 2022-08-11 00:43:15 +03:00
Nikita Semenov 901cdc571f fix: renames + additional configuration 2022-08-11 00:41:18 +03:00
Nikita Semenov 08fdb69d68 fix: code review notes 2022-08-11 00:31:36 +03:00
Nikita Semenov ab9fafeb19 fix: review notes 2022-08-10 16:35:55 +03:00
Nikita Semenov 50d3d5a36b fix: selection and deselection of cells 2022-08-10 15:54:30 +03:00
Nikita Semenov 53a0ced7f6 fix: review notes 2022-08-10 14:26:24 +03:00
Nikita Semenov 3cd6f0a9d0 fix: refactor + applying snapshot 2022-08-09 18:22:38 +03:00
Nikita Semenov 048b5c1f83 fix: applying snapshot 2022-08-09 18:05:51 +03:00
Nikita Semenov 95fc92dfca fix: fix exclusion of cells 2022-08-09 18:02:30 +03:00
Nikita Semenov 73abd949eb fix: remove class property identifier 2022-08-09 17:01:10 +03:00
Nikita Semenov e28d71caf7 fix: cell registration 2022-08-09 16:55:25 +03:00
Nikita Semenov 5eb0183d92 fix: code review notes 2022-08-09 16:41:52 +03:00
Nikita Semenov 373b0db19e fix: cell configuration 2022-08-05 14:50:39 +03:00
Nikita Semenov 95a0045582 fix: review notes 2022-08-05 14:29:18 +03:00
Grigory Boyko 2c8fc0a8a5
Merge pull request #321 from TouchInstinct/feature/ecommerce
feat: change push_to_podspecs.sh
2022-08-05 10:29:06 +07:00
Nikita Semenov 9888bb22d5 fix: base table view constraints 2022-08-04 22:57:55 +03:00
Nikita Semenov 6ef2c83990 fix: access to view model initializer + renames 2022-08-04 22:49:47 +03:00
Nikita Semenov 4c525b8dad feat: list of filters 2022-08-04 22:45:06 +03:00
Nikita Semenov ae52ec03c6 fix: edge insets init + refactoring 2022-08-04 21:34:14 +03:00
Nikita Semenov 7bef631668 fix: usage of generics 2022-08-04 18:49:23 +03:00
Nikita Semenov 2748d5e3b0 fix: type casting 2022-08-04 18:45:38 +03:00
Nikita Semenov 47280c7cd7 fix: review notes 2022-08-04 18:20:08 +03:00
Nikita Semenov c583b8a98a fix: logic of selecting filters 2022-08-04 17:23:58 +03:00
Nikita Semenov 7f6883c7b7 fix: view model configuration 2022-08-04 17:01:19 +03:00
Nikita Semenov ef1eb2d8ac fix: collection view life cycle 2022-08-04 16:53:33 +03:00
Nikita Semenov 0534d41bae fix: update collection view with diffable data source 2022-08-04 16:44:19 +03:00
Nikita Semenov 7c479ff428 fix: default inset of the cells 2022-08-03 21:49:17 +03:00
Nikita Semenov b6321d3b19 fix: collection view life cycle 2022-08-03 21:47:05 +03:00
Nikita Semenov 82d52f4a40 fix: double view model assignment 2022-08-03 21:40:43 +03:00
Nikita Semenov af1c9da523 fix: creating of wrapped view 2022-08-03 21:38:57 +03:00
Nikita Semenov cead71df3d fix: update podscpecs versions 2022-08-03 21:34:07 +03:00
Nikita Semenov 18b48957a4 Merge branch 'master' into filters_api
# Conflicts:
#	CHANGELOG.md
2022-08-03 21:32:23 +03:00
Nikita Semenov edec8bc94f fix: refactoring and review changes 2022-08-03 21:27:30 +03:00
Nikita Semenov 276fbc8c10 fix: excluding selected cells 2022-08-03 20:55:22 +03:00
Nikita Semenov 62aecb0941 fix: layout + collection cell updates 2022-08-03 20:28:15 +03:00
Nikita Semenov c6d17e96ab fix: remove excessive level of an abstraction 2022-08-03 19:57:33 +03:00
Grigory Boyko 8466a4a4db feat: change push_to_podspecs.sh 2022-08-03 23:17:01 +07:00
boykogri 30cf6856b1
Merge pull request #319 from TouchInstinct/feature/ecommerce
Feature/ecommerce
2022-08-03 22:15:22 +07:00
Grigory Boyko b7b95f0ef4 feat: change version 2022-08-03 22:14:30 +07:00
Grigory Boyko 617ebbfde1 fix: Comments from pull request 2022-08-03 16:33:48 +07:00
Grigory Boyko 651892d182 fix: edit changelog 2022-08-02 22:16:37 +07:00
Grigory Boyko 28126dae4b feat: edit changelog and podspec summary 2022-08-02 22:14:38 +07:00
Grigory Boyko b57f205812 feat: add TINetworking dependency 2022-08-02 22:08:44 +07:00
Grigory Boyko 50d59857a7 fix: change podspec to 1.27.0 2022-08-02 21:41:45 +07:00
Grigory Boyko 8cfd3b466c fix: Remove optional for cart 2022-08-02 17:08:03 +07:00
Grigory Boyko 1db3bdb944 feat: Update podspec to 1.27, small models changes 2022-08-02 16:21:00 +07:00
Grigory Boyko d5479f745c feat: Add promocodes and bonuses logic 2022-08-02 12:18:09 +07:00
Grigory Boyko eb66a4e8ca fix: Comments from pull request 2022-08-02 11:38:35 +07:00
Nikita Semenov 76f6635cbc fix: view holder protocol udpate 2022-08-01 19:42:28 +03:00
Nikita Semenov de3aad7147 fix: bug with excluding selected cells 2022-08-01 17:42:56 +03:00
Grigory Boyko 343c40888d fix: add actual changes 2022-08-01 21:11:39 +07:00
Grigory Boyko 179a368fe5 fix: Delete useless protocols, add cartRequestExecutor 2022-08-01 21:09:49 +07:00
Nikita Semenov 50f6670710 fix: default cell corner radius 2022-08-01 16:49:23 +03:00
Nikita Semenov 104116fd36 fix: change default cell appearance 2022-08-01 16:41:45 +03:00
Grigory Boyko 48ac99c7d8 feat: Add receipt, cart service 2022-08-01 19:29:35 +07:00
Nikita Semenov fa29f08d2d fix: bugs with access control 2022-08-01 12:29:42 +03:00
Nikita Semenov 9e96b83c1e fix: refactor conformance to collection holder protocol 2022-08-01 12:25:29 +03:00
Grigory Boyko c92b9bf563 feat: Add CartEditable block 2022-08-01 15:17:21 +07:00
Nikita Semenov c85ab9113b fix: access of filters collection view + change log update 2022-08-01 09:48:57 +03:00
Nikita Semenov 761e4b98bf fix: update podspec version 2022-08-01 09:42:22 +03:00
Grigory Boyko ea1392f279 fix: package.swift file 2022-08-01 08:59:54 +07:00
Nikita Semenov 01c4ef6f44 fix: code refactoring + add additional protocols 2022-07-31 21:01:09 +03:00
Nikita Semenov b52d57a5e7 feat: initial filters api 2022-07-31 13:53:28 +03:00
Grigory Boyko cddae04f2e feat: Add initial files for Cart module 2022-07-29 21:08:11 +07:00
Alexey Gurin 826471c825
Merge pull request #318 from TouchInstinct/feature/pass_url_to_request_error
Pass url to request error
2022-07-28 18:34:54 +04:00
Alexey Gurin 6810fac839 feat: Up dependencies version to 1.25.0 2022-07-28 17:36:07 +04:00
Alexey Gurin a6b63c237b feat: Add changelog for 1.25.0 2022-07-28 17:33:18 +04:00
Nikita Semenov 6eefc607e5
Merge pull request #316 from TouchInstinct/fix/spm_dependencies
fix: dependencies of core libraries
2022-07-28 13:49:42 +03:00
Alexey Gurin db19e24bc4 feat: Update RequestError cases and url passing to them 2022-07-28 14:28:05 +04:00
Alexey Gurin af73b2964f feat: Add url passing to response validation methods 2022-07-28 14:25:32 +04:00
Nikita Semenov b2c6f7b852 fix: dependencies of core libraries 2022-07-28 12:43:54 +03:00
Nikita Semenov 0803060787
Merge pull request #315 from TouchInstinct/feature/alerts_api
alerts api
2022-07-28 11:55:33 +03:00
Nikita Semenov 17a70d613b docs: code review notes 2022-07-27 17:37:34 +03:00
Nikita Semenov a917723dcb docs: code review notes 2022-07-27 16:08:13 +03:00
Nikita Semenov 174d472f1b revert: deleted alert modifier 2022-07-27 14:40:38 +03:00
Nikita Semenov 9a427adab7 fix: code review notes + added custom modifier for alerts 2022-07-27 13:58:44 +03:00
Nikita Semenov cfbf53faf8 fix: code review notes 2022-07-26 15:33:50 +03:00
Nikita Semenov bf46b602a3 fix: code review notes 2022-07-26 15:20:33 +03:00
Nikita Semenov a88a85fe75 fix: move alerts into TIUIKitCore 2022-07-26 15:09:42 +03:00
Nikita Semenov 34c7407ecb docs: SUI alerts 2022-07-26 13:59:25 +03:00
Nikita Semenov ffa66048b0 fix: removed TISwiftUIElements lib and moved components to TISwiftUICore 2022-07-26 13:53:25 +03:00
Nikita Semenov 8138291153 feat: SUI alerts added to different library 2022-07-26 13:40:56 +03:00
Nikita Semenov 7b79d6b250 Merge branch 'master' into feature/alerts_api
# Conflicts:
#	CHANGELOG.md
#	LeadKit.podspec
#	TIAppleMapUtils/TIAppleMapUtils.podspec
#	TIAuth/TIAuth.podspec
#	TIFoundationUtils/TIFoundationUtils.podspec
#	TIGoogleMapUtils/TIGoogleMapUtils.podspec
#	TIKeychainUtils/TIKeychainUtils.podspec
#	TIMapUtils/TIMapUtils.podspec
#	TIMoyaNetworking/TIMoyaNetworking.podspec
#	TINetworking/TINetworking.podspec
#	TINetworkingCache/TINetworkingCache.podspec
#	TIPagination/TIPagination.podspec
#	TISwiftUICore/TISwiftUICore.podspec
#	TISwiftUtils/TISwiftUtils.podspec
#	TITableKitUtils/TITableKitUtils.podspec
#	TITransitions/TITransitions.podspec
#	TIUIElements/TIUIElements.podspec
#	TIUIKitCore/TIUIKitCore.podspec
#	TIYandexMapUtils/TIYandexMapUtils.podspec
2022-07-26 13:02:35 +03:00
Nikita Semenov 693843bb70 fix: code review notes 2022-07-25 19:01:55 +03:00
Nikita Semenov 24d1384e0f
doc: implement documentation for alerts api 2022-07-25 16:36:32 +03:00
Nikita Semenov b96478c248 fix: dialogue type alert actions' styles 2022-07-25 15:53:38 +03:00
Nikita Semenov 37b7224264 feat: added default localization provider for actions + documentation added 2022-07-25 15:34:04 +03:00
Nikita Semenov c223a026f2 fix: custom alerts configuration for sui + version control changes 2022-07-25 14:08:01 +03:00
Ivan Smolin a89c620d91
Merge pull request #314 from TouchInstinct/feature/TIUIKitCore_updates
feat: WrappedViewHolder, ReconfigurableView, UITextView BaseTextAttributes, ReusableUIViewPresenter
2022-07-25 11:48:19 +03:00
Nikita Semenov 000e88f98a fix: small access control fixes 2022-07-24 15:34:09 +03:00
Nikita Semenov 52751dc801 feat: added initial alerts factory implementation 2022-07-24 15:25:28 +03:00
Ivan Smolin 88da2ab508 feat: UITextView now support configuration with BaseTextAttributes
ReconfigurableView & ChangeableViewModel for non-destructing state update
WrappedViewHolder protocol with table/collection view cell implementations
2022-07-18 20:19:02 +03:00
Ivan Smolin 7e319dcb03
Merge pull request #313 from TouchInstinct/fix/DefaultTokenInterceptor_adapt_check
feat: Asynchronous request preprocessing
2022-07-18 13:35:58 +03:00
Ivan Smolin 9828284c20 feat: Asynchronous request preprocessing 2022-06-28 11:13:31 +03:00
Ivan Smolin 5e43ca7fe2
Merge pull request #312 from TouchInstinct/feature/token_interceptor
feat: ApiInteractor, TokenInterceptor, FingerprintsTrustEvaluator and more
2022-06-27 10:58:08 +03:00
Ivan Smolin 8fc1ebab77 feat: ApiInteractor, TokenInterceptor, FingerprintsTrustEvaluator and more 2022-06-17 10:43:35 +03:00
Ivan Smolin e3fbfbd981
Merge pull request #311 from TouchInstinct/feature/request_preprocessor
feat: add request preprocessor for OpenAPI security requirements
2022-06-10 16:09:51 +03:00
Ivan Smolin 784743082d feat: add request preprocessor for OpenAPI security requirements 2022-06-10 14:53:51 +03:00
Ivan Smolin c5db547b82
Merge pull request #310 from TouchInstinct/feature/TIAuth_TISwiftUICore
feat: TIAuth module + SwiftUIPresenter & UIViewControllerPresenter
2022-06-08 17:02:19 +03:00
Ivan Smolin 9230450bb7 fix: code review notes 2022-06-08 13:58:15 +03:00
Ivan Smolin 3d3d94412a feat: Add presenter protocols to `TISwiftUICore` and `TIUIKitCore` modules
Add `CodeConfirmPresenter` protocol and `DefaultCodeConfirmPresenter` implementation in `TIAuth` module
2022-06-02 15:33:29 +03:00
Ivan Smolin 4608de4779
Merge pull request #309 from TouchInstinct/feature/map_managers
Feature/map managers
2022-06-01 14:10:26 +03:00
Ivan Smolin b39b937eaf fix: code review notes 2022-05-26 11:15:55 +03:00
Ivan Smolin c4a4714d37 feat: ability to change markers on map 2022-05-24 13:42:39 +03:00
Ivan Smolin 2050382308 feat: add MapManagers for routine maps configuration 2022-05-24 13:42:38 +03:00
Ivan Smolin ac977d35ed
Merge pull request #307 from TouchInstinct/feature/map_camera_update
feat: add smooth CameraUpdate actions for supported maps
2022-05-24 13:42:13 +03:00
Ivan Smolin 2181f5f0a3 fix: store MarkerManager in userData of YMKMapObject 2022-05-23 18:04:38 +03:00
Ivan Smolin f61bb8ef12 feat: add smooth CameraUpdate actions for supported maps 2022-05-23 17:34:03 +03:00
Timur Kayumov 23b9e8ac7a
Merge pull request #308 from TouchInstinct/feature/recoverable_network_service_errors_forwarding
feat: add error forwarding from error handlers
2022-05-20 12:38:05 +02:00
Timur Kayumov cfa80a3747 feat: add error forwarding from error handlers 2022-05-20 03:36:48 +02:00
Ivan Smolin e18db61746
Merge pull request #306 from TouchInstinct/feature/date_formatters_reuse_pool_thread_safe
fix: DateFormattersReusePool and ISO8601DateFormattersReusePool are now thread safe
2022-04-27 14:00:14 +03:00
Ivan Smolin d568963784 fix: DateFormattersReusePool and ISO8601DateFormattersReusePool are now thread safe 2022-04-27 11:47:53 +03:00
Ivan Smolin e31283cb67
Merge pull request #305 from TouchInstinct/feature/TIMapUtils
TIMapUtils
2022-04-27 11:29:36 +03:00
Ivan Smolin be0681397d fix: code review notes 2022-04-27 09:59:30 +03:00
Ivan Smolin 47ff4d949c feat: TIMapUtils, TIAppleMapUtils, TIGoogleMapUtils and TIYandexMapUtils modules for map items clustering and interacting with them 2022-04-26 14:55:04 +03:00
Ivan Smolin ceab75e3b5 fix: *DateFormatterReusePool workaround for swift downcasting bug 2022-04-18 20:34:16 +03:00
Ivan Smolin 70c4b4e00d
Merge pull request #304 from TouchInstinct/feature/TINetworkingCache
TINetworkingCache
2022-04-18 12:48:09 +03:00
Ivan Smolin 532e54fe9e feat: Network services in TIMoyaNetworking now passes MoyaError in result of EnpointRequest execution.
feat: TINetworkingCache module - caching results of EndpointRequests.
2022-04-15 14:21:28 +03:00
bekray 19134573fa
Merge pull request #303 from TouchInstinct/fix/fix_gray_table_section
fix: gray table section background
2022-04-12 18:53:02 +03:00
Yurii Pakhomov cb50db9f34 fix: renamed empty table section creating method 2022-04-12 18:39:42 +03:00
Yurii Pakhomov 241e7c211e fix: gray table section background 2022-04-12 18:12:38 +03:00
Ivan Smolin 0cf3e4473c
Merge pull request #302 from TouchInstinct/feature/date_formatter_default_locale
feat: DateFormatters properties preset in reuse pools
2022-04-12 17:51:15 +03:00
Ivan Smolin 274baa8b90
Merge pull request #301 from TouchInstinct/fix/query_array_parameter_encoding
fix: array encoding for `QueryStringParameterEncoding`
2022-04-12 17:30:06 +03:00
Ivan Smolin 25265d1797 feat: DateFormatters properties preset in reuse pools 2022-04-12 17:12:17 +03:00
Ivan Smolin 0dffbcbb26 fix: array encoding for `QueryStringParameterEncoding` 2022-04-12 15:13:14 +03:00
Ivan Smolin 9a3d061c63
Merge pull request #300 from TouchInstinct/feature/array_dates_coding
feat: add [Date] coding methods
2022-04-08 12:03:26 +03:00
Ivan Smolin 98f55093ac feat: add [Date] coding methods 2022-04-07 20:25:08 +03:00
Ivan Smolin d31476aaec
Merge pull request #299 from TouchInstinct/feature/plugin_response_processing
DisplayDecodingErrorPlugin and other improvements
2022-04-06 23:04:17 +03:00
Ivan Smolin 10ec9408ad feat: Change access modifiers in `DefaultJsonNetworkService` from `public` to `open`, added additional Moya plugins processing
add `DisplayDecodingErrorPlugin` for showing developer-frendly decoding error messages
add Gemfile for cocoapods versioning
2022-04-06 20:57:55 +03:00
Ivan Smolin e67136013c
Merge pull request #298 from TouchInstinct/fix/another_build_fix
fix: add TIFoundationUtils dependency to TIMoyaNetworking module
2022-04-01 15:19:53 +03:00
Ivan Smolin ab4faa2868 fix: add TIFoundationUtils dependency to TIMoyaNetworking module 2022-04-01 15:15:09 +03:00
Ivan Smolin fa5fffc593
Merge pull request #297 from TouchInstinct/fix/build_failure
fix: remove TIFoundationUtils imports from TIMoyaNetworking
2022-04-01 14:54:23 +03:00
Ivan Smolin 692f448b46 fix: remove TIFoundationUtils imports from TIMoyaNetworking 2022-04-01 14:44:21 +03:00
Ivan Smolin f01096dfb7
Merge pull request #296 from TouchInstinct/feature/date_formatting_fixes
fix: Try parse date in ISO8601 format appending `.withFractionalSeconds` if `.withInternetDateTime` fails
2022-04-01 14:24:49 +03:00
Ivan Smolin db81ff7567 fix: Try parse date in ISO8601 format appending `.withFractionalSeconds` if `.withInternetDateTime` fails 2022-04-01 13:14:55 +03:00
Ivan Smolin 8ce9a0183a
Merge pull request #295 from TouchInstinct/fix/header_parameters_encoding
Fix/header parameters encoding
2022-03-31 21:05:13 +03:00
Ivan Smolin 5f551fd799 feat: conform Cancellables to CancellableTask 2022-03-31 21:02:57 +03:00
Ivan Smolin 8ff4199ed0 fix: HeaderParameterEncoding value transform 2022-03-31 14:16:48 +03:00
Ivan Smolin 11f6b5dbd0 fix: HeaderParameterEncoding array encoding 2022-03-30 20:16:33 +03:00
Ivan Smolin 8a482cc186
Merge pull request #294 from TouchInstinct/feature/recoverable_fixes
fix: DefaultRecoverableNetworkService `request` parameter was renamed to prevent ambiguous reference
2022-03-30 15:57:33 +03:00
Ivan Smolin 0ad47b3f34 fix: DefaultRecoverableNetworkService `request` parameter was renamed to prevent ambgious reference 2022-03-29 21:20:15 +03:00
Ivan Smolin 3e5d8d13fb
Merge pull request #292 from TouchInstinct/feature/tinetworking_nullable_body
Few fixes for code generation
2022-03-29 12:55:54 +03:00
Ivan Smolin 1dded1a7d2
Merge branch 'master' into feature/tinetworking_nullable_body 2022-03-29 12:53:46 +03:00
Vladimir Makarov 2bb6e7d9b2
Merge pull request #293 from TouchInstinct/fix/request_timeout
timeoutIntervalForRequest for sessionConfiguration in NetworkServiceConfiguration added
2022-03-29 14:50:28 +05:00
Ivan Smolin f0f29a4464 fix: recursive call of process(request:errorHandlers:mapMoyaError) 2022-03-29 12:47:41 +03:00
Ivan Smolin 7def493512 feat: EndpointRequest Body can take a nil value as well as Parameter value 2022-03-29 11:43:13 +03:00
Vladimir Makarov 8f6e43f9de timeoutIntervalForRequest for sessionConfiguration in NetworkServiceConfiguration added 2022-03-29 13:34:40 +05:00
Ivan Smolin 1c38c41507
Merge pull request #291 from TouchInstinct/feature/tinetworking_codegen_adaptation
Feature/tinetworking codegen adaptation
2022-03-10 10:24:17 +03:00
Ivan Smolin 373a61835b refactor: change methods ordering according to protection level 2022-03-09 12:27:51 +03:00
Ivan Smolin aacd025382 docs: update CHANGELOG & bump podspec versions 2022-03-05 19:55:13 +03:00
Ivan Smolin b42fcd596f refactor: use default server from network service, simplify recoverable requests 2022-03-05 19:41:50 +03:00
Ivan Smolin b52dd87f55 feat: AdditionalHeadersPlugin for Moya 2022-03-04 17:55:20 +03:00
Ivan Smolin 203e2e9091 feat: ISO8601 DateFormattersReusePool 2022-03-04 17:26:04 +03:00
Ivan Smolin aa2dc3880e feat: add SuccessResponse generic argument to EndpointRequest 2022-03-04 12:18:15 +03:00
Ivan Smolin 6ba07b25ad
Merge pull request #290 from TouchInstinct/feature/recoverable_network_service
feat: add recoverable network service with error handling chain
2022-02-28 11:27:49 +03:00
Ivan Smolin 27c2897b60 feat: add recoverable network service with error handling chain 2022-02-25 14:50:04 +03:00
Ivan Smolin 68e5cb55b1
Merge pull request #289 from TouchInstinct/feature/TIMoyaNetworking
feat: add TIMoyaNetoworking target; async closure typealiases to TISwiftUtils; Date formatting & decoding helpers to TIFoundationUtils
2022-02-24 14:35:35 +03:00
Ivan Smolin 51a40a60f2 feat: async closures support for ClosureAsyncOperation + cancellable support 2022-02-21 17:24:14 +03:00
Ivan Smolin 6cf16b74a7 feat: add TIMoyaNetoworking target; async closure typealiases to TISwiftUtils; Date formatting & decoding helpers to TIFoundationUtils 2022-02-18 22:26:09 +03:00
Ivan Smolin 7c5c76ba0a
Merge pull request #288 from TouchInstinct/fix/TIFoundationUtils_podspec
fix: TIFoundationUtils podspec
2022-02-17 19:36:51 +03:00
Ivan Smolin 72dab661f2 fix: TIFoundationUtils podspec 2022-02-17 19:35:15 +03:00
Ivan Smolin 05c3273fd8
Merge pull request #287 from TouchInstinct/feature/AsyncOperation
feat: add AsyncOperation - generic subclass of Operation with chaining and result observation support
2022-02-17 19:20:51 +03:00
Ivan Smolin 89a0bf247f fix: code style notes 2022-02-17 17:36:28 +03:00
Ivan Smolin 4c7b7a76c1 feat: add AsyncOperation - generic subclass of Operation with chaining and result observation support 2022-02-15 21:30:27 +03:00
Ivan Smolin 3c6a98a582
Merge pull request #284 from TouchInstinct/build/fix_podspecs
build: fix podspecs
2021-10-04 15:00:30 +03:00
Ivan Smolin c1212bb3b0 build: fix podspecs 2021-09-30 12:01:18 +03:00
Ivan Smolin 9df3ccb30d
Merge pull request #283 from TouchInstinct/feature/TINetworking
Feature/ti networking
2021-09-30 10:34:17 +03:00
Ivan Smolin 4b818afa85 refactor: fix code review notes 2021-09-27 10:55:55 +03:00
Ivan Smolin 8397f15ec5 docs: add copyrights 2021-09-27 10:55:32 +03:00
Ivan Smolin b8550bd8d5 refactor: use TISwiftUtils in TINetworking 2021-09-17 19:55:31 +03:00
Ivan Smolin 4082ddb30e Merge branch 'master' into feature/TINetworking 2021-09-17 19:47:43 +03:00
Ivan Smolin c2df8511f2 refactor: fix code review notes 2021-09-17 19:45:06 +03:00
Loupehope 902120a483
Merge pull request #281 from TouchInstinct/feature/pretty_timer
Add pretty timer
2021-09-17 19:06:40 +03:00
Vlad Suhomlinov fc4ae9f9e2 docs: correct typo 2021-09-16 23:33:24 +03:00
Vlad Suhomlinov b4ad6165ff refactor: add convenience init 2021-09-16 11:51:28 +03:00
Vlad Suhomlinov c25dd3656d Merge branch 'master' into feature/pretty_timer
# Conflicts:
#	LeadKit.podspec
#	TIFoundationUtils/TIFoundationUtils.podspec
#	TIKeychainUtils/TIKeychainUtils.podspec
#	TISwiftUtils/TISwiftUtils.podspec
#	TITableKitUtils/TITableKitUtils.podspec
#	TITransitions/TITransitions.podspec
#	TIUIElements/TIUIElements.podspec
#	TIUIKitCore/TIUIKitCore.podspec
2021-09-16 10:19:22 +03:00
Loupehope f1b72bad8c
docs: update docs 2021-09-16 10:17:46 +03:00
Vlad Suhomlinov 77a8d43499 refactor: add protocol functions 2021-09-16 09:03:50 +03:00
Vlad Suhomlinov d66620d906 refactor: add pause and resume 2021-09-16 08:50:35 +03:00
Vlad Suhomlinov d23257e963 refactor: correct self capture 2021-09-16 00:59:21 +03:00
Ivan Smolin 1fcc478372 build: add podspec for TINetworking & update version 2021-09-14 17:15:42 +03:00
Ivan Smolin 3dd6fa9830 move DecodingClosure out of ResponseType 2021-09-14 16:58:02 +03:00
Ivan Smolin ff47d2c855 Merge branch 'master' into feature/TINetworking 2021-09-14 16:47:16 +03:00
Ivan Smolin 89a3bfe697 ResponseType decoding simplified and other enhancements 2021-09-14 16:46:34 +03:00
Loupehope e249e64ec6
Merge pull request #282 from TouchInstinct/fix/dependencies
Fix: podspec dependencies
2021-09-09 09:15:30 +03:00
Vlad Suhomlinov f9858286d8 Revert "refactor: unable BUILD_LIBRARY_FOR_DISTRIBUTION"
This reverts commit fee9d4ac62.
2021-09-08 21:14:47 +03:00
Vlad Suhomlinov fee9d4ac62 refactor: unable BUILD_LIBRARY_FOR_DISTRIBUTION 2021-09-08 21:10:44 +03:00
Vlad Suhomlinov 762b5352bc refactor: replace class with AnyObject 2021-09-08 21:09:36 +03:00
Vlad Suhomlinov 596a549595 chore: bumo version 2021-09-08 20:37:20 +03:00
Vlad Suhomlinov 4e667225bb fix: podpsec dependecies 2021-09-08 20:37:09 +03:00
Vlad Suhomlinov 91c15c21ed refactor: rename IInvalidatable -> Invalidatable 2021-08-16 13:51:39 +03:00
Vlad Suhomlinov 97e3b15ad8 refactor: correct links 2021-08-16 13:10:06 +03:00
Vlad Suhomlinov 518d8e7f41 refactor: correct PR comments 2021-08-16 13:08:14 +03:00
Vlad Suhomlinov 1c97cb629e refactor: PR comments 2021-08-16 13:06:03 +03:00
Vlad Suhomlinov 58bd8b1eb9 chore: bump version 1.6.0 2021-08-15 19:14:46 +03:00
Vlad Suhomlinov c7a3c46b47 feat: add pretty timer 2021-08-15 19:12:40 +03:00
Ilya 252e00198f
Merge pull request #280 from TouchInstinct/feature/recovery_files_and_remove_unnecessary
recovery files and remove unnecessary
2021-08-06 17:37:35 +03:00
Ilya Salatyuk b1cc752af3 recovery files and remove unnecessary 2021-08-06 17:35:25 +03:00
Ilya 4e7d4356fe
Merge pull request #279 from TouchInstinct/fix/fix_headers
fix incorrect header handling
2021-08-06 17:26:55 +03:00
Ilya Salatyuk ffcec6e4de replace type and remove unnecessary 2021-08-06 00:02:32 +03:00
Ilya Salatyuk 4b908f1e32 fix incorrect header handling 2021-08-05 08:20:16 +03:00
Ivan Smolin 88bc9798b1
Merge pull request #273 from TouchInstinct/feature/header_transition_helper
feat: Add HeaderTransitionDelegate - Helper for transition of TableVi…
2021-07-15 10:04:51 +03:00
Ivan Smolin fb0e1090e5 add TINetworking 2021-07-02 00:56:13 +03:00
Boyko Mihail 8b32bcd89e docs: Update Readme file 2021-06-29 17:55:56 +03:00
Boyko Mihail eea8727d98 fix: pr issue 2021-06-29 17:54:48 +03:00
Boyko Mihail 17f9a79e0a docs: Update Readme file 2021-06-29 17:36:22 +03:00
Boyko Mihail 033335a0b5 docs: Update Readme file 2021-06-29 17:15:32 +03:00
Boyko Mihail 225605b0ac docs: Update Readme file 2021-06-29 17:14:21 +03:00
Boyko Mihail fa7c06fcc9 docs: Update Readme file 2021-06-29 17:13:17 +03:00
Boyko Mihail 5720af623a docs: Update Readme file 2021-06-29 17:11:56 +03:00
Boyko Mihail 564b4e23d8 docs: Update Readme file 2021-06-29 17:10:09 +03:00
Boyko Mihail 28c3808f1a fix: pr issue 2021-06-29 16:47:39 +03:00
Boyko Mihail ce426d1f49 fix: pr issue 2021-06-28 17:28:09 +03:00
Boyko Mihail 6acf0f0b0f fix: Fix pr issuue. Add new protocol and separation other protocol 2021-06-24 20:19:18 +03:00
Boyko Mihail 5e06035236 fix: pr issue. fix conflict 2021-06-22 14:53:46 +03:00
Boyko Mihail c327047bc4 fix: pr issue. fix conflict 2021-06-22 13:43:06 +03:00
Boyko Mihail c873366e7f fix: pr issue. Add animators 2021-06-22 13:39:27 +03:00
Loupehope 67488af9c6
Merge pull request #278 from TouchInstinct/feature/update_deps_and_scripts
Feature: update deps and scripts
2021-06-21 11:10:46 +03:00
Vlad Suhomlinov c68f6fa69f refactor: remove TIPagination podspec 2021-06-21 10:33:54 +03:00
Vlad Suhomlinov 6580042f03 chore: update 2021-06-21 00:12:40 +03:00
Vlad Suhomlinov 80199ccce0 feat: update minor dependencies 2021-06-21 00:10:00 +03:00
Vlad Suhomlinov 71f516af98 docs: add Build dependencies for LeadKit.xcodeproj snippet 2021-06-20 23:35:53 +03:00
Vlad Suhomlinov b39c217c30 fix: podspec’s scripts 2021-06-20 22:48:34 +03:00
Loupehope cd91364c75
Merge pull request #276 from TouchInstinct/feature/tipagination
feat: add realisation of paginating items from a data source
2021-06-19 23:08:30 +03:00
Boyko Mihail 1b58ff5aaa fix: pr issue 2021-06-18 14:07:13 +03:00
Boyko Mihail effad1e51c fix: pr issue 2021-06-18 11:12:55 +03:00
Boyko Mihail a9c7bd6abd fix: pr issue 2021-06-18 11:09:59 +03:00
Boyko Mihail e38ee51275 fix: pr issue 2021-06-18 10:56:55 +03:00
Boyko Mihail ba3211e613 fix: pr issue 2021-06-18 10:35:13 +03:00
Vlad Suhomlinov 68914f0ddc chore: bump 1.3.0 2021-06-17 18:36:04 +03:00
Vlad Suhomlinov 49e6172edf feat: add realisation of paginating items from a data source 2021-06-17 18:04:17 +03:00
Boyko Mihail e20a4b8924 fix: revert readme file 2021-06-17 13:17:52 +03:00
Boyko Mihail 2da25414da fix: change gif 2021-06-05 12:32:06 +03:00
Boyko Mihail 4f02836cf4 fix: align of image in doc 2021-06-05 12:10:06 +03:00
Boyko Mihail fc679c5020 docs: Add gif and change readme file 2021-06-05 12:08:10 +03:00
Boyko Mihail 0810070370 fix: small 2021-06-04 20:38:21 +03:00
Boyko Mihail 2bd3144922 fix: protocols 2021-06-04 20:35:28 +03:00
Boyko Mihail cf81e228ef fix: naming 2021-06-04 20:28:59 +03:00
Boyko Mihail 0095829e31 fix: Fix pr issue and add animation 2021-06-04 20:26:59 +03:00
Boyko Mihail 44b41a6618 fix: remove delegate code 2021-06-03 19:03:56 +03:00
Boyko Mihail 2de6bc2df3 feat: Add HeaderTransitionDelegate - Helper for transition of TableView header and navigationBar title view 2021-06-03 18:41:27 +03:00
Mihail 954080891d
Merge pull request #270 from TouchInstinct/feature/TIKeychainUtils
feat: Add TIKeychainUtils
2021-04-30 19:17:08 +03:00
Boyko Mihail d27c8ab97c feat: Fix dependency (pr issue) 2021-04-30 18:56:50 +03:00
Boyko Mihail 77ca9d05fa feat: fix pr issue 2021-04-30 17:47:58 +03:00
Boyko Mihail ee78f008eb feat: Fix pr issue 2021-04-30 14:55:32 +03:00
Boyko Mihail 529dd9edf8 feat: Fix pr issue 2021-04-30 13:18:27 +03:00
Boyko Mihail d560c035c6 feat: Add TIKeychainUtils 2021-04-29 15:05:38 +03:00
Loupehope 1ad5eed642
Merge pull request #269 from TouchInstinct/feature/useful_scripts
Add useful scripts
2021-04-29 09:49:11 +03:00
Vlad Suhomlinov a6461bd77e feat: add useful scripts 2021-04-29 09:43:26 +03:00
Vlad Suhomlinov e3a6897083 chore: bump version 1.1.2 2021-04-29 09:20:25 +03:00
Vlad Suhomlinov 67d31b108b Merge branch 'master' into feature/useful_scripts 2021-04-29 09:19:05 +03:00
Loupehope 4a1e84773e
docs: add folder filter 2021-04-29 09:11:13 +03:00
Vlad Suhomlinov ea00667963 fix: add .DS_Store to .gitignore 2021-04-29 09:00:20 +03:00
Shalashnikov Maxim e86dcc81f9
Merge pull request #267 from TouchInstinct/fix/fix-StatefullButton-propagation
fix: fix StatefullButton propagation
2021-03-16 16:38:54 +03:00
b0sya e87173b166 docs: update CHANGELOG 2021-03-16 16:32:33 +03:00
b0sya 6c8ff3e682 build: bump version number 2021-03-16 16:29:55 +03:00
b0sya 8655c90f1d refactor: change disabling propagation condition 2021-03-16 16:11:02 +03:00
b0sya 3e64b5cc4e fix: fix StatefullButton propagation 2021-03-16 15:31:31 +03:00
Ivan Smolin 2e1cf62e6f
Merge pull request #266 from TouchInstinct/feature/base_controllers
Feature/base controllers
2021-03-09 11:59:35 +03:00
Vlad 614e574596 docs: add snippets docs 2021-03-05 21:27:14 +03:00
Ivan Smolin 5d449ce92f docs: update CHANGELOG 2021-03-05 13:01:11 +03:00
Ivan Smolin 6472f8a3bb fix: make TableDirectorHolder public 2021-03-05 12:52:33 +03:00
Ivan Smolin 0a195e3309 build: fix TIFoundationUtils build 2021-03-05 12:52:33 +03:00
Ivan Smolin 616a6ec9ed build: bump version number 2021-03-05 12:52:33 +03:00
Ivan Smolin 1225b190f0 feat: add TableDirector extensions for BaseCustomViewController, add TableKitTableView with tableDirector property 2021-03-05 12:08:15 +03:00
Ivan Smolin 44306a5863 feat: add BaseControllers 2021-03-05 12:08:15 +03:00
Ivan Smolin d3e07fd550 feat: add UserDefaultsBackingStore 2021-03-05 12:08:15 +03:00
Ivan Smolin f3dcef4690 fix: creation of bottomSeparator for BaseSeparatorCell 2021-03-05 12:08:15 +03:00
Ivan Smolin 1efc4c2bf0 fix: set allHostsMustBeEvaluated of SessionManager to false, so we can download 2021-03-05 12:08:15 +03:00
Loupehope 7b5b6ed945
Merge pull request #264 from TouchInstinct/feature/update_dependecies
Update dependencies
2021-01-29 13:02:40 +03:00
Vlad 5fd69cae98 refactor: update info.plist 2021-01-29 09:54:17 +03:00
Vlad 3d683f44bc Merge branch 'master' into feature/update_dependecies
# Conflicts:
#	CHANGELOG.md
#	LeadKit.podspec
#	TIFoundationUtils/TIFoundationUtils.podspec
#	TISwiftUtils/TISwiftUtils.podspec
#	TITableKitUtils/TITableKitUtils.podspec
#	TITransitions/TITransitions.podspec
#	TIUIElements/TIUIElements.podspec
#	TIUIKitCore/TIUIKitCore.podspec
2021-01-29 09:27:24 +03:00
Loupehope 151022a22c
Merge pull request #265 from TouchInstinct/fix/podspec_file
Fix podspec file
2021-01-26 10:46:42 +03:00
Vlad 50ca1c7d79 chore: bump version 2021-01-25 17:43:02 +03:00
Vlad 9b115370f7 fix: LeadKit.podspec file 2021-01-25 17:40:15 +03:00
Loupehope f9af35e558
Merge pull request #263 from TouchInstinct/feature/git_hooks
Add prepare-commit-msg to check commit style
2021-01-25 16:31:09 +03:00
Vlad d264b23089 refactor: update to RxSwift 6 2021-01-23 21:53:08 +03:00
Vlad c5403c0ba9 refactor: up version 2021-01-23 21:47:24 +03:00
Vlad 1ab3993c7e docs: add page for semantic commit messages 2021-01-23 15:32:25 +03:00
Vlad 31c0f2c93a refactor: @petropavel13 comments 2021-01-17 21:37:27 +03:00
Vlad 5afbc2ffa5 refactor: update swiftlint to 39.1 2021-01-11 23:26:23 +03:00
Vlad 7ffac03d73 feat!: update dependencies and project settings 2021-01-11 23:18:29 +03:00
Loupehope 6700252ef6
docs: correct typo 2021-01-11 12:50:31 +03:00
Vlad ffe4098937 fix: carthage install 2021-01-09 20:17:12 +03:00
Vlad e2c9c937b8 refactor: correct githook and setup script 2021-01-07 18:51:21 +03:00
Vlad 57c010f4f2 refactor: correct setup script 2021-01-07 18:46:47 +03:00
Vlad 9113f0b7df feat: add prepare-commit-msgto check commit style 2021-01-07 18:15:43 +03:00
Ivan Smolin 7408446b18
Merge pull request #258 from TouchInstinct/feature/stateful_button_and_more
StatefulButton and more
2020-12-24 14:22:03 +03:00
Ivan Smolin 2e84f5cb2d fix code review notes 2020-12-24 11:37:00 +03:00
Ivan Smolin 102c15ca07 added StatefulButton & RoundedStatefulButton.
added CACornerMask rounding extension.
added UIControl.State dictionary extensions.
added UIFont registration.
reworked BaseTextAttributes & ViewText.
removed ViewTextConfigurable.
2020-12-23 16:45:36 +03:00
MRSorokinMaxim f3fe5e08d8
Merge pull request #256 from TouchInstinct/titransaction_podspec
fix autor for validate spec
2020-11-11 16:39:31 +03:00
Maxim Sorokin 4f8d0b537d fix author name 2020-11-11 16:39:04 +03:00
Maxim Sorokin 6fbf1e0eff Revert "fix name author"
This reverts commit c997eb2bfb.
2020-11-11 16:38:32 +03:00
Maxim Sorokin c997eb2bfb fix name author 2020-11-11 16:35:13 +03:00
Maxim Sorokin 7102cccc60 fix autor for validate spec 2020-11-11 16:18:11 +03:00
MRSorokinMaxim 0f518c3c88
Merge pull request #255 from TouchInstinct/titransaction_podspec
[Add] TiTransactios podspec
2020-11-11 16:04:59 +03:00
Maxim Sorokin 00c72992ca [Add] TiTransactios podspec 2020-11-11 15:47:25 +03:00
Ivan Smolin 6b3bf25f0a
Merge pull request #254 from TouchInstinct/feature/separators
Feature/separators
2020-10-23 18:34:00 +03:00
Ivan Smolin 8b1e20d790 update README 2020-10-23 17:25:50 +03:00
Ivan Smolin 53e25e3a13 update podspec version to 0.11.0 2020-10-23 17:25:30 +03:00
Ivan Smolin 18d7e5c5b6 update BaseSeparatorCell layout configuration 2020-10-23 17:24:26 +03:00
Ivan Smolin 6433233d9e rename configure(with:) -> configureSeparators(with:) 2020-10-23 15:57:24 +03:00
Ivan Smolin 0a7f68bd23 update podspec and add missing extensions for TableKit 2020-10-23 12:44:49 +03:00
Ivan Smolin 281f0b72b9 add podspecs 2020-10-23 11:31:48 +03:00
Ivan Smolin dfbe18fedd update READMEs 2020-10-23 10:24:22 +03:00
Ivan Smolin e92b46eb51 rename InitializableView -> InitializableViewProtocol, move base elements to TIUIElements 2020-10-22 12:44:42 +03:00
Ivan Smolin 64cb766542 add missing ViewTextConfigurable extensions 2020-10-21 22:55:14 +03:00
Ivan Smolin 4af10aa107 add ConfigurableView 2020-10-21 22:37:20 +03:00
Ivan Smolin 6fdb6af732 add ViewText and BaseTextAttributes 2020-10-21 22:34:45 +03:00
Ivan Smolin 55977e39f5 add TableKitUtils with BaseSeparatorCell 2020-10-21 22:06:54 +03:00
892 changed files with 55863 additions and 722 deletions

2
.bundle/config Normal file
View File

@ -0,0 +1,2 @@
---
BUNDLE_PATH: ".gem"

96
.githooks/prepare-commit-msg Executable file
View File

@ -0,0 +1,96 @@
#!/usr/bin/env python3
import sys, re, os
from subprocess import check_output
from sys import getdefaultencoding
getdefaultencoding() # utf-8
valid_commit_style = '^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style)(\(\S+\))?\!?: .+'
merge_commit_style = '^(m|M)erge .+'
success_title = 'SUCCESS'
success_color = '92m'
error_title = 'ERROR'
error_message = 'Incorrect commit message style!\nThe commit pattern:'
error_commit_pattern = ' type(scope): message | type: message \n'
error_color = '91m'
breaking_changes_message = 'If commit include Breaking changes use ! after type or scope:'
colored_breaking_changes_message = 'If commit include \033[91mBreaking changes\033[00m use \033[91m!\033[00m after type or scope:'
breaking_changes_commit_pattern = ' type(scope)!: message | type!: message \n'
available_types_message = 'Available commit types:'
available_commit_types = ['build: Changes that affect the build system or external dependencies',
'ci: Changes to our CI configuration files and scripts',
'docs: Documentation only changes',
'feat: A new feature. Correlates with MINOR in SemVer',
'fix: A bug fix. Correlates with PATCH in SemVer',
'perf: A code change that improves performance',
'refactor: A code change that neither fixes',
'revert: A revert to previous commit',
'style: Changes that do not affect the meaning of the code (white-space, formatting, etc)']
is_GUI_client = False
def print_result_header(result_title, color):
if not is_GUI_client:
print("[\033[96mcommit lint\033[00m] [\033[{}{}\033[00m]\n".format(color, result_title))
def print_pattern(pattern):
if is_GUI_client:
print(pattern)
else:
print("\033[96m{}\033[00m".format(pattern))
def print_error_message():
print_result_header(error_title, error_color)
print(error_message)
print_pattern(error_commit_pattern)
if is_GUI_client:
print(breaking_changes_message)
else:
print(colored_breaking_changes_message)
print_pattern(breaking_changes_commit_pattern)
print_available_commit_types()
def print_available_commit_types():
print(available_types_message)
for commit_type in available_commit_types:
print(" - %s" %commit_type)
def write_commit_message(fh, commit_msg):
fh.seek(0, 0)
fh.write(commit_msg)
def lint_commit_message(fh, commit_msg):
is_merge_commit = re.findall(merge_commit_style, commit_msg)
is_valid_commit = re.findall(valid_commit_style, commit_msg)
if is_valid_commit or is_merge_commit:
print_result_header(success_title, success_color)
write_commit_message(fh, commit_msg)
sys.exit(os.EX_OK)
else:
print_error_message()
sys.exit(os.EX_DATAERR)
def run_script():
commit_msg_filepath = sys.argv[1]
with open(commit_msg_filepath, 'r+') as fh:
commit_msg = fh.read()
lint_commit_message(fh, commit_msg)
try:
sys.stdin = open("/dev/tty", "r")
is_GUI_client = False
except:
is_GUI_client = True
run_script()

80
.gitignore vendored
View File

@ -1,16 +1,18 @@
# ================
# Swift.gitignore
# ================
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
## Build generated
build/
DerivedData
## User settings
xcuserdata/
## Various settings
## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
*.xcscmblueprint
*.xccheckout
## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
build/
DerivedData/
*.moved-aside
*.pbxuser
!default.pbxuser
*.mode1v3
@ -19,17 +21,14 @@ DerivedData
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
## Other
*.xccheckout
*.moved-aside
*.xcuserstate
*.xcscmblueprint
## Obj-C/Swift specific
*.hmap
## App packaging
*.ipa
*.dSYM.zip
*.dSYM
## Playgrounds
timeline.xctimeline
@ -39,6 +38,14 @@ playground.xcworkspace
#
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
# Packages/
# Package.pins
# Package.resolved
# *.xcodeproj
#
# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
# hence it is not needed unless you have added a package configuration file to your project
.swiftpm
.build/
# CocoaPods
@ -48,33 +55,56 @@ playground.xcworkspace
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
Pods/
#
# Add this line if you want to avoid checking in source code from the Xcode workspace
# *.xcworkspace
# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
Carthage/Checkouts
Carthage/Build
Carthage/Build/
# Accio dependency management
Dependencies/
.accio/
# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
# screenshots whenever they are needed.
# It is recommended to not store the screenshots in the git repo.
# Instead, use fastlane to re-generate the screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://github.com/fastlane/fastlane/blob/master/docs/Gitignore.md
# https://docs.fastlane.tools/best-practices/source-control/#source-control
fastlane/report.xml
fastlane/screenshots
fastlane/Preview.html
fastlane/screenshots/**/*.png
fastlane/test_output
# Code Injection
#
# After new code Injection tools there's a generated folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode
# AppCode
# https://intellij-support.jetbrains.com/hc/en-us/articles/206544839-How-to-manage-projects-under-Version-Control-Systems
iOSInjectionProject/
.idea/workspace.xml
.idea/tasks.xml
# homebrew-bundle
Brewfile.lock.json
cpd-output.xml
# Node.js
# Dependency directories
node_modules/
# Touch Instinct custom
Downloads/
fastlane/README.md
Templates/
cpd-output.xml
*.swp
*IDEWorkspaceChecks.plist
# Gem
.gem/
.DS_Store

2
.gitmodules vendored
View File

@ -1,3 +1,3 @@
[submodule "build-scripts"]
path = build-scripts
url = https://github.com/TouchInstinct/BuildScripts.git
url = https://git.svc.touchin.ru/TouchInstinct/BuildScripts.git

View File

@ -1,31 +0,0 @@
language: swift
osx_image: xcode10
env:
global:
- LC_CTYPE=en_US.UTF-8
- LANG=en_US.UTF-8
jdk:
- oraclejdk9
before_install:
- env
- locale
- gem install xcpretty --no-rdoc --no-ri --no-document --quiet
- xcpretty --version
- xcodebuild -version
- xcodebuild -showsdks
- pod install --repo-update
- brew install pmd
script:
- set -o pipefail
- xcodebuild -enableCodeCoverage YES CODE_SIGNING_ALLOWED=YES -workspace LeadKit.xcworkspace -scheme 'LeadKit iOS' -destination 'platform=iOS Simulator,OS=12.0,name=iPhone 7' build test | xcpretty -c
- xcodebuild -enableCodeCoverage YES CODE_SIGNING_ALLOWED=YES -workspace LeadKit.xcworkspace -scheme 'LeadKit iOS Extensions' -destination 'platform=iOS Simulator,OS=12.0,name=iPhone 7' build test | xcpretty -c
- xcodebuild -enableCodeCoverage YES CODE_SIGNING_ALLOWED=YES -workspace LeadKit.xcworkspace -scheme 'LeadKit tvOS' -destination 'platform=tvOS Simulator,name=Apple TV 4K' -sdk appletvsimulator build test | xcpretty -c
after_success:
- sleep 5
- bash < (curl -s https://codecov.io/bash)

View File

@ -1,5 +1,443 @@
# Changelog
### 1.56.0
- **Update**: `ViewSkeletonsConfiguration`. It's possible to enable or disable animation for specific skeletons now.
- **Added**: `HolderViewSkeletonsConfiguration` for skeleton root view configuration
- **Added**: `DashedBoundsLayer` can now be applied to `CALayer`
### 1.55.1
- **Update**: revert `TextSkeletonsConfiguration` line height calculation
### 1.55.0
- **Update**: use TouchInstinct `TableKit` fork instead of original one
- **Update**: remove default value from `BoolValueDefaultsStorage`
### 1.54.6
- **Added**: `xcprivacy` files
- **Update**: Correctly detect app reinstall in `AppInstallLifetimeSingleValueStorage`
- **Update**: use `xHeight` instead of `pointSize` for default skeleton line height calculation
- **Update**: update `linkTextAttributes` in `UITextView` when setting interactive url parts
### 1.54.5
- **Update**: Сhange `StatefulButton` event propogation avoidance method.
### 1.54.4
- **Update**: Fix `StatefulButton` state configuration for iOS 15+.
### 1.54.3
- **Update**: Set reasonable defaults for `SkeletonConfiguration`.
### 1.54.2
- **Update**: Changed access level from internal to public of title and subtitle view in `BaseTitleSubtitleView`.
### 1.54.1
- **Added**: `BaseTitleSubtitleView` which can be inherited for fine-tuning skeletons and other behavior.
- **Update**: Changed lines number calculation method in `TextSkeletonsConfiguration`.
### 1.54.0
- **Added**: `maxWidth` parameter to `BaseViewSkeletonsConfiguration`.
- **Added**: custom `SkeletonConfigurations` for nested `SkeletonPresenters`.
- **Update**: Many fixes and improvenments to `TextSkeletonsConfiguration`.
### 1.53.3
- **Update**: `Skeletonable` can now control custom geometry change notification.
- **Update**: Filter hidden views from skeletonable views by default.
### 1.53.2
- **Update**: `DefaultTitleSubtitleView` support for separated configuration of title and subtitle labels layout.
- **Update**: `BaseListItemView` fixed trailing insets when trailing view is hidden.
### 1.53.1
- **Update**: Insets layout heuristics for `WrappedViewHodler` implementations
### 1.53.0
- **Added**: Custom string attributes to `BaseTextAttributes`
- **Added**: Customizeable `UIViewBackground` and `UIViewBorder` for `UIView.Appearance`
- **Added**: Keychain single value storage for codable models -`CodableSingleValueKeychainStorage`
- **Update**: Renamed methods `startAnimation` and `stopAnimation` of `SkeletonPresenter`, so it won't conflict with `Animatable` protocol anymore
### 1.52.0
- **Added**: `TIApplication` module with core dependencies of main application and its extension targets
- **Added**: `DefaultHomogeneousItemsCollectionView` default collection view implementation with configurable identical-type cells
- **Update**: Changed implementation of `AppInstallLifetimeSingleValueStorage`. Now it uses `SingleValueStorage<Bool>` to be able to migrate stored UserDefaults values
- **Added**: `UserLocationFetcher.OnLocationFetchFailureCallback` and `ItemDistanceTo` in `TIMapUtils`
- **Added**: Tap handler closure to `DefaultConfigurableStatefulButton.ViewModel`
- **Added**: Universal DSL
### 1.51.0
- **Added**: `BaseModalViewController` implementing `PanModalPresentable` with additional functionality
- **Added**: `BaseModalWrapperViewController` for wrapping `UIViewController`s with `BaseModalViewController` functionality
### 1.50.0
- **Updated**: Fix activity indicator positioning for `StatefulButton` on iOS 15+ and disabled state touch handling
- **Added**: iOS 15+ activity indicator placement support in `StatefulButton`
- **Added**: `TICoreGraphicsUtils` module for drawing operations and other CoreGraphics related functionality
- **Update**: `MarkerIconFactory` can now return optional `UIImage`. In this case MapManagers will show the default marker icon.
### 1.49.0
- **Added**: `BaseMigratingSingleValueKeychainStorage` and `BaseMigratingSingleValueDefaultsStorage` implementations for migrating keys from one storage to another.
### 1.48.0
- **Added**: `BaseStackView` with configurable items appearance
- **Fixed**: `CollectionTableViewCell` self-sizing
- **Added**: `ViewAppearance.WrappedViewLayout` support for all `WrappedViewHolders`
- **Added**: `ViewCallbacks` support for all `BaseInitializeableViews`
### 1.47.0
- **Added**: `flatMap` operator for `AsyncOperation`
- **Update**: `CodableKeyValueStorage` now returns `Swift.Result` with typed errors.
- **Added**: `SingleValueExpirationStorage` for time aware entries (expirable api tokens, etc.)
- **Added**: `AsyncOperation` variants of process methods in NetworkServices.
### 1.46.0
- **Added**: `AsyncSingleValueStorage` and `SingleValueStorageAsyncWrapper<SingleValueStorage>` for async access to SingleValue storages wtih swift concurrency support
- **Added**: `BaseMapUISettings` used to configure map view of different providers + user location icon rendering for yandex maps
- **Added**: `UserLocationFetcher` helper that requests authorization and subscribes to user location updates
- **Update**: add `DEVELOPMENT_INSTALL` support for all podspecs and fix playground compilation issues
### 1.45.0
- **Added**: `SingleValueStorage` implementations + `AppInstallLifetimeSingleValueStorage` for automatically removing keychain items on app reinstall.
- **Added**: `TILogging` with error logging types
- **Update**: `DefaultRecoverableJsonNetworkService` supports iOS 12.
- **Update**: `DefaultFingerprintsProvider` now uses `SingleValueStorage`
### 1.44.0
- **Added**: HTTP status codes to `EndpointErrorResult.apiError` responses
- **Added**: SwiftLint pre-build SPM step to TINetworking module
### 1.43.1
- **Fixed**: build scripts submodule url
### 1.43.0
- **Added**: `TITextProcessing` for regex and text formatting added
### 1.42.1
- **Fixed**: Podspecs source and homepage urls
### 1.42.0
- **Added**: TIDeeplink to support deeplink API
### 1.41.0
- **Update**: added callbacks for views while skeletons change status to presented or hidden
### 1.40.0
- **Added**: `PlaceholderFactory` for creating `DefaultPlaceholderView` views
- **Added**: `DefaultPlaceholderImageView`
### 1.39.0
- **Added**: UIButton Appearance model
- **Added**: `SpacedWrappedViewLayout` for spacing configurations
- **Update**: UIView appearance model with border configurations
### 1.38.0
- **Added**: Placemarks states for icon updating
- **Added**: Selecting / deselecting markers through cluster manager
### 1.37.0
- **Added**: API for converting view hierarchy to skeletons
### 1.36.1
- **Update**: `YandexMapsMobile` version updated
- **Fix**: Map manager memory leak removed
### 1.36.0
- **Removed**: `TILogger`module
- **Updated**: moved `LoggingPresenter` to `TIDeveloperUtils` module.
### 1.35.1
- **Added**: Auto documentation generation for `TIFoundationUtils` playground and compile checks for playground before release
- **Updated**: `AsyncOperation` fixed ordering of chain operations execution
### 1.35.0
- **Added**: `TIDeveloperUtils` framework, that contains different utils for development
- **Added**: `UIView` and `UIViewController` extensions for showing SwiftUI previews
- **Added**: `DashedBoundsLayer` for debugging views' frames visually
### 1.34.0
- **Added**: `BaseListItemView` for displaying three views horizontally
- **Added**: `DefaultTitleSubtitleView` for displaying one or two labels vertically
- **Update**: `StatefulButton` now can be configured with `ViewAppearance` model for each state
### 1.33.0
- **Added**: `ViewAppearance` and `ViewLayout` models for setting up Views' appearance and layout
- **Added**: `TableKit.Row` extension for configuration inner View's appearance and layout
- **Added**: `WrappableView` with typealiases for creating wrapped in the container views
- **Added**: `CollectionTableViewCell` and `ContainerView`
- **Update**: Separator appearance configureation for table views
### 1.32.0
- **Added**: `BaseInitializableWebView` with navigation and error handling api.
### 1.31.0
- **Added**: `URLInteractiveTextView` for terms and conditions hints in login flow
### 1.30.0
- **Added**: Base classes for encryption and decryption user token with pin code or biometry
- **Added**: Pin code validators
### 1.29.1
- **Updated**: `BaseTextAttributes` correct detection of the necessity of using attributed string
### 1.29.0
- **Added**: `BaseTextAttributes`can now measure text size and provides paragraph style configuration API.
- **Removed**: `ViewText`. Was fully replaced with `BaseTextAttributes`
- **Fixed**: `Operation.flattenDependencies` used in `Operation.add(to:waitUntilFinished:)` now works correctly.
- **Added**: Now it's possible to add dependent operation to start of the queue.
### 1.28.0
- **Add**: `LoggingPresenter`to present list of logs with ability of sharing it
- **Add**: `TILogger` wrapper object to log events.
### 1.27.1
- **Fix**: Weak target reference in `RefreshControl`
### 1.27.0
- **Add**: Tag like filter collection view
- **Add**: List like filter table view
- **Add**: Range like filter view
### 1.26.3
- **Update**: Add @escaping in `RequestExecutor.ExecutionClosure`
### 1.26.2
- **Update**: Add failureCompletion in `RequestExecutor`
### 1.26.1
- **Fix**: Use OperationQueue instead of NSLock in `DefaultTokenInterceptor`
- **Update**: AsyncOperation refactoring
### 1.26.0
- **Add**: `TIEcommerce` module with Cart, products, promocodes, bonuses and other related actions.
### 1.25.0
- **Update**: `RequestError` cases now contain additional url assotiated value
- **Update**: Network requests error catching now throws `RequestError` with url
### 1.24.0
- **Add**: `AlertFactory` for presenting alerts in SwiftUI and UIKit.
### 1.23.0
- **Update**: `UITextView` now support configuration with `BaseTextAttributes`
- **Add**: `ReconfigurableView` & `ChangeableViewModel` for non-destructing state update
- **Add**: `WrappedViewHolder` protocol with table/collection view cell implementations
- **Add**: `UIViewPresenter` and `ReusableUIViewPresenter` protocols with default implementation for proper handling view/cells reuse
### 1.22.0
- **Update**: Asynchronous request preprocessing
### 1.21.0
- **Update**: `AsyncEventHandler` was replaced with `EndpointRequestRetrier`
- **Add**: `FingerprintsTrustEvaluator` and `FingerprintsProvider` for fingerprint-based host trust evaluation
- **Add**: `DefaultTokenInterceptor` for queue-based token refresh across all requests of single api interactor (network service).
- **Update**: `DefaultRecoverableJsonNetworkService` now returns collection of errors in result
- **Update**: `CancellableTask` was renamed to `Cancellable`. Cancellable implementations has been moved from `TIMoyaNetworking` to `TIFoundationUtils`.
- **Add**: `ApiInteractor` protocol with basic request/response methods
### 1.20.0
- **Add**: OpenAPI security schemes support for EndpointRequest's.
- **Update**: Replace `AdditionalHeadersPlugin` with `SecuritySchemePreprocessor` and `EndpointRequestPreprocessor` (with default implementations)
### 1.19.0
- **Add**: Add presenter protocols to `TISwiftUICore` and `TIUIKitCore` modules
- **Add**: `CodeConfirmPresenter` protocol and `DefaultCodeConfirmPresenter` implementation in `TIAuth` module
### 1.18.0
- **Add**: add MapManagers for routine maps configuration
### 1.17.0
- **Add**: add smooth CameraUpdate actions for supported maps
### 1.16.2
- **Update**: `DefaultRecoverableJsonNetworkService` now supports error forwarding from its error handlers to initial requests.
### 1.16.1
- **Update**: `DateFormattersReusePool` and `ISO8601DateFormattersReusePool` are now thread safe.
### 1.16.0
- **Add**: `TIMapUtils`, `TIAppleMapUtils`, `TIGoogleMapUtils` and `TIYandexMapUtils` modules for map items clustering and interacting with them.
### 1.15.0
- **Update**: Network services in TIMoyaNetworking now passes MoyaError in result of EnpointRequest execution.
- **Add**: `TINetworkingCache` module - caching results of EndpointRequests.
- **Important Note**: `TINetworkingCache` added via SPM may require you to add `DISABLE_DIAMOND_PROBLEM_DIAGNOSTIC=YES` flag to build settings of project target (see [probably related problem](https://forums.swift.org/t/adding-a-package-to-two-targets-in-one-projects-results-in-an-error/35007/18))
### 1.14.3
- **Fix**: Creating headerView and footerView when initializing a section with rows in `TITableKitUtils`.
- **Add**: Empty table section initialization method in `TITableKitUtils`.
### 1.14.2
- **Update**: DateFormatters properties preset in reuse pools
### 1.14.1
- **Fix**: Array encoding for `QueryStringParameterEncoding`
### 1.14.0
- **Add**: [Date] coding methods
### 1.13.0
- **Update**: Change access modifiers in `DefaultJsonNetworkService` from `public` to `open`, added additional Moya plugins processing
- **Add**: `DisplayDecodingErrorPlugin` for showing developer-frendly decoding error messages
- **Add**: Gemfile for cocoapods versioning
### 1.12.3
- **Fix**: Try parse date in ISO8601 format appending `.withFractionalSeconds` if `.withInternetDateTime` fails
### 1.12.2
- **Fix**: HeaderParameterEncoding encodes array correctly
### 1.12.1
- **Update**: DefaultRecoverableNetworkService `request` parameter was renamed to prevent ambgious reference
### 1.12.0
- **Update**: EndpointRequest Body can take a nil value
- **Update**: Parameter value can be nil as well
- **Update**: observe operator of AsyncOperation now accepts callback queue parameter
### 1.11.1
- **Fix**: `timeoutIntervalForRequest` parameter for `URLSessionConfiguration` in `NetworkServiceConfiguration` added.
### 1.11.0
- **Breaking changes**: many method signatures was changes in `TIMoyaNetworking`.
- **Add**: `ISO8601DateFormattersReusePool` and codable helpers for ISO8601 date (de)coding.
- **Add**: Moya plugin protocol for adding HTTP headers with default implementation.
### 1.10.0
- **Add**: `DefaultRecoverableJsonNetworkService` with error handling chain.
### 1.9.0
- **Add**: `TIMoyaNetworking` target - Moya + Swagger network service.
- **Update**: `TISwiftUtils` - added async closure typealiases.
- **Update**: `TIFoundationUtils` - added date formatting & decoding helpers.
### 1.8.0
- **Add**: `TIFoundationUtils.AsyncOperation` - generic subclass of Operation with chaining and result observation support
### 1.7.0
- **Add**: `TINetworking` - Swagger-frendly networking layer helpers
### 1.6.0
- **Add**: the pretty timer - TITimer.
### 1.5.0
- **Add**: `HeaderTransitionDelegate` - Helper for transition of TableView header and navigationBar title view
### 1.4.0
- **Update**: update minor dependencies.
- **Fix**: project's scripts.
### 1.3.0
- **Add**: `TIPaginator` - realisation of paginating items from a data source.
### 1.2.0
- **Add**: `TIKeychainUtils` - Set of helpers for Keychain classes.
### 1.1.1
- **Fix**: `StatefullButton` propagation
### 1.1.0
- **Add**: `BaseInitializeableViewController`, `BaseCustomViewController` and `BaseViewController` to TIUIKitCore.
- **Add**: `TableKitTableView` and `TableDirectorHolder` to TITableKitUtils.
### 1.0.0
- **API BreakingChanges**: up swift version to 5.1.
- **Update**: build scripts.
- **Update**: code with new swiftlint rules.
- **Update**: RxSwift to 6.0.0.
### 0.13.1
- **Fix**: LeadKit.podspec file.
### 0.13.0
- **Add**: Githook `prepare-commit-msg` to check commit's style.
- **Add**: Setup script.
### 0.12.0
- **Add**: StatefulButton & RoundedStatefulButton to TIUIElements.
- **Add**: added CACornerMask rounding extension to TIUIElements.
- **Add**: UIControl.State dictionary extensions to TIUIKitCore.
- **Add**: UIFont and CTFont extensions to TIUIKitCore.
- **Breaking change**: reworked BaseTextAttributes & ViewText. Removed ViewTextConfigurable protocol & conformances.
### 0.11.0
- **Add**: Cocoapods support for TI-family libraries.
- **Add**: `SeparatorConfigurable` and all helper types for separator configuration.
- **Add**: `BaseSeparatorCell` - `BaseInitializeableCell` subclass with separators support.
- **Add**: `TITableKitUtils` - set of helpers for TableKit classes.
- **Add**: `BaseTextAttributes` and `ViewText` implementation form LeadKit.
- **Update**: `BaseInitializableView` and `BaseInitializableControl` are moved to `TIUIElements` from `TIUIKitCore`.
### 0.10.9
- **Fix**: `change presentedOrTopViewController to open`.

View File

@ -1,7 +1,7 @@
github "malcommac/SwiftDate"
github "Alamofire/Alamofire"
github "RxSwiftCommunity/RxAlamofire" ~> 5.6.0
github "RxSwiftCommunity/RxAlamofire" ~> 6.1
github "TouchInstinct/TableKit"
github "ReactiveX/RxSwift" ~> 5.1.0
github "pronebird/UIScrollView-InfiniteScroll"
github "ReactiveX/RxSwift" ~> 6.2
github "pronebird/UIScrollView-InfiniteScroll" "1.1.0"
github "SnapKit/SnapKit" ~> 5.0

View File

@ -1,7 +1,7 @@
github "Alamofire/Alamofire" "5.2.2"
github "ReactiveX/RxSwift" "5.1.1"
github "RxSwiftCommunity/RxAlamofire" "v5.6.1"
github "Alamofire/Alamofire" "5.4.3"
github "ReactiveX/RxSwift" "6.2.0"
github "RxSwiftCommunity/RxAlamofire" "v6.1.2"
github "SnapKit/SnapKit" "5.0.1"
github "TouchInstinct/TableKit" "2.10008.1"
github "malcommac/SwiftDate" "6.1.0"
github "malcommac/SwiftDate" "6.3.1"
github "pronebird/UIScrollView-InfiniteScroll" "1.1.0"

5
Gemfile Normal file
View File

@ -0,0 +1,5 @@
# frozen_string_literal: true
source "https://rubygems.org"
gem "cocoapods", "~> 1.11"

98
Gemfile.lock Normal file
View File

@ -0,0 +1,98 @@
GEM
remote: https://rubygems.org/
specs:
CFPropertyList (3.0.5)
rexml
activesupport (6.1.5)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
zeitwerk (~> 2.3)
addressable (2.8.0)
public_suffix (>= 2.0.2, < 5.0)
algoliasearch (1.27.5)
httpclient (~> 2.8, >= 2.8.3)
json (>= 1.5.1)
atomos (0.1.3)
claide (1.1.0)
cocoapods (1.11.3)
addressable (~> 2.8)
claide (>= 1.0.2, < 2.0)
cocoapods-core (= 1.11.3)
cocoapods-deintegrate (>= 1.0.3, < 2.0)
cocoapods-downloader (>= 1.4.0, < 2.0)
cocoapods-plugins (>= 1.0.0, < 2.0)
cocoapods-search (>= 1.0.0, < 2.0)
cocoapods-trunk (>= 1.4.0, < 2.0)
cocoapods-try (>= 1.1.0, < 2.0)
colored2 (~> 3.1)
escape (~> 0.0.4)
fourflusher (>= 2.3.0, < 3.0)
gh_inspector (~> 1.0)
molinillo (~> 0.8.0)
nap (~> 1.0)
ruby-macho (>= 1.0, < 3.0)
xcodeproj (>= 1.21.0, < 2.0)
cocoapods-core (1.11.3)
activesupport (>= 5.0, < 7)
addressable (~> 2.8)
algoliasearch (~> 1.0)
concurrent-ruby (~> 1.1)
fuzzy_match (~> 2.0.4)
nap (~> 1.0)
netrc (~> 0.11)
public_suffix (~> 4.0)
typhoeus (~> 1.0)
cocoapods-deintegrate (1.0.5)
cocoapods-downloader (1.6.2)
cocoapods-plugins (1.0.0)
nap
cocoapods-search (1.0.1)
cocoapods-trunk (1.6.0)
nap (>= 0.8, < 2.0)
netrc (~> 0.11)
cocoapods-try (1.2.0)
colored2 (3.1.2)
concurrent-ruby (1.1.10)
escape (0.0.4)
ethon (0.15.0)
ffi (>= 1.15.0)
ffi (1.15.5)
fourflusher (2.3.1)
fuzzy_match (2.0.4)
gh_inspector (1.1.3)
httpclient (2.8.3)
i18n (1.10.0)
concurrent-ruby (~> 1.0)
json (2.6.1)
minitest (5.15.0)
molinillo (0.8.0)
nanaimo (0.3.0)
nap (1.1.0)
netrc (0.11.0)
public_suffix (4.0.6)
rexml (3.2.5)
ruby-macho (2.5.1)
typhoeus (1.4.0)
ethon (>= 0.9.0)
tzinfo (2.0.4)
concurrent-ruby (~> 1.0)
xcodeproj (1.21.0)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
colored2 (~> 3.1)
nanaimo (~> 0.3.0)
rexml (~> 3.2.4)
zeitwerk (2.5.4)
PLATFORMS
x86_64-darwin-20
x86_64-darwin-21
DEPENDENCIES
cocoapods (~> 1.11)
BUNDLED WITH
2.3.26

View File

@ -1,18 +1,18 @@
Pod::Spec.new do |s|
s.name = "LeadKit"
s.version = "0.10.9"
s.version = "1.35.0"
s.summary = "iOS framework with a bunch of tools for rapid development"
s.homepage = "https://github.com/TouchInstinct/LeadKit"
s.homepage = "https://git.svc.touchin.ru/TouchInstinct/LeadKit"
s.license = "Apache License, Version 2.0"
s.author = "Touch Instinct"
s.source = { :git => "https://github.com/TouchInstinct/LeadKit.git", :tag => s.version }
s.source = { :git => "https://git.svc.touchin.ru/TouchInstinct/LeadKit.git", :tag => s.version }
s.platform = :ios, '10.0'
s.swift_versions = ['5.0']
s.swift_versions = ['5.1']
s.subspec 'UIColorHex' do |ss|
ss.ios.deployment_target = '8.0'
ss.tvos.deployment_target = '9.0'
ss.watchos.deployment_target = '2.0'
ss.ios.deployment_target = '10.0'
ss.tvos.deployment_target = '10.0'
ss.watchos.deployment_target = '3.0'
ss.source_files = "Sources/Extensions/UIColor/UIColor+Hex.swift"
end
@ -68,7 +68,8 @@ Pod::Spec.new do |s|
"Sources/Structures/DrawingOperations/CALayerDrawingOperation.swift",
"Sources/Structures/DrawingOperations/RoundDrawingOperation.swift",
"Sources/Structures/DrawingOperations/BorderDrawingOperation.swift",
"Sources/Structures/DataLoading/PaginationDataLoading/*"
"Sources/Structures/DataLoading/PaginationDataLoading/*",
"Sources/Extensions/UIInterfaceOrientation/*"
]
ss.tvos.exclude_files = [
"Sources/Classes/Controllers/BaseConfigurableController.swift",
@ -101,16 +102,18 @@ Pod::Spec.new do |s|
"Sources/Protocols/Views/SeparatorCell/*",
"Sources/Protocols/TableKit/**/*",
"Sources/Protocols/Controllers/SearchResultsViewController.swift",
"Sources/Structures/DataLoading/PaginationDataLoading/*"
"Sources/Structures/DataLoading/PaginationDataLoading/*",
"Sources/Extensions/UIInterfaceOrientation/*",
"Sources/Classes/Controllers/BaseOrientationController.swift"
]
ss.dependency "RxSwift", '~> 5.1.0'
ss.dependency "RxCocoa", '~> 5.1.0'
ss.dependency "RxAlamofire", '~> 5.6.0'
ss.dependency "RxSwift", '~> 6.2'
ss.dependency "RxCocoa", '~> 6.2'
ss.dependency "RxAlamofire", '~> 6.1'
ss.dependency "SwiftDate", '~> 6'
ss.ios.dependency "TableKit", '~> 2.8'
ss.ios.dependency "SnapKit", '~> 5.0.0'
ss.ios.dependency "TableKit", '~> 2.11'
ss.ios.dependency "SnapKit", '~> 5.0.1'
ss.ios.dependency "UIScrollView-InfiniteScroll", '~> 1.1.0'
end

View File

@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
@ -16,6 +16,39 @@
40F118471F8FEF97004AADAF /* AppearanceConfigurable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40F118461F8FEF97004AADAF /* AppearanceConfigurable.swift */; };
40F118491F8FF223004AADAF /* TableRow+AppearanceExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40F118481F8FF223004AADAF /* TableRow+AppearanceExtension.swift */; };
411073AF23466B41002DD9B9 /* UIViewController+PresentFullScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 411073AE23466B41002DD9B9 /* UIViewController+PresentFullScreen.swift */; };
4C4C7B52267FE27E006F3C70 /* RxAlamofire.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B47267FE27E006F3C70 /* RxAlamofire.xcframework */; };
4C4C7B56267FE27E006F3C70 /* RxSwift.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B49267FE27E006F3C70 /* RxSwift.xcframework */; };
4C4C7B5C267FE27E006F3C70 /* RxRelay.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B4C267FE27E006F3C70 /* RxRelay.xcframework */; };
4C4C7B5E267FE27E006F3C70 /* Alamofire.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B4D267FE27E006F3C70 /* Alamofire.xcframework */; };
4C4C7B60267FE27E006F3C70 /* SwiftDate.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B4E267FE27E006F3C70 /* SwiftDate.xcframework */; };
4C4C7B62267FE27E006F3C70 /* RxBlocking.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B4F267FE27E006F3C70 /* RxBlocking.xcframework */; };
4C4C7B66267FE27F006F3C70 /* RxCocoa.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B51267FE27E006F3C70 /* RxCocoa.xcframework */; };
4C4C7B7F267FE319006F3C70 /* Decimal+Rounding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85A5D49422AA975000C7D254 /* Decimal+Rounding.swift */; };
4C4C7B83267FE32F006F3C70 /* Decimal+Values.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85A5D49B22AAB6B700C7D254 /* Decimal+Values.swift */; };
4C4C7B8A267FE364006F3C70 /* Alamofire.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B4D267FE27E006F3C70 /* Alamofire.xcframework */; };
4C4C7B8C267FE364006F3C70 /* RxAlamofire.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B47267FE27E006F3C70 /* RxAlamofire.xcframework */; };
4C4C7B8E267FE365006F3C70 /* RxBlocking.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B4F267FE27E006F3C70 /* RxBlocking.xcframework */; };
4C4C7B90267FE365006F3C70 /* RxCocoa.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B51267FE27E006F3C70 /* RxCocoa.xcframework */; };
4C4C7B92267FE365006F3C70 /* RxRelay.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B4C267FE27E006F3C70 /* RxRelay.xcframework */; };
4C4C7B94267FE365006F3C70 /* RxSwift.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B49267FE27E006F3C70 /* RxSwift.xcframework */; };
4C4C7B96267FE365006F3C70 /* RxTest.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B50267FE27E006F3C70 /* RxTest.xcframework */; };
4C4C7B98267FE365006F3C70 /* SnapKit.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B4B267FE27E006F3C70 /* SnapKit.xcframework */; };
4C4C7B9A267FE365006F3C70 /* SwiftDate.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B4E267FE27E006F3C70 /* SwiftDate.xcframework */; };
4C4C7BA7267FE3F6006F3C70 /* Decimal+Rounding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85A5D49422AA975000C7D254 /* Decimal+Rounding.swift */; };
4C4C7BA8267FE3F6006F3C70 /* Decimal+Values.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85A5D49B22AAB6B700C7D254 /* Decimal+Values.swift */; };
4C4C7BB7267FE4C9006F3C70 /* ButtonHolderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF65D1724DD6C080006B001 /* ButtonHolderView.swift */; };
4C4C7BBA267FE4DD006F3C70 /* ButtonHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF65D1324DD684A0006B001 /* ButtonHolder.swift */; };
4C4C7BBF267FE508006F3C70 /* Alamofire.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B4D267FE27E006F3C70 /* Alamofire.xcframework */; };
4C4C7BC1267FE508006F3C70 /* RxAlamofire.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B47267FE27E006F3C70 /* RxAlamofire.xcframework */; };
4C4C7BC3267FE508006F3C70 /* RxBlocking.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B4F267FE27E006F3C70 /* RxBlocking.xcframework */; };
4C4C7BC5267FE508006F3C70 /* RxCocoa.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B51267FE27E006F3C70 /* RxCocoa.xcframework */; };
4C4C7BC7267FE509006F3C70 /* RxRelay.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B4C267FE27E006F3C70 /* RxRelay.xcframework */; };
4C4C7BC9267FE509006F3C70 /* RxSwift.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B49267FE27E006F3C70 /* RxSwift.xcframework */; };
4C4C7BCB267FE509006F3C70 /* RxTest.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B50267FE27E006F3C70 /* RxTest.xcframework */; };
4C4C7BCD267FE509006F3C70 /* SnapKit.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B4B267FE27E006F3C70 /* SnapKit.xcframework */; };
4C4C7BCF267FE509006F3C70 /* SwiftDate.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B4E267FE27E006F3C70 /* SwiftDate.xcframework */; };
4C4C7BD1267FE509006F3C70 /* TableKit.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B48267FE27E006F3C70 /* TableKit.xcframework */; };
4C4C7BD3267FE509006F3C70 /* UIScrollView_InfiniteScroll.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C4C7B4A267FE27E006F3C70 /* UIScrollView_InfiniteScroll.xcframework */; };
4CF65D1424DD684A0006B001 /* ButtonHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF65D1324DD684A0006B001 /* ButtonHolder.swift */; };
4CF65D1624DD69250006B001 /* UIButton+ButtonHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF65D1524DD69250006B001 /* UIButton+ButtonHolder.swift */; };
4CF65D1824DD6C080006B001 /* ButtonHolderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF65D1724DD6C080006B001 /* ButtonHolderView.swift */; };
@ -273,9 +306,7 @@
6741CEC220E2430A00FEC4D9 /* UITableView+TableViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEC120E2430900FEC4D9 /* UITableView+TableViewHolder.swift */; };
6741CEC420E2430A00FEC4D9 /* UITableView+TableViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEC120E2430900FEC4D9 /* UITableView+TableViewHolder.swift */; };
6741CECE20E243F800FEC4D9 /* BaseCustomViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CECC20E243F800FEC4D9 /* BaseCustomViewController.swift */; };
6741CED020E243F800FEC4D9 /* BaseCustomViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CECC20E243F800FEC4D9 /* BaseCustomViewController.swift */; };
6741CED120E243F800FEC4D9 /* BaseConfigurableController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CECD20E243F800FEC4D9 /* BaseConfigurableController.swift */; };
6741CED320E243F800FEC4D9 /* BaseConfigurableController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CECD20E243F800FEC4D9 /* BaseConfigurableController.swift */; };
674303CF214FB8F700EF4160 /* GeneralDataLoadingHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 674303CE214FB8F700EF4160 /* GeneralDataLoadingHandler.swift */; };
674303D1214FB8F700EF4160 /* GeneralDataLoadingHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 674303CE214FB8F700EF4160 /* GeneralDataLoadingHandler.swift */; };
674303D2214FB8F700EF4160 /* GeneralDataLoadingHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 674303CE214FB8F700EF4160 /* GeneralDataLoadingHandler.swift */; };
@ -287,7 +318,6 @@
675C1FB41F97CA32007D5249 /* AppearanceConfigurable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40F118461F8FEF97004AADAF /* AppearanceConfigurable.swift */; };
675C1FB51F97CA33007D5249 /* AppearanceConfigurable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40F118461F8FEF97004AADAF /* AppearanceConfigurable.swift */; };
675E0AA921072FF400CDC143 /* BaseScrollContentController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 675E0AA821072FF400CDC143 /* BaseScrollContentController.swift */; };
675E0AAB21072FF400CDC143 /* BaseScrollContentController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 675E0AA821072FF400CDC143 /* BaseScrollContentController.swift */; };
6760DC4D212F351700020BAE /* UIView+AddSubviews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6760DC4C212F351700020BAE /* UIView+AddSubviews.swift */; };
6760DC4F212F351700020BAE /* UIView+AddSubviews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6760DC4C212F351700020BAE /* UIView+AddSubviews.swift */; };
6762131820A0BBA30034EEF1 /* TableSection+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6762131720A0BBA30034EEF1 /* TableSection+Extensions.swift */; };
@ -392,12 +422,9 @@
67CAF8C920652E2A00527085 /* TextFieldViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67CAF8C520652E2A00527085 /* TextFieldViewModel.swift */; };
67CDEE401EB369BF00895905 /* ConfigurableController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 671462241EB3396E00EAB194 /* ConfigurableController.swift */; };
67DB7760210869D1001CB56B /* TableViewWrapperView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67DB775F210869D1001CB56B /* TableViewWrapperView.swift */; };
67DB7762210869D1001CB56B /* TableViewWrapperView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67DB775F210869D1001CB56B /* TableViewWrapperView.swift */; };
67DB776421086A12001CB56B /* BaseTableContentController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67DB776321086A12001CB56B /* BaseTableContentController.swift */; };
67DB776921087154001CB56B /* CollectionViewWrapperView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67DB776821087154001CB56B /* CollectionViewWrapperView.swift */; };
67DB776B21087154001CB56B /* CollectionViewWrapperView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67DB776821087154001CB56B /* CollectionViewWrapperView.swift */; };
67DB776D210871E8001CB56B /* BaseCollectionContentController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67DB776C210871E8001CB56B /* BaseCollectionContentController.swift */; };
67DB776F210871E8001CB56B /* BaseCollectionContentController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67DB776C210871E8001CB56B /* BaseCollectionContentController.swift */; };
67E3524E2119ABE40035BDDB /* UITextField+ViewTextConfigurable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67E3524D2119ABE40035BDDB /* UITextField+ViewTextConfigurable.swift */; };
67E352502119ABE40035BDDB /* UITextField+ViewTextConfigurable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67E3524D2119ABE40035BDDB /* UITextField+ViewTextConfigurable.swift */; };
67E352522119AC060035BDDB /* UIButton+ViewTextConfigurable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67E352512119AC060035BDDB /* UIButton+ViewTextConfigurable.swift */; };
@ -473,25 +500,6 @@
72AECC6C224A979D00D12E7C /* BaseSearchViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72AECC6A224A979D00D12E7C /* BaseSearchViewModel.swift */; };
72AECC6F224A97B100D12E7C /* SearchResultsViewControllerState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72AECC6E224A97B100D12E7C /* SearchResultsViewControllerState.swift */; };
72AECC71224A97F100D12E7C /* SearchResultsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72AECC70224A97F000D12E7C /* SearchResultsViewController.swift */; };
785EDF7C220072B500985ED4 /* SwiftDate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 785EDF76220072B400985ED4 /* SwiftDate.framework */; };
785EDF7D220072B500985ED4 /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 785EDF77220072B400985ED4 /* RxCocoa.framework */; };
785EDF7E220072B500985ED4 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 785EDF78220072B500985ED4 /* Alamofire.framework */; };
785EDF7F220072B500985ED4 /* RxAtomic.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 785EDF79220072B500985ED4 /* RxAtomic.framework */; };
785EDF80220072B500985ED4 /* RxAlamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 785EDF7A220072B500985ED4 /* RxAlamofire.framework */; };
785EDF81220072B500985ED4 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 785EDF7B220072B500985ED4 /* RxSwift.framework */; };
785EDF8322007DF900985ED4 /* TableKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 785EDF8222007DF900985ED4 /* TableKit.framework */; };
785EDF8522007E5200985ED4 /* UIScrollView_InfiniteScroll.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 785EDF8422007E5200985ED4 /* UIScrollView_InfiniteScroll.framework */; };
785EDFA1220081F200985ED4 /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 785EDF9C220081F100985ED4 /* RxCocoa.framework */; };
785EDFA2220081F200985ED4 /* SwiftDate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 785EDF9D220081F100985ED4 /* SwiftDate.framework */; };
785EDFA3220081F200985ED4 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 785EDF9E220081F100985ED4 /* RxSwift.framework */; };
785EDFA4220081F200985ED4 /* RxAtomic.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 785EDF9F220081F100985ED4 /* RxAtomic.framework */; };
785EDFA5220081F200985ED4 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 785EDFA0220081F100985ED4 /* Alamofire.framework */; };
785EDFB22200833100985ED4 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 785EDFA8220082E600985ED4 /* Alamofire.framework */; };
785EDFB32200833100985ED4 /* RxAlamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 785EDFA9220082E600985ED4 /* RxAlamofire.framework */; };
785EDFB42200833100985ED4 /* RxAtomic.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 785EDFAB220082E600985ED4 /* RxAtomic.framework */; };
785EDFB52200833100985ED4 /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 785EDFA7220082E500985ED4 /* RxCocoa.framework */; };
785EDFB62200833100985ED4 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 785EDFA6220082E500985ED4 /* RxSwift.framework */; };
785EDFB72200833100985ED4 /* SwiftDate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 785EDFAA220082E600985ED4 /* SwiftDate.framework */; };
78EC7B1322019F5A0007DCFD /* String+TelpromptURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78EC7B1222019F5A0007DCFD /* String+TelpromptURL.swift */; };
78EC7B1422019F5A0007DCFD /* String+TelpromptURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78EC7B1222019F5A0007DCFD /* String+TelpromptURL.swift */; };
78EC7B1522019F5A0007DCFD /* String+TelpromptURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78EC7B1222019F5A0007DCFD /* String+TelpromptURL.swift */; };
@ -502,7 +510,6 @@
82B4F8DD223903B800F6708C /* Block.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82B4F8DA223903B800F6708C /* Block.swift */; };
82D2966D2264B1790067735C /* LabelTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D2966A2264B1790067735C /* LabelTableViewCell.swift */; };
82D2966F2264B1790067735C /* LabelCellViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D2966C2264B1790067735C /* LabelCellViewModel.swift */; };
82D296712264B4C10067735C /* SnapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 82D296702264B4C10067735C /* SnapKit.framework */; };
82F8BB181F5DDED100C1061B /* Single+DeferredJust.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82F8BB171F5DDED100C1061B /* Single+DeferredJust.swift */; };
8546C2E3224E86280059C255 /* ApiUploadRequestParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8546C2E2224E86280059C255 /* ApiUploadRequestParameters.swift */; };
8546C2E4224E86280059C255 /* ApiUploadRequestParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8546C2E2224E86280059C255 /* ApiUploadRequestParameters.swift */; };
@ -558,6 +565,18 @@
40F118461F8FEF97004AADAF /* AppearanceConfigurable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppearanceConfigurable.swift; sourceTree = "<group>"; };
40F118481F8FF223004AADAF /* TableRow+AppearanceExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TableRow+AppearanceExtension.swift"; sourceTree = "<group>"; };
411073AE23466B41002DD9B9 /* UIViewController+PresentFullScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+PresentFullScreen.swift"; sourceTree = "<group>"; };
4C4C7B46267FE275006F3C70 /* Build */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Build; path = Carthage/Build; sourceTree = "<group>"; };
4C4C7B47267FE27E006F3C70 /* RxAlamofire.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = RxAlamofire.xcframework; path = Carthage/Build/RxAlamofire.xcframework; sourceTree = "<group>"; };
4C4C7B48267FE27E006F3C70 /* TableKit.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = TableKit.xcframework; path = Carthage/Build/TableKit.xcframework; sourceTree = "<group>"; };
4C4C7B49267FE27E006F3C70 /* RxSwift.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = RxSwift.xcframework; path = Carthage/Build/RxSwift.xcframework; sourceTree = "<group>"; };
4C4C7B4A267FE27E006F3C70 /* UIScrollView_InfiniteScroll.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = UIScrollView_InfiniteScroll.xcframework; path = Carthage/Build/UIScrollView_InfiniteScroll.xcframework; sourceTree = "<group>"; };
4C4C7B4B267FE27E006F3C70 /* SnapKit.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = SnapKit.xcframework; path = Carthage/Build/SnapKit.xcframework; sourceTree = "<group>"; };
4C4C7B4C267FE27E006F3C70 /* RxRelay.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = RxRelay.xcframework; path = Carthage/Build/RxRelay.xcframework; sourceTree = "<group>"; };
4C4C7B4D267FE27E006F3C70 /* Alamofire.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Alamofire.xcframework; path = Carthage/Build/Alamofire.xcframework; sourceTree = "<group>"; };
4C4C7B4E267FE27E006F3C70 /* SwiftDate.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = SwiftDate.xcframework; path = Carthage/Build/SwiftDate.xcframework; sourceTree = "<group>"; };
4C4C7B4F267FE27E006F3C70 /* RxBlocking.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = RxBlocking.xcframework; path = Carthage/Build/RxBlocking.xcframework; sourceTree = "<group>"; };
4C4C7B50267FE27E006F3C70 /* RxTest.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = RxTest.xcframework; path = Carthage/Build/RxTest.xcframework; sourceTree = "<group>"; };
4C4C7B51267FE27E006F3C70 /* RxCocoa.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = RxCocoa.xcframework; path = Carthage/Build/RxCocoa.xcframework; sourceTree = "<group>"; };
4CF65D1324DD684A0006B001 /* ButtonHolder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonHolder.swift; sourceTree = "<group>"; };
4CF65D1524DD69250006B001 /* UIButton+ButtonHolder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIButton+ButtonHolder.swift"; sourceTree = "<group>"; };
4CF65D1724DD6C080006B001 /* ButtonHolderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonHolderView.swift; sourceTree = "<group>"; };
@ -827,15 +846,17 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
785EDF7E220072B500985ED4 /* Alamofire.framework in Frameworks */,
785EDF81220072B500985ED4 /* RxSwift.framework in Frameworks */,
785EDF7F220072B500985ED4 /* RxAtomic.framework in Frameworks */,
785EDF7D220072B500985ED4 /* RxCocoa.framework in Frameworks */,
785EDF80220072B500985ED4 /* RxAlamofire.framework in Frameworks */,
82D296712264B4C10067735C /* SnapKit.framework in Frameworks */,
785EDF7C220072B500985ED4 /* SwiftDate.framework in Frameworks */,
785EDF8322007DF900985ED4 /* TableKit.framework in Frameworks */,
785EDF8522007E5200985ED4 /* UIScrollView_InfiniteScroll.framework in Frameworks */,
4C4C7BCB267FE509006F3C70 /* RxTest.xcframework in Frameworks */,
4C4C7BC1267FE508006F3C70 /* RxAlamofire.xcframework in Frameworks */,
4C4C7BC5267FE508006F3C70 /* RxCocoa.xcframework in Frameworks */,
4C4C7BCF267FE509006F3C70 /* SwiftDate.xcframework in Frameworks */,
4C4C7BC3267FE508006F3C70 /* RxBlocking.xcframework in Frameworks */,
4C4C7BCD267FE509006F3C70 /* SnapKit.xcframework in Frameworks */,
4C4C7BC9267FE509006F3C70 /* RxSwift.xcframework in Frameworks */,
4C4C7BD1267FE509006F3C70 /* TableKit.xcframework in Frameworks */,
4C4C7BD3267FE509006F3C70 /* UIScrollView_InfiniteScroll.xcframework in Frameworks */,
4C4C7BC7267FE509006F3C70 /* RxRelay.xcframework in Frameworks */,
4C4C7BBF267FE508006F3C70 /* Alamofire.xcframework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -843,11 +864,13 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
785EDFA5220081F200985ED4 /* Alamofire.framework in Frameworks */,
785EDFA4220081F200985ED4 /* RxAtomic.framework in Frameworks */,
785EDFA1220081F200985ED4 /* RxCocoa.framework in Frameworks */,
785EDFA2220081F200985ED4 /* SwiftDate.framework in Frameworks */,
785EDFA3220081F200985ED4 /* RxSwift.framework in Frameworks */,
4C4C7B56267FE27E006F3C70 /* RxSwift.xcframework in Frameworks */,
4C4C7B62267FE27E006F3C70 /* RxBlocking.xcframework in Frameworks */,
4C4C7B52267FE27E006F3C70 /* RxAlamofire.xcframework in Frameworks */,
4C4C7B66267FE27F006F3C70 /* RxCocoa.xcframework in Frameworks */,
4C4C7B5C267FE27E006F3C70 /* RxRelay.xcframework in Frameworks */,
4C4C7B5E267FE27E006F3C70 /* Alamofire.xcframework in Frameworks */,
4C4C7B60267FE27E006F3C70 /* SwiftDate.xcframework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -855,12 +878,15 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
785EDFB22200833100985ED4 /* Alamofire.framework in Frameworks */,
785EDFB42200833100985ED4 /* RxAtomic.framework in Frameworks */,
785EDFB62200833100985ED4 /* RxSwift.framework in Frameworks */,
785EDFB52200833100985ED4 /* RxCocoa.framework in Frameworks */,
785EDFB32200833100985ED4 /* RxAlamofire.framework in Frameworks */,
785EDFB72200833100985ED4 /* SwiftDate.framework in Frameworks */,
4C4C7B96267FE365006F3C70 /* RxTest.xcframework in Frameworks */,
4C4C7B8C267FE364006F3C70 /* RxAlamofire.xcframework in Frameworks */,
4C4C7B90267FE365006F3C70 /* RxCocoa.xcframework in Frameworks */,
4C4C7B9A267FE365006F3C70 /* SwiftDate.xcframework in Frameworks */,
4C4C7B8E267FE365006F3C70 /* RxBlocking.xcframework in Frameworks */,
4C4C7B98267FE365006F3C70 /* SnapKit.xcframework in Frameworks */,
4C4C7B94267FE365006F3C70 /* RxSwift.xcframework in Frameworks */,
4C4C7B92267FE365006F3C70 /* RxRelay.xcframework in Frameworks */,
4C4C7B8A267FE364006F3C70 /* Alamofire.xcframework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -2037,6 +2063,18 @@
785EDF75220072B400985ED4 /* Frameworks */ = {
isa = PBXGroup;
children = (
4C4C7B4D267FE27E006F3C70 /* Alamofire.xcframework */,
4C4C7B47267FE27E006F3C70 /* RxAlamofire.xcframework */,
4C4C7B4F267FE27E006F3C70 /* RxBlocking.xcframework */,
4C4C7B51267FE27E006F3C70 /* RxCocoa.xcframework */,
4C4C7B4C267FE27E006F3C70 /* RxRelay.xcframework */,
4C4C7B49267FE27E006F3C70 /* RxSwift.xcframework */,
4C4C7B50267FE27E006F3C70 /* RxTest.xcframework */,
4C4C7B4B267FE27E006F3C70 /* SnapKit.xcframework */,
4C4C7B4E267FE27E006F3C70 /* SwiftDate.xcframework */,
4C4C7B48267FE27E006F3C70 /* TableKit.xcframework */,
4C4C7B4A267FE27E006F3C70 /* UIScrollView_InfiniteScroll.xcframework */,
4C4C7B46267FE275006F3C70 /* Build */,
82D296702264B4C10067735C /* SnapKit.framework */,
785EDFA0220081F100985ED4 /* Alamofire.framework */,
785EDF9F220081F100985ED4 /* RxAtomic.framework */,
@ -2302,7 +2340,7 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0830;
LastUpgradeCheck = 1020;
LastUpgradeCheck = 1230;
ORGANIZATIONNAME = "Touch Instinct";
TargetAttributes = {
67186B271EB248F100CFAFFB = {
@ -2326,7 +2364,7 @@
};
};
buildConfigurationList = 78CFEE241C5C456B00F50370 /* Build configuration list for PBXProject "LeadKit" */;
compatibilityVersion = "Xcode 3.2";
compatibilityVersion = "Xcode 12.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
@ -2691,6 +2729,8 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
4C4C7B83267FE32F006F3C70 /* Decimal+Values.swift in Sources */,
4C4C7B7F267FE319006F3C70 /* Decimal+Rounding.swift in Sources */,
67EB7FE620615DE000BDD9FB /* DataSource.swift in Sources */,
6714634A1EB3396E00EAB194 /* ResettableType.swift in Sources */,
6713C23E20AF0D5900875921 /* NetworkOperationModel.swift in Sources */,
@ -2817,6 +2857,10 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
4C4C7BBA267FE4DD006F3C70 /* ButtonHolder.swift in Sources */,
4C4C7BB7267FE4C9006F3C70 /* ButtonHolderView.swift in Sources */,
4C4C7BA7267FE3F6006F3C70 /* Decimal+Rounding.swift in Sources */,
4C4C7BA8267FE3F6006F3C70 /* Decimal+Values.swift in Sources */,
6714634B1EB3396E00EAB194 /* ResettableType.swift in Sources */,
82B4F8DD223903B800F6708C /* Block.swift in Sources */,
671462E71EB3396E00EAB194 /* UIColor+Hex.swift in Sources */,
@ -2858,7 +2902,6 @@
671463A51EB33FF600EAB194 /* Animatable.swift in Sources */,
67CAF8C920652E2A00527085 /* TextFieldViewModel.swift in Sources */,
67E352592119ACF30035BDDB /* ViewTextConfigurable+Extensions.swift in Sources */,
675E0AAB21072FF400CDC143 /* BaseScrollContentController.swift in Sources */,
6714629B1EB3396E00EAB194 /* CGSize+Resize.swift in Sources */,
677B06C221187559006C947D /* ViewTextConfigurable.swift in Sources */,
671463331EB3396E00EAB194 /* CursorType.swift in Sources */,
@ -2881,7 +2924,6 @@
6714632B1EB3396E00EAB194 /* BaseViewModel.swift in Sources */,
673564F42068C2AD00F0CBED /* NumberFormattingService+DefaultImplementation.swift in Sources */,
677452A220625EEE0024EEEF /* PaginationDataLoadingModel.swift in Sources */,
67DB776F210871E8001CB56B /* BaseCollectionContentController.swift in Sources */,
673CF4362063E29B00C329F6 /* TextWithButtonPlaceholder.swift in Sources */,
A6F32C0C1F6EBE5C00AC08EE /* String+LocalizedComponent.swift in Sources */,
6741CEB620E242C100FEC4D9 /* CollectionViewHolder+ScrollViewHolder.swift in Sources */,
@ -2898,7 +2940,6 @@
67745289206259CF0024EEEF /* Rx+RxDataSourceProtocol.swift in Sources */,
67386A8F206CF3F6004EDA6C /* DateFormattingService+DefaultImplementation.swift in Sources */,
671463071EB3396E00EAB194 /* UIView+LoadingIndicator.swift in Sources */,
67DB7762210869D1001CB56B /* TableViewWrapperView.swift in Sources */,
6774526E206249E30024EEEF /* UICollectionView+BackgroundViewHolder.swift in Sources */,
671463A91EB340C000EAB194 /* UIViewController+ConfigurableController.swift in Sources */,
673564F92068C68D00F0CBED /* NumberFormat.swift in Sources */,
@ -2921,14 +2962,12 @@
67EB7FD720615D1700BDD9FB /* ResettableCursorType.swift in Sources */,
671463371EB3396E00EAB194 /* DrawingOperation.swift in Sources */,
67153E3D207DFADA0049D8C0 /* RotateDrawingOperation.swift in Sources */,
6741CED320E243F800FEC4D9 /* BaseConfigurableController.swift in Sources */,
67274782206CD3BD00725163 /* ViewText+Extensions.swift in Sources */,
673CF42E2063DE5900C329F6 /* TextPlaceholderView.swift in Sources */,
6741CEB120E242A500FEC4D9 /* TableViewHolder+ScrollViewHolder.swift in Sources */,
6741CEA320E2416C00FEC4D9 /* ScrollViewHolder.swift in Sources */,
B84CB06B20B702260090DB91 /* Encodable+Extensions.swift in Sources */,
671462731EB3396E00EAB194 /* CursorError.swift in Sources */,
6741CED020E243F800FEC4D9 /* BaseCustomViewController.swift in Sources */,
6732F242214C09F900B446F2 /* UserDefaults+Codable.swift in Sources */,
677B06B521186C14006C947D /* Completable+DeferredJust.swift in Sources */,
6727478D206CD83600725163 /* DateFormat.swift in Sources */,
@ -2964,7 +3003,6 @@
6714637B1EB3396E00EAB194 /* CALayerDrawingOperation.swift in Sources */,
67E902592125B66E008EDF45 /* UIImageView+ExpandCollapseDisclosure.swift in Sources */,
6741CEA720E2418200FEC4D9 /* TableViewHolder.swift in Sources */,
67DB776B21087154001CB56B /* CollectionViewWrapperView.swift in Sources */,
6774529520625D170024EEEF /* GeneralDataLoadingModel.swift in Sources */,
6713C23A20AF0C4D00875921 /* NetworkOperationState.swift in Sources */,
6774529D20625E5B0024EEEF /* PaginationDataLoadingState.swift in Sources */,
@ -3019,8 +3057,12 @@
);
INFOPLIST_FILE = "$(SRCROOT)/Sources/Info-iOS.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
OTHER_SWIFT_FLAGS = "$(inherited) -Xfrontend -warn-long-expression-type-checking=200 -Xfrontend -warn-long-function-bodies=200 -Xfrontend -debug-time-function-bodies";
PRODUCT_BUNDLE_IDENTIFIER = "ru.touchin.LeadKit-iOS";
PRODUCT_NAME = LeadKit;
@ -3049,8 +3091,12 @@
);
INFOPLIST_FILE = "$(SRCROOT)/Sources/Info-iOS.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
OTHER_SWIFT_FLAGS = "$(inherited) -Xfrontend -warn-long-expression-type-checking=200 -Xfrontend -warn-long-function-bodies=200 -Xfrontend -debug-time-function-bodies";
PRODUCT_BUNDLE_IDENTIFIER = "ru.touchin.LeadKit-iOS";
PRODUCT_NAME = LeadKit;
@ -3078,7 +3124,11 @@
);
INFOPLIST_FILE = "$(SRCROOT)/Sources/Info-watchOS.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
OTHER_SWIFT_FLAGS = "$(inherited) -Xfrontend -warn-long-expression-type-checking=200 -Xfrontend -warn-long-function-bodies=200 -Xfrontend -debug-time-function-bodies";
PRODUCT_BUNDLE_IDENTIFIER = "ru.touchin.LeadKit-watchOS";
PRODUCT_NAME = LeadKit;
@ -3110,7 +3160,11 @@
);
INFOPLIST_FILE = "$(SRCROOT)/Sources/Info-watchOS.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
OTHER_SWIFT_FLAGS = "$(inherited) -Xfrontend -warn-long-expression-type-checking=200 -Xfrontend -warn-long-function-bodies=200 -Xfrontend -debug-time-function-bodies";
PRODUCT_BUNDLE_IDENTIFIER = "ru.touchin.LeadKit-watchOS";
PRODUCT_NAME = LeadKit;
@ -3140,7 +3194,11 @@
);
INFOPLIST_FILE = "$(SRCROOT)/Sources/Info-tvOS.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
OTHER_SWIFT_FLAGS = "$(inherited) -Xfrontend -warn-long-expression-type-checking=200 -Xfrontend -warn-long-function-bodies=200 -Xfrontend -debug-time-function-bodies";
PRODUCT_BUNDLE_IDENTIFIER = "ru.touchin.LeadKit-tvOS";
PRODUCT_NAME = LeadKit;
@ -3149,7 +3207,7 @@
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_VERSION = 4.2;
TARGETED_DEVICE_FAMILY = 3;
TVOS_DEPLOYMENT_TARGET = 9.0;
TVOS_DEPLOYMENT_TARGET = 10.0;
};
name = Debug;
};
@ -3171,7 +3229,11 @@
);
INFOPLIST_FILE = "$(SRCROOT)/Sources/Info-tvOS.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
OTHER_SWIFT_FLAGS = "$(inherited) -Xfrontend -warn-long-expression-type-checking=200 -Xfrontend -warn-long-function-bodies=200 -Xfrontend -debug-time-function-bodies";
PRODUCT_BUNDLE_IDENTIFIER = "ru.touchin.LeadKit-tvOS";
PRODUCT_NAME = LeadKit;
@ -3179,7 +3241,7 @@
SKIP_INSTALL = YES;
SWIFT_VERSION = 4.2;
TARGETED_DEVICE_FAMILY = 3;
TVOS_DEPLOYMENT_TARGET = 9.0;
TVOS_DEPLOYMENT_TARGET = 10.0;
};
name = Release;
};
@ -3206,6 +3268,7 @@
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;
@ -3231,7 +3294,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@ -3265,6 +3328,7 @@
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;
@ -3284,10 +3348,11 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1020"
LastUpgradeVersion = "1230"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
@ -27,6 +27,15 @@
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "67186B271EB248F100CFAFFB"
BuildableName = "LeadKit.framework"
BlueprintName = "LeadKit iOS"
ReferencedContainer = "container:LeadKit.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
<TestableReference
skipped = "NO">
@ -39,17 +48,6 @@
</BuildableReference>
</TestableReference>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "67186B271EB248F100CFAFFB"
BuildableName = "LeadKit.framework"
BlueprintName = "LeadKit iOS"
ReferencedContainer = "container:LeadKit.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
@ -70,8 +68,6 @@
ReferencedContainer = "container:LeadKit.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1020"
LastUpgradeVersion = "1230"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
@ -27,6 +27,15 @@
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "6782BB9F1EB31D590086E0B8"
BuildableName = "LeadKit.framework"
BlueprintName = "LeadKit tvOS"
ReferencedContainer = "container:LeadKit.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
<TestableReference
skipped = "NO">
@ -39,17 +48,6 @@
</BuildableReference>
</TestableReference>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "6782BB9F1EB31D590086E0B8"
BuildableName = "LeadKit.framework"
BlueprintName = "LeadKit tvOS"
ReferencedContainer = "container:LeadKit.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
@ -70,8 +68,6 @@
ReferencedContainer = "container:LeadKit.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

107
Makefile Normal file
View File

@ -0,0 +1,107 @@
export SRCROOT := $(shell pwd)
push_to_podspecs: TISwiftUtils.target TIFoundationUtils.target TICoreGraphicsUtils.target TIKeychainUtils.target TIUIKitCore.target TIUIElements.target TIWebView.target TIBottomSheet.target TISwiftUICore.target TITableKitUtils.target TIDeeplink.target TIDeveloperUtils.target TILogging.target TINetworking.target TIMoyaNetworking.target TINetworkingCache.target TIMapUtils.target TIAppleMapUtils.target TIGoogleMapUtils.target TIPagination.target TIAuth.target TIEcommerce.target TITextProcessing.target TIApplication.target
$(call clean)
TISwiftUtils.target:
MODULE_NAME="TISwiftUtils" ./project-scripts/push_to_podspecs.sh
touch TISwiftUtils.target
TIFoundationUtils.target: TISwiftUtils.target TILogging.target
MODULE_NAME="TIFoundationUtils" ./project-scripts/push_to_podspecs.sh
touch TIFoundationUtils.target
TICoreGraphicsUtils.target:
MODULE_NAME="TICoreGraphicsUtils" ./project-scripts/push_to_podspecs.sh
touch TICoreGraphicsUtils.target
TIKeychainUtils.target: TIFoundationUtils.target
MODULE_NAME="TIKeychainUtils" ./project-scripts/push_to_podspecs.sh
touch TIKeychainUtils.target
TIUIKitCore.target: TISwiftUtils.target
MODULE_NAME="TIUIKitCore" ./project-scripts/push_to_podspecs.sh
touch TIUIKitCore.target
TIUIElements.target: TIUIKitCore.target TILogging.target
MODULE_NAME="TIUIElements" ./project-scripts/push_to_podspecs.sh
touch TIUIElements.target
TIWebView.target: TIUIKitCore.target
MODULE_NAME="TIWebView" ./project-scripts/push_to_podspecs.sh
touch TIWebView.target
TIBottomSheet.target: TIUIElements.target
MODULE_NAME="TIBottomSheet" ./project-scripts/push_to_podspecs.sh
touch TIBottomSheet.target
TISwiftUICore.target: TIUIKitCore.target
MODULE_NAME="TISwiftUICore" ./project-scripts/push_to_podspecs.sh
touch TISwiftUICore.target
TITableKitUtils.target: TIUIElements.target
MODULE_NAME="TITableKitUtils" ./project-scripts/push_to_podspecs.sh
touch TITableKitUtils.target
TIDeeplink.target: TIFoundationUtils.target
MODULE_NAME="TIDeeplink" ./project-scripts/push_to_podspecs.sh
touch TIDeeplink.target
TIDeveloperUtils.target: TIUIElements.target
MODULE_NAME="TIDeveloperUtils" ./project-scripts/push_to_podspecs.sh
touch TIDeveloperUtils.target
TINetworking.target: TIFoundationUtils.target
MODULE_NAME="TINetworking" ./project-scripts/push_to_podspecs.sh
touch TINetworking.target
TILogging.target:
MODULE_NAME="TILogging" ./project-scripts/push_to_podspecs.sh
touch TILogging.target
TIMoyaNetworking.target: TINetworking.target
MODULE_NAME="TIMoyaNetworking" ./project-scripts/push_to_podspecs.sh
touch TIMoyaNetworking.target
TINetworkingCache.target: TINetworking.target
MODULE_NAME="TINetworkingCache" ./project-scripts/push_to_podspecs.sh
touch TINetworkingCache.target
TIMapUtils.target: TILogging TICoreGraphicsUtils.target
MODULE_NAME="TIMapUtils" ./project-scripts/push_to_podspecs.sh
touch TIMapUtils.target
TIAppleMapUtils.target: TIMapUtils.target
MODULE_NAME="TIAppleMapUtils" ./project-scripts/push_to_podspecs.sh
touch TIAppleMapUtils.target
TIGoogleMapUtils.target: TIMapUtils.target
MODULE_NAME="TIGoogleMapUtils" ./project-scripts/push_to_podspecs.sh
touch TIGoogleMapUtils.target
TIYandexMapUtils.target: TIMapUtils.target
MODULE_NAME="TIYandexMapUtils" ./project-scripts/push_to_podspecs.sh
touch TIYandexMapUtils.target
TIPagination.target: TISwiftUtils.target
MODULE_NAME="TIPagination" ./project-scripts/push_to_podspecs.sh
touch TIPagination.target
TIAuth.target: TIUIKitCore.target TIKeychainUtils.target
MODULE_NAME="TIAuth" ./project-scripts/push_to_podspecs.sh
touch TIAuth.target
TIEcommerce.target: TINetworking.target TIUIElements.target
MODULE_NAME="TIEcommerce" ./project-scripts/push_to_podspecs.sh
touch TIEcommerce.target
TITextProcessing.target:
MODULE_NAME="TITextProcessing" ./project-scripts/push_to_podspecs.sh
touch TITextProcessing.target
TIApplication.target: TIFoundationUtils.target TILogging.target
MODULE_NAME="TIApplication" ./project-scripts/push_to_podspecs.sh
touch TIApplication.target
clean:
rm *.target

View File

@ -21,7 +21,7 @@
//
import UIKit
import TIUIKitCore
import TIUIElements
import TISwiftUtils
/// Base full OTP View for entering the verification code

View File

@ -20,7 +20,7 @@
// THE SOFTWARE.
//
import TIUIKitCore
import TIUIElements
import TISwiftUtils
/// Base OTP view with textfield for entering a one symbol

95
Package.resolved Normal file
View File

@ -0,0 +1,95 @@
{
"pins" : [
{
"identity" : "alamofire",
"kind" : "remoteSourceControl",
"location" : "https://github.com/Alamofire/Alamofire.git",
"state" : {
"revision" : "bc268c28fb170f494de9e9927c371b8342979ece",
"version" : "5.7.1"
}
},
{
"identity" : "antlr4",
"kind" : "remoteSourceControl",
"location" : "https://github.com/antlr/antlr4",
"state" : {
"revision" : "44d87bc1d130c88aa452894aa5f7e2f710f68253",
"version" : "4.10.1"
}
},
{
"identity" : "cache",
"kind" : "remoteSourceControl",
"location" : "https://github.com/hyperoslo/Cache.git",
"state" : {
"revision" : "c7f4d633049c3bd649a353bad36f6c17e9df085f",
"version" : "6.0.0"
}
},
{
"identity" : "cursors",
"kind" : "remoteSourceControl",
"location" : "https://github.com/petropavel13/Cursors",
"state" : {
"revision" : "52f27b82cb1cbbc2b5fd09514c48b9c75e3b0300",
"version" : "0.6.0"
}
},
{
"identity" : "keychainaccess",
"kind" : "remoteSourceControl",
"location" : "https://github.com/kishikawakatsumi/KeychainAccess.git",
"state" : {
"revision" : "84e546727d66f1adc5439debad16270d0fdd04e7",
"version" : "4.2.2"
}
},
{
"identity" : "moya",
"kind" : "remoteSourceControl",
"location" : "https://github.com/Moya/Moya.git",
"state" : {
"revision" : "c263811c1f3dbf002be9bd83107f7cdc38992b26",
"version" : "15.0.3"
}
},
{
"identity" : "panmodal",
"kind" : "remoteSourceControl",
"location" : "https://git.svc.touchin.ru/TouchInstinct/PanModal",
"state" : {
"revision" : "ced7c1703f90746df0224b6e0d33c146d9ae4284",
"version" : "1.3.1"
}
},
{
"identity" : "reactiveswift",
"kind" : "remoteSourceControl",
"location" : "https://github.com/ReactiveCocoa/ReactiveSwift.git",
"state" : {
"revision" : "c43bae3dac73fdd3cb906bd5a1914686ca71ed3c",
"version" : "6.7.0"
}
},
{
"identity" : "rxswift",
"kind" : "remoteSourceControl",
"location" : "https://github.com/ReactiveX/RxSwift.git",
"state" : {
"revision" : "9dcaa4b333db437b0fbfaf453fad29069044a8b4",
"version" : "6.6.0"
}
},
{
"identity" : "tablekit",
"kind" : "remoteSourceControl",
"location" : "https://git.svc.touchin.ru/TouchInstinct/TableKit.git",
"state" : {
"revision" : "fec9537745799fab55df7477cb3ec2b4ea5c254d",
"version" : "2.12.0"
}
}
],
"version" : 2
}

View File

@ -1,25 +1,198 @@
// swift-tools-version:5.0
// swift-tools-version:5.7
#if canImport(PackageDescription)
import PackageDescription
let package = Package(
name: "LeadKit",
platforms: [
.iOS(.v11)
.iOS(.v12)
],
products: [
.library(name: "TITransitions", targets: ["TITransitions"]),
// MARK: - Application
.library(name: "TIApplication", targets: ["TIApplication"]),
// MARK: - UIKit
.library(name: "TIUIKitCore", targets: ["TIUIKitCore"]),
.library(name: "TIUIElements", targets: ["TIUIElements"]),
.library(name: "TIWebView", targets: ["TIWebView"]),
.library(name: "TIBottomSheet", targets: ["TIBottomSheet"]),
// MARK: - SwiftUI
.library(name: "TISwiftUICore", targets: ["TISwiftUICore"]),
// MARK: - Utils
.library(name: "TISwiftUtils", targets: ["TISwiftUtils"]),
.library(name: "TIFoundationUtils", targets: ["TIFoundationUtils"]),
.library(name: "TIUIElements", targets: ["TIUIElements"]),
.library(name: "OTPSwiftView", targets: ["OTPSwiftView"])
.library(name: "TICoreGraphicsUtils", targets: ["TICoreGraphicsUtils"]),
.library(name: "TIKeychainUtils", targets: ["TIKeychainUtils"]),
.library(name: "TITableKitUtils", targets: ["TITableKitUtils"]),
.library(name: "TIDeeplink", targets: ["TIDeeplink"]),
.library(name: "TIDeveloperUtils", targets: ["TIDeveloperUtils"]),
// MARK: - Networking
.library(name: "TINetworking", targets: ["TINetworking"]),
.library(name: "TIMoyaNetworking", targets: ["TIMoyaNetworking"]),
.library(name: "TINetworkingCache", targets: ["TINetworkingCache"]),
// MARK: - Maps
.library(name: "TIMapUtils", targets: ["TIMapUtils"]),
.library(name: "TIAppleMapUtils", targets: ["TIAppleMapUtils"]),
// MARK: - Elements
.library(name: "OTPSwiftView", targets: ["OTPSwiftView"]),
.library(name: "TITransitions", targets: ["TITransitions"]),
.library(name: "TIPagination", targets: ["TIPagination"]),
.library(name: "TIAuth", targets: ["TIAuth"]),
.library(name: "TIEcommerce", targets: ["TIEcommerce"]),
.library(name: "TITextProcessing", targets: ["TITextProcessing"])
],
dependencies: [
.package(url: "https://git.svc.touchin.ru/TouchInstinct/TableKit.git", .upToNextMinor(from: "2.12.0")),
.package(url: "https://github.com/kishikawakatsumi/KeychainAccess.git", .upToNextMajor(from: "4.2.2")),
.package(url: "https://github.com/petropavel13/Cursors", .upToNextMajor(from: "0.5.1")),
.package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.4.0")),
.package(url: "https://github.com/Moya/Moya.git", .upToNextMajor(from: "15.0.0")),
.package(url: "https://github.com/hyperoslo/Cache.git", .upToNextMajor(from: "6.0.0")),
.package(url: "https://github.com/antlr/antlr4", .upToNextMinor(from: "4.10.1")),
.package(url: "https://git.svc.touchin.ru/TouchInstinct/PanModal", .upToNextMinor(from: "1.3.0"))
],
targets: [
// MARK: - Application architecture
.target(name: "TIApplication",
dependencies: ["TILogging", "TIFoundationUtils", "KeychainAccess"],
path: "TIApplication/Sources",
plugins: [.plugin(name: "TISwiftLintPlugin")]),
// MARK: - UIKit
.target(name: "TIUIKitCore", dependencies: ["TISwiftUtils"], path: "TIUIKitCore/Sources"),
.target(name: "TIUIElements",
dependencies: ["TIUIKitCore", "TILogging"],
path: "TIUIElements/Sources",
exclude: ["../TIUIElements.app"],
plugins: [.plugin(name: "TISwiftLintPlugin")]),
.target(name: "TIWebView", dependencies: ["TIUIKitCore", "TISwiftUtils"], path: "TIWebView/Sources"),
.target(name: "TIBottomSheet",
dependencies: ["PanModal", "TIUIElements", "TIUIKitCore", "TISwiftUtils"],
path: "TIBottomSheet/Sources",
exclude: ["../TIBottomSheet.app"],
plugins: [.plugin(name: "TISwiftLintPlugin")]),
// MARK: - SwiftUI
.target(name: "TISwiftUICore",
dependencies: ["TIUIKitCore", "TISwiftUtils"],
path: "TISwiftUICore/Sources"),
// MARK: - Utils
.target(name: "TISwiftUtils",
path: "TISwiftUtils/Sources",
plugins: [.plugin(name: "TISwiftLintPlugin")]),
.target(name: "TIFoundationUtils",
dependencies: ["TISwiftUtils", "TILogging"],
path: "TIFoundationUtils",
exclude: ["TIFoundationUtils.app"],
resources: [
.copy("PrivacyInfo.xcprivacy"),
],
plugins: [.plugin(name: "TISwiftLintPlugin")]),
.target(name: "TICoreGraphicsUtils",
dependencies: [],
path: "TICoreGraphicsUtils/Sources",
exclude: ["../TICoreGraphicsUtils.app"],
plugins: [.plugin(name: "TISwiftLintPlugin")]),
.target(name: "TIKeychainUtils",
dependencies: ["TIFoundationUtils", "KeychainAccess"],
path: "TIKeychainUtils/Sources",
exclude: ["../TIKeychainUtils.app"],
plugins: [.plugin(name: "TISwiftLintPlugin")]),
.target(name: "TITableKitUtils", dependencies: ["TIUIElements", "TableKit"], path: "TITableKitUtils/Sources"),
.target(name: "TIDeeplink", dependencies: ["TIFoundationUtils"], path: "TIDeeplink", exclude: ["TIDeeplink.app"]),
.target(name: "TIDeveloperUtils", dependencies: ["TISwiftUtils", "TIUIKitCore", "TIUIElements"], path: "TIDeveloperUtils/Sources"),
.target(name: "TILogging", path: "TILogging/Sources", plugins: ["TISwiftLintPlugin"]),
// MARK: - Networking
.target(name: "TINetworking",
dependencies: ["TIFoundationUtils", "Alamofire", "TILogging"],
path: "TINetworking/Sources",
plugins: [.plugin(name: "TISwiftLintPlugin")]),
.target(name: "TIMoyaNetworking",
dependencies: ["TINetworking", "Moya"],
path: "TIMoyaNetworking/Sources",
plugins: [.plugin(name: "TISwiftLintPlugin")]),
.target(name: "TINetworkingCache",
dependencies: ["TINetworking", "Cache"],
path: "TINetworkingCache/Sources",
plugins: [.plugin(name: "TISwiftLintPlugin")]),
// MARK: - Maps
.target(name: "TIMapUtils",
dependencies: ["TILogging", "TICoreGraphicsUtils"],
path: "TIMapUtils/Sources",
plugins: [.plugin(name: "TISwiftLintPlugin")]),
.target(name: "TIAppleMapUtils",
dependencies: ["TIMapUtils"],
path: "TIAppleMapUtils/Sources",
plugins: [.plugin(name: "TISwiftLintPlugin")]),
// MARK: - Elements
.target(name: "OTPSwiftView", dependencies: ["TIUIElements"], path: "OTPSwiftView/Sources"),
.target(name: "TITransitions", path: "TITransitions/Sources"),
.target(name: "TIUIKitCore", path: "TIUIKitCore/Sources"),
.target(name: "TISwiftUtils", path: "TISwiftUtils/Sources"),
.target(name: "TIFoundationUtils", dependencies: ["TISwiftUtils"], path: "TIFoundationUtils/Sources"),
.target(name: "TIUIElements", dependencies: ["TIUIKitCore"], path: "TIUIElements/Sources"),
.target(name: "OTPSwiftView", dependencies: ["TIUIKitCore", "TISwiftUtils"], path: "OTPSwiftView/Sources")
.target(name: "TIPagination", dependencies: ["Cursors", "TISwiftUtils"], path: "TIPagination/Sources"),
.target(name: "TIAuth", dependencies: ["TIUIKitCore", "TIKeychainUtils"], path: "TIAuth/Sources"),
.target(name: "TIEcommerce", dependencies: ["TIFoundationUtils", "TISwiftUtils", "TINetworking", "TIUIKitCore", "TIUIElements"], path: "TIEcommerce/Sources"),
.target(name: "TITextProcessing",
dependencies: [.product(name: "Antlr4", package: "antlr4")],
path: "TITextProcessing/Sources",
exclude: ["../TITextProcessing.app"]),
.binaryTarget(name: "SwiftLintBinary",
url: "https://github.com/realm/SwiftLint/releases/download/0.52.2/SwiftLintBinary-macos.artifactbundle.zip",
checksum: "89651e1c87fb62faf076ef785a5b1af7f43570b2b74c6773526e0d5114e0578e"),
.plugin(name: "TISwiftLintPlugin",
capability: .buildTool(),
dependencies: ["SwiftLintBinary"]),
// MARK: - Tests
.testTarget(
name: "TITimerTests",
dependencies: ["TIFoundationUtils"],
path: "Tests/TITimerTests"),
.testTarget(
name: "TITextProcessingTests",
dependencies: ["TITextProcessing"],
path: "Tests/TITextProcessingTests"),
.testTarget(
name: "TIFoundationUtilsTests",
dependencies: ["TIFoundationUtils", "TISwiftUtils", "TILogging"],
path: "Tests/TIFoundationUtilsTests")
]
)
#endif

View File

@ -0,0 +1,57 @@
//
// Copyright (c) 2023 Touch Instinct
//
// 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.
//
import PackagePlugin
import Foundation
@main
struct SwiftLintPlugin: BuildToolPlugin {
func createBuildCommands(context: PluginContext, target: Target) async throws -> [Command] {
let swiftlintScriptPath = context.package.directory.appending(["build-scripts", "xcode", "build_phases", "swiftlint.sh"])
let swiftlintExecutablePath = try context.tool(named: "swiftlint").path
let srcRoot = context.package.directory.string
let targetDir = target.directory.string
let relativeTargetDir = targetDir.replacingOccurrences(of: srcRoot, with: "")
let clearRelativeTargetDir = relativeTargetDir[relativeTargetDir.index(after: relativeTargetDir.startIndex)...] // trim leading /
return [
.prebuildCommand(displayName: "SwiftLint linting \(target.name)...",
executable: swiftlintScriptPath,
arguments: [
swiftlintExecutablePath,
context.package.directory.appending(subpath: "swiftlint_base.yml")
],
environment: [
"SCRIPT_DIR": swiftlintScriptPath.removingLastComponent().string,
"SRCROOT": srcRoot,
"SCRIPT_INPUT_FILE_COUNT": "1",
"SCRIPT_INPUT_FILE_0": clearRelativeTargetDir,
// "FORCE_LINT": "1", // Lint all files in target (not only modified)
// "AUTOCORRECT": "1"
],
outputFilesDirectory: context.package.directory)
]
}
}

138
README.md
View File

@ -1,11 +1,139 @@
# LeadKit
LeadKit is the iOS framework with a bunch of tools for rapid app development.
## Additional
This repository contains the following additional frameworks:
LeadKit is the iOS framework with a bunch of tools for rapid app development.
This repository contains the following frameworks:
- [TISwiftUtils](TISwiftUtils) - a bunch of useful helpers for Swift development.
- [TIFoundationUtils](TIFoundationUtils) - set of helpers for Foundation framework classes.
- [TIUIKitCore](TIUIKitCore) - core ui elements and protocols from LeadKit.
- [TITransitions](TITransitions) - set of custom transitions to present controller.
- [TISwiftUICore](TISwiftUICore) Core UI elements: protocols, views and helpers.
- [TIUIElements](TIUIElements) - bunch of of useful protocols and views.
- [OTPSwiftView](OTPSwiftView) - a fully customizable OTP view.
- [TISwiftUtils](TISwiftUtils) - a bunch of useful helpers for development.
- [TITableKitUtils](TITableKitUtils) - set of helpers for TableKit classes.
- [TIKeychainUtils](TIKeychainUtils) - set of helpers for Keychain classes.
- [TIPagination](TIPagination) - realisation of paginating items from a data source.
- [TINetworking](TINetworking) - Swagger-frendly networking layer helpers.
- [TIMoyaNetworking](TIMoyaNetworking) - Moya + Swagger network service.
- [TIAppleMapUtils](TIAppleMapUtils) - set of helpers for map objects clustering and interacting using Apple MapKit.
- [TIGoogleMapUtils](TIGoogleMapUtils) - set of helpers for map objects clustering and interacting using Google Maps SDK.
- [TIYandexMapUtils](TIYandexMapUtils) - set of helpers for map objects clustering and interacting using Yandex Maps SDK.
- [TIAuth](TIAuth) - login, registration, confirmation and other related actions
## Playgrounds
### Create new Playground
```sh
$ cd TIModuleName
$ touch PlaygroundPodfile
$ echo "ENV[\"DEVELOPMENT_INSTALL\"] = \"true\"
target 'TIModuleName' do
platform :ios, IOS_VERSION_NUMBER
use_frameworks!
pod 'TIDependencyModuleName', :path => '../../../../TIDependencyModuleName/TIDependencyModuleName.podspec'
pod 'TIModuleName', :path => '../../../../TIModuleName/TIModuleName.podspec'
end" > PlaygroundPodfile
$ nef playground --name TIModuleName --cocoapods --custom-podfile PlaygroundPodfile
```
See example of `PlaygroundPodfile` in `TIFoundationUtils`
### Rename/add pages to Playground
For every new feature in module create new Playground page with documentation in comments. See [nef markdown documentation](https://github.com/bow-swift/nef#-generating-a-markdown-project).
### Create symlink to nef playground
```sh
$ cd TIModuleName
$ ln -s TIModuleName.app/Contents/MacOS/TIModuleName.playground TIModuleName.playground
```
### Add nef files to TIModuleName.app/.gitignore
```
# gitignore nef files
**/build/
**/nef/
LICENSE
```
### Exclude .app bundles from package sources
#### SPM
```swift
.target(name: "TIModuleName", dependencies: ..., path: ..., exclude: ["TIModuleName.app"]),
```
#### Podspec
```ruby
sources = 'your_sources_expression'
if ENV["DEVELOPMENT_INSTALL"] # installing using :path =>
s.source_files = sources
s.exclude_files = s.name + '.app'
else
s.source_files = s.name + '/' + sources
s.exclude_files = s.name + '/*.app'
end
```
## Docs:
- [TIFoundationUtils](docs/tifoundationutils)
* [AsyncOperation](docs/tifoundationutils/asyncoperation.md)
- [TICoreGraphicsUtils](docs/ticoregraphicsutils)
* [DrawingOperations](docs/ticoregraphicsutils/drawingoperations.md)
- [TIKeychainUtils](docs/tikeychainutils)
* [SingleValueStorage](docs/tikeychainutils/singlevaluestorage.md)
- [TIUIElements](docs/tiuielements)
* [Skeletons](docs/tiuielements/skeletons.md)
* [Placeholders](docs/tiuielements/placeholder.md)
- [TITextProcessing](docs/titextprocessing)
* [TITextProcessing](docs/titextprocessing/titextprocessing.md)
- [TIDeeplink](docs/tideeplink/deeplinks.md)
- [TIBottomSheet](docs/tibottomsheet/tibottomsheet.md)
- [Semantic Commit Messages](docs/semantic-commit-messages.md) - commit message codestyle.
- [Snippets](docs/snippets.md) - useful commands and scripts for development.
## Contributing
- Run following script in framework's folder:
```
./setup
```
- If legacy [Source](https://git.svc.touchin.ru/TouchInstinct/LeadKit/tree/master/Sources) folder needed, [build dependencies for LeadKit.xcodeproj](https://git.svc.touchin.ru/TouchInstinct/LeadKit/blob/master/docs/snippets.md#build-dependencies-for-LeadKit.xcodeproj).
- Make sure the commit message codestyle is followed. More about [Semantic Commit Messages](docs/semantic-commit-messages.md).
## Installation
### SPM
```swift
dependencies: [
.package(url: "https://git.svc.touchin.ru/TouchInstinct/LeadKit.git", from: "x.y.z"),
],
```
### Cocoapods
```ruby
source 'https://git.svc.touchin.ru/TouchInstinct/Podspecs.git'
pod 'TISwiftUtils', 'x.y.z'
pod 'TIFoundationUtils', 'x.y.z'
# ...
```
## Legacy
Code located in root `Sources` folder and `LeadKit.podspec` should be treated as legacy and shouldn't be used in newly created projects. Please use TI* modules via SPM or CocoaPods.

View File

@ -26,11 +26,11 @@ import UIKit
open class BaseCollectionContentController<ViewModel>: BaseScrollContentController<ViewModel, CollectionViewWrapperView> {
override open func createView() -> CollectionViewWrapperView {
return CollectionViewWrapperView(layout: UICollectionViewFlowLayout())
CollectionViewWrapperView(layout: UICollectionViewFlowLayout())
}
/// Contained UICollectionView instance.
public var collectionView: UICollectionView {
return customView.collectionView
customView.collectionView
}
}

View File

@ -49,6 +49,6 @@ open class BaseCustomViewController<ViewModel, View: UIView>: BaseConfigurableCo
///
/// - Returns: Initialized custom view.
open func createView() -> View {
return View()
View()
}
}

View File

@ -23,8 +23,8 @@ open class BaseOrientationController: UIViewController {
return super.supportedInterfaceOrientations
}
}
open override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
return forcedInterfaceOrientation ?? super.preferredInterfaceOrientationForPresentation
forcedInterfaceOrientation ?? super.preferredInterfaceOrientationForPresentation
}
}

View File

@ -49,13 +49,13 @@ open class BaseScrollContentController<ViewModel, View: ScrollViewHolderView>: B
/// Contained UIScrollView instance.
public var scrollView: UIScrollView {
return customView.scrollView
customView.scrollView
}
/// Default insets used for contained scroll view.
public var defaultInsets: UIEdgeInsets {
get {
return defaultInsetsRelay.value
defaultInsetsRelay.value
}
set {
defaultInsetsRelay.accept(newValue)

View File

@ -32,11 +32,11 @@ open class BaseTableContentController<ViewModel>: BaseScrollContentController<Vi
///
/// - Returns: Initialized TableDirector.
open func createTableDirector() -> TableDirector {
return TableDirector(tableView: tableView)
TableDirector(tableView: tableView)
}
override open func createView() -> TableViewWrapperView {
return TableViewWrapperView(tableViewStyle: .plain)
TableViewWrapperView(tableViewStyle: .plain)
}
override open func configureAppearance() {
@ -47,6 +47,6 @@ open class BaseTableContentController<ViewModel>: BaseScrollContentController<Vi
/// Contained UITableView instance.
public var tableView: UITableView {
return customView.tableView
customView.tableView
}
}

View File

@ -42,17 +42,17 @@ public class FixedPageCursor<Cursor: CursorType>: CursorType, RxDataSource {
}
public var exhausted: Bool {
return cursor.exhausted && cursor.count == count
cursor.exhausted && cursor.count == count
}
public private(set) var count: Int = 0
public subscript(index: Int) -> Cursor.Element {
return cursor[index]
cursor[index]
}
public func loadNextBatch() -> Single<[Cursor.Element]> {
return Single.deferred {
Single.deferred {
if self.exhausted {
return .error(CursorError.exhausted)
}

View File

@ -29,7 +29,7 @@ public extension CursorType {
/// - Parameter transform: closure to transform elements
/// - Returns: new MapCursor instance
func flatMap<T>(transform: @escaping MapCursor<Self, T>.Transform) -> MapCursor<Self, T> {
return MapCursor(cursor: self, transform: transform)
MapCursor(cursor: self, transform: transform)
}
/// Creates ResettableMapCursor with current cursor
@ -39,7 +39,7 @@ public extension CursorType {
func flatMap<T>(transform: @escaping ResettableMapCursor<Self, T>.Transform)
-> ResettableMapCursor<Self, T> where Self: ResettableCursorType {
return ResettableMapCursor(cursor: self, transform: transform)
ResettableMapCursor(cursor: self, transform: transform)
}
}
@ -67,19 +67,19 @@ public class MapCursor<Cursor: CursorType, T>: CursorType, RxDataSource {
}
public var exhausted: Bool {
return cursor.exhausted
cursor.exhausted
}
public var count: Int {
return elements.count
elements.count
}
public subscript(index: Int) -> T {
return elements[index]
elements[index]
}
public func loadNextBatch() -> Single<[T]> {
return cursor.loadNextBatch().map { newItems in
cursor.loadNextBatch().map { newItems in
let transformedNewItems = newItems.compactMap(self.transform)
self.elements += transformedNewItems

View File

@ -37,7 +37,7 @@ public final class SingleLoadCursorConfiguration<Element>: TotalCountCursorConfi
}
public func resultSingle() -> Single<ResultType> {
return loadingSingle
loadingSingle
}
public init(resetFrom other: SingleLoadCursorConfiguration) {
@ -67,15 +67,15 @@ public class SingleLoadCursor<Element>: ResettableCursorType {
public private(set) var exhausted = false
public var count: Int {
return content.count
content.count
}
public subscript(index: Int) -> Element {
return content[index]
content[index]
}
public func loadNextBatch() -> Single<[Element]> {
return Single.deferred {
Single.deferred {
if self.exhausted {
return .error(CursorError.exhausted)
}

View File

@ -45,11 +45,11 @@ public class StaticCursor<Element>: ResettableRxDataSourceCursor {
public private(set) var count = 0
public subscript(index: Int) -> Element {
return content[index]
content[index]
}
public func loadNextBatch() -> Single<[Element]> {
return Single.deferred {
Single.deferred {
if self.exhausted {
return .error(CursorError.exhausted)
}

View File

@ -35,15 +35,15 @@ open class TotalCountCursor<CursorConfiguration: TotalCountCursorConfiguration>:
public private(set) var totalCount: Int = .max
public var exhausted: Bool {
return count >= totalCount
count >= totalCount
}
public var count: Int {
return elements.count
elements.count
}
public subscript(index: Int) -> Element {
return elements[index]
elements[index]
}
public init(configuration: CursorConfiguration) {
@ -55,11 +55,11 @@ open class TotalCountCursor<CursorConfiguration: TotalCountCursorConfiguration>:
}
open func processResultFromConfigurationSingle() -> Single<CursorConfiguration.ResultType> {
return configuration.resultSingle()
configuration.resultSingle()
}
public func loadNextBatch() -> Single<[Element]> {
return processResultFromConfigurationSingle()
processResultFromConfigurationSingle()
.do(onSuccess: { [weak self] listingResult in
self?.totalCount = listingResult.totalCount
self?.elements = (self?.elements ?? []) + listingResult.results

View File

@ -63,28 +63,28 @@ open class GeneralDataLoadingViewModel<ResultType>: BaseViewModel, GeneralDataLo
/// Returns observable that emits current loading state.
open var loadingStateObservable: Observable<LoadingState> {
return loadingStateRelay.asObservable()
loadingStateRelay.asObservable()
}
/// Returns driver that emits current loading state.
open var loadingStateDriver: Driver<LoadingState> {
return loadingStateRelay.asDriver()
loadingStateRelay.asDriver()
}
/// By default returns true if loading state == .result.
open var hasContent: Bool {
return currentLoadingState.hasResult
currentLoadingState.hasResult
}
/// Returns current result if it exists.
public var currentResult: ResultType? {
return currentLoadingState.result
currentLoadingState.result
}
/// Current state of loading process.
private(set) public var currentLoadingState: LoadingState {
get {
return loadingStateRelay.value
loadingStateRelay.value
}
set {
loadingStateRelay.accept(newValue)

View File

@ -22,9 +22,11 @@
import RxSwift
public typealias RxPaginationDataLoadingModel<Cursor: ResettableRxDataSourceCursor> =
RxDataLoadingModel<PaginationDataLoadingState<Cursor>>
/// Data loading model for PaginationDataLoadingState with ResettableRxDataSourceCursor as data source.
public final class PaginationDataLoadingModel<Cursor: ResettableRxDataSourceCursor>:
RxDataLoadingModel<PaginationDataLoadingState<Cursor>> {
public final class PaginationDataLoadingModel<Cursor: ResettableRxDataSourceCursor>: RxPaginationDataLoadingModel<Cursor> {
private enum LoadType {

View File

@ -43,7 +43,7 @@ final public class PaginationWrapper<Cursor: ResettableRxDataSourceCursor, Deleg
/// so the handler can be triggered before reaching end. Defaults to 0.0;
public var infiniteScrollTriggerOffset: CGFloat {
get {
return wrappedView.scrollView.infiniteScrollTriggerOffset
wrappedView.scrollView.infiniteScrollTriggerOffset
}
set {
wrappedView.scrollView.infiniteScrollTriggerOffset = newValue
@ -327,7 +327,7 @@ final public class PaginationWrapper<Cursor: ResettableRxDataSourceCursor, Deleg
private extension PaginationWrapper {
private var stateChanged: Binder<LoadingState> {
return Binder(self) { base, value in
Binder(self) { base, value in
switch value {
case .initial:
base.onInitialState()
@ -354,7 +354,7 @@ private extension PaginationWrapper {
}
var scrollOffsetChanged: Binder<CGPoint> {
return Binder(self) { base, value in
Binder(self) { base, value in
base.currentPlaceholderViewTopConstraint?.constant = -value.y
}
}

View File

@ -39,7 +39,7 @@ open class RxNetworkOperationModel<LoadingStateType: NetworkOperationState>: Net
private let errorHandler: ErrorHandler
open var stateDriver: Driver<LoadingStateType> {
return stateRelay.asDriver()
stateRelay.asDriver()
}
/// Model initializer with data source and custom error handler.
@ -81,17 +81,17 @@ open class RxNetworkOperationModel<LoadingStateType: NetworkOperationState>: Net
func requestResult(from dataSource: DataSourceType) {
currentRequestDisposable = dataSource
.resultSingle()
.observeOn(MainScheduler.instance)
.observe(on: MainScheduler.instance)
.subscribe(onSuccess: { [weak self] result in
self?.onGot(result: result, from: dataSource)
}, onError: { [weak self] error in
}, onFailure: { [weak self] error in
self?.onGot(error: error)
})
}
var state: LoadingStateType {
get {
return stateRelay.value
stateRelay.value
}
set {
stateRelay.accept(newValue)

View File

@ -58,15 +58,15 @@ where ViewModel: BaseSearchViewModel<Item, ItemViewModel> {
open override func bindViews() {
super.bindViews()
viewModel.itemsViewModelsDriver
.drive(onNext: { [weak self] viewModels in
self?.handle(itemViewModels: viewModels)
})
.drive(with: self) { owner, viewModels in
owner.handle(itemViewModels: viewModels)
}
.disposed(by: disposeBag)
Observable.merge(searchResults, resetResults)
.subscribe(onNext: { [weak self] state in
self?.handle(searchResultsState: state)
})
.subscribe(with: self) { owner, state in
owner.handle(searchResultsState: state)
}
.disposed(by: disposeBag)
let searchText = searchController.searchBar.rx.text
@ -112,11 +112,11 @@ where ViewModel: BaseSearchViewModel<Item, ItemViewModel> {
}
open var searchBarPlaceholder: String {
return ""
""
}
open var searchBarColor: UIColor {
return .gray
.gray
}
open var statusBarView: UIView {
@ -131,7 +131,7 @@ where ViewModel: BaseSearchViewModel<Item, ItemViewModel> {
}
open var statusBarColor: UIColor {
return .black
.black
}
open func updateContent(with viewModels: [ItemViewModel]) {
@ -144,15 +144,15 @@ where ViewModel: BaseSearchViewModel<Item, ItemViewModel> {
}
open var resetResults: Observable<SearchResultsViewControllerState> {
return searchController.rx.willPresent
searchController.rx.willPresent
.map { SearchResultsViewControllerState.initial }
}
open var searchResults: Observable<SearchResultsViewControllerState> {
return viewModel.searchResultsDriver
viewModel.searchResultsDriver
.asObservable()
.map { [weak self] viewModels -> SearchResultsViewControllerState in
self?.stateForUpdate(with: viewModels) ?? .rowsContent(rows: [])
.compactMap { [weak self] viewModels -> SearchResultsViewControllerState? in
self?.stateForUpdate(with: viewModels)
}
}

View File

@ -35,8 +35,8 @@ open class BaseSearchViewModel<Item, ItemViewModel>: GeneralDataLoadingViewModel
}
open var itemsViewModelsDriver: Driver<[ItemViewModel]> {
return loadingResultObservable
.map { [weak self] items in
loadingResultObservable
.compactMap { [weak self] items in
self?.viewModels(from: items)
}
.flatMap { Observable.from(optional: $0) }
@ -45,16 +45,16 @@ open class BaseSearchViewModel<Item, ItemViewModel>: GeneralDataLoadingViewModel
}
open var searchDebounceInterval: RxTimeInterval {
return .seconds(1)
.seconds(1)
}
open var searchResultsDriver: Driver<[ItemViewModel]> {
return searchTextRelay.debounce(searchDebounceInterval, scheduler: MainScheduler.instance)
searchTextRelay.debounce(searchDebounceInterval, scheduler: MainScheduler.instance)
.withLatestFrom(loadingResultObservable) { ($0, $1) }
.flatMapLatest { [weak self] searchText, items -> Observable<ItemsList> in
self?.search(by: searchText, from: items).asObservable() ?? .empty()
}
.map { [weak self] items in
.compactMap { [weak self] items in
self?.viewModels(from: items)
}
.flatMap { Observable.from(optional: $0) }
@ -71,29 +71,29 @@ open class BaseSearchViewModel<Item, ItemViewModel>: GeneralDataLoadingViewModel
}
open func bind(searchText: Observable<String>) -> Disposable {
return searchText.bind(to: searchTextRelay)
searchText.bind(to: searchTextRelay)
}
private func viewModels(from items: ItemsList) -> [ItemViewModel] {
return items.map { self.viewModel(from: $0) }
items.map { self.viewModel(from: $0) }
}
open var loadingResultObservable: Observable<ResultType> {
return loadingStateDriver
loadingStateDriver
.asObservable()
.map { $0.result }
.flatMap { Observable.from(optional: $0) }
}
open var loadingErrorObservable: Observable<Error> {
return loadingStateDriver
loadingStateDriver
.asObservable()
.map { $0.error }
.flatMap { Observable.from(optional: $0) }
}
open var firstLoadingResultObservable: Single<ResultType> {
return loadingResultObservable
loadingResultObservable
.take(1)
.asSingle()
}

View File

@ -39,7 +39,7 @@ open class NetworkService {
/// Driver that emits true when active requests count != 0 and false otherwise.
public var isActivityIndicatorVisibleDriver: Driver<Bool> {
return requestCountRelay.asDriver().map { $0 != 0 }.distinctUntilChanged()
requestCountRelay.asDriver().map { $0 != 0 }.distinctUntilChanged()
}
/// - Parameter sessionManager: Alamofire.SessionManager to use for requests
@ -63,12 +63,12 @@ open class NetworkService {
public func rxObservableRequest<T: ObservableMappable>(with parameters: ApiRequestParameters,
additionalValidStatusCodes: Set<Int> = [],
decoder: JSONDecoder = JSONDecoder())
-> Observable<SessionManager.ModelResponse<T>> {
-> Observable<SessionManager.ModelResponse<T>> {
return sessionManager.rx.responseObservableModel(requestParameters: parameters,
additionalValidStatusCodes: additionalValidStatusCodes,
decoder: decoder)
.counterTracking(for: self)
sessionManager.rx.responseObservableModel(requestParameters: parameters,
additionalValidStatusCodes: additionalValidStatusCodes,
decoder: decoder)
.counterTracking(for: self)
}
/// Perform reactive request to get mapped ImmutableMappable model and http response
@ -81,12 +81,12 @@ open class NetworkService {
public func rxRequest<T: Decodable>(with parameters: ApiRequestParameters,
additionalValidStatusCodes: Set<Int> = [],
decoder: JSONDecoder = JSONDecoder())
-> Observable<SessionManager.ModelResponse<T>> {
-> Observable<SessionManager.ModelResponse<T>> {
return sessionManager.rx.responseModel(requestParameters: parameters,
additionalValidStatusCodes: additionalValidStatusCodes,
decoder: decoder)
.counterTracking(for: self)
sessionManager.rx.responseModel(requestParameters: parameters,
additionalValidStatusCodes: additionalValidStatusCodes,
decoder: decoder)
.counterTracking(for: self)
}
/// Perform reactive request to get data and http response
@ -96,11 +96,11 @@ open class NetworkService {
/// - additionalValidStatusCodes: set of additional valid status codes
/// - Returns: Observable of tuple containing (HTTPURLResponse, Data)
public func rxDataRequest(with parameters: ApiRequestParameters, additionalValidStatusCodes: Set<Int> = [])
-> Observable<SessionManager.DataResponse> {
-> Observable<SessionManager.DataResponse> {
return sessionManager.rx.responseData(requestParameters: parameters,
additionalValidStatusCodes: additionalValidStatusCodes)
.counterTracking(for: self)
sessionManager.rx.responseData(requestParameters: parameters,
additionalValidStatusCodes: additionalValidStatusCodes)
.counterTracking(for: self)
}
/// Perform reactive request to upload data and get Observable model and http response
@ -113,12 +113,12 @@ open class NetworkService {
public func rxUploadRequest<T: Decodable>(with parameters: ApiUploadRequestParameters,
additionalValidStatusCodes: Set<Int> = [],
decoder: JSONDecoder = JSONDecoder())
-> Observable<SessionManager.ModelResponse<T>> {
-> Observable<SessionManager.ModelResponse<T>> {
return sessionManager.rx.uploadResponseModel(requestParameters: parameters,
additionalValidStatusCodes: additionalValidStatusCodes,
decoder: decoder)
.counterTracking(for: self)
sessionManager.rx.uploadResponseModel(requestParameters: parameters,
additionalValidStatusCodes: additionalValidStatusCodes,
decoder: decoder)
.counterTracking(for: self)
}
}
@ -145,7 +145,7 @@ public extension Observable {
/// - Parameter networkService: NetworkService to operate on it
/// - Returns: The source sequence with the side-effecting behavior applied.
func counterTracking(for networkService: NetworkService) -> Observable<Observable.Element> {
return `do`(onSubscribe: {
`do`(onSubscribe: {
networkService.increaseRequestCounter()
}, onDispose: {
networkService.decreaseRequestCounter()

View File

@ -62,16 +62,16 @@ public extension BasePlaceholderViewModel {
/// Returns true if description is not nil.
var hasDescription: Bool {
return description != nil
description != nil
}
/// Returns true buttonTitle is not nil.
var hasButton: Bool {
return buttonTitle != nil
buttonTitle != nil
}
/// Returns true if centerImage is not nil.
var hasCenterImage: Bool {
return centerImage != nil
centerImage != nil
}
}

View File

@ -55,7 +55,7 @@ open class BasePlaceholderView: ButtonHolderView, InitializableView {
///
/// - Returns: UIButton (sub)class.
open func createButton() -> UIButton {
return UIButton()
UIButton()
}
// MARK: - InitializableView

View File

@ -48,7 +48,7 @@ open class CustomizableButton: UIButton {
}
func backgroundColor(for state: UIControl.State) -> UIColor? {
return backgroundColors[state]
backgroundColors[state]
}
private func updateBackgroundColor() {

View File

@ -21,7 +21,6 @@
//
import RxSwift
import RxCocoa
public typealias Spinner = UIView & Animatable
@ -46,7 +45,7 @@ public struct CustomizableButtonState: OptionSet {
// MARK: - Properties
public var isLoading: Bool {
return contains(.loading)
contains(.loading)
}
}
@ -100,15 +99,15 @@ open class CustomizableButtonView: UIView, InitializableView, ConfigurableView {
// MARK: - Computed Properties
public var tapObservable: Observable<Void> {
return button.rx.tap.asObservable()
button.rx.tap.asObservable()
}
override open var forFirstBaselineLayout: UIView {
return button.forFirstBaselineLayout
button.forFirstBaselineLayout
}
override open var forLastBaselineLayout: UIView {
return button.forLastBaselineLayout
button.forLastBaselineLayout
}
override open func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
@ -256,7 +255,7 @@ open class CustomizableButtonView: UIView, InitializableView, ConfigurableView {
}
private var stateBinder: Binder<CustomizableButtonState> {
return Binder(self) { base, value in
Binder(self) { base, value in
base.configureButton(withState: value)
base.onStateChange(value)
}

View File

@ -39,15 +39,15 @@ open class CustomizableButtonViewModel {
}
open var stateDriver: Driver<CustomizableButtonState> {
return stateRelay.asDriver()
stateRelay.asDriver()
}
func bind(tapObservable: Observable<Void>) -> Disposable {
return tapObservable.bind(to: tapRelay)
tapObservable.bind(to: tapRelay)
}
public var tapDriver: Driver<Void> {
return tapRelay.asDriver()
tapRelay.asDriver()
}
public func updateState(with newState: CustomizableButtonState) {

View File

@ -48,6 +48,6 @@ public final class EmptyCellRow: TableRow<EmptyCell> {
/// Used for set custom height to each cell, not for each cell type
override public var defaultHeight: CGFloat? {
return rowHeight
rowHeight
}
}

View File

@ -93,11 +93,11 @@ open class LabelTableViewCell: SeparatorCell, InitializableView, ConfigurableCel
// MARK: - Private
private var labelInsets: UIEdgeInsets {
return viewModel?.labelInsets ?? .zero
viewModel?.labelInsets ?? .zero
}
private var contentInsets: UIEdgeInsets {
return viewModel?.contentInsets ?? .zero
viewModel?.contentInsets ?? .zero
}
// MARK: - Subclass methods to override

View File

@ -25,7 +25,7 @@ import UIKit
public final class SpinnerView: UIView, Animatable, LoadingIndicator {
private var animating: Bool {
return imageView?.layer.animation(forKey: CABasicAnimation.rotationKeyPath) != nil
imageView?.layer.animation(forKey: CABasicAnimation.rotationKeyPath) != nil
}
private var startTime = CFTimeInterval(0)

View File

@ -57,7 +57,7 @@ public final class DataModelFieldBinding<T> {
/// - Parameter textDriver: Driver that emits new text values.
/// - Returns: Disposable object that can be used to unsubscribe the observer from the behaviour relay.
public func mergeStringToModel(from textDriver: Driver<String?>) -> Disposable {
return textDriver.map { [modelRelay, mergeFieldClosure] in
textDriver.map { [modelRelay, mergeFieldClosure] in
mergeFieldClosure(modelRelay.value, $0)
}
.drive(modelRelay)
@ -65,7 +65,7 @@ public final class DataModelFieldBinding<T> {
/// A Driver that will emit current field value.
public var fieldDriver: Driver<String?> {
return modelDriver.map(getFieldClosure)
modelDriver.map(getFieldClosure)
}
}
@ -111,11 +111,11 @@ public extension BehaviorRelay {
/// - Returns: DataModelFieldBinding instance.
func fieldBinding(getFieldClosure: @escaping DataModelFieldBinding<Element>.GetFieldClosure,
mergeFieldClosure: @escaping DataModelFieldBinding<Element>.MergeFieldClosure)
-> DataModelFieldBinding<Element> {
-> DataModelFieldBinding<Element> {
return DataModelFieldBinding(modelRelay: self,
getFieldClosure: getFieldClosure,
mergeFieldClosure: mergeFieldClosure)
DataModelFieldBinding(modelRelay: self,
getFieldClosure: getFieldClosure,
mergeFieldClosure: mergeFieldClosure)
}
}
@ -125,6 +125,6 @@ public extension BehaviorRelay where Element == String? {
///
/// - Returns: DataModelFieldBinding instance.
func fieldBinding() -> DataModelFieldBinding<Element> {
return DataModelFieldBinding(modelRelay: self)
DataModelFieldBinding(modelRelay: self)
}
}

View File

@ -44,7 +44,7 @@ open class TextFieldViewModel < ViewEvents: TextFieldViewEvents,
/// View events driver that will emit view events structure
/// when view will bind itself to the view model.
public var viewEventsDriver: Driver<ViewEvents> {
return viewEventsRelay
viewEventsRelay
.asDriver()
.flatMap { viewEvents -> Driver<ViewEvents> in
guard let viewEvents = viewEvents else {
@ -77,7 +77,7 @@ public extension TextFieldViewModel {
/// - Parameter closure: Closure that takes a view events parameter and returns Disposable.
/// - Returns: Disposable object that can be used to unsubscribe the observer from the binding.
func mapViewEvents(_ closure: @escaping MapViewEventClosure) -> Disposable {
return mapViewEvents { [closure($0)] }
mapViewEvents { [closure($0)] }
}
typealias MapViewEventsClosure = (ViewEvents) -> [Disposable]
@ -87,7 +87,7 @@ public extension TextFieldViewModel {
/// - Parameter closure: Closure that takes a view events parameter and returns [Disposable].
/// - Returns: Disposable object that can be used to unsubscribe the observer from the binding.
func mapViewEvents(_ closure: @escaping MapViewEventsClosure) -> Disposable {
return viewEventsDriver
viewEventsDriver
.map { [weak self] in
guard let strongSelf = self else {
return

View File

@ -28,7 +28,7 @@ open class XibView: UIView {
/// Nib name used to instantiate inner view
/// - NOTE: Be very carefully when you're intending to change this line
open var innerViewNibName: String {
return typeName(of: type(of: self))
typeName(of: type(of: self))
}
public convenience init() {

View File

@ -41,28 +41,28 @@ extension GeneralDataLoadingState: DataLoadingState {
public typealias DataSourceType = DS
public static var initialState: GeneralDataLoadingState<DS> {
return .initial
.initial
}
public static var emptyState: GeneralDataLoadingState<DS> {
return .empty
.empty
}
public static func initialLoadingState(after: GeneralDataLoadingState<DS>) -> GeneralDataLoadingState<DS> {
return .loading
.loading
}
public static func resultState(result: DS.ResultType,
from: DS,
after: GeneralDataLoadingState<DS>) -> GeneralDataLoadingState<DS> {
return .result(newResult: result, from: from)
.result(newResult: result, from: from)
}
public static func errorState(error: Error,
after: GeneralDataLoadingState<DS>) -> GeneralDataLoadingState<DS> {
return .error(error: error)
.error(error: error)
}
public var isInitialState: Bool {

View File

@ -45,28 +45,28 @@ extension PaginationDataLoadingState: DataLoadingState {
public typealias DataSourceType = DS
public static var initialState: PaginationDataLoadingState<DS> {
return .initial
.initial
}
public static var emptyState: PaginationDataLoadingState<DS> {
return .empty
.empty
}
public static func initialLoadingState(after: PaginationDataLoadingState<DS>) -> PaginationDataLoadingState<DS> {
return .initialLoading(after: after)
.initialLoading(after: after)
}
public static func resultState(result: DS.ResultType,
from: DataSourceType,
after: PaginationDataLoadingState<DS>) -> PaginationDataLoadingState<DS> {
return .results(newItems: result, from: from, after: after)
.results(newItems: result, from: from, after: after)
}
public static func errorState(error: Error,
after: PaginationDataLoadingState<DS>) -> PaginationDataLoadingState<DS> {
return .error(error: error, after: after)
.error(error: error, after: after)
}
public var isInitialState: Bool {

View File

@ -31,8 +31,8 @@ import Alamofire
/// - mapping: Errors that occurs during mapping json into model.
public enum RequestError: Error {
case noConnection
case network(error: Error, response: Data?)
case invalidResponse(error: AFError, response: Data?)
case mapping(error: Error, response: Data)
case noConnection(url: String?)
case network(error: Error, response: Data?, url: String?)
case invalidResponse(error: AFError, response: Data?, url: String?)
case mapping(error: Error, response: Data, url: String?)
}

View File

@ -36,7 +36,7 @@ public extension Reactive where Base: DataRequest {
func apiResponse<T: Decodable>(mappingQueue: DispatchQueue = .global(), decoder: JSONDecoder)
-> Observable<SessionManager.ModelResponse<T>> {
return response(onQueue: mappingQueue)
response(onQueue: mappingQueue)
.tryMapResult { response, data in
(response, try decoder.decode(T.self, from: data))
}
@ -50,7 +50,7 @@ public extension Reactive where Base: DataRequest {
func observableApiResponse<T: ObservableMappable>(mappingQueue: DispatchQueue = .global(), decoder: JSONDecoder)
-> Observable<SessionManager.ModelResponse<T>> {
return response(onQueue: mappingQueue)
response(onQueue: mappingQueue)
.tryMapObservableResult { response, value in
let json = try JSONSerialization.jsonObject(with: value, options: [])
return T.create(from: json, with: decoder)
@ -64,13 +64,13 @@ public extension Reactive where Base: DataRequest {
/// - Parameter mappingQueue: The dispatch queue to use for mapping
/// - Returns: Observable with HTTP URL Response and data
func dataApiResponse(mappingQueue: DispatchQueue) -> Observable<SessionManager.DataResponse> {
return response(onQueue: mappingQueue)
response(onQueue: mappingQueue)
.map { $0 as SessionManager.DataResponse }
.catchAsRequestError(with: self.base)
}
private func response(onQueue queue: DispatchQueue) -> Observable<(HTTPURLResponse, Data)> {
return responseResult(queue: queue, responseSerializer: DataResponseSerializer())
responseResult(queue: queue, responseSerializer: DataResponseSerializer())
}
}
@ -80,33 +80,39 @@ public extension ObservableType where Element == DataRequest {
///
/// - Parameter statusCodes: set of status codes to validate
/// - Returns: Observable on self
func validate(statusCodes: Set<Int>) -> Observable<Element> {
return map { $0.validate(statusCode: statusCodes) }
.catchAsRequestError()
func validate(statusCodes: Set<Int>, url: String? = nil) -> Observable<Element> {
map { $0.validate(statusCode: statusCodes) }
.catchAsRequestError(url: url)
}
}
private extension ObservableType where Element == ServerResponse {
func tryMapResult<R>(_ transform: @escaping (Element) throws -> R) -> Observable<R> {
return map {
map {
do {
return try transform($0)
} catch {
throw RequestError.mapping(error: error, response: $0.1)
throw RequestError.mapping(error: error,
response: $0.1,
url: $0.0.url?.absoluteString)
}
}
}
func tryMapObservableResult<R>(_ transform: @escaping (Element) throws -> Observable<R>) -> Observable<R> {
return flatMap { response, result -> Observable<R> in
flatMap { response, result -> Observable<R> in
do {
return try transform((response, result))
.catchError {
throw RequestError.mapping(error: $0, response: result)
.catch {
throw RequestError.mapping(error: $0,
response: result,
url: response.url?.absoluteString)
}
} catch {
throw RequestError.mapping(error: error, response: result)
throw RequestError.mapping(error: error,
response: result,
url: response.url?.absoluteString)
}
}
}
@ -114,8 +120,9 @@ private extension ObservableType where Element == ServerResponse {
private extension ObservableType {
func catchAsRequestError(with request: DataRequest? = nil) -> Observable<Element> {
return catchError { error in
func catchAsRequestError(with request: DataRequest? = nil,
url: String? = nil) -> Observable<Element> {
self.catch { error in
let resultError: RequestError
let response = request?.data
@ -126,10 +133,10 @@ private extension ObservableType {
case let urlError as URLError:
switch urlError.code {
case .notConnectedToInternet:
resultError = .noConnection
resultError = .noConnection(url: url)
default:
resultError = .network(error: urlError, response: response)
resultError = .network(error: urlError, response: response, url: url)
}
case let afError as AFError:
@ -137,21 +144,21 @@ private extension ObservableType {
case let .sessionTaskFailed(error):
switch error {
case let urlError as URLError where urlError.code == .notConnectedToInternet:
resultError = .noConnection
resultError = .noConnection(url: url)
default:
resultError = .network(error: error, response: response)
resultError = .network(error: error, response: response, url: url)
}
case .responseSerializationFailed, .responseValidationFailed:
resultError = .invalidResponse(error: afError, response: response)
resultError = .invalidResponse(error: afError, response: response, url: url)
default:
resultError = .network(error: afError, response: response)
resultError = .network(error: afError, response: response, url: url)
}
default:
resultError = .network(error: error, response: response)
resultError = .network(error: error, response: response, url: url)
}
throw resultError

View File

@ -53,7 +53,7 @@ public extension Reactive where Base: SessionManager {
headers: HTTPHeaders? = nil)
-> Observable<DataRequest> {
return Observable.deferred {
Observable.deferred {
guard method != .get else {
assertionFailure("Unable to pass array in get request")
@ -74,7 +74,7 @@ public extension Reactive where Base: SessionManager {
/// - additionalValidStatusCodes: set of additional valid status codes
/// - Returns: Observable with request
func apiRequest(requestParameters: ApiRequestParameters, additionalValidStatusCodes: Set<Int>) -> Observable<DataRequest> {
return .deferred {
.deferred {
var url = try requestParameters.url.asURL()
if let queryItems = requestParameters.queryItems {
@ -117,7 +117,8 @@ public extension Reactive where Base: SessionManager {
}
return requestObservable
.validate(statusCodes: self.base.acceptableStatusCodes.union(additionalValidStatusCodes))
.validate(statusCodes: self.base.acceptableStatusCodes.union(additionalValidStatusCodes),
url: url.absoluteString)
}
}
@ -133,7 +134,7 @@ public extension Reactive where Base: SessionManager {
decoder: JSONDecoder)
-> Observable<SessionManager.ModelResponse<T>> {
return apiRequest(requestParameters: requestParameters, additionalValidStatusCodes: additionalValidStatusCodes)
apiRequest(requestParameters: requestParameters, additionalValidStatusCodes: additionalValidStatusCodes)
.flatMap {
$0.rx.apiResponse(mappingQueue: self.base.mappingQueue, decoder: decoder)
}
@ -151,7 +152,7 @@ public extension Reactive where Base: SessionManager {
decoder: JSONDecoder)
-> Observable<SessionManager.ModelResponse<T>> {
return apiRequest(requestParameters: requestParameters, additionalValidStatusCodes: additionalValidStatusCodes)
apiRequest(requestParameters: requestParameters, additionalValidStatusCodes: additionalValidStatusCodes)
.flatMap {
$0.rx.observableApiResponse(mappingQueue: self.base.mappingQueue, decoder: decoder)
}
@ -166,7 +167,7 @@ public extension Reactive where Base: SessionManager {
func responseData(requestParameters: ApiRequestParameters, additionalValidStatusCodes: Set<Int>)
-> Observable<SessionManager.DataResponse> {
return apiRequest(requestParameters: requestParameters, additionalValidStatusCodes: additionalValidStatusCodes)
apiRequest(requestParameters: requestParameters, additionalValidStatusCodes: additionalValidStatusCodes)
.flatMap {
$0.rx.dataApiResponse(mappingQueue: self.base.mappingQueue)
}
@ -184,14 +185,15 @@ public extension Reactive where Base: SessionManager {
decoder: JSONDecoder)
-> Observable<SessionManager.ModelResponse<T>> {
return Observable.deferred {
Observable.deferred {
let urlRequest = try URLRequest(url: requestParameters.url, method: .post, headers: requestParameters.headers)
let data = try requestParameters.formData.encode()
return self.upload(data, urlRequest: urlRequest)
.map { $0 as DataRequest }
.validate(statusCodes: self.base.acceptableStatusCodes.union(additionalValidStatusCodes))
.validate(statusCodes: self.base.acceptableStatusCodes.union(additionalValidStatusCodes),
url: try? requestParameters.url.asURL().absoluteString)
.flatMap {
$0.rx.apiResponse(mappingQueue: self.base.mappingQueue, decoder: decoder)
}

View File

@ -69,6 +69,6 @@ public extension Array {
// Subscript for safe access to element by index
subscript(safe index: Index) -> Element? {
return (index < count && index >= 0) ? self[index] : nil
(index < count && index >= 0) ? self[index] : nil
}
}

View File

@ -26,11 +26,11 @@ public extension Array where Element: TableKitViewModel {
/// Creates [Row] array from TableKitViewModels.
var tableRows: [Row] {
return map { $0.tableRow }
map { $0.tableRow }
}
/// Creates TableSection with empty, zero height header and footer.
var onlyRowsSection: TableSection {
return TableSection(onlyRows: tableRows)
TableSection(onlyRows: tableRows)
}
}

View File

@ -26,7 +26,7 @@ public extension Array where Element == SeparatorRowBox {
/// Create rows from SeparatorRowBox array
var rows: [Row] {
return map { $0.row }
map { $0.row }
}
/// Configure separators from SeparatorRowBox array

View File

@ -25,10 +25,10 @@ extension Array: TotalCountCursorListingResult {
public typealias ElementType = Element
public var results: [Element] {
return self
self
}
public var totalCount: Int {
return count
count
}
}

View File

@ -39,7 +39,7 @@ public extension Encodable {
/// Method that converts encodable model to URLQueryItems array
/// - Returns: URLQueryItems array
func asUrlQueryItems() throws -> [URLQueryItem] {
return try toJSON().map {
try toJSON().map {
if ($1 is [String: Any] || $1 is [Any]),
let jsonData = try? JSONSerialization.data(withJSONObject: $1, options: []),
let jsonString = String(data: jsonData, encoding: .utf8) {

View File

@ -28,13 +28,13 @@ public extension Comparable {
/// - parameter bounds: Lower and uppper bounds tuple
/// - returns: Current value if it fits range, otherwise lower if value is too small or upper if value is too big
func `in`(bounds: (lower: Self, upper: Self)) -> Self {
return min(max(bounds.lower, self), bounds.upper)
min(max(bounds.lower, self), bounds.upper)
}
/// Use this function to restrict comparable with lower and upper values
/// - parameter range: ClosedRange representing bounds
/// - returns: Current value if it fits range, otherwise lower if value is too small or upper if value is too big
func `in`(range: ClosedRange<Self>) -> Self {
return `in`(bounds: (lower: range.lowerBound, upper: range.upperBound))
`in`(bounds: (lower: range.lowerBound, upper: range.upperBound))
}
}

View File

@ -25,6 +25,6 @@ import RxSwift
public extension RxDataSource where Self: CursorType {
func resultSingle() -> Single<[Element]> {
return loadNextBatch()
loadNextBatch()
}
}

View File

@ -25,14 +25,14 @@ import Foundation
public extension CursorType {
subscript(range: CountableRange<Int>) -> [Self.Element] {
return range.map { self[$0] }
range.map { self[$0] }
}
subscript(range: CountableClosedRange<Int>) -> [Self.Element] {
return range.map { self[$0] }
range.map { self[$0] }
}
var loadedElements: [Self.Element] {
return self[0..<count]
self[0..<count]
}
}

View File

@ -28,8 +28,8 @@ public extension TotalCountCursorListingResult {
/// - Parameter transform: closure to transform results
/// - Returns: new DefaultTotalCountCursorListingResult instance
func asDefaultListingResult<E>(transform: ((ElementType) -> E)) -> DefaultTotalCountCursorListingResult<E> {
return DefaultTotalCountCursorListingResult(results: results.map(transform),
totalCount: totalCount)
DefaultTotalCountCursorListingResult(results: results.map(transform),
totalCount: totalCount)
}
/// Method that creates DefaultTotalCountCursorListingResult
@ -37,7 +37,7 @@ public extension TotalCountCursorListingResult {
///
/// - Returns: new DefaultTotalCountCursorListingResult instance
func asDefaultListingResult() -> DefaultTotalCountCursorListingResult<ElementType> {
return DefaultTotalCountCursorListingResult(results: results,
totalCount: totalCount)
DefaultTotalCountCursorListingResult(results: results,
totalCount: totalCount)
}
}

View File

@ -28,13 +28,13 @@ public extension GeneralDataLoadingController {
// MARK: - DisposeBagHolder default implementation
var disposeBag: DisposeBag {
return viewModel.disposeBag
viewModel.disposeBag
}
// MARK: - StatefulViewController default implementation
func hasContent() -> Bool {
return viewModel.hasContent
viewModel.hasContent
}
// MARK: - GeneralDataLoadingController default implementation

View File

@ -27,7 +27,7 @@ import RxCocoa
internal extension GeneralDataLoadingHandler where Self: AnyObject {
var stateChangeBinder: Binder<GeneralDataLoadingState<Single<ResultType>>> {
return Binder(self) { base, value in
Binder(self) { base, value in
switch value {
case .loading:
base.onLoadingState()

View File

@ -34,7 +34,7 @@ public extension GeneralDataLoadingViewModel {
/// Emit elements of ResultType from state observable.
var resultObservable: Observable<ResultType> {
return loadingStateObservable.flatMap { state -> Observable<ResultType> in
loadingStateObservable.flatMap { state -> Observable<ResultType> in
switch state {
case .result(let newResult, _):
return .just(newResult)
@ -47,7 +47,7 @@ public extension GeneralDataLoadingViewModel {
/// Emit elements of ResultType from state driver.
var resultDriver: Driver<ResultType> {
return loadingStateDriver.flatMap { state -> Driver<ResultType> in
loadingStateDriver.flatMap { state -> Driver<ResultType> in
switch state {
case .result(let newResult, _):
return .just(newResult)

View File

@ -25,15 +25,15 @@ import UIKit
public extension PaginationWrapperUIDelegate {
func emptyPlaceholder() -> UIView? {
return TextPlaceholderView(title: .empty)
TextPlaceholderView(title: .empty)
}
func customInitialLoadingErrorHandling(for error: Error) -> Bool {
return false
false
}
func errorPlaceholder(for error: Error) -> UIView? {
return TextPlaceholderView(title: .error)
TextPlaceholderView(title: .error)
}
func initialLoadingIndicator() -> AnyLoadingIndicator? {
@ -58,7 +58,7 @@ public extension PaginationWrapperUIDelegate {
}
func footerRetryViewHeight() -> CGFloat {
return 44
44
}
func footerRetryViewWillAppear() {

View File

@ -26,7 +26,7 @@ extension UITableView: PaginationWrappable {
public var footerView: UIView? {
get {
return tableFooterView
tableFooterView
}
set {
tableFooterView = newValue

View File

@ -28,7 +28,7 @@ extension Observable: RxDataSource {
public typealias ResultType = Element
public func resultSingle() -> Single<ResultType> {
return asSingle()
asSingle()
}
}
@ -41,6 +41,6 @@ extension Single: RxDataSource {
public typealias ResultType = Element
public func resultSingle() -> Single<ResultType> {
return asObservable().asSingle()
asObservable().asSingle()
}
}

View File

@ -28,7 +28,7 @@ public extension DateFormattingService {
format: DateFormatType,
defaultDate: DateInRegion = Date().inDefaultRegion()) -> DateInRegion {
return date(from: string, format: format, parsedIn: nil) ?? defaultDate
date(from: string, format: format, parsedIn: nil) ?? defaultDate
}
func date(from string: String,
@ -53,7 +53,7 @@ public extension DateFormattingService {
}
func string(from date: DateRepresentable, format: DateFormatType) -> String {
return format.dateToStringFormat.toString(date)
format.dateToStringFormat.toString(date)
}
func string(from date: DateRepresentable, format: DateFormatType, formattedIn: Region?) -> String {
@ -79,7 +79,7 @@ public extension DateFormattingService where Self: Singleton {
format: DateFormatType,
defaultDate: DateInRegion = Date().inDefaultRegion()) -> DateInRegion {
return shared.date(from: string, format: format, defaultDate: defaultDate)
shared.date(from: string, format: format, defaultDate: defaultDate)
}
/// Method parses date from string in given format with current region.
@ -90,7 +90,7 @@ public extension DateFormattingService where Self: Singleton {
/// - parsedIn: A region that should be used for date parsing. In case of nil defaultRegion will be used.
/// - Returns: Date parsed from given string or default date if parsing did fail.
static func date(from string: String, format: DateFormatType, parsedIn: Region?) -> DateInRegion? {
return shared.date(from: string, format: format, parsedIn: parsedIn)
shared.date(from: string, format: format, parsedIn: parsedIn)
}
/// Method parses date from string in one of the given formats with current region.
@ -101,7 +101,7 @@ public extension DateFormattingService where Self: Singleton {
/// - parsedIn: A region that should be used for date parsing. In case of nil defaultRegion will be used.
/// - Returns: Date parsed from given string or default date if parsing did fail.
static func date(from string: String, formats: [DateFormatType], parsedIn: Region?) -> DateInRegion? {
return shared.date(from: string, formats: formats, parsedIn: parsedIn)
shared.date(from: string, formats: formats, parsedIn: parsedIn)
}
/// Method format date in given format.
@ -111,7 +111,7 @@ public extension DateFormattingService where Self: Singleton {
/// - format: Format that should be used for date formatting.
/// - Returns: String that contains formatted date or nil if formatting did fail.
static func string(from date: DateRepresentable, format: DateFormatType) -> String {
return shared.string(from: date, format: format)
shared.string(from: date, format: format)
}
/// Method format date in given format for specific region.
@ -122,6 +122,6 @@ public extension DateFormattingService where Self: Singleton {
/// - formattedIn: A region that should be used for date formatting. In case of nil defaultRegion will be used.
/// - Returns: String that contains formatted date or nil if formatting did fail.
static func string(from date: DateRepresentable, format: DateFormatType, formattedIn: Region?) -> String {
return shared.string(from: date, format: format, formattedIn: formattedIn)
shared.string(from: date, format: format, formattedIn: formattedIn)
}
}

View File

@ -26,11 +26,11 @@ public extension Decimal {
/// Conver Decimal to Double value
var doubleValue: Double {
return NSDecimalNumber(decimal: self).doubleValue
NSDecimalNumber(decimal: self).doubleValue
}
/// Conver Decimal to Int value
var intValue: Int {
return NSDecimalNumber(decimal: self).intValue
NSDecimalNumber(decimal: self).intValue
}
}

View File

@ -41,11 +41,11 @@ public extension CGContext {
static func create(forCGImage cgImage: CGImage,
fallbackColorSpace: CGColorSpace = CGColorSpaceCreateDeviceRGB()) -> CGContext? {
return create(width: cgImage.width,
height: cgImage.height,
bitmapInfo: cgImage.bitmapInfo,
colorSpace: cgImage.colorSpace ?? fallbackColorSpace,
bitsPerComponent: cgImage.bitsPerComponent)
create(width: cgImage.width,
height: cgImage.height,
bitmapInfo: cgImage.bitmapInfo,
colorSpace: cgImage.colorSpace ?? fallbackColorSpace,
bitsPerComponent: cgImage.bitsPerComponent)
}
/// Creates a bitmap graphics context.
@ -65,12 +65,12 @@ public extension CGContext {
colorSpace: CGColorSpace = CGColorSpaceCreateDeviceRGB(),
bitsPerComponent: Int = 8) -> CGContext? {
return CGContext(data: nil,
width: width,
height: height,
bitsPerComponent: bitsPerComponent,
bytesPerRow: 0,
space: colorSpace,
bitmapInfo: bitmapInfo.rawValue)
CGContext(data: nil,
width: width,
height: height,
bitsPerComponent: bitsPerComponent,
bytesPerRow: 0,
space: colorSpace,
bitmapInfo: bitmapInfo.rawValue)
}
}

View File

@ -25,6 +25,6 @@ import CoreGraphics.CGGeometry
public extension CGSize {
var ceiledContextSize: CGContextSize {
return (width: Int(ceil(width)), height: Int(ceil(height)))
(width: Int(ceil(width)), height: Int(ceil(height)))
}
}

View File

@ -55,7 +55,7 @@ public extension UIImage {
/// - Parameter color: Color to fill template image.
/// - Returns: A new UIImage rendered with given color or original image if something goes wrong.
func renderTemplate(withColor color: UIColor) -> UIImage {
return withCGImage { image in
withCGImage { image in
let operation = TemplateDrawingOperation(image: image,
imageSize: size,
color: color.cgColor)
@ -77,7 +77,7 @@ public extension UIImage {
color: UIColor,
extendSize: Bool = false) -> UIImage {
return withCGImage { image in
withCGImage { image in
let roundOperation = RoundDrawingOperation(image: image,
imageSize: size,
radius: cornerRadius)
@ -101,7 +101,7 @@ public extension UIImage {
///
/// - Returns: A new circled image or original image if something goes wrong.
func roundCornersToCircle() -> UIImage {
return withCGImage { image in
withCGImage { image in
let radius = CGFloat(min(size.width, size.height) / 2)
let operation = RoundDrawingOperation(image: image,
@ -123,7 +123,7 @@ public extension UIImage {
borderColor: UIColor,
extendSize: Bool = false) -> UIImage {
return withCGImage { image in
withCGImage { image in
let radius = CGFloat(min(size.width, size.height) / 2)
let roundOperation = RoundDrawingOperation(image: image,
@ -157,7 +157,7 @@ public extension UIImage {
contentMode: ResizeMode = .scaleToFill,
cropToImageBounds: Bool = false) -> UIImage {
return withCGImage { image in
withCGImage { image in
let operation = ResizeDrawingOperation(image: image,
imageSize: size,
preferredNewSize: newSize,
@ -172,7 +172,7 @@ public extension UIImage {
///
/// - Returns: A copy of the given image, adding an alpha channel if it doesn't already have one.
func applyAlpha() -> UIImage {
return withCGImage { image in
withCGImage { image in
guard !image.hasAlpha else {
return self
}
@ -190,7 +190,7 @@ public extension UIImage {
/// - Parameter padding: The padding amount.
/// - Returns: A new padded image or original image if something goes wrong.
func applyPadding(_ padding: CGFloat) -> UIImage {
return withCGImage { image in
withCGImage { image in
let operation = PaddingDrawingOperation(image: image, imageSize: size, padding: padding)
return operation.imageFromNewRenderer(scale: scale).redraw()
@ -204,7 +204,7 @@ public extension UIImage {
/// - clockwise: Should rotate image clockwise.
/// - Returns: A new rotated image or original image if something goes wrong.
func rotate(degrees: CGFloat, clockwise: Bool = true) -> UIImage {
return withCGImage { image in
withCGImage { image in
let radians = degrees.degreesToRadians()
let operation = RotateDrawingOperation(image: image,
@ -218,7 +218,7 @@ public extension UIImage {
/// Workaround to fix flipped image rendering (by Y)
private func redraw() -> UIImage {
return withCGImage { image in
withCGImage { image in
let operation = ImageDrawingOperation(image: image, newSize: size)
return operation.imageFromNewRenderer(scale: scale)

View File

@ -25,7 +25,7 @@ import RxSwift
public extension Error {
var requestError: RequestError? {
return self as? RequestError
self as? RequestError
}
/// Method that tries to serialize response from a mapping request error to a model
@ -34,7 +34,7 @@ public extension Error {
/// - Returns: optional target object
/// - Throws: an error during decoding
func handleMappingError<T: Decodable>(with decoder: JSONDecoder = JSONDecoder()) throws -> T? {
guard let self = requestError, case .mapping(_, let response) = self else {
guard let self = requestError, case .mapping(_, let response, _) = self else {
return nil
}
@ -52,7 +52,7 @@ public extension ObservableType {
/// - Returns: Observable on caller
func handleMappingError<T: Decodable>(with decoder: JSONDecoder = JSONDecoder(),
handler: @escaping ParameterClosure<T>) -> Observable<Element> {
return self.do(onError: { error in
self.do(onError: { error in
guard let errorModel = try error.handleMappingError(with: decoder) as T? else {
return
}
@ -72,7 +72,7 @@ public extension PrimitiveSequence where Trait == SingleTrait {
/// - Returns: Single on caller
func handleMappingError<T: Decodable>(with decoder: JSONDecoder = JSONDecoder(),
handler: @escaping ParameterClosure<T>) -> PrimitiveSequence<Trait, Element> {
return self.do(onError: { error in
self.do(onError: { error in
guard let errorModel = try error.handleMappingError(with: decoder) as T? else {
return
}
@ -92,7 +92,7 @@ public extension PrimitiveSequence where Trait == CompletableTrait, Element == N
/// - Returns: Completable
func handleMappingError<T: Decodable>(with decoder: JSONDecoder = JSONDecoder(),
handler: @escaping ParameterClosure<T>) -> Completable {
return self.do(onError: { error in
self.do(onError: { error in
guard let errorModel = try error.handleMappingError(with: decoder) as T? else {
return
}

View File

@ -26,13 +26,13 @@ public extension FloatingPoint {
///
/// - Returns: radians
func degreesToRadians() -> Self {
return self * .pi / 180
self * .pi / 180
}
/// Converts radians to degrees
///
/// - Returns: degrees
func radiansToDegrees() -> Self {
return self * 180 / .pi
self * 180 / .pi
}
}

View File

@ -38,7 +38,7 @@ public extension UserDefaults {
/// - Returns: The object with specified type associated with the specified key, or passed default value
/// if there is no such value for specified key or if error occurred during mapping.
func object<T: Decodable>(forKey key: String, defaultValue: T, decoder: JSONDecoder = JSONDecoder()) -> T {
return (try? object(forKey: key, decoder: decoder)) ?? defaultValue
(try? object(forKey: key, decoder: decoder)) ?? defaultValue
}
/// Set or remove the value of the specified default key in the standard application domain.
@ -58,7 +58,7 @@ public extension UserDefaults {
subscript<T: Codable>(key: String) -> T? {
get {
return try? object(forKey: key)
try? object(forKey: key)
}
set {
try? set(object: newValue, forKey: key)
@ -75,7 +75,7 @@ public extension Reactive where Base: UserDefaults {
/// - decoder: JSON decoder to decode stored data.
/// - Returns: Single of specified model type.
func object<T: Decodable>(forKey key: String, decoder: JSONDecoder = JSONDecoder()) -> Single<T> {
return .deferredJust { try self.base.object(forKey: key, decoder: decoder) }
.deferredJust { try self.base.object(forKey: key, decoder: decoder) }
}
/// Reactive version of object<T>(forKey:defaultValue:decoder:) -> T.
@ -87,7 +87,7 @@ public extension Reactive where Base: UserDefaults {
/// - decoder: JSON decoder to decode stored data.
/// - Returns: Single of specified model type.
func object<T: Decodable>(forKey key: String, defaultValue: T, decoder: JSONDecoder = JSONDecoder()) -> Single<T> {
return .deferredJust { self.base.object(forKey: key, defaultValue: defaultValue, decoder: decoder) }
.deferredJust { self.base.object(forKey: key, defaultValue: defaultValue, decoder: decoder) }
}
/// Reactive version of set<T>(object:forKey:encoder:).
@ -98,7 +98,7 @@ public extension Reactive where Base: UserDefaults {
/// - encoder: JSON encoder to encode to encode passed object.
/// - Returns: Completable.
func set<T: Encodable>(object: T?, forKey key: String, encoder: JSONEncoder = JSONEncoder()) -> Completable {
return .deferredJust {
.deferredJust {
try self.base.set(object: object, forKey: key, encoder: encoder)
}
}

View File

@ -33,7 +33,7 @@ public extension NSAttributedString {
/// Mutable copy of attributed string.
var mutable: NSMutableAttributedString {
return NSMutableAttributedString(attributedString: self)
NSMutableAttributedString(attributedString: self)
}
}
@ -51,6 +51,6 @@ public extension NSMutableAttributedString {
/// Immutable copy of attributed string.
var immutable: NSAttributedString {
return NSAttributedString(attributedString: self)
NSAttributedString(attributedString: self)
}
}

View File

@ -25,41 +25,41 @@ import Foundation
extension NSNumber: NSNumberConvertible {
public func asNSNumber() -> NSNumber {
return self
self
}
}
extension Decimal: NSNumberConvertible {
public func asNSNumber() -> NSNumber {
return NSDecimalNumber(decimal: self)
NSDecimalNumber(decimal: self)
}
}
extension Int: NSNumberConvertible {
public func asNSNumber() -> NSNumber {
return NSNumber(value: self)
NSNumber(value: self)
}
}
extension Int64: NSNumberConvertible {
public func asNSNumber() -> NSNumber {
return NSNumber(value: self)
NSNumber(value: self)
}
}
extension Double: NSNumberConvertible {
public func asNSNumber() -> NSNumber {
return NSNumber(value: self)
NSNumber(value: self)
}
}
extension Float: NSNumberConvertible {
public func asNSNumber() -> NSNumber {
return NSNumber(value: self)
NSNumber(value: self)
}
}

View File

@ -26,7 +26,7 @@ public extension NumberFormattingService {
/// Computed static property. Use only once for `formatters` field implementation!
static var computedFormatters: [NumberFormatType: NumberFormatter] {
return Dictionary(uniqueKeysWithValues: NumberFormatType.allCases.map { ($0, $0.numberFormatter) })
Dictionary(uniqueKeysWithValues: NumberFormatType.allCases.map { ($0, $0.numberFormatter) })
}
func numberFormatter(for format: NumberFormatType) -> NumberFormatter {
@ -38,21 +38,21 @@ public extension NumberFormattingService {
}
func string(from number: NSNumberConvertible, format: NumberFormatType, defaultString: String = "") -> String {
return numberFormatter(for: format).string(from: number.asNSNumber()) ?? defaultString
numberFormatter(for: format).string(from: number.asNSNumber()) ?? defaultString
}
func number(from string: String, format: NumberFormatType) -> NSNumber? {
return numberFormatter(for: format).number(from: string)
numberFormatter(for: format).number(from: string)
}
}
public extension NumberFormattingService where Self: Singleton {
static func string(from number: NSNumberConvertible, format: NumberFormatType, defaultString: String = "") -> String {
return shared.string(from: number, format: format, defaultString: defaultString)
shared.string(from: number, format: format, defaultString: defaultString)
}
static func number(from string: String, format: NumberFormatType) -> NSNumber? {
return shared.number(from: string, format: format)
shared.number(from: string, format: format)
}
}

View File

@ -30,7 +30,7 @@ public extension ObservableType {
/// that subscribes to the resulting sequence.
/// - Returns: An observable sequence whose observers trigger an invocation of the given element factory function.
static func deferredJust(_ elementFactory: @escaping () throws -> Element) -> Observable<Element> {
return .create { observer in
.create { observer in
do {
observer.onNext(try elementFactory())
observer.onCompleted()

View File

@ -29,20 +29,20 @@ public extension ObservableType {
/// - Parameter value: A new element.
/// - Returns: An observable sequence whose elements are equals to passed value.
func replace<T>(with value: T) -> Observable<T> {
return map { _ in value } // swiftlint:disable:this unused_map_parameter
map { _ in value } // swiftlint:disable:this unused_map_parameter
}
/// Replaces all emitted elements with Void.
///
/// - Returns: An observable sequence whose elements are equals to Void.
func asVoid() -> Observable<Void> {
return replace(with: Void())
replace(with: Void())
}
/// Cast all emitted elements to optional type.
///
/// - Returns: An observable sequence whose elements are equals to optional type of element.
func asOptional() -> Observable<Element?> {
return map { $0 }
map { $0 }
}
}

View File

@ -30,7 +30,7 @@ public extension PrimitiveSequence where Trait == CompletableTrait {
/// that subscribes to the resulting sequence.
/// - Returns: A single whose observers trigger an invocation of the given element factory function.
static func deferredJust(_ workUnit: @escaping ThrowableVoidBlock) -> Completable {
return .create { observer in
.create { observer in
do {
try workUnit()
observer(.completed)

View File

@ -30,11 +30,11 @@ public extension Single {
/// that subscribes to the resulting sequence.
/// - Returns: A single whose observers trigger an invocation of the given element factory function.
static func deferredJust(_ elementFactory: @escaping () throws -> Element) -> Single<Element> {
return .create { observer in
.create { observer in
do {
observer(.success(try elementFactory()))
} catch {
observer(.error(error))
observer(.failure(error))
}
return Disposables.create()

View File

@ -29,20 +29,20 @@ public extension PrimitiveSequence where Trait == SingleTrait {
/// - Parameter value: A new element.
/// - Returns: An primitive sequence whose element is equal to passed value.
func replace<T>(with value: T) -> PrimitiveSequence<Trait, T> {
return map { _ in value } // swiftlint:disable:this unused_map_parameter
map { _ in value } // swiftlint:disable:this unused_map_parameter
}
/// Replaces emitted element with Void.
///
/// - Returns: An primitive sequence whose element is equal to Void.
func asVoid() -> PrimitiveSequence<Trait, Void> {
return replace(with: Void())
replace(with: Void())
}
/// Cast emitted element to optional type.
///
/// - Returns: An primitive sequence whose element is equals to optional type of element.
func asOptional() -> PrimitiveSequence<Trait, Element?> {
return map { $0 }
map { $0 }
}
}

View File

@ -29,20 +29,20 @@ public extension SharedSequence {
/// - Parameter value: A new element.
/// - Returns: An observable sequence whose elements are equals to passed value.
func replace<T>(with value: T) -> SharedSequence<SharingStrategy, T> {
return map { _ in value } // swiftlint:disable:this unused_map_parameter
map { _ in value } // swiftlint:disable:this unused_map_parameter
}
/// Replaces all emitted elements with Void.
///
/// - Returns: An observable sequence whose elements are equals to Void.
func asVoid() -> SharedSequence<SharingStrategy, Void> {
return replace(with: Void())
replace(with: Void())
}
/// Cast all emitted elements to optional type.
///
/// - Returns: An observable sequence whose elements are equals to optional type of element.
func asOptional() -> SharedSequence<SharingStrategy, Element?> {
return map { $0 }
map { $0 }
}
}

View File

@ -55,7 +55,7 @@ public extension Sequence {
return Observable.from(indexedRanges)
.flatMap { indexedRange -> Observable<(idx: Int, results: [R])> in
Observable.just(indexedRange)
.observeOn(scheduler)
.observe(on: scheduler)
.map { (idx: $0.idx, results: try array[$0.range].map(transform)) }
}
.toArray()

View File

@ -30,6 +30,6 @@ public extension String {
- returns: nil if string empty, self otherwise
*/
var nilIfEmpty: String? {
return isEmpty ? nil : self
isEmpty ? nil : self
}
}

View File

@ -30,6 +30,6 @@ public extension String {
- returns: localized string
*/
func localized() -> String {
return NSLocalizedString(self, comment: "")
NSLocalizedString(self, comment: "")
}
}

View File

@ -96,7 +96,7 @@ public extension TableDirector {
*/
@discardableResult
func replace(withSection section: TableSection) -> Self {
return replace(withSections: [section])
replace(withSections: [section])
}
/**
@ -108,7 +108,7 @@ public extension TableDirector {
*/
@discardableResult
func replace(withRows rows: [Row]) -> Self {
return replace(withSection: TableSection(rows: rows))
replace(withSection: TableSection(rows: rows))
}
/// Clear table view and reload it within empty section

View File

@ -47,6 +47,6 @@ public extension TableRow where CellType: SeparatorCell {
/// TableRow typed as SeparatorRowBox
var separatorRowBox: SeparatorRowBox {
return SeparatorRowBox(row: self)
SeparatorRowBox(row: self)
}
}

View File

@ -29,6 +29,6 @@ public extension TableKitViewModel {
/// Returns TableRow initialized with current view model.
var tableRow: RowType {
return RowType(item: self)
RowType(item: self)
}
}

View File

@ -138,9 +138,13 @@ public extension UIColor {
getRed(&red, green: &green, blue: &blue, alpha: &alpha)
let intRepresentation = alpha == 1
? Int(red * 255) << 16 | Int(green * 255) << 8 | Int(blue * 255) << 0
: Int(red * 255) << 24 | Int(green * 255) << 16 | Int(blue * 255) << 8 | Int(alpha * 255) << 0
let intRepresentation: Int
if alpha == 1 {
intRepresentation = Int(red * 255) << 16 | Int(green * 255) << 8 | Int(blue * 255)
} else {
intRepresentation = Int(red * 255) << 24 | Int(green * 255) << 16 | Int(blue * 255) << 8 | Int(alpha * 255)
}
return String(intRepresentation, radix: 16)
}

View File

@ -2,7 +2,7 @@ import Foundation
import AVFoundation
public extension UIInterfaceOrientation {
var videoOrientation: AVCaptureVideoOrientation {
switch self {
case .portrait, .unknown:
@ -16,7 +16,7 @@ public extension UIInterfaceOrientation {
case .portraitUpsideDown:
return .portraitUpsideDown
@unknown default:
return .portrait
}

View File

@ -25,6 +25,6 @@ import UIKit.UIScrollView
public extension ScrollViewHolder where Self: CollectionViewHolder {
var scrollView: UIScrollView {
return collectionView
collectionView
}
}

View File

@ -25,6 +25,6 @@ import UIKit.UIScrollView
public extension ScrollViewHolder where Self: TableViewHolder {
var scrollView: UIScrollView {
return tableView
tableView
}
}

View File

@ -26,7 +26,7 @@ extension UIButton: ViewTextConfigurable {
public var textFont: UIFont? {
get {
return titleLabel?.font
titleLabel?.font
}
set {
titleLabel?.font = newValue
@ -35,7 +35,7 @@ extension UIButton: ViewTextConfigurable {
public var titleColor: UIColor? {
get {
return currentTitleColor
currentTitleColor
}
set {
setTitleColor(newValue, for: [])
@ -44,7 +44,7 @@ extension UIButton: ViewTextConfigurable {
public var textAlignment: NSTextAlignment {
get {
return contentHorizontalAlignment.textAlignment
contentHorizontalAlignment.textAlignment
}
set {
contentHorizontalAlignment = .init(textAlignment: newValue)
@ -53,7 +53,7 @@ extension UIButton: ViewTextConfigurable {
public var text: String? {
get {
return currentTitle
currentTitle
}
set {
setTitle(newValue, for: [])
@ -62,7 +62,7 @@ extension UIButton: ViewTextConfigurable {
public var attributedText: NSAttributedString? {
get {
return currentAttributedTitle
currentAttributedTitle
}
set {
setAttributedTitle(newValue, for: [])
@ -100,6 +100,13 @@ private extension UIControl.ContentHorizontalAlignment {
} else {
self = .left
}
@unknown default:
if #available(iOS 11, tvOS 11, *) {
self = .leading
} else {
self = .left
}
}
}
@ -122,6 +129,9 @@ private extension UIControl.ContentHorizontalAlignment {
case .trailing:
return .right
@unknown default:
return .left
}
}
}

View File

@ -20,7 +20,7 @@
// THE SOFTWARE.
//
import RxCocoa
import RxSwift
private extension Double {
static let halfPeriod = 0.5
@ -30,7 +30,7 @@ public extension UIImageView {
/// Rotates image view by 180 degrees via transform property with animation.
var expandRotationBinder: Binder<Bool> {
return Binder(self) { view, isExpanded in
Binder(self) { view, isExpanded in
let angle = isExpanded ? CGFloat.pi / 2 : -CGFloat.pi / 2

View File

@ -26,7 +26,7 @@ extension UILabel: ViewTextConfigurable {
public var textFont: UIFont? {
get {
return font
font
}
set {
font = newValue
@ -35,7 +35,7 @@ extension UILabel: ViewTextConfigurable {
public var titleColor: UIColor? {
get {
return textColor
textColor
}
set {
textColor = newValue

Some files were not shown because too many files have changed in this diff Show More