diff --git a/.codecov.yml b/.codecov.yml
deleted file mode 100644
index b6457ab..0000000
--- a/.codecov.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-#
-# codecov.yml
-# Created by Felix Mau (https://felix.hamburg)
-#
-# How to:
-# - https://github.com/codecov/example-swift
-#
-# Documentation:
-# - https://docs.codecov.io/docs/
-#
-
-ignore:
- - "Example" # ignore test coverage of example application
diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml
deleted file mode 100644
index f6c84a8..0000000
--- a/.github/workflows/continuous-integration.yml
+++ /dev/null
@@ -1,76 +0,0 @@
-#
-# continuous-integration.yml
-# Created by Felix Mau (https://felix.hamburg)
-#
-# Based on:
-# - https://docs.github.com/en/actions/quickstart
-# - https://futurestud.io/tutorials/github-actions-trigger-builds-on-schedule-cron#schedulegithubactionsusingacron
-# - https://about.codecov.io/blog/code-coverage-for-ios-development-using-swift-xcode-and-github-actions/
-#
-
-name: Continuous Integration
-on:
- push:
- pull_request:
- schedule:
- # Run workflow every day at midnight.
- #
- # - Note: "Scheduled workflows run on the latest commit on the default or base branch."
- # https://docs.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events
- - cron: '0 0 * * *'
-
-# Use latest Xcode version.
-#
-# Source:
-# - https://www.jessesquires.com/blog/2020/01/06/selecting-an-xcode-version-on-github-ci/
-# - https://github.com/actions/runner-images/blob/main/images/macos/macos-12-Readme.md#xcode
-env:
- DEVELOPER_DIR: /Applications/Xcode_14.0.app/Contents/Developer
-
-# A workflow run is made up of one or more jobs that can run sequentially or in parallel.
-jobs:
- # This workflow starts with a job called "build-and-test".
- build-and-test:
- name: Build & Test
- runs-on: macos-12
-
- # Steps represent a sequence of tasks that will be executed as part of the job.
- steps:
- - run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
- - run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"
- - run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
-
- - name: Check out repository code
- uses: actions/checkout@v2
-
- - run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner."
- - run: echo "🖥️ The workflow is now ready to test your code on the runner."
-
- - name: Install dependencies
- working-directory: ./Example
- run: bundle install
-
- - name: Execute SwiftFormat and treat any formatting errors as real errors.
- working-directory: ./Example
- run: bundle exec fastlane format
-
- - name: Execute SwiftLint and treat any formatting errors as real errors.
- working-directory: ./Example
- run: bundle exec fastlane lint
-
- - name: Execute tests.
- working-directory: ./Example
- run: bundle exec fastlane tests
-
- - name: Execute validation Carthage support.
- working-directory: ./Example
- run: bundle exec fastlane verify_carthage
-
- - name: Execute validation of library.
- working-directory: ./Example
- run: bundle exec fastlane pod_lint
-
- - name: Upload coverage to Codecov
- uses: codecov/codecov-action@v4
-
- - run: echo "🍏 This job's status is ${{ job.status }}."
diff --git a/.gitignore b/.gitignore
index cb88945..0023a53 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,51 +1,8 @@
-# OS X
.DS_Store
-
-# Xcode
-build/
-.build/
-*.pbxuser
-!default.pbxuser
-*.mode1v3
-!default.mode1v3
-*.mode2v3
-!default.mode2v3
-*.perspectivev3
-!default.perspectivev3
+/.build
+/Packages
xcuserdata/
-*.xccheckout
-profile
-*.moved-aside
-DerivedData
-*.hmap
-*.ipa
-
-# Bundler
-.bundle
-
-# Add this line if you want to avoid checking in source code from Carthage dependencies.
-# Carthage/Checkouts
-
-Carthage/Build
-
-# We recommend against adding the Pods directory to your .gitignore. However
-# you should judge for yourself, the pros and cons are mentioned at:
-# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
-#
-# Note: if you ignore the Pods directory, make sure to uncomment
-# `pod install` in .travis.yml
-#
-
-# Include `Pods` in repo in order to make symlink `Pods.xcodeproj` work (used for Carthage support).
-# Pods/
-
-
-#
-# Fastlane specific
-# Based on: https://docs.fastlane.tools/best-practices/source-control/
-#
-**/fastlane/report.xml
-**/fastlane/Preview.html
-**/fastlane/screenshots
-**/fastlane/test_output
-**/fastlane/README.md
+DerivedData/
+.swiftpm/configuration/registries.json
+.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
+.netrc
diff --git a/.swift-version b/.swift-version
index 9ad974f..0cda48a 100644
--- a/.swift-version
+++ b/.swift-version
@@ -1 +1 @@
-5.5
+6.2
diff --git a/.swiftformat b/.swiftformat
new file mode 100644
index 0000000..53bd449
--- /dev/null
+++ b/.swiftformat
@@ -0,0 +1,23 @@
+#
+# .swiftformat
+# Configuration file for SwiftFormat (https://github.com/nicklockwood/SwiftFormat/)
+#
+# A more detailed documentation of the rules can be found at
+# https://github.com/nicklockwood/SwiftFormat/blob/master/Rules.md
+#
+# Created by Felix Mau (https://felix.hamburg)
+#
+
+#
+# Rules
+#
+
+# Allows an empty line before the first `// MARK: -` statement.
+--disable blankLinesAtStartOfScope
+
+#
+# Rule Configuration
+#
+--indent 2
+--import-grouping testable-last
+--wraparguments before-first
diff --git a/.swiftlint.yml b/.swiftlint.yml
new file mode 100644
index 0000000..b278c48
--- /dev/null
+++ b/.swiftlint.yml
@@ -0,0 +1,85 @@
+#
+# .swiftlint.yml
+# Configuration file for SwiftLint (https://github.com/realm/SwiftLint/)
+#
+# A more detailed documentation of the rules can be found at
+# https://realm.github.io/SwiftLint/rule-directory.html
+#
+# Created by Felix Mau (https://felix.hamburg)
+#
+
+included:
+ - ./
+
+excluded:
+ - ".build/**/*"
+ - Package.swift
+
+opt_in_rules:
+ - accessibility_label_for_image # Images that provide context should have an accessibility label or should be explicitly hidden from accessibility
+ - accessibility_trait_for_button # All views with tap gestures added should include the .isButton or the .isLink accessibility traits
+ - closure_spacing # Closure expressions should have a single space inside each brace.
+ - contains_over_filter_count # Prefer `contains` over comparing `filter(where:).count` to 0.
+ - contains_over_filter_is_empty # Prefer `contains` over using `filter(where:).isEmpty`.
+ - contains_over_first_not_nil # Prefer `contains` over `first(where:) != nil` and `firstIndex(where:) != nil`.
+ - contains_over_range_nil_comparison # Prefer `contains` over `range(of:) != nil` and `range(of:) == nil`.
+ - convenience_type # Types used for hosting only static members should be implemented as a caseless enum to avoid instantiation.
+ - duplicate_imports # Imports should be unique.
+ - empty_collection_literal # Prefer checking `isEmpty` over comparing collection to an empty array or dictionary literal.
+ - empty_count # Prefer checking `isEmpty` over comparing count to zero.
+ - empty_parameters # Prefer `() ->` over `Void ->`.
+ - empty_string # Prefer checking `isEmpty` over comparing string to an empty string literal.
+ - empty_xctest_method # Empty XCTest method should be avoided.
+ - explicit_init # Explicitly calling .init() should be avoided.
+ - fatal_error_message # A fatalError call should have a message.
+ - file_header # Header comments should be consistent with project patterns.
+ - first_where # Prefer using `.first(where:)` over `.filter { }.first` in collections.
+ - for_where # `where` clauses are preferred over a single `if` inside a `for`.
+ - force_unwrapping # Force unwrapping should be avoided.
+ - identical_operands # Comparing two identical operands is likely a mistake.
+ - implicit_return # Prefer implicit returns in closures, functions and getters.
+ - is_disjoint # Prefer using `Set.isDisjoint(with:)` over `Set.intersection(_:).isEmpty`.
+ - last_where # Prefer using `.last(where:)` over `.filter { }.last` in collections.
+ - legacy_multiple # Prefer using the `isMultiple(of:)` function instead of using the remainder operator (`%`).
+ - missing_docs # Declarations should be documented.
+ - modifier_order # Modifier order should be consistent.
+ - multiline_arguments # Arguments should be either on the same line, or one per line.
+ - multiline_parameters # Functions and methods parameters should be either on the same line, or one per line.
+ - operator_usage_whitespace # Operators should be surrounded by a single whitespace when they are being used.
+ - overridden_super_call # Some overridden methods should always call super
+ - prefer_self_type_over_type_of_self # Prefer `Self` over `type(of: self)` when accessing properties or calling methods.
+ - prefer_zero_over_explicit_init # Prefer `.zero` over explicit init with zero parameters (e.g. `CGPoint(x: 0, y: 0)`).
+ - prohibited_super_call # Some methods should not call super, e.g. `UIViewController.loadView()`.
+ - redundant_nil_coalescing # nil coalescing operator is only evaluated if the lhs is nil, coalescing operator with nil as rhs is redundant.
+ - toggle_bool # Prefer `someBool.toggle()` over `someBool = !someBool`.
+ - unavailable_function # Unimplemented functions should be marked as unavailable.
+ - unused_optional_binding # Prefer `!= nil` over `let _ =`
+ - void_return # Prefer `-> Void` over `-> ()`.
+ - weak_delegate # Delegates should be weak to avoid reference cycles
+ - yoda_condition # The constant literal should be placed on the right-hand side of the comparison operator.
+
+file_header:
+ required_pattern: |
+ \/\/
+ \/\/ SWIFTLINT_CURRENT_FILENAME
+ \/\/ (GradientLoadingBar|GradientLoadingBarTests|GradientLoadingBarExample)
+ \/\/
+ \/\/ Created by .*? on \d{2}\.\d{2}\.\d{2}\.
+ \/\/ Copyright © \d{4} .*?\. All rights reserved\.
+ \/\/
+
+line_length: 150
+
+nesting:
+ type_level:
+ warning: 3
+
+trailing_comma:
+ mandatory_comma: true
+
+custom_rules:
+ comments_space:
+ name: "Space After Comment"
+ regex: '(^ *//\w+)'
+ message: "There should be a space after //."
+ severity: warning
diff --git a/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 919434a..0000000
--- a/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7240dc0..c200e19 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,5 @@
# Changelog
+
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
@@ -8,200 +9,280 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
## [Unreleased]
## [3.0.0] - 2022-07-10
+
### Changed
- - Use `Combine` instead of dependency `LightweightObservable`. Therefore the minimum required iOS version increased to 13. Otherwise there are no breaking changes.
+
+- Use `Combine` instead of dependency `LightweightObservable`. Therefore the minimum required iOS version increased to iOS `13.0`. Otherwise there are no breaking changes.
## [2.3.5] - 2022-12-09
+
### Fixed
- - Fixed wrong minimum iOS deployment target when using Carthage.
+
+- Fixed wrong minimum iOS deployment target when using Carthage.
## [2.3.4] - 2022-11-09
+
### Fixed
- - Added missing `UIKit` import when using Swift Package Manager.
+
+- Added missing `UIKit` import when using Swift Package Manager.
## [2.3.3] - 2022-08-09
+
### Changed
- - Added specific Bézier Path for `NotchGradientLoadingBar` for "iPhone 14" and "iPhone 14 Plus"
+
+- Added specific Bézier Path for `NotchGradientLoadingBar` for "iPhone 14" and "iPhone 14 Plus"
## [2.3.2] - 2022-08-09
+
### Changed
- - Improved Bézier Path of `NotchGradientLoadingBar`
- - Adapt logic of `UIKit` variant for calculating and animating the gradient to `SwiftUI` variant. This should not make any difference visually, but will be easier to maintain.
+
+- Improved Bézier Path of `NotchGradientLoadingBar`
+- Adapt logic of `UIKit` variant for calculating and animating the gradient to `SwiftUI` variant. This should not make any difference visually, but will be easier to maintain.
+
### Fixed
- - Fixed incorrect layout on `NotchGradientLoadingBar` when using "iPhone 12 Mini" or "iPhone 13 Mini"
+
+- Fixed incorrect layout on `NotchGradientLoadingBar` when using "iPhone 12 Mini" or "iPhone 13 Mini"
## [2.3.1] - 2022-10-05
+
### Fixed
- - Fixed incorrect layout on `NotchGradientLoadingBar` when using "iPhone 11 Pro" or "iPhone 11 Pro Max" ([#029])
+
+- Fixed incorrect layout on `NotchGradientLoadingBar` when using "iPhone 11 Pro" or "iPhone 11 Pro Max" ([#029])
[#029]: https://github.com/fxm90/GradientLoadingBar/issues/29
## [2.3.0] - 2022-06-05
+
### Added
- - Add `GradientLoadingBarView` to support SwiftUI
+
+- Add `GradientLoadingBarView` to support SwiftUI
## [2.2.5] - 2022-27-03
+
### Fixed
- - Fixed incorrect layout on `NotchGradientLoadingBar` when using "iPhone 11"
+
+- Fixed incorrect layout on `NotchGradientLoadingBar` when using "iPhone 11"
## [2.2.4] - 2022-16-03
+
### Fixed
- - Fixed incorrect layout on `NotchGradientLoadingBar` when using "iPhone XR"
+
+- Fixed incorrect layout on `NotchGradientLoadingBar` when using "iPhone XR"
## [2.2.3] - 2021-29-12
+
### Fixed
- - Fixed incorrect layout on `NotchGradientLoadingBar` when using an increased height ([#026], thanks to [alinfarcas12](https://github.com/alinfarcas12))
+
+- Fixed incorrect layout on `NotchGradientLoadingBar` when using an increased height ([#026], thanks to [alinfarcas12](https://github.com/alinfarcas12))
[#026]: https://github.com/fxm90/GradientLoadingBar/issues/26
## [2.2.2] - 2021-05-10
+
### Fixed
- - Fixed missing `return` ([#025])
+
+- Fixed missing `return` ([#025])
[#025]: https://github.com/fxm90/GradientLoadingBar/issues/25
## [2.2.1] - 2021-05-10
+
### Fixed
- - Fixed invalid import ([#024])
+
+- Fixed invalid import ([#024])
[#024]: https://github.com/fxm90/GradientLoadingBar/issues/24
## [2.2.0] - 2021-04-10
+
### Fixed
- - Added support for iPhone 13 ([#023])
+
+- Added support for iPhone 13 ([#023])
[#023]: https://github.com/fxm90/GradientLoadingBar/issues/23
## [2.1.1] - 2021-12-05
+
### Fixed
- - Showing loading bar with a masked notch on iPad Pro 12.9 ([#020])
+
+- Showing loading bar with a masked notch on iPad Pro 12.9 ([#020])
[#020]: https://github.com/fxm90/GradientLoadingBar/issues/20
## [2.1.0] - 2020-17-06
+
### Added
- - Added `NotchGradientLoadingBar`: A subclass of `GradientLoadingBar`, wrapping the `GradientActivityIndicatorView` around the notch of the iPhone.
+
+- Added `NotchGradientLoadingBar`: A subclass of `GradientLoadingBar`, wrapping the `GradientActivityIndicatorView` around the notch of the iPhone.
## [2.0.3] - 2020-18-01
+
### Added
- - Added support for Swift Package Manager.
+
+- Added support for Swift Package Manager.
## [2.0.2] - 2019-20-12
+
### Changed
- - Use `windows.first(where: { $0.isKeyWindow })` instead of [`keyWindow`](https://developer.apple.com/documentation/uikit/uiapplication/1622924-keywindow) as this is deprecated in iOS 13
+
+- Use `windows.first(where: { $0.isKeyWindow })` instead of [`keyWindow`](https://developer.apple.com/documentation/uikit/uiapplication/1622924-keywindow) as this is deprecated in iOS 13
## [2.0.1] - 2019-12-10
+
### Changed
- - Refactorings (Optimized progress animation)
- - Updated example application for iOS 13
+
+- Refactorings (Optimized progress animation)
+- Updated example application for iOS 13
## [2.0.0] - 2019-02-09
+
### Changed
- - Splitted framework into two classes:
- - **GradientLoadingBar**: A controller, managing the visibility of the `GradientActivityIndicatorView` on the current key window.
- - **GradientActivityIndicatorView**: A `UIView` containing the gradient with the animation, with support for Interface Builder.
+
+- Split framework into two classes:
+- **GradientLoadingBar**: A controller, managing the visibility of the `GradientActivityIndicatorView` on the current key window.
+- **GradientActivityIndicatorView**: A `UIView` containing the gradient with the animation, with support for Interface Builder.
## [1.1.17] - 2019-30-06
+
### Changed
- - Extract observable implementation into a framework (`LightweightObservable`) and added it as dependency.
+
+- Extract observable implementation into a framework (`LightweightObservable`) and added it as dependency.
## [1.1.16] - 2019-08-04
+
### Changed
-- Changed access controll level for extensions to `internal` to avoid conflicts
+
+- Changed access control level for extensions to `internal` to avoid conflicts
- Added by [Emil Bellmann](https://github.com/emilrb) in Pull Request [#13](https://github.com/fxm90/GradientLoadingBar/pull/13).
- Added support for Swift 5.0
## [1.1.15] - 2019-14-02
+
### Changed
+
- Remove dependency `Observable` in favour of a more lightweight implementation
- Small internal refactorings and cleanup
## [1.1.14] - 2018-20-12
+
### Changed
+
- Fixed fade-out animation not working in iOS 12 (https://openradar.appspot.com/46753872)
## [1.1.13] - 2018-14-11
+
### Changed
+
- Adapt code to support new version from dependency `Observable`
## [1.1.12] - 2018-22-09
+
### Changed
+
- Updates for Swift 4.2
- Refactored to observables
- Removed `UIColor` initializers, as they're not required for the project to work (and it's not very common to use hex color codes in iOS)
- - If you need them in your project, feel free to copy & paste to following file into you project: https://gist.github.com/fxm90/1350d27abf92af3be59aaa9eb72c9310
+ - If you need them in your project, feel free to copy & paste the following file into your project: https://gist.github.com/fxm90/1350d27abf92af3be59aaa9eb72c9310
## [1.1.11] - 2018-04-06
+
### Changed
- - Carthage Support
+
+- Carthage Support
## [1.1.10] - 2018-14-04
+
### Changed
- - Updates for Swift 4.1
- - Formatted code
+
+- Updates for Swift 4.1
+- Formatted code
## [1.1.9] - 2018-27-01
+
### Changed
- - Formatted code
- - Refactorings
+
+- Formatted code
+- Refactorings
## [1.1.8] - 2018-20-01
+
### Added
- - Further documentation
- - Further examples
+
+- Further documentation
+- Further examples
+
### Changed
- - Refactorings (moved all logic into view model)
+
+- Refactorings (moved all logic into view model)
## [1.1.7] - 2017-12-30
+
### Changed
- - Adapt layout for iPhoneX
- - Convert code to Swift 4
- - Refactor code to MVVM
+
+- Adapt layout for iPhoneX
+- Convert code to Swift 4
+- Refactor code to MVVM
## [1.1.6] - 2017-10-30
+
### Added
- - Allow setting a custom superview
- - Documentation
+
+- Allow setting a custom superview
+- Documentation
## [1.1.5] - 2017-10-03
+
### Fixed
- - Struct 'DefaultValues' is private and cannot be referenced from a default argument value ([#001])
+
+- Struct 'DefaultValues' is private and cannot be referenced from a default argument value ([#001])
[#001]: https://github.com/fxm90/GradientLoadingBar/issues/1
## [1.1.4] - 2017-10-01
+
### Added
- - Refactored project structure to match "pod lib create" / TravisCI integration
- - Added example project
+
+- Refactored project structure to match "pod lib create" / TravisCI integration
+- Added example project
## [1.1.3] - 2017-09-25
+
### Fixed
- - Fixed never adding gradient view to "keyWindow" if it is not available on first call to "show()"
+
+- Fixed never adding gradient view to "keyWindow" if it is not available on first call to "show()"
## [1.1.2] - 2017-08-27
+
### Added
- - Basic tests / TravisCI integration
- - Refactored extension for UIColor initializer
- - Changelog
+
+- Basic tests / TravisCI integration
+- Refactored extension for UIColor initializer
+- Changelog
## [1.1.1] - 2017-08-18
+
### Fixed
- - Fixed optical animation issue
- - Fixed orientation change bug
+
+- Fixed optical animation issue
+- Fixed orientation change bug
+
### Changed
- - Refactor entire code
- - Lint code
+
+- Refactor entire code
+- Lint code
## [1.1.0] - 2017-02-28
+
### Changed
- - Allow changing gradient colors
+
+- Allow changing gradient colors
## [1.0.0] - 2016-12-28
+
- Initial release
-
[Unreleased]: https://github.com/fxm90/GradientLoadingBar/compare/3.0.0...main
-[2.3.5]: https://github.com/fxm90/GradientLoadingBar/compare/2.3.5...3.0.0
+[3.0.0]: https://github.com/fxm90/GradientLoadingBar/compare/2.3.5...3.0.0
[2.3.5]: https://github.com/fxm90/GradientLoadingBar/compare/2.3.4...2.3.5
[2.3.4]: https://github.com/fxm90/GradientLoadingBar/compare/2.3.3...2.3.4
[2.3.3]: https://github.com/fxm90/GradientLoadingBar/compare/2.3.2...2.3.3
diff --git a/Cartfile b/Cartfile
deleted file mode 100644
index e69de29..0000000
diff --git a/Example/.swiftformat b/Example/.swiftformat
deleted file mode 100644
index a339cb8..0000000
--- a/Example/.swiftformat
+++ /dev/null
@@ -1,19 +0,0 @@
-#
-# .swiftformat
-# Created by Felix Mau (https://felix.hamburg)
-#
-
-#
-# "Global" formatting options
-#
-# "Global" formatting options will be applied from the `SwiftConfigurationFiles` repository.
-# See https://github.com/fxm90/SwiftConfigurationFiles for further details.
-#
-
-#
-# File options
-#
-# Note: Excluded paths are relative to the SwiftFormat configuration file.
-# Therefore we can't specify them in the configuration file from the `SwiftConfigurationFiles` repository.
-#
---exclude Pods
\ No newline at end of file
diff --git a/Example/.swiftlint.yml b/Example/.swiftlint.yml
deleted file mode 100644
index 6275d0e..0000000
--- a/Example/.swiftlint.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# .swiftlint.yml
-# Created by Felix Mau (https://felix.hamburg)
-#
-
-opt_in_rules:
- - file_header
-
-file_header:
- required_pattern: |
- \/\/
- \/\/ SWIFTLINT_CURRENT_FILENAME
- \/\/ (GradientLoadingBar|Example|ExampleTests|ExampleSnapshotTests)
- \/\/
- \/\/ Created by .*? on \d{2}\.\d{2}\.\d{2}\.
- \/\/ Copyright © \d{4} .*?\. All rights reserved\.
- \/\/
-
-included:
- - ./
- - ../GradientLoadingBar
-
-excluded:
- - Pods
-
-parent_config: Pods/SwiftConfigurationFiles/.swiftlint.yml
\ No newline at end of file
diff --git a/Example/Example.xcodeproj/project.pbxproj b/Example/Example.xcodeproj/project.pbxproj
deleted file mode 100644
index 99e73fc..0000000
--- a/Example/Example.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,586 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 55;
- objects = {
-
-/* Begin PBXBuildFile section */
- DC4E50A16A3B84900FBD1981 /* Pods_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 12DDBD589B02F5D3C9C3AF69 /* Pods_Example.framework */; };
- DCA9833A27D68AD400D6EA30 /* ExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCA9833927D68AD400D6EA30 /* ExampleApp.swift */; };
- DCA9833E27D68AD600D6EA30 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DCA9833D27D68AD600D6EA30 /* Assets.xcassets */; };
- DCA9834127D68AD600D6EA30 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DCA9834027D68AD600D6EA30 /* Preview Assets.xcassets */; };
- DCA9836927D68E3500D6EA30 /* StoryboardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCA9836827D68E3500D6EA30 /* StoryboardView.swift */; };
- DCA9836C27D6905000D6EA30 /* EntryPointView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCA9836B27D6905000D6EA30 /* EntryPointView.swift */; };
- DCA9837127D6912300D6EA30 /* BasicExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCA9837027D6912300D6EA30 /* BasicExampleViewController.swift */; };
- DCA9837627D693BB00D6EA30 /* BasicExample.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DCA9837527D693BB00D6EA30 /* BasicExample.storyboard */; };
- DCA9837827D6951C00D6EA30 /* SafeAreaExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCA9837727D6951C00D6EA30 /* SafeAreaExampleViewController.swift */; };
- DCA9837A27D6958500D6EA30 /* SafeAreaExample.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DCA9837927D6958500D6EA30 /* SafeAreaExample.storyboard */; };
- DCA9838727D6A44700D6EA30 /* NavigationBarExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCA9838627D6A44700D6EA30 /* NavigationBarExampleViewController.swift */; };
- DCA9838927D6A55A00D6EA30 /* NavigationBarExample.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DCA9838827D6A55A00D6EA30 /* NavigationBarExample.storyboard */; };
- DCA9838B27D6A74800D6EA30 /* SwiftUIExampleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCA9838A27D6A74800D6EA30 /* SwiftUIExampleView.swift */; };
- F50E4C7E28061655001232D3 /* AdvancedExample.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F50E4C7D28061655001232D3 /* AdvancedExample.storyboard */; };
- F50E4C8028061715001232D3 /* AdvancedExampleTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F50E4C7F28061715001232D3 /* AdvancedExampleTableViewController.swift */; };
- F5C7E8882809CDEE00036B8E /* CustomColorsTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5C7E8872809CDEE00036B8E /* CustomColorsTableViewCell.swift */; };
- F5C7E88A2809CDF600036B8E /* InterfaceBuilderSetupTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5C7E8892809CDF600036B8E /* InterfaceBuilderSetupTableViewCell.swift */; };
- F5C7E88C2809CDFD00036B8E /* CustomSuperviewTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5C7E88B2809CDFD00036B8E /* CustomSuperviewTableViewCell.swift */; };
- F5C7E88F2809CF1200036B8E /* BorderedButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5C7E88E2809CF1200036B8E /* BorderedButton.swift */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXFileReference section */
- 12DDBD589B02F5D3C9C3AF69 /* Pods_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 3299012A62A2E4310D02CD78 /* Pods-Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example.release.xcconfig"; path = "Target Support Files/Pods-Example/Pods-Example.release.xcconfig"; sourceTree = ""; };
- DCA9833627D68AD400D6EA30 /* Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example.app; sourceTree = BUILT_PRODUCTS_DIR; };
- DCA9833927D68AD400D6EA30 /* ExampleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExampleApp.swift; sourceTree = ""; };
- DCA9833D27D68AD600D6EA30 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
- DCA9834027D68AD600D6EA30 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
- DCA9836827D68E3500D6EA30 /* StoryboardView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoryboardView.swift; sourceTree = ""; };
- DCA9836B27D6905000D6EA30 /* EntryPointView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EntryPointView.swift; sourceTree = ""; };
- DCA9837027D6912300D6EA30 /* BasicExampleViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BasicExampleViewController.swift; sourceTree = ""; };
- DCA9837527D693BB00D6EA30 /* BasicExample.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = BasicExample.storyboard; sourceTree = ""; };
- DCA9837727D6951C00D6EA30 /* SafeAreaExampleViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SafeAreaExampleViewController.swift; sourceTree = ""; };
- DCA9837927D6958500D6EA30 /* SafeAreaExample.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = SafeAreaExample.storyboard; sourceTree = ""; };
- DCA9838627D6A44700D6EA30 /* NavigationBarExampleViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationBarExampleViewController.swift; sourceTree = ""; };
- DCA9838827D6A55A00D6EA30 /* NavigationBarExample.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NavigationBarExample.storyboard; sourceTree = ""; };
- DCA9838A27D6A74800D6EA30 /* SwiftUIExampleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftUIExampleView.swift; sourceTree = ""; };
- F50E4C7D28061655001232D3 /* AdvancedExample.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = AdvancedExample.storyboard; sourceTree = ""; };
- F50E4C7F28061715001232D3 /* AdvancedExampleTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdvancedExampleTableViewController.swift; sourceTree = ""; };
- F5C7E8872809CDEE00036B8E /* CustomColorsTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomColorsTableViewCell.swift; sourceTree = ""; };
- F5C7E8892809CDF600036B8E /* InterfaceBuilderSetupTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterfaceBuilderSetupTableViewCell.swift; sourceTree = ""; };
- F5C7E88B2809CDFD00036B8E /* CustomSuperviewTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomSuperviewTableViewCell.swift; sourceTree = ""; };
- F5C7E88E2809CF1200036B8E /* BorderedButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BorderedButton.swift; sourceTree = ""; };
- FAA1A12E84EBC1F48401EB10 /* Pods-Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example.debug.xcconfig"; path = "Target Support Files/Pods-Example/Pods-Example.debug.xcconfig"; sourceTree = ""; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- DCA9833327D68AD400D6EA30 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- DC4E50A16A3B84900FBD1981 /* Pods_Example.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 33D2CE217238EAE7A5515634 /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- 12DDBD589B02F5D3C9C3AF69 /* Pods_Example.framework */,
- );
- name = Frameworks;
- sourceTree = "";
- };
- A6AC3866473F1A669D221CA4 /* Pods */ = {
- isa = PBXGroup;
- children = (
- FAA1A12E84EBC1F48401EB10 /* Pods-Example.debug.xcconfig */,
- 3299012A62A2E4310D02CD78 /* Pods-Example.release.xcconfig */,
- );
- path = Pods;
- sourceTree = "";
- };
- DCA9832D27D68AD400D6EA30 = {
- isa = PBXGroup;
- children = (
- DCA9833827D68AD400D6EA30 /* Example */,
- DCA9833727D68AD400D6EA30 /* Products */,
- A6AC3866473F1A669D221CA4 /* Pods */,
- 33D2CE217238EAE7A5515634 /* Frameworks */,
- );
- sourceTree = "";
- };
- DCA9833727D68AD400D6EA30 /* Products */ = {
- isa = PBXGroup;
- children = (
- DCA9833627D68AD400D6EA30 /* Example.app */,
- );
- name = Products;
- sourceTree = "";
- };
- DCA9833827D68AD400D6EA30 /* Example */ = {
- isa = PBXGroup;
- children = (
- DCA9836727D68E3500D6EA30 /* Helper */,
- DCA9836A27D68E3C00D6EA30 /* Scenes */,
- DCA9833927D68AD400D6EA30 /* ExampleApp.swift */,
- DCA9833D27D68AD600D6EA30 /* Assets.xcassets */,
- DCA9833F27D68AD600D6EA30 /* Preview Content */,
- );
- path = Example;
- sourceTree = "";
- };
- DCA9833F27D68AD600D6EA30 /* Preview Content */ = {
- isa = PBXGroup;
- children = (
- DCA9834027D68AD600D6EA30 /* Preview Assets.xcassets */,
- );
- path = "Preview Content";
- sourceTree = "";
- };
- DCA9836727D68E3500D6EA30 /* Helper */ = {
- isa = PBXGroup;
- children = (
- DCA9836827D68E3500D6EA30 /* StoryboardView.swift */,
- );
- path = Helper;
- sourceTree = "";
- };
- DCA9836A27D68E3C00D6EA30 /* Scenes */ = {
- isa = PBXGroup;
- children = (
- DCA9836E27D6909A00D6EA30 /* AdvancedExample */,
- DCA9836D27D6908F00D6EA30 /* BasicExample */,
- DCA9837427D691C600D6EA30 /* NavigationBarExample */,
- DCA9837227D691A200D6EA30 /* SafeAreaExample */,
- DCA9836F27D690A400D6EA30 /* SwiftUIExample */,
- DCA9836B27D6905000D6EA30 /* EntryPointView.swift */,
- );
- path = Scenes;
- sourceTree = "";
- };
- DCA9836D27D6908F00D6EA30 /* BasicExample */ = {
- isa = PBXGroup;
- children = (
- DCA9837527D693BB00D6EA30 /* BasicExample.storyboard */,
- DCA9837027D6912300D6EA30 /* BasicExampleViewController.swift */,
- );
- path = BasicExample;
- sourceTree = "";
- };
- DCA9836E27D6909A00D6EA30 /* AdvancedExample */ = {
- isa = PBXGroup;
- children = (
- F5C7E8862809CDE200036B8E /* Cells */,
- F5C7E88D2809CF0700036B8E /* Views */,
- F50E4C7D28061655001232D3 /* AdvancedExample.storyboard */,
- F50E4C7F28061715001232D3 /* AdvancedExampleTableViewController.swift */,
- );
- path = AdvancedExample;
- sourceTree = "";
- };
- DCA9836F27D690A400D6EA30 /* SwiftUIExample */ = {
- isa = PBXGroup;
- children = (
- DCA9838A27D6A74800D6EA30 /* SwiftUIExampleView.swift */,
- );
- path = SwiftUIExample;
- sourceTree = "";
- };
- DCA9837227D691A200D6EA30 /* SafeAreaExample */ = {
- isa = PBXGroup;
- children = (
- DCA9837927D6958500D6EA30 /* SafeAreaExample.storyboard */,
- DCA9837727D6951C00D6EA30 /* SafeAreaExampleViewController.swift */,
- );
- path = SafeAreaExample;
- sourceTree = "";
- };
- DCA9837427D691C600D6EA30 /* NavigationBarExample */ = {
- isa = PBXGroup;
- children = (
- DCA9838827D6A55A00D6EA30 /* NavigationBarExample.storyboard */,
- DCA9838627D6A44700D6EA30 /* NavigationBarExampleViewController.swift */,
- );
- path = NavigationBarExample;
- sourceTree = "";
- };
- F5C7E8862809CDE200036B8E /* Cells */ = {
- isa = PBXGroup;
- children = (
- F5C7E8872809CDEE00036B8E /* CustomColorsTableViewCell.swift */,
- F5C7E8892809CDF600036B8E /* InterfaceBuilderSetupTableViewCell.swift */,
- F5C7E88B2809CDFD00036B8E /* CustomSuperviewTableViewCell.swift */,
- );
- path = Cells;
- sourceTree = "";
- };
- F5C7E88D2809CF0700036B8E /* Views */ = {
- isa = PBXGroup;
- children = (
- F5C7E88E2809CF1200036B8E /* BorderedButton.swift */,
- );
- path = Views;
- sourceTree = "";
- };
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
- DCA9833527D68AD400D6EA30 /* Example */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = DCA9835A27D68AD600D6EA30 /* Build configuration list for PBXNativeTarget "Example" */;
- buildPhases = (
- 52082F0E9B4B579867A82146 /* [CP] Check Pods Manifest.lock */,
- DCA9833227D68AD400D6EA30 /* Sources */,
- DCA9833327D68AD400D6EA30 /* Frameworks */,
- DCA9833427D68AD400D6EA30 /* Resources */,
- C56CF067D28EB40785524B49 /* [CP] Embed Pods Frameworks */,
- DCA9836527D68D6400D6EA30 /* SwiftFormat */,
- DCA9836627D68D7000D6EA30 /* SwiftLint */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = Example;
- productName = Example;
- productReference = DCA9833627D68AD400D6EA30 /* Example.app */;
- productType = "com.apple.product-type.application";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- DCA9832E27D68AD400D6EA30 /* Project object */ = {
- isa = PBXProject;
- attributes = {
- BuildIndependentTargetsInParallel = 1;
- LastSwiftUpdateCheck = 1320;
- LastUpgradeCheck = 1320;
- TargetAttributes = {
- DCA9833527D68AD400D6EA30 = {
- CreatedOnToolsVersion = 13.2.1;
- };
- };
- };
- buildConfigurationList = DCA9833127D68AD400D6EA30 /* Build configuration list for PBXProject "Example" */;
- compatibilityVersion = "Xcode 13.0";
- developmentRegion = en;
- hasScannedForEncodings = 0;
- knownRegions = (
- en,
- Base,
- );
- mainGroup = DCA9832D27D68AD400D6EA30;
- productRefGroup = DCA9833727D68AD400D6EA30 /* Products */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- DCA9833527D68AD400D6EA30 /* Example */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- DCA9833427D68AD400D6EA30 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- DCA9834127D68AD600D6EA30 /* Preview Assets.xcassets in Resources */,
- F50E4C7E28061655001232D3 /* AdvancedExample.storyboard in Resources */,
- DCA9837A27D6958500D6EA30 /* SafeAreaExample.storyboard in Resources */,
- DCA9837627D693BB00D6EA30 /* BasicExample.storyboard in Resources */,
- DCA9833E27D68AD600D6EA30 /* Assets.xcassets in Resources */,
- DCA9838927D6A55A00D6EA30 /* NavigationBarExample.storyboard in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
- 52082F0E9B4B579867A82146 /* [CP] Check Pods Manifest.lock */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- );
- inputPaths = (
- "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
- "${PODS_ROOT}/Manifest.lock",
- );
- name = "[CP] Check Pods Manifest.lock";
- outputFileListPaths = (
- );
- outputPaths = (
- "$(DERIVED_FILE_DIR)/Pods-Example-checkManifestLockResult.txt",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
- showEnvVarsInLog = 0;
- };
- C56CF067D28EB40785524B49 /* [CP] Embed Pods Frameworks */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks-${CONFIGURATION}-input-files.xcfilelist",
- );
- name = "[CP] Embed Pods Frameworks";
- outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks-${CONFIGURATION}-output-files.xcfilelist",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks.sh\"\n";
- showEnvVarsInLog = 0;
- };
- DCA9836527D68D6400D6EA30 /* SwiftFormat */ = {
- isa = PBXShellScriptBuildPhase;
- alwaysOutOfDate = 1;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- );
- inputPaths = (
- );
- name = SwiftFormat;
- outputFileListPaths = (
- );
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "SWIFTFORMAT=\"${PODS_ROOT}/SwiftFormat/CommandLineTool/swiftformat\"\nif [ ! -f \"$SWIFTFORMAT\" ]; then\n echo \"warning: SwiftFormat not installed!\"\n exit 1\nfi\n\n$SWIFTFORMAT ../ --config \"${PODS_ROOT}/SwiftConfigurationFiles/.swiftformat\"\n";
- };
- DCA9836627D68D7000D6EA30 /* SwiftLint */ = {
- isa = PBXShellScriptBuildPhase;
- alwaysOutOfDate = 1;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- );
- inputPaths = (
- );
- name = SwiftLint;
- outputFileListPaths = (
- );
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "SWIFTLINT=\"${PODS_ROOT}/SwiftLint/swiftlint\"\nif [ ! -f \"$SWIFTLINT\" ]; then\n echo \"warning: SwiftLint not installed!\"\n exit 1\nfi\n\n$SWIFTLINT\n";
- };
-/* End PBXShellScriptBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- DCA9833227D68AD400D6EA30 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- DCA9837127D6912300D6EA30 /* BasicExampleViewController.swift in Sources */,
- DCA9833A27D68AD400D6EA30 /* ExampleApp.swift in Sources */,
- F5C7E88F2809CF1200036B8E /* BorderedButton.swift in Sources */,
- F5C7E8882809CDEE00036B8E /* CustomColorsTableViewCell.swift in Sources */,
- DCA9836927D68E3500D6EA30 /* StoryboardView.swift in Sources */,
- F5C7E88C2809CDFD00036B8E /* CustomSuperviewTableViewCell.swift in Sources */,
- F5C7E88A2809CDF600036B8E /* InterfaceBuilderSetupTableViewCell.swift in Sources */,
- F50E4C8028061715001232D3 /* AdvancedExampleTableViewController.swift in Sources */,
- DCA9836C27D6905000D6EA30 /* EntryPointView.swift in Sources */,
- DCA9837827D6951C00D6EA30 /* SafeAreaExampleViewController.swift in Sources */,
- DCA9838727D6A44700D6EA30 /* NavigationBarExampleViewController.swift in Sources */,
- DCA9838B27D6A74800D6EA30 /* SwiftUIExampleView.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin XCBuildConfiguration section */
- DCA9835827D68AD600D6EA30 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_ENABLE_OBJC_WEAK = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = dwarf;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_TESTABILITY = YES;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 15.0;
- MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
- MTL_FAST_MATH = YES;
- ONLY_ACTIVE_ARCH = YES;
- SDKROOT = iphoneos;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- };
- name = Debug;
- };
- DCA9835927D68AD600D6EA30 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_ENABLE_OBJC_WEAK = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 15.0;
- MTL_ENABLE_DEBUG_INFO = NO;
- MTL_FAST_MATH = YES;
- SDKROOT = iphoneos;
- SWIFT_COMPILATION_MODE = wholemodule;
- SWIFT_OPTIMIZATION_LEVEL = "-O";
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
- DCA9835B27D68AD600D6EA30 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = FAA1A12E84EBC1F48401EB10 /* Pods-Example.debug.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_ASSET_PATHS = "\"Example/Preview Content\"";
- DEVELOPMENT_TEAM = F63GJC2AN7;
- ENABLE_PREVIEWS = YES;
- GENERATE_INFOPLIST_FILE = YES;
- INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
- INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
- INFOPLIST_KEY_UILaunchScreen_Generation = YES;
- INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
- INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
- IPHONEOS_DEPLOYMENT_TARGET = 15.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = hamburg.felix.gradientLoadingBar.example.Example;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_EMIT_LOC_STRINGS = YES;
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- };
- name = Debug;
- };
- DCA9835C27D68AD600D6EA30 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 3299012A62A2E4310D02CD78 /* Pods-Example.release.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_ASSET_PATHS = "\"Example/Preview Content\"";
- DEVELOPMENT_TEAM = F63GJC2AN7;
- ENABLE_PREVIEWS = YES;
- GENERATE_INFOPLIST_FILE = YES;
- INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
- INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
- INFOPLIST_KEY_UILaunchScreen_Generation = YES;
- INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
- INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
- IPHONEOS_DEPLOYMENT_TARGET = 15.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = hamburg.felix.gradientLoadingBar.example.Example;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SWIFT_EMIT_LOC_STRINGS = YES;
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- DCA9833127D68AD400D6EA30 /* Build configuration list for PBXProject "Example" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- DCA9835827D68AD600D6EA30 /* Debug */,
- DCA9835927D68AD600D6EA30 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- DCA9835A27D68AD600D6EA30 /* Build configuration list for PBXNativeTarget "Example" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- DCA9835B27D68AD600D6EA30 /* Debug */,
- DCA9835C27D68AD600D6EA30 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
- };
- rootObject = DCA9832E27D68AD400D6EA30 /* Project object */;
-}
diff --git a/Example/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Example/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 919434a..0000000
--- a/Example/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
diff --git a/Example/Example.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Example/Example.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d9810..0000000
--- a/Example/Example.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- IDEDidComputeMac32BitWarning
-
-
-
diff --git a/Example/Example.xcworkspace/contents.xcworkspacedata b/Example/Example.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index a37cf19..0000000
--- a/Example/Example.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
diff --git a/Example/Example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Example/Example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d9810..0000000
--- a/Example/Example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- IDEDidComputeMac32BitWarning
-
-
-
diff --git a/Example/Example/Assets.xcassets/AccentColor.colorset/Contents.json b/Example/Example/Assets.xcassets/AccentColor.colorset/Contents.json
deleted file mode 100644
index eb87897..0000000
--- a/Example/Example/Assets.xcassets/AccentColor.colorset/Contents.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "colors" : [
- {
- "idiom" : "universal"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Example/Example/Assets.xcassets/AppIcon.appiconset/Contents.json b/Example/Example/Assets.xcassets/AppIcon.appiconset/Contents.json
deleted file mode 100644
index 9221b9b..0000000
--- a/Example/Example/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ /dev/null
@@ -1,98 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "iphone",
- "scale" : "2x",
- "size" : "20x20"
- },
- {
- "idiom" : "iphone",
- "scale" : "3x",
- "size" : "20x20"
- },
- {
- "idiom" : "iphone",
- "scale" : "2x",
- "size" : "29x29"
- },
- {
- "idiom" : "iphone",
- "scale" : "3x",
- "size" : "29x29"
- },
- {
- "idiom" : "iphone",
- "scale" : "2x",
- "size" : "40x40"
- },
- {
- "idiom" : "iphone",
- "scale" : "3x",
- "size" : "40x40"
- },
- {
- "idiom" : "iphone",
- "scale" : "2x",
- "size" : "60x60"
- },
- {
- "idiom" : "iphone",
- "scale" : "3x",
- "size" : "60x60"
- },
- {
- "idiom" : "ipad",
- "scale" : "1x",
- "size" : "20x20"
- },
- {
- "idiom" : "ipad",
- "scale" : "2x",
- "size" : "20x20"
- },
- {
- "idiom" : "ipad",
- "scale" : "1x",
- "size" : "29x29"
- },
- {
- "idiom" : "ipad",
- "scale" : "2x",
- "size" : "29x29"
- },
- {
- "idiom" : "ipad",
- "scale" : "1x",
- "size" : "40x40"
- },
- {
- "idiom" : "ipad",
- "scale" : "2x",
- "size" : "40x40"
- },
- {
- "idiom" : "ipad",
- "scale" : "1x",
- "size" : "76x76"
- },
- {
- "idiom" : "ipad",
- "scale" : "2x",
- "size" : "76x76"
- },
- {
- "idiom" : "ipad",
- "scale" : "2x",
- "size" : "83.5x83.5"
- },
- {
- "idiom" : "ios-marketing",
- "scale" : "1x",
- "size" : "1024x1024"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Example/Example/Assets.xcassets/Contents.json b/Example/Example/Assets.xcassets/Contents.json
deleted file mode 100644
index 73c0059..0000000
--- a/Example/Example/Assets.xcassets/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Example/Example/ExampleApp.swift b/Example/Example/ExampleApp.swift
deleted file mode 100644
index 82786fc..0000000
--- a/Example/Example/ExampleApp.swift
+++ /dev/null
@@ -1,31 +0,0 @@
-//
-// ExampleApp.swift
-// Example
-//
-// Created by Felix Mau on 07.03.22.
-// Copyright © 2022 Felix Mau. All rights reserved.
-//
-
-import SwiftUI
-
-@main
-struct ExampleApp: App {
- var body: some Scene {
- WindowGroup {
- EntryPointView()
- .onAppear {
- // Use iOS 13 navigation bar appearance.
- //
- // While the entry point scene looks better with an opaque navigation background, the child scenes look
- // better with the default navigation background. As we can't update the appearance per scene we fallback
- // to an appearance with the default background here.
- //
- // Based on: https://sarunw.com/posts/uinavigationbar-changes-in-ios13/
- let appearance = UINavigationBarAppearance()
- appearance.configureWithDefaultBackground()
-
- UINavigationBar.appearance().scrollEdgeAppearance = appearance
- }
- }
- }
-}
diff --git a/Example/Example/Helper/StoryboardView.swift b/Example/Example/Helper/StoryboardView.swift
deleted file mode 100644
index 64a8d2c..0000000
--- a/Example/Example/Helper/StoryboardView.swift
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// StoryboardView.swift
-// Example
-//
-// Created by Felix Mau on 02.02.22.
-// Copyright © 2022 Felix Mau. All rights reserved.
-//
-
-import SwiftUI
-
-struct StoryboardView: UIViewControllerRepresentable {
-
- // MARK: - Public properties
-
- let name: String
-
- // MARK: - Public methods
-
- func makeUIViewController(context _: Context) -> UIViewController {
- let storyboard = UIStoryboard(name: name, bundle: nil)
- guard let viewController = storyboard.instantiateInitialViewController() else {
- fatalError("⚠️ – Could not instantiate initial view controller for storyboard with name `\(name)`.")
- }
-
- return viewController
- }
-
- func updateUIViewController(_: UIViewController, context _: Context) {}
-}
diff --git a/Example/Example/Preview Content/Preview Assets.xcassets/Contents.json b/Example/Example/Preview Content/Preview Assets.xcassets/Contents.json
deleted file mode 100644
index 73c0059..0000000
--- a/Example/Example/Preview Content/Preview Assets.xcassets/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Example/Example/Scenes/AdvancedExample/AdvancedExample.storyboard b/Example/Example/Scenes/AdvancedExample/AdvancedExample.storyboard
deleted file mode 100644
index 9ae3a94..0000000
--- a/Example/Example/Scenes/AdvancedExample/AdvancedExample.storyboard
+++ /dev/null
@@ -1,169 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Example/Example/Scenes/AdvancedExample/AdvancedExampleTableViewController.swift b/Example/Example/Scenes/AdvancedExample/AdvancedExampleTableViewController.swift
deleted file mode 100644
index 7d294f3..0000000
--- a/Example/Example/Scenes/AdvancedExample/AdvancedExampleTableViewController.swift
+++ /dev/null
@@ -1,136 +0,0 @@
-//
-// AdvancedExampleTableViewController.swift
-// Example
-//
-// Created by Felix Mau on 12.04.22.
-// Copyright © 2022 Felix Mau. All rights reserved.
-//
-
-import GradientLoadingBar
-import SwiftUI
-import UIKit
-
-final class AdvancedExampleTableViewController: UITableViewController {
-
- // MARK: - Config
-
- private enum Config {
- /// The custom gradient colors we use.
- /// Source: https://color.adobe.com/Pink-Flamingo-color-theme-10343714/
- static let gradientColors = [
- #colorLiteral(red: 0.9490196078, green: 0.3215686275, blue: 0.431372549, alpha: 1), #colorLiteral(red: 0.9450980392, green: 0.4784313725, blue: 0.5921568627, alpha: 1), #colorLiteral(red: 0.9529411765, green: 0.737254902, blue: 0.7843137255, alpha: 1), #colorLiteral(red: 0.4274509804, green: 0.8666666667, blue: 0.9490196078, alpha: 1), #colorLiteral(red: 0.7568627451, green: 0.9411764706, blue: 0.9568627451, alpha: 1),
- ]
-
- static let firstSectionHeaderHeight: CGFloat = 48
- static let defaultSectionHeaderHeight: CGFloat = 32
- }
-
- // MARK: - Types
-
- private enum Section: CaseIterable {
- case customColors
- case interfaceBuilderSetup
- case customSuperview
-
- var cellIdentifier: String {
- switch self {
- case .customColors:
- return CustomColorsTableViewCell.reuseIdentifier
-
- case .interfaceBuilderSetup:
- return InterfaceBuilderSetupTableViewCell.reuseIdentifier
-
- case .customSuperview:
- return CustomSuperviewTableViewCell.reuseIdentifier
- }
- }
-
- var sectionTitle: String {
- switch self {
- case .customColors:
- return "Custom Colors"
-
- case .interfaceBuilderSetup:
- return "Interface Builder Setup"
-
- case .customSuperview:
- return "Custom Superview"
- }
- }
-
- var sectionHeaderHeight: CGFloat {
- switch self {
- case .customColors:
- return Config.firstSectionHeaderHeight
-
- case .interfaceBuilderSetup, .customSuperview:
- return Config.defaultSectionHeaderHeight
- }
- }
- }
-
- // MARK: - Private properties
-
- private let gradientLoadingBar = GradientLoadingBar()
-
- // MARK: - Public methods
-
- override func viewDidLoad() {
- super.viewDidLoad()
-
- view.backgroundColor = .systemGroupedBackground
-
- gradientLoadingBar.gradientColors = Config.gradientColors
- }
-
- // MARK: - Table view data source
-
- override func numberOfSections(in _: UITableView) -> Int {
- Section.allCases.count
- }
-
- override func tableView(_: UITableView, numberOfRowsInSection _: Int) -> Int {
- 1
- }
-
- override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
- let section = Section.allCases[indexPath.section]
- switch section {
- case .customColors:
- guard let cell = tableView.dequeueReusableCell(withIdentifier: section.cellIdentifier, for: indexPath) as? CustomColorsTableViewCell else {
- fatalError("⚠️ – Invalid table view setup. Expected to have `CustomColorsTableViewCell` at this point!")
- }
-
- cell.tapHandler = { [weak self] in
- if self?.gradientLoadingBar.isHidden == true {
- self?.gradientLoadingBar.fadeIn()
- } else {
- self?.gradientLoadingBar.fadeOut()
- }
- }
-
- return cell
-
- case .interfaceBuilderSetup, .customSuperview:
- return tableView.dequeueReusableCell(withIdentifier: section.cellIdentifier, for: indexPath)
- }
- }
-
- override func tableView(_: UITableView, titleForHeaderInSection section: Int) -> String? {
- Section.allCases[section].sectionTitle
- }
-
- override func tableView(_: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
- Section.allCases[section].sectionHeaderHeight
- }
-}
-
-// MARK: - Helper
-
-struct AdvancedExampleView: View {
- var body: some View {
- StoryboardView(name: "AdvancedExample")
- .navigationTitle("🚀 Advanced Example")
- .edgesIgnoringSafeArea(.bottom)
- }
-}
diff --git a/Example/Example/Scenes/AdvancedExample/Cells/CustomColorsTableViewCell.swift b/Example/Example/Scenes/AdvancedExample/Cells/CustomColorsTableViewCell.swift
deleted file mode 100644
index 61a5343..0000000
--- a/Example/Example/Scenes/AdvancedExample/Cells/CustomColorsTableViewCell.swift
+++ /dev/null
@@ -1,24 +0,0 @@
-//
-// CustomColorsTableViewCell.swift
-// Example
-//
-// Created by Felix Mau on 15.04.22.
-// Copyright © 2022 Felix Mau. All rights reserved.
-//
-
-import UIKit
-
-final class CustomColorsTableViewCell: UITableViewCell {
-
- // MARK: - Public properties
-
- static let reuseIdentifier = "CustomColorsTableViewCell"
-
- var tapHandler: (() -> Void)?
-
- // MARK: - Private methods
-
- @IBAction private func customColorsButtonTouchUpInside(_: Any) {
- tapHandler?()
- }
-}
diff --git a/Example/Example/Scenes/AdvancedExample/Cells/CustomSuperviewTableViewCell.swift b/Example/Example/Scenes/AdvancedExample/Cells/CustomSuperviewTableViewCell.swift
deleted file mode 100644
index 34fb838..0000000
--- a/Example/Example/Scenes/AdvancedExample/Cells/CustomSuperviewTableViewCell.swift
+++ /dev/null
@@ -1,62 +0,0 @@
-//
-// CustomSuperviewTableViewCell.swift
-// Example
-//
-// Created by Felix Mau on 15.04.22.
-// Copyright © 2022 Felix Mau. All rights reserved.
-//
-
-import GradientLoadingBar
-import UIKit
-
-final class CustomSuperviewTableViewCell: UITableViewCell {
-
- // MARK: - Config
-
- private enum Config {
- static let height: CGFloat = 3
- }
-
- // MARK: - Outlets
-
- @IBOutlet private var toggleButton: UIButton!
-
- // MARK: - Public properties
-
- static let reuseIdentifier = "CustomSuperviewViewCell"
-
- // MARK: - Private properties
-
- private let gradientActivityIndicatorView = GradientActivityIndicatorView()
-
- // MARK: - Public methods
-
- override func awakeFromNib() {
- super.awakeFromNib()
-
- setupGradientActivityIndicatorView()
- }
-
- // MARK: - Private methods
-
- private func setupGradientActivityIndicatorView() {
- gradientActivityIndicatorView.translatesAutoresizingMaskIntoConstraints = false
- toggleButton.addSubview(gradientActivityIndicatorView)
-
- NSLayoutConstraint.activate([
- gradientActivityIndicatorView.leadingAnchor.constraint(equalTo: toggleButton.leadingAnchor),
- gradientActivityIndicatorView.trailingAnchor.constraint(equalTo: toggleButton.trailingAnchor),
-
- gradientActivityIndicatorView.bottomAnchor.constraint(equalTo: toggleButton.bottomAnchor),
- gradientActivityIndicatorView.heightAnchor.constraint(equalToConstant: Config.height),
- ])
- }
-
- @IBAction private func toggleButtonTouchUpInside(_: Any) {
- if gradientActivityIndicatorView.isHidden {
- gradientActivityIndicatorView.fadeIn()
- } else {
- gradientActivityIndicatorView.fadeOut()
- }
- }
-}
diff --git a/Example/Example/Scenes/AdvancedExample/Cells/InterfaceBuilderSetupTableViewCell.swift b/Example/Example/Scenes/AdvancedExample/Cells/InterfaceBuilderSetupTableViewCell.swift
deleted file mode 100644
index 88079fa..0000000
--- a/Example/Example/Scenes/AdvancedExample/Cells/InterfaceBuilderSetupTableViewCell.swift
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// InterfaceBuilderSetupTableViewCell.swift
-// Example
-//
-// Created by Felix Mau on 15.04.22.
-// Copyright © 2022 Felix Mau. All rights reserved.
-//
-
-import GradientLoadingBar
-import UIKit
-
-final class InterfaceBuilderSetupTableViewCell: UITableViewCell {
-
- // MARK: - Config
-
- private enum Config {
- static let animationDuration: TimeInterval = 0.5
- }
-
- // MARK: - Outlets
-
- @IBOutlet private var gradientActivityIndicator: GradientActivityIndicatorView!
-
- // MARK: - Public properties
-
- static let reuseIdentifier = "InterfaceBuilderSetupTableViewCell"
-
- // MARK: - Private methods
-
- @IBAction private func toggleIBSetupButtonTouchUpInside(_: Any) {
- // We explicitly "only" reduce the alpha here, as calling `fadeIn()` / `fadeOut()` would update the `isHidden`
- // flag accordingly. This would then lead to a height-update of the parent stack view.
- UIView.animate(withDuration: Config.animationDuration) {
- if self.gradientActivityIndicator.alpha > 0 {
- self.gradientActivityIndicator.alpha = 0
- } else {
- self.gradientActivityIndicator.alpha = 1
- }
- }
- }
-}
diff --git a/Example/Example/Scenes/AdvancedExample/Views/BorderedButton.swift b/Example/Example/Scenes/AdvancedExample/Views/BorderedButton.swift
deleted file mode 100644
index fba8592..0000000
--- a/Example/Example/Scenes/AdvancedExample/Views/BorderedButton.swift
+++ /dev/null
@@ -1,47 +0,0 @@
-//
-// BorderedButton.swift
-// Example
-//
-// Created by Felix Mau on 15.04.22.
-// Copyright © 2022 Felix Mau. All rights reserved.
-//
-
-import UIKit
-
-@IBDesignable
-final class BorderedButton: UIButton {
-
- // MARK: - Config
-
- private enum Config {
- static let borderColor = #colorLiteral(red: 0.2862745098, green: 0.5647058824, blue: 0.8862745098, alpha: 1)
- static let borderWidth: CGFloat = 1
- static let cornerRadius: CGFloat = 4
- }
-
- // MARK: - Instance Lifecycle
-
- override init(frame: CGRect) {
- super.init(frame: frame)
-
- commonInit()
- }
-
- required init?(coder aDecoder: NSCoder) {
- super.init(coder: aDecoder)
-
- commonInit()
- }
-
- // MARK: - Private methods
-
- private func commonInit() {
- backgroundColor = .clear
- tintColor = Config.borderColor
-
- layer.borderColor = Config.borderColor.cgColor
- layer.borderWidth = Config.borderWidth
- layer.cornerRadius = Config.cornerRadius
- layer.masksToBounds = true
- }
-}
diff --git a/Example/Example/Scenes/BasicExample/BasicExample.storyboard b/Example/Example/Scenes/BasicExample/BasicExample.storyboard
deleted file mode 100644
index 857b4b5..0000000
--- a/Example/Example/Scenes/BasicExample/BasicExample.storyboard
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Example/Example/Scenes/BasicExample/BasicExampleViewController.swift b/Example/Example/Scenes/BasicExample/BasicExampleViewController.swift
deleted file mode 100644
index 949c900..0000000
--- a/Example/Example/Scenes/BasicExample/BasicExampleViewController.swift
+++ /dev/null
@@ -1,42 +0,0 @@
-//
-// BasicExampleViewController.swift
-// Example
-//
-// Created by Felix Mau on 07.03.22.
-// Copyright © 2022 Felix Mau. All rights reserved.
-//
-
-import GradientLoadingBar
-import SwiftUI
-import UIKit
-
-final class BasicExampleViewController: UIViewController {
-
- // MARK: - Public methods
-
- override func viewWillDisappear(_ animated: Bool) {
- super.viewWillDisappear(animated)
-
- // Reset any possible visible loading bar.
- GradientLoadingBar.shared.fadeOut()
- }
-
- // MARK: - Private methods
-
- @IBAction private func showButtonTouchUpInside(_: Any) {
- GradientLoadingBar.shared.fadeIn()
- }
-
- @IBAction private func hideButtonTouchUpInside(_: Any) {
- GradientLoadingBar.shared.fadeOut()
- }
-}
-
-// MARK: - Helper
-
-struct BasicExampleView: View {
- var body: some View {
- StoryboardView(name: "BasicExample")
- .navigationTitle("🏡 Basic Example")
- }
-}
diff --git a/Example/Example/Scenes/EntryPointView.swift b/Example/Example/Scenes/EntryPointView.swift
deleted file mode 100644
index 604f169..0000000
--- a/Example/Example/Scenes/EntryPointView.swift
+++ /dev/null
@@ -1,95 +0,0 @@
-//
-// EntryPointView.swift
-// Example
-//
-// Created by Felix Mau on 07.03.22.
-// Copyright © 2022 Felix Mau. All rights reserved.
-//
-
-import SwiftUI
-
-struct EntryPointView: View {
-
- // MARK: - Private properties
-
- @State
- private var isNavigationBarExampleVisible = false
-
- // MARK: - Render
-
- var body: some View {
- NavigationView {
- List {
- Section(header: Text("UIKit Examples")) {
- NavigationLink(destination: BasicExampleView()) {
- TitleSubtitleView(title: "🏡 Basic Example",
- subtitle: "Basic usage and setup.")
- }
-
- NavigationLink(destination: SafeAreaExampleView()) {
- TitleSubtitleView(title: "📲 Safe Area Example",
- subtitle: "Loading bar ignoring the safe area.")
- }
-
- NavigationLink(destination: AdvancedExampleView()) {
- TitleSubtitleView(title: "🚀 Advanced Example",
- subtitle: "How to apply e.g. custom colors.")
- }
-
- Button {
- isNavigationBarExampleVisible = true
- } label: {
- TitleSubtitleView(title: "🧭 Navigation Bar Example",
- subtitle: "Attach the loading bar to a navigation bar.")
- // Make entire row tappable and not just the text.
- .frame(maxWidth: .infinity, alignment: .leading)
- .contentShape(Rectangle())
- }
- .buttonStyle(PlainButtonStyle())
- }
-
- Section(header: Text("SwiftUI Examples")) {
- NavigationLink(destination: SwiftUIExampleView()) {
- TitleSubtitleView(title: "🎨 GradientLoadingBarView Example",
- subtitle: "How to use the SwiftUI view.")
- }
- }
- }
- // We present the `NavigationBarExampleView` as a sheet using it's own navigation controller.
- // The `NavigationView` passed from SwiftUI isn't accessible from a `UIViewController` in a way, that we can add subviews to it.
- .sheet(isPresented: $isNavigationBarExampleVisible) {
- NavigationBarExampleView()
- }
- // Unfortunately setting the title here results in constraint warnings.
- // I couldn't find a possible fix yet, even `.navigationViewStyle(.stack)` doesn't seem to work.
- // https://stackoverflow.com/q/65316497
- .navigationTitle("GradientLoadingBar")
- .navigationBarTitleDisplayMode(.large)
- }
- }
-}
-
-// MARK: - Subviews
-
-private struct TitleSubtitleView: View {
- let title: String
- let subtitle: String
-
- var body: some View {
- VStack(alignment: .leading, spacing: 8) {
- Text(title)
- .font(.headline)
- Text(subtitle)
- .font(.subheadline)
- }
- .padding(.vertical, 8)
- }
-}
-
-// MARK: - Preview
-
-struct EntryPointView_Previews: PreviewProvider {
- static var previews: some View {
- EntryPointView()
- }
-}
diff --git a/Example/Example/Scenes/NavigationBarExample/NavigationBarExample.storyboard b/Example/Example/Scenes/NavigationBarExample/NavigationBarExample.storyboard
deleted file mode 100644
index 1b41d19..0000000
--- a/Example/Example/Scenes/NavigationBarExample/NavigationBarExample.storyboard
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Example/Example/Scenes/NavigationBarExample/NavigationBarExampleViewController.swift b/Example/Example/Scenes/NavigationBarExample/NavigationBarExampleViewController.swift
deleted file mode 100644
index 3677ed1..0000000
--- a/Example/Example/Scenes/NavigationBarExample/NavigationBarExampleViewController.swift
+++ /dev/null
@@ -1,80 +0,0 @@
-//
-// NavigationBarExampleViewController.swift
-// Example
-//
-// Created by Felix Mau on 07.03.22.
-// Copyright © 2022 Felix Mau. All rights reserved.
-//
-
-import GradientLoadingBar
-import SwiftUI
-import UIKit
-
-final class NavigationBarExampleViewController: UIViewController {
-
- // MARK: - Config
-
- private enum Config {
- /// The programatically applied height of the `GradientActivityIndicatorView`.
- static let height: CGFloat = 3
- }
-
- // MARK: - Private properties
-
- private let gradientProgressIndicatorView = GradientActivityIndicatorView()
-
- // MARK: - Public methods
-
- override func viewDidLoad() {
- super.viewDidLoad()
-
- let barButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(doneButtonTapped))
- navigationItem.rightBarButtonItem = barButtonItem
-
- setupGradientProgressIndicatorView()
- }
-
- override func viewWillDisappear(_ animated: Bool) {
- super.viewWillDisappear(animated)
-
- // Reset any possible visible loading bar.
- gradientProgressIndicatorView.fadeOut()
- }
-
- // MARK: - Private methods
-
- private func setupGradientProgressIndicatorView() {
- guard let navigationBar = navigationController?.navigationBar else { return }
-
- gradientProgressIndicatorView.translatesAutoresizingMaskIntoConstraints = false
- navigationBar.addSubview(gradientProgressIndicatorView)
-
- NSLayoutConstraint.activate([
- gradientProgressIndicatorView.leadingAnchor.constraint(equalTo: navigationBar.leadingAnchor),
- gradientProgressIndicatorView.trailingAnchor.constraint(equalTo: navigationBar.trailingAnchor),
-
- gradientProgressIndicatorView.bottomAnchor.constraint(equalTo: navigationBar.bottomAnchor),
- gradientProgressIndicatorView.heightAnchor.constraint(equalToConstant: Config.height),
- ])
- }
-
- @IBAction private func doneButtonTapped(_: Any) {
- dismiss(animated: true)
- }
-
- @IBAction private func showButtonTouchUpInside(_: Any) {
- gradientProgressIndicatorView.fadeIn()
- }
-
- @IBAction private func hideButtonTouchUpInside(_: Any) {
- gradientProgressIndicatorView.fadeOut()
- }
-}
-
-// MARK: - Helper
-
-struct NavigationBarExampleView: View {
- var body: some View {
- StoryboardView(name: "NavigationBarExample")
- }
-}
diff --git a/Example/Example/Scenes/SafeAreaExample/SafeAreaExample.storyboard b/Example/Example/Scenes/SafeAreaExample/SafeAreaExample.storyboard
deleted file mode 100644
index 82f76d0..0000000
--- a/Example/Example/Scenes/SafeAreaExample/SafeAreaExample.storyboard
+++ /dev/null
@@ -1,104 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Example/Example/Scenes/SafeAreaExample/SafeAreaExampleViewController.swift b/Example/Example/Scenes/SafeAreaExample/SafeAreaExampleViewController.swift
deleted file mode 100644
index ee2ed90..0000000
--- a/Example/Example/Scenes/SafeAreaExample/SafeAreaExampleViewController.swift
+++ /dev/null
@@ -1,56 +0,0 @@
-//
-// SafeAreaExampleViewController.swift
-// Example
-//
-// Created by Felix Mau on 07.03.22.
-// Copyright © 2022 Felix Mau. All rights reserved.
-//
-
-import GradientLoadingBar
-import SwiftUI
-import UIKit
-
-final class SafeAreaExampleViewController: UIViewController {
-
- // MARK: - Private properties
-
- private let gradientLoadingBar = GradientLoadingBar(isRelativeToSafeArea: false)
- private let notchGradientLoadingBar = NotchGradientLoadingBar(isRelativeToSafeArea: false)
-
- // MARK: - Public methods
-
- override func viewWillDisappear(_ animated: Bool) {
- super.viewWillDisappear(animated)
-
- // Reset any possible visible loading bar.
- gradientLoadingBar.fadeOut()
- notchGradientLoadingBar.fadeOut()
- }
-
- // MARK: - Private methods
-
- @IBAction private func showBasicBarButtonTouchUpInside(_: Any) {
- gradientLoadingBar.fadeIn()
- }
-
- @IBAction private func hideBasicBarButtonTouchUpInside(_: Any) {
- gradientLoadingBar.fadeOut()
- }
-
- @IBAction private func showNotchBarButtonTouchUpInside(_: Any) {
- notchGradientLoadingBar.fadeIn()
- }
-
- @IBAction private func hideNotchBarButtonTouchUpInside(_: Any) {
- notchGradientLoadingBar.fadeOut()
- }
-}
-
-// MARK: - Helper
-
-struct SafeAreaExampleView: View {
- var body: some View {
- StoryboardView(name: "SafeAreaExample")
- .navigationTitle("📲 Safe Area Example")
- }
-}
diff --git a/Example/Example/Scenes/SwiftUIExample/SwiftUIExampleView.swift b/Example/Example/Scenes/SwiftUIExample/SwiftUIExampleView.swift
deleted file mode 100644
index 6904d2f..0000000
--- a/Example/Example/Scenes/SwiftUIExample/SwiftUIExampleView.swift
+++ /dev/null
@@ -1,177 +0,0 @@
-//
-// SwiftUIExampleView.swift
-// Example
-//
-// Created by Felix Mau on 07.03.22.
-// Copyright © 2022 Felix Mau. All rights reserved.
-//
-
-import GradientLoadingBar
-import SwiftUI
-
-struct SwiftUIExampleView: View {
-
- // MARK: - Render
-
- var body: some View {
- List {
- Section(header: Text("Default example")) {
- DefaultExampleView()
- }
-
- Section(header: Text("Custom colors")) {
- CustomColorsExampleView()
- }
-
- Section(header: Text("Custom animation duration")) {
- CustomProgressDurationExampleView()
- }
- }
- .navigationTitle("🎨 SwiftUI Example")
- }
-}
-
-// MARK: - Subviews
-
-private struct DefaultExampleView: View {
-
- @State
- private var isVisible = true
-
- var body: some View {
- VStack(spacing: 16) {
- Text("Example using the default configuration.")
- .frame(maxWidth: .infinity, alignment: .leading)
-
- GradientLoadingBarView()
- .frame(maxWidth: .infinity, maxHeight: 3)
- .cornerRadius(1.5)
- .opacity(isVisible ? 1 : 0)
-
- HStack(spacing: 16) {
- Button("Show") {
- withAnimation(.easeInOut) {
- isVisible = true
- }
- }
- .buttonStyle(RoundedRectangleButtonStyle())
-
- Button("Hide") {
- withAnimation(.easeInOut) {
- isVisible = false
- }
- }
- .buttonStyle(RoundedRectangleButtonStyle())
- }
- }
- .padding(.horizontal, 8)
- .padding(.vertical, 16)
- }
-}
-
-private struct CustomColorsExampleView: View {
-
- private enum Config {
- /// The custom gradient colors we use.
- /// Source: https://color.adobe.com/Pink-Flamingo-color-theme-10343714/
- static let gradientColors = [
- #colorLiteral(red: 0.9490196078, green: 0.3215686275, blue: 0.431372549, alpha: 1), #colorLiteral(red: 0.9450980392, green: 0.4784313725, blue: 0.5921568627, alpha: 1), #colorLiteral(red: 0.9529411765, green: 0.737254902, blue: 0.7843137255, alpha: 1), #colorLiteral(red: 0.4274509804, green: 0.8666666667, blue: 0.9490196078, alpha: 1), #colorLiteral(red: 0.7568627451, green: 0.9411764706, blue: 0.9568627451, alpha: 1),
- ].map(Color.init)
- }
-
- @State
- private var isVisible = true
-
- var body: some View {
- VStack(spacing: 16) {
- Text("Example showing how to provide custom gradient colors.")
- .frame(maxWidth: .infinity, alignment: .leading)
-
- GradientLoadingBarView(gradientColors: Config.gradientColors)
- .frame(maxWidth: .infinity, maxHeight: 3)
- .cornerRadius(1.5)
- .opacity(isVisible ? 1 : 0)
-
- HStack(spacing: 16) {
- Button("Show") {
- withAnimation(.easeInOut) {
- isVisible = true
- }
- }
- .buttonStyle(RoundedRectangleButtonStyle())
-
- Button("Hide") {
- withAnimation(.easeInOut) {
- isVisible = false
- }
- }
- .buttonStyle(RoundedRectangleButtonStyle())
- }
- }
- .padding(.horizontal, 8)
- .padding(.vertical, 16)
- }
-}
-
-private struct CustomProgressDurationExampleView: View {
-
- private enum Config {
- /// The custom progress duration to use.
- static let progressDuration: TimeInterval = 10
- }
-
- @State
- private var isVisible = true
-
- var body: some View {
- VStack(spacing: 16) {
- Text("Example showing how to provide a custom progress animation duration.")
- .frame(maxWidth: .infinity, alignment: .leading)
-
- GradientLoadingBarView(progressDuration: Config.progressDuration)
- .frame(maxWidth: .infinity, maxHeight: 3)
- .cornerRadius(1.5)
- .opacity(isVisible ? 1 : 0)
-
- HStack(spacing: 16) {
- Button("Show") {
- withAnimation(.easeInOut) {
- isVisible = true
- }
- }
- .buttonStyle(RoundedRectangleButtonStyle())
-
- Button("Hide") {
- withAnimation(.easeInOut) {
- isVisible = false
- }
- }
- .buttonStyle(RoundedRectangleButtonStyle())
- }
- }
- .padding(.horizontal, 8)
- .padding(.vertical, 16)
- }
-}
-
-// MARK: - Helper
-
-private struct RoundedRectangleButtonStyle: ButtonStyle {
-
- func makeBody(configuration: Configuration) -> some View {
- configuration.label
- .padding(12)
- .frame(maxWidth: .infinity)
- .foregroundColor(.white)
- .background(Color.blue.cornerRadius(8))
- .scaleEffect(configuration.isPressed ? 0.95 : 1)
- }
-}
-
-// MARK: - Preview
-
-struct SwiftUIExampleView_Previews: PreviewProvider {
- static var previews: some View {
- SwiftUIExampleView()
- }
-}
diff --git a/Example/Gemfile b/Example/Gemfile
deleted file mode 100644
index 9ee8aa7..0000000
--- a/Example/Gemfile
+++ /dev/null
@@ -1,7 +0,0 @@
-source "https://rubygems.org"
-
-gem "cocoapods"
-gem "fastlane"
-
-plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
-eval_gemfile(plugins_path) if File.exist?(plugins_path)
diff --git a/Example/Gemfile.lock b/Example/Gemfile.lock
deleted file mode 100644
index b424e14..0000000
--- a/Example/Gemfile.lock
+++ /dev/null
@@ -1,286 +0,0 @@
-GEM
- remote: https://rubygems.org/
- specs:
- CFPropertyList (3.0.5)
- rexml
- activesupport (6.1.6.1)
- concurrent-ruby (~> 1.0, >= 1.0.2)
- i18n (>= 1.6, < 2)
- minitest (>= 5.1)
- tzinfo (~> 2.0)
- zeitwerk (~> 2.3)
- addressable (2.8.1)
- public_suffix (>= 2.0.2, < 6.0)
- algoliasearch (1.27.5)
- httpclient (~> 2.8, >= 2.8.3)
- json (>= 1.5.1)
- artifactory (3.0.15)
- atomos (0.1.3)
- aws-eventstream (1.2.0)
- aws-partitions (1.626.0)
- aws-sdk-core (3.141.0)
- aws-eventstream (~> 1, >= 1.0.2)
- aws-partitions (~> 1, >= 1.525.0)
- aws-sigv4 (~> 1.1)
- jmespath (~> 1, >= 1.6.1)
- aws-sdk-kms (1.58.0)
- aws-sdk-core (~> 3, >= 3.127.0)
- aws-sigv4 (~> 1.1)
- aws-sdk-s3 (1.114.0)
- aws-sdk-core (~> 3, >= 3.127.0)
- aws-sdk-kms (~> 1)
- aws-sigv4 (~> 1.4)
- aws-sigv4 (1.5.1)
- aws-eventstream (~> 1, >= 1.0.2)
- babosa (1.0.4)
- 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.3)
- 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)
- colored (1.2)
- colored2 (3.1.2)
- commander (4.6.0)
- highline (~> 2.0.0)
- concurrent-ruby (1.1.10)
- declarative (0.0.20)
- digest-crc (0.6.4)
- rake (>= 12.0.0, < 14.0.0)
- domain_name (0.5.20190701)
- unf (>= 0.0.5, < 1.0.0)
- dotenv (2.8.1)
- emoji_regex (3.2.3)
- escape (0.0.4)
- ethon (0.15.0)
- ffi (>= 1.15.0)
- excon (0.92.4)
- faraday (1.10.2)
- faraday-em_http (~> 1.0)
- faraday-em_synchrony (~> 1.0)
- faraday-excon (~> 1.1)
- faraday-httpclient (~> 1.0)
- faraday-multipart (~> 1.0)
- faraday-net_http (~> 1.0)
- faraday-net_http_persistent (~> 1.0)
- faraday-patron (~> 1.0)
- faraday-rack (~> 1.0)
- faraday-retry (~> 1.0)
- ruby2_keywords (>= 0.0.4)
- faraday-cookie_jar (0.0.7)
- faraday (>= 0.8.0)
- http-cookie (~> 1.0.0)
- faraday-em_http (1.0.0)
- faraday-em_synchrony (1.0.0)
- faraday-excon (1.1.0)
- faraday-httpclient (1.0.1)
- faraday-multipart (1.0.4)
- multipart-post (~> 2)
- faraday-net_http (1.0.1)
- faraday-net_http_persistent (1.2.0)
- faraday-patron (1.0.0)
- faraday-rack (1.0.0)
- faraday-retry (1.0.3)
- faraday_middleware (1.2.0)
- faraday (~> 1.0)
- fastimage (2.2.6)
- fastlane (2.209.1)
- CFPropertyList (>= 2.3, < 4.0.0)
- addressable (>= 2.8, < 3.0.0)
- artifactory (~> 3.0)
- aws-sdk-s3 (~> 1.0)
- babosa (>= 1.0.3, < 2.0.0)
- bundler (>= 1.12.0, < 3.0.0)
- colored
- commander (~> 4.6)
- dotenv (>= 2.1.1, < 3.0.0)
- emoji_regex (>= 0.1, < 4.0)
- excon (>= 0.71.0, < 1.0.0)
- faraday (~> 1.0)
- faraday-cookie_jar (~> 0.0.6)
- faraday_middleware (~> 1.0)
- fastimage (>= 2.1.0, < 3.0.0)
- gh_inspector (>= 1.1.2, < 2.0.0)
- google-apis-androidpublisher_v3 (~> 0.3)
- google-apis-playcustomapp_v1 (~> 0.1)
- google-cloud-storage (~> 1.31)
- highline (~> 2.0)
- json (< 3.0.0)
- jwt (>= 2.1.0, < 3)
- mini_magick (>= 4.9.4, < 5.0.0)
- multipart-post (~> 2.0.0)
- naturally (~> 2.2)
- optparse (~> 0.1.1)
- plist (>= 3.1.0, < 4.0.0)
- rubyzip (>= 2.0.0, < 3.0.0)
- security (= 0.1.3)
- simctl (~> 1.6.3)
- terminal-notifier (>= 2.0.0, < 3.0.0)
- terminal-table (>= 1.4.5, < 2.0.0)
- tty-screen (>= 0.6.3, < 1.0.0)
- tty-spinner (>= 0.8.0, < 1.0.0)
- word_wrap (~> 1.0.0)
- xcodeproj (>= 1.13.0, < 2.0.0)
- xcpretty (~> 0.3.0)
- xcpretty-travis-formatter (>= 0.0.3)
- fastlane-plugin-swiftformat (0.3.0)
- ffi (1.15.5)
- fourflusher (2.3.1)
- fuzzy_match (2.0.4)
- gh_inspector (1.1.3)
- google-apis-androidpublisher_v3 (0.25.0)
- google-apis-core (>= 0.7, < 2.a)
- google-apis-core (0.7.0)
- addressable (~> 2.5, >= 2.5.1)
- googleauth (>= 0.16.2, < 2.a)
- httpclient (>= 2.8.1, < 3.a)
- mini_mime (~> 1.0)
- representable (~> 3.0)
- retriable (>= 2.0, < 4.a)
- rexml
- webrick
- google-apis-iamcredentials_v1 (0.13.0)
- google-apis-core (>= 0.7, < 2.a)
- google-apis-playcustomapp_v1 (0.10.0)
- google-apis-core (>= 0.7, < 2.a)
- google-apis-storage_v1 (0.17.0)
- google-apis-core (>= 0.7, < 2.a)
- google-cloud-core (1.6.0)
- google-cloud-env (~> 1.0)
- google-cloud-errors (~> 1.0)
- google-cloud-env (1.6.0)
- faraday (>= 0.17.3, < 3.0)
- google-cloud-errors (1.2.0)
- google-cloud-storage (1.39.0)
- addressable (~> 2.8)
- digest-crc (~> 0.4)
- google-apis-iamcredentials_v1 (~> 0.1)
- google-apis-storage_v1 (~> 0.17.0)
- google-cloud-core (~> 1.6)
- googleauth (>= 0.16.2, < 2.a)
- mini_mime (~> 1.0)
- googleauth (1.2.0)
- faraday (>= 0.17.3, < 3.a)
- jwt (>= 1.4, < 3.0)
- memoist (~> 0.16)
- multi_json (~> 1.11)
- os (>= 0.9, < 2.0)
- signet (>= 0.16, < 2.a)
- highline (2.0.3)
- http-cookie (1.0.5)
- domain_name (~> 0.5)
- httpclient (2.8.3)
- i18n (1.12.0)
- concurrent-ruby (~> 1.0)
- jmespath (1.6.1)
- json (2.6.2)
- jwt (2.5.0)
- memoist (0.16.2)
- mini_magick (4.11.0)
- mini_mime (1.1.2)
- minitest (5.16.3)
- molinillo (0.8.0)
- multi_json (1.15.0)
- multipart-post (2.0.0)
- nanaimo (0.3.0)
- nap (1.1.0)
- naturally (2.2.1)
- netrc (0.11.0)
- optparse (0.1.1)
- os (1.1.4)
- plist (3.6.0)
- public_suffix (4.0.7)
- rake (13.0.6)
- representable (3.2.0)
- declarative (< 0.1.0)
- trailblazer-option (>= 0.1.1, < 0.2.0)
- uber (< 0.2.0)
- retriable (3.1.2)
- rexml (3.2.5)
- rouge (2.0.7)
- ruby-macho (2.5.1)
- ruby2_keywords (0.0.5)
- rubyzip (2.3.2)
- security (0.1.3)
- signet (0.17.0)
- addressable (~> 2.8)
- faraday (>= 0.17.5, < 3.a)
- jwt (>= 1.5, < 3.0)
- multi_json (~> 1.10)
- simctl (1.6.8)
- CFPropertyList
- naturally
- terminal-notifier (2.0.0)
- terminal-table (1.8.0)
- unicode-display_width (~> 1.1, >= 1.1.1)
- trailblazer-option (0.1.2)
- tty-cursor (0.7.1)
- tty-screen (0.8.1)
- tty-spinner (0.9.3)
- tty-cursor (~> 0.7)
- typhoeus (1.4.0)
- ethon (>= 0.9.0)
- tzinfo (2.0.5)
- concurrent-ruby (~> 1.0)
- uber (0.1.0)
- unf (0.1.4)
- unf_ext
- unf_ext (0.0.8.2)
- unicode-display_width (1.8.0)
- webrick (1.7.0)
- word_wrap (1.0.0)
- xcodeproj (1.22.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)
- xcpretty (0.3.0)
- rouge (~> 2.0.7)
- xcpretty-travis-formatter (1.0.1)
- xcpretty (~> 0.2, >= 0.0.7)
- zeitwerk (2.6.0)
-
-PLATFORMS
- ruby
-
-DEPENDENCIES
- cocoapods
- fastlane
- fastlane-plugin-swiftformat
-
-BUNDLED WITH
- 2.3.18
diff --git a/Example/Podfile b/Example/Podfile
deleted file mode 100644
index 7f8d190..0000000
--- a/Example/Podfile
+++ /dev/null
@@ -1,45 +0,0 @@
-# Fixes warning `Your project does not explicitly specify the CocoaPods master specs repo`.
-source 'https://github.com/CocoaPods/Specs.git'
-
-platform :ios, '13.0'
-use_frameworks!
-
-target 'Example' do
- pod 'GradientLoadingBar', :path => '../', :testspecs => ['Tests']
-
- # Development pods.
- pod 'SwiftFormat/CLI', '~> 0.41'
- pod 'SwiftLint', '~> 0.42'
- pod 'SwiftConfigurationFiles', :git => 'https://github.com/fxm90/SwiftConfigurationFiles.git'
-
- post_install do |installer|
- installer.pods_project.targets.each do |target|
- target.build_configurations.each do |config|
- if target.name == 'GradientLoadingBar'
- # Explicitly set the iOS deployment target for `GradientLoadingBar` in our pods project, as this will be read by Carthage.
- #
- # - Note: This value has to match `s.ios.deployment_target` from the `.podspec` file!!
- config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
- else
- # Remove the deployment target from all other pods in our project and let them inherit
- # the project/workspace deployment target that has been specified at the top of the Podfile.
- # Source: https://stackoverflow.com/a/63489366
- config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
- end
- end
- end
-
- #
- # Fix issues with interface builder and CocoaPods.
- #
- # Source: https://github.com/CocoaPods/CocoaPods/issues/7606#issuecomment-484294739
- #
- installer.pods_project.build_configurations.each do |config|
- next unless config.name == 'Debug'
-
- config.build_settings['LD_RUNPATH_SEARCH_PATHS'] = [
- '$(FRAMEWORK_SEARCH_PATHS)'
- ]
- end
- end
-end
\ No newline at end of file
diff --git a/Example/Podfile.lock b/Example/Podfile.lock
deleted file mode 100644
index 7e097ac..0000000
--- a/Example/Podfile.lock
+++ /dev/null
@@ -1,43 +0,0 @@
-PODS:
- - GradientLoadingBar (3.0.0)
- - GradientLoadingBar/Tests (3.0.0):
- - SnapshotTesting (~> 1.9)
- - SnapshotTesting (1.9.0)
- - SwiftConfigurationFiles (0.0.1)
- - SwiftFormat/CLI (0.50.1)
- - SwiftLint (0.49.1)
-
-DEPENDENCIES:
- - GradientLoadingBar (from `../`)
- - GradientLoadingBar/Tests (from `../`)
- - SwiftConfigurationFiles (from `https://github.com/fxm90/SwiftConfigurationFiles.git`)
- - SwiftFormat/CLI (~> 0.41)
- - SwiftLint (~> 0.42)
-
-SPEC REPOS:
- https://github.com/CocoaPods/Specs.git:
- - SnapshotTesting
- - SwiftFormat
- - SwiftLint
-
-EXTERNAL SOURCES:
- GradientLoadingBar:
- :path: "../"
- SwiftConfigurationFiles:
- :git: https://github.com/fxm90/SwiftConfigurationFiles.git
-
-CHECKOUT OPTIONS:
- SwiftConfigurationFiles:
- :commit: efe01ba39069e8957fb89217b8c7fed298254691
- :git: https://github.com/fxm90/SwiftConfigurationFiles.git
-
-SPEC CHECKSUMS:
- GradientLoadingBar: 3c4246535efdedaf9b471c05caabfdb4b87b40a2
- SnapshotTesting: 6141c48b6aa76ead61431ca665c14ab9a066c53b
- SwiftConfigurationFiles: 1cf2228a911ebed9f42f8dec077bb634f04ca6c8
- SwiftFormat: e73212c71908404e333da34e303772b9e516ac9b
- SwiftLint: 32ee33ded0636d0905ef6911b2b67bbaeeedafa5
-
-PODFILE CHECKSUM: ea7965c23e5364bcd5cd7d3693d685af73a3e31d
-
-COCOAPODS: 1.11.3
diff --git a/Example/Pods/AppHost-GradientLoadingBar-Unit-Tests/AppHost-GradientLoadingBar-Unit-Tests-Info.plist b/Example/Pods/AppHost-GradientLoadingBar-Unit-Tests/AppHost-GradientLoadingBar-Unit-Tests-Info.plist
deleted file mode 100644
index ee9de24..0000000
--- a/Example/Pods/AppHost-GradientLoadingBar-Unit-Tests/AppHost-GradientLoadingBar-Unit-Tests-Info.plist
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- en
- CFBundleExecutable
- ${EXECUTABLE_NAME}
- CFBundleIdentifier
- ${PRODUCT_BUNDLE_IDENTIFIER}
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- ${PRODUCT_NAME}
- CFBundlePackageType
- APPL
- CFBundleShortVersionString
- 1.0.0
- CFBundleSignature
- ????
- CFBundleVersion
- ${CURRENT_PROJECT_VERSION}
- NSAppTransportSecurity
-
- NSAllowsArbitraryLoads
-
-
- NSPrincipalClass
-
- UILaunchStoryboardName
- LaunchScreen
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UISupportedInterfaceOrientations~ipad
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
-
-
diff --git a/Example/Pods/AppHost-GradientLoadingBar-Unit-Tests/LaunchScreen.storyboard b/Example/Pods/AppHost-GradientLoadingBar-Unit-Tests/LaunchScreen.storyboard
deleted file mode 100644
index 647b86d..0000000
--- a/Example/Pods/AppHost-GradientLoadingBar-Unit-Tests/LaunchScreen.storyboard
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Example/Pods/AppHost-GradientLoadingBar-Unit-Tests/main.m b/Example/Pods/AppHost-GradientLoadingBar-Unit-Tests/main.m
deleted file mode 100644
index 6fb6e47..0000000
--- a/Example/Pods/AppHost-GradientLoadingBar-Unit-Tests/main.m
+++ /dev/null
@@ -1,30 +0,0 @@
-#import
-#import
-
-@interface CPTestAppHostAppDelegate : UIResponder
-
-@property (nonatomic, strong) UIWindow *window;
-
-@end
-
-@implementation CPTestAppHostAppDelegate
-
-- (BOOL)application:(UIApplication *)__unused application didFinishLaunchingWithOptions:(NSDictionary *)__unused launchOptions
-{
- self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
- self.window.rootViewController = [UIViewController new];
-
- [self.window makeKeyAndVisible];
-
- return YES;
-}
-
-@end
-
-int main(int argc, char *argv[])
-{
- @autoreleasepool
- {
- return UIApplicationMain(argc, argv, nil, NSStringFromClass([CPTestAppHostAppDelegate class]));
- }
-}
diff --git a/Example/Pods/Local Podspecs/GradientLoadingBar.podspec.json b/Example/Pods/Local Podspecs/GradientLoadingBar.podspec.json
deleted file mode 100644
index d039ad3..0000000
--- a/Example/Pods/Local Podspecs/GradientLoadingBar.podspec.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "name": "GradientLoadingBar",
- "version": "3.0.0",
- "summary": "A customizable animated gradient loading bar.",
- "description": "A customizable animated gradient loading bar.\nInspired by https://codepen.io/marcobiedermann/pen/LExXWW",
- "homepage": "https://github.com/fxm90/GradientLoadingBar",
- "screenshots": "https://raw.githubusercontent.com/fxm90/GradientLoadingBar/master/Assets/screen.gif",
- "license": {
- "type": "MIT",
- "file": "LICENSE"
- },
- "authors": {
- "Felix Mau": "contact@felix.hamburg"
- },
- "source": {
- "git": "https://github.com/fxm90/GradientLoadingBar.git",
- "tag": "3.0.0"
- },
- "swift_versions": "5.5",
- "platforms": {
- "ios": "13.0"
- },
- "source_files": "GradientLoadingBar/Sources/**/*.swift",
- "testspecs": [
- {
- "name": "Tests",
- "test_type": "unit",
- "requires_app_host": true,
- "source_files": "GradientLoadingBar/Tests/**/*.{swift,md}",
- "dependencies": {
- "SnapshotTesting": [
- "~> 1.9"
- ]
- }
- }
- ],
- "swift_version": "5.5"
-}
diff --git a/Example/Pods/Local Podspecs/SwiftConfigurationFiles.podspec.json b/Example/Pods/Local Podspecs/SwiftConfigurationFiles.podspec.json
deleted file mode 100644
index 0091974..0000000
--- a/Example/Pods/Local Podspecs/SwiftConfigurationFiles.podspec.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "name": "SwiftConfigurationFiles",
- "version": "0.0.1",
- "summary": "Repository containing configuration files for Swift development, e.g. for tools like SwiftLint or SwiftFormat.",
- "homepage": "https://github.com/fxm90/Swift-Configuration-Files",
- "license": {
- "type": "MIT",
- "file": "LICENSE"
- },
- "authors": {
- "Felix Mau": "me@felix.hamburg"
- },
- "source": {
- "git": "https://github.com/fxm90/Swift-Configuration-Files.git",
- "tag": "0.0.1"
- },
- "social_media_url": "https://twitter.com/_fxm90",
- "preserve_paths": ".*",
- "platforms": {
- "osx": null,
- "ios": null,
- "tvos": null,
- "watchos": null
- }
-}
diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock
deleted file mode 100644
index 7e097ac..0000000
--- a/Example/Pods/Manifest.lock
+++ /dev/null
@@ -1,43 +0,0 @@
-PODS:
- - GradientLoadingBar (3.0.0)
- - GradientLoadingBar/Tests (3.0.0):
- - SnapshotTesting (~> 1.9)
- - SnapshotTesting (1.9.0)
- - SwiftConfigurationFiles (0.0.1)
- - SwiftFormat/CLI (0.50.1)
- - SwiftLint (0.49.1)
-
-DEPENDENCIES:
- - GradientLoadingBar (from `../`)
- - GradientLoadingBar/Tests (from `../`)
- - SwiftConfigurationFiles (from `https://github.com/fxm90/SwiftConfigurationFiles.git`)
- - SwiftFormat/CLI (~> 0.41)
- - SwiftLint (~> 0.42)
-
-SPEC REPOS:
- https://github.com/CocoaPods/Specs.git:
- - SnapshotTesting
- - SwiftFormat
- - SwiftLint
-
-EXTERNAL SOURCES:
- GradientLoadingBar:
- :path: "../"
- SwiftConfigurationFiles:
- :git: https://github.com/fxm90/SwiftConfigurationFiles.git
-
-CHECKOUT OPTIONS:
- SwiftConfigurationFiles:
- :commit: efe01ba39069e8957fb89217b8c7fed298254691
- :git: https://github.com/fxm90/SwiftConfigurationFiles.git
-
-SPEC CHECKSUMS:
- GradientLoadingBar: 3c4246535efdedaf9b471c05caabfdb4b87b40a2
- SnapshotTesting: 6141c48b6aa76ead61431ca665c14ab9a066c53b
- SwiftConfigurationFiles: 1cf2228a911ebed9f42f8dec077bb634f04ca6c8
- SwiftFormat: e73212c71908404e333da34e303772b9e516ac9b
- SwiftLint: 32ee33ded0636d0905ef6911b2b67bbaeeedafa5
-
-PODFILE CHECKSUM: ea7965c23e5364bcd5cd7d3693d685af73a3e31d
-
-COCOAPODS: 1.11.3
diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj
deleted file mode 100644
index 212210c..0000000
--- a/Example/Pods/Pods.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,1711 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 55;
- objects = {
-
-/* Begin PBXAggregateTarget section */
- 1CD0618C486973D5588EF20D2E8C0AEA /* SwiftFormat */ = {
- isa = PBXAggregateTarget;
- buildConfigurationList = 6B2B7DF197DF6A7CA487150557230A41 /* Build configuration list for PBXAggregateTarget "SwiftFormat" */;
- buildPhases = (
- );
- dependencies = (
- );
- name = SwiftFormat;
- };
- 52B60EC2A583F24ACBB69C113F5488B9 /* SwiftLint */ = {
- isa = PBXAggregateTarget;
- buildConfigurationList = AE7B4FB01588B9E6DF09CB79FC7CE7BD /* Build configuration list for PBXAggregateTarget "SwiftLint" */;
- buildPhases = (
- );
- dependencies = (
- );
- name = SwiftLint;
- };
- B951B6FCD3E55AF969FBA9F7B476B877 /* SwiftConfigurationFiles */ = {
- isa = PBXAggregateTarget;
- buildConfigurationList = C94370DDBAF2E85B239A19BD8F0908C6 /* Build configuration list for PBXAggregateTarget "SwiftConfigurationFiles" */;
- buildPhases = (
- );
- dependencies = (
- );
- name = SwiftConfigurationFiles;
- };
-/* End PBXAggregateTarget section */
-
-/* Begin PBXBuildFile section */
- 053939AEA809E304513064E25F3614FC /* Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F94052031AFA32400D582F8326AFCCA /* Codable.swift */; };
- 0A5BF68C384BA94FBC2AA21FC00A113D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA8B94E9D3B433157168D1EECCEC11CD /* Foundation.framework */; };
- 11AA9870DBA064FB6AC2D6C05EA4043D /* SpriteKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB7345B65BC2E6AEED51A68C09DDF9D3 /* SpriteKit.swift */; };
- 15FE4395AACC6ADC7A4341096C052A4A /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 550C6A48FB0A4741A05944C8694352A8 /* Constants.swift */; };
- 16BE8F5F7A63A59965A2C318B044F25D /* Pods-Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D6D7C498FA339E02BD53ECB8916CEA8E /* Pods-Example-dummy.m */; };
- 1D870BB7F6706FCA8AE0BD472DC9B9A4 /* GradientLoadingBarViewTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D6519624624C2360C7B1023393CBE86 /* GradientLoadingBarViewTestCase.swift */; };
- 2478BA150A8D1ABEE55FAC74C17E59FC /* GradientActivityIndicatorView+AnimateIsHiddenTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379ADEDFCD6A4441722D8A28283E8739 /* GradientActivityIndicatorView+AnimateIsHiddenTestCase.swift */; };
- 26DB1CABC1D1A4209BF437D300F21D15 /* NSImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBC9A0B4D6CFB06A9485278F8148AD16 /* NSImage.swift */; };
- 2AA1041CDC89AA663E18DC2418FB185F /* UIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A113998B49E270909660041C22A28B2 /* UIViewController.swift */; };
- 2B7734C9C50BBAF595D64D931B9C4FE8 /* NotchGradientLoadingBarControllerTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AE75973628059AB67B3FDC662361F71 /* NotchGradientLoadingBarControllerTestCase.swift */; };
- 2FBAB5E75D393F0B801920CDE4B74899 /* NotchGradientLoadingBarViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BEE9E1A4383D0C413715CD83DBF635B /* NotchGradientLoadingBarViewModel.swift */; };
- 38811E3E79E0C51E8267949B862A6401 /* String+SpecialCharacters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88BFE21D2713C10409DB47F0F21882A6 /* String+SpecialCharacters.swift */; };
- 39005FDE959EFEF742B40EC4B93305FD /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EFA456CEFE923C8273B73C2B30B943E /* View.swift */; };
- 3F668C0F44DF65D9DC09F68A9377592D /* PlistEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB53F2B45CB5D7D98F03EDF1C9CA79EE /* PlistEncoder.swift */; };
- 4214C078AC5FEB970B06D75605D82BEB /* GradientLoadingBar-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BB5FF8A88BF23FA9C9AE4246CF98584 /* GradientLoadingBar-dummy.m */; };
- 42BC8C916A56AAFE426EA7EEE767DC77 /* AssertInlineSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CBBC4BFDFF7B467C1668BA81EE0EFAB /* AssertInlineSnapshot.swift */; };
- 447BCD024E0394EB29FFE20B5E239731 /* GradientActivityIndicatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5D9557874A5361BA0639AD2A364151 /* GradientActivityIndicatorView.swift */; };
- 453874BF1A255D67D63C20C564FD844B /* SwiftUIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5F1EA2D3AF4051ECDEF7A733ECD1F31 /* SwiftUIView.swift */; };
- 455D032F8818DD5D9D0F74115237C37B /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E7896243A385457C57299AD3B48794 /* UIImage.swift */; };
- 48D234A26F50D0501FAFE2DC619D3574 /* URLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE3DFAC03CEBE58F8287C0FCF071BD5 /* URLRequest.swift */; };
- 4D1CAF085B8A4AB40B96303C3A1BC786 /* Pods-Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7825A90E082A1582EB16256B0E722B3F /* Pods-Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 50E35CD79B1FEE2398F8F2A3E4388899 /* SnapshotTesting-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DBE022DB1E4E7109A78413B287A3CE2C /* SnapshotTesting-dummy.m */; };
- 51CD64623A68EF6304826AB6958E7AE1 /* GradientLoadingBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45BC12A96E7B8018A28C37440814D3E9 /* GradientLoadingBarView.swift */; };
- 565E898EB0781C0832A2688C3E382443 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA8B94E9D3B433157168D1EECCEC11CD /* Foundation.framework */; };
- 5FB7653163F6C266EE63B15C86CBC18D /* Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D6F47C68158530256A4C877A272B671 /* Description.swift */; };
- 61B9ED0EF5672FE397A9ECE9C987A88B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA8B94E9D3B433157168D1EECCEC11CD /* Foundation.framework */; };
- 634706EAC8DB4714CBE3CFDE13754E71 /* CGPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4E3D8D682DA992F32DFFC3C5BB5F6C6 /* CGPath.swift */; };
- 6486606E4D936C190469E7857F2D5B3E /* NSBezierPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93B2810B1B5FB3CD5EE96A56FCA48750 /* NSBezierPath.swift */; };
- 64F4C1D9998F48C0B7CBB8250A479F41 /* CALayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 231E8C69DC0738D9232AC6A19B06C742 /* CALayer.swift */; };
- 65264C62384A1D00D8B5101058E8583D /* Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49843B6CCFBD52C4F39EA9555035F224 /* Internal.swift */; };
- 667A0A1C8B12663CADD98C9FD0A6CEDD /* SceneKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98950FFC6EBB992D35E49ADEBB822AD6 /* SceneKit.swift */; };
- 694D1A1707416FB7AD3F1938ADC5D298 /* GradientLoadingBarViewModelTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FD2F1A4D28F113D8EF502634CBECA5F /* GradientLoadingBarViewModelTestCase.swift */; };
- 6A8DF125D3A2859A195B1F69E6C97312 /* GradientLoadingBarViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B8AD1EB4E319274E3074E4EA5010C79 /* GradientLoadingBarViewModel.swift */; };
- 6FF2B1619BBA12103B9F5183C01764FA /* GradientLoadingBarView+ViewModelTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A47B6CB232A77E910C75D6FEA1AAA4A /* GradientLoadingBarView+ViewModelTestCase.swift */; };
- 7008482F299AF7E8B3A7A9BFACB6FE54 /* README.md in Sources */ = {isa = PBXBuildFile; fileRef = A64E5EE1B24BD953A55E4034119A210C /* README.md */; };
- 7CF172618AE48B0946EB06DE701BB06E /* NSViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 966453F157F0E6D5DB08A2D38515749B /* NSViewController.swift */; };
- 869989422C880D5DFB1A1A85EDEC042C /* Any.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFD6639600680D489F1A72928C544F6F /* Any.swift */; };
- 870A02D78217710AE43C97B8A0BC389B /* GradientActivityIndicatorView+AnimateIsHidden.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10E926B508663C7A173E887DB2A3FFB5 /* GradientActivityIndicatorView+AnimateIsHidden.swift */; };
- 8736B3D201CF21FD02B97EFBD20E63C0 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F7B16214A68F20137A4AEF73266686F /* Async.swift */; };
- 8AFE90E2648DD774687E6558850E5F55 /* CaseIterable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1388E5A13C5D7C36F34352CC05F2E2B8 /* CaseIterable.swift */; };
- 8FB1043A06A1167870A6DAA145F491DB /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CB6FFB8809A19166E02AA30ADA6F129 /* Data.swift */; };
- 90122844335989ACD9148A54CEF7C6DB /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2656F61BD2F10B00487AF6D249FFD0EA /* String.swift */; };
- 90DFFC43930C9AB601074ACD760BA42F /* NotchGradientLoadingBarViewModelTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DC75067FBFAE2101CDC04ACEEAF52A5 /* NotchGradientLoadingBarViewModelTestCase.swift */; };
- 950C48512418F6346F6BD099E2194218 /* UIBezierPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C3B9909B138940F75E3FE22FFADC619 /* UIBezierPath.swift */; };
- 95ECF7C006872F5F5699C122BD0A1A13 /* UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6322D93A5C7C2FF2358090E16BD82A0F /* UIView.swift */; };
- 9982EE05C8FF25661C9E0BE890D83B81 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA8B94E9D3B433157168D1EECCEC11CD /* Foundation.framework */; };
- A0A10801121581A1C77858185365DC26 /* SnapshotTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C882DC171D273C8FF897DFB2FE3B7CC /* SnapshotTestCase.swift */; };
- A0F1E5E62259CA69ADE34D25FC85C824 /* GradientLoadingBarControllerTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF1357DCAC8C9D630923A559CF69377F /* GradientLoadingBarControllerTestCase.swift */; };
- A29CA8B5D19DE6970823549879ED8A44 /* Diff.swift in Sources */ = {isa = PBXBuildFile; fileRef = 266337084D6D4DDB264B72BDE3CBD702 /* Diff.swift */; };
- A5EEE2181466D210351C54DB19F6599B /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CA4C8194D5D065C3DB5F515FA0DDD0FB /* LaunchScreen.storyboard */; };
- A7C6EAB711158AFEA36E7DF1D77A5264 /* GradientLoadingBar-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 044B060397F0D69833748CBE684016B0 /* GradientLoadingBar-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- B1547321903DB686BB403D6E6C1DFDCC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA8B94E9D3B433157168D1EECCEC11CD /* Foundation.framework */; };
- B2139D13F81B24AB00363B321F9B210B /* GradientActivityIndicatorViewModel+SizeUpdateTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D550A12BE325CF959DC999A943C79C1B /* GradientActivityIndicatorViewModel+SizeUpdateTestCase.swift */; };
- C27D044EB087ABBAA67E24499FF8E1D0 /* Diffing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71D71792F9CE9BE2F2EA34DEADAFCD0E /* Diffing.swift */; };
- C71ABFBE24266435FE24E4E58FFA8D02 /* NSView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80F8E91647A880AED7C46631E490D66B /* NSView.swift */; };
- CD72E5C540AA0BA018124E62CB359982 /* SnapshotTesting-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DBBA25BF70EC9E43B11D1ABD4A052578 /* SnapshotTesting-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- D34C28402E44804F9A2199DDC0E5ABCC /* Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6300A298D0C28699F231141E247B2D02 /* Wait.swift */; };
- D88240CD173FC6813C3A01C1D5A65EF8 /* GradientLoadingBarView+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D2F56F0A20299B6B3099D8F5A654106 /* GradientLoadingBarView+ViewModel.swift */; };
- DB8CC3E70438E372B026487E9BA8D9BE /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE0B1C3BCC92C7420F8CE109BAB8F72 /* main.m */; };
- E15654CB61DD6B45B3D1E58E99B1155E /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5EBC8F300895E39EA0DF6D6B2B5E6BCD /* XCTest.framework */; };
- E389705E05BE2B6048952E8C880E3EE3 /* GradientActivityIndicatorViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBBEA2B36F48CA1D6E4CA325EA91C4C7 /* GradientActivityIndicatorViewModel.swift */; };
- E71953EF30C685953B04DC3D9A46C21C /* NotchGradientLoadingBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D20AB62AFBEB6AFB56B3EEBEBA37CA07 /* NotchGradientLoadingBarController.swift */; };
- E78626B8E27AEBD9945748126E246738 /* GradientActivityIndicatorViewModelTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = F776327B63AC7738D831A067EEB9DA4C /* GradientActivityIndicatorViewModelTestCase.swift */; };
- ED8A155A563C9BCDB5160B922065F48B /* XCTAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AA6FA5304879E0A8492BE211FA27D0E /* XCTAttachment.swift */; };
- EEFDC56304A876442F4003927FDF4190 /* AssertSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86FF7752DF7A138DFB23770E012AE807 /* AssertSnapshot.swift */; };
- F2DBAE1958541B2ABAB3C30EE18DEFB0 /* GradientLoadingBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD46DDFC661BED5E686F5FC283A0B473 /* GradientLoadingBarController.swift */; };
- FD08AC3299CA408DD6C7DBA603FA5FA5 /* GradientActivityIndicatorViewTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8A1E1D46F4AE7109B3D37EFC6748941 /* GradientActivityIndicatorViewTestCase.swift */; };
- FF9A967D0F07BD1A3D589A92D62BDE07 /* Snapshotting.swift in Sources */ = {isa = PBXBuildFile; fileRef = D422A690C241AF646D9271C59C8DD71C /* Snapshotting.swift */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
- 36AA100304E6631F98B0897A7B2B3EED /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = AD9297F9E6CC3E50EDCFECA0A77800B7;
- remoteInfo = GradientLoadingBar;
- };
- 4C710C00C1B5C34151BAE58AB7143354 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = AD9297F9E6CC3E50EDCFECA0A77800B7;
- remoteInfo = GradientLoadingBar;
- };
- 9B42ED775EFE5BBEDD6E6F3E60D310A5 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 1CD0618C486973D5588EF20D2E8C0AEA;
- remoteInfo = SwiftFormat;
- };
- B51AC342985001CF5C57BC1B21EDA84A /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 52B60EC2A583F24ACBB69C113F5488B9;
- remoteInfo = SwiftLint;
- };
- DB0A50698830C469FDB2820BD788DAAB /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = B951B6FCD3E55AF969FBA9F7B476B877;
- remoteInfo = SwiftConfigurationFiles;
- };
- F08090CE87BB8E67E831F748574311A9 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 9407360C7A4B285137243964F1612601;
- remoteInfo = "AppHost-GradientLoadingBar-Unit-Tests";
- };
- F9A9F5329967A07C9C59D64CACF82695 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = ADEAE7CDD604DE4F3072E6021A314487;
- remoteInfo = SnapshotTesting;
- };
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXFileReference section */
- 00160DB7CE7B9129CA2FC53486F1DC31 /* SnapshotTesting.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapshotTesting.release.xcconfig; sourceTree = ""; };
- 044B060397F0D69833748CBE684016B0 /* GradientLoadingBar-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GradientLoadingBar-umbrella.h"; sourceTree = ""; };
- 0A113998B49E270909660041C22A28B2 /* UIViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIViewController.swift; path = Sources/SnapshotTesting/Snapshotting/UIViewController.swift; sourceTree = ""; };
- 0AA6FA5304879E0A8492BE211FA27D0E /* XCTAttachment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XCTAttachment.swift; path = Sources/SnapshotTesting/Common/XCTAttachment.swift; sourceTree = ""; };
- 0B8AD1EB4E319274E3074E4EA5010C79 /* GradientLoadingBarViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GradientLoadingBarViewModel.swift; sourceTree = ""; };
- 10E926B508663C7A173E887DB2A3FFB5 /* GradientActivityIndicatorView+AnimateIsHidden.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "GradientActivityIndicatorView+AnimateIsHidden.swift"; sourceTree = ""; };
- 1376748BA48C7A6D4D0A2618DA2B2B02 /* GradientLoadingBar-Unit-Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GradientLoadingBar-Unit-Tests-Info.plist"; sourceTree = ""; };
- 1388E5A13C5D7C36F34352CC05F2E2B8 /* CaseIterable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CaseIterable.swift; path = Sources/SnapshotTesting/Snapshotting/CaseIterable.swift; sourceTree = ""; };
- 1BB5FF8A88BF23FA9C9AE4246CF98584 /* GradientLoadingBar-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GradientLoadingBar-dummy.m"; sourceTree = ""; };
- 1CB6FFB8809A19166E02AA30ADA6F129 /* Data.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Data.swift; path = Sources/SnapshotTesting/Snapshotting/Data.swift; sourceTree = ""; };
- 1CBBC4BFDFF7B467C1668BA81EE0EFAB /* AssertInlineSnapshot.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertInlineSnapshot.swift; path = Sources/SnapshotTesting/AssertInlineSnapshot.swift; sourceTree = ""; };
- 1D2F56F0A20299B6B3099D8F5A654106 /* GradientLoadingBarView+ViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "GradientLoadingBarView+ViewModel.swift"; sourceTree = ""; };
- 1F667CC0E19EAF34E5A4119E2121F585 /* Pods-Example */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-Example"; path = Pods_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 231E8C69DC0738D9232AC6A19B06C742 /* CALayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CALayer.swift; path = Sources/SnapshotTesting/Snapshotting/CALayer.swift; sourceTree = ""; };
- 243410B9535472556EA4BB6DBC133A0D /* Pods-Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Example.release.xcconfig"; sourceTree = ""; };
- 2656F61BD2F10B00487AF6D249FFD0EA /* String.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = String.swift; path = Sources/SnapshotTesting/Snapshotting/String.swift; sourceTree = ""; };
- 266337084D6D4DDB264B72BDE3CBD702 /* Diff.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Diff.swift; path = Sources/SnapshotTesting/Diff.swift; sourceTree = ""; };
- 2C3B9909B138940F75E3FE22FFADC619 /* UIBezierPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIBezierPath.swift; path = Sources/SnapshotTesting/Snapshotting/UIBezierPath.swift; sourceTree = ""; };
- 2D37B379709695B38E68243F13211C38 /* GradientLoadingBar-Unit-Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "GradientLoadingBar-Unit-Tests-frameworks.sh"; sourceTree = ""; };
- 2D6F47C68158530256A4C877A272B671 /* Description.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Description.swift; path = Sources/SnapshotTesting/Snapshotting/Description.swift; sourceTree = ""; };
- 2EFA456CEFE923C8273B73C2B30B943E /* View.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = View.swift; path = Sources/SnapshotTesting/Common/View.swift; sourceTree = ""; };
- 2F7B16214A68F20137A4AEF73266686F /* Async.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Async.swift; path = Sources/SnapshotTesting/Async.swift; sourceTree = ""; };
- 301D196AEF80B82DDC3AA964412AFF48 /* SwiftLint.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftLint.release.xcconfig; sourceTree = ""; };
- 313CCB0006B673ED2F380FA1490BFDF1 /* AppHost-GradientLoadingBar-Unit-Tests.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "AppHost-GradientLoadingBar-Unit-Tests.app"; sourceTree = BUILT_PRODUCTS_DIR; };
- 31C1D37707DFAA5E6A164BCC07834264 /* Pods-Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Example-Info.plist"; sourceTree = ""; };
- 35C305D3797C284E6F5BAA1D3E6F9BF8 /* Pods-Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Example.modulemap"; sourceTree = ""; };
- 379ADEDFCD6A4441722D8A28283E8739 /* GradientActivityIndicatorView+AnimateIsHiddenTestCase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "GradientActivityIndicatorView+AnimateIsHiddenTestCase.swift"; sourceTree = ""; };
- 3A47B6CB232A77E910C75D6FEA1AAA4A /* GradientLoadingBarView+ViewModelTestCase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "GradientLoadingBarView+ViewModelTestCase.swift"; sourceTree = ""; };
- 441854E35F81731E63E53DC7E4EEAD9D /* Pods-Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Example-acknowledgements.markdown"; sourceTree = ""; };
- 45BC12A96E7B8018A28C37440814D3E9 /* GradientLoadingBarView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GradientLoadingBarView.swift; sourceTree = ""; };
- 49843B6CCFBD52C4F39EA9555035F224 /* Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Internal.swift; path = Sources/SnapshotTesting/Common/Internal.swift; sourceTree = ""; };
- 4AE75973628059AB67B3FDC662361F71 /* NotchGradientLoadingBarControllerTestCase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NotchGradientLoadingBarControllerTestCase.swift; sourceTree = ""; };
- 4DC75067FBFAE2101CDC04ACEEAF52A5 /* NotchGradientLoadingBarViewModelTestCase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NotchGradientLoadingBarViewModelTestCase.swift; sourceTree = ""; };
- 550C6A48FB0A4741A05944C8694352A8 /* Constants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; };
- 58D3B36D45EC14FED18273D9426BFD9D /* AppHost-GradientLoadingBar-Unit-Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "AppHost-GradientLoadingBar-Unit-Tests-Info.plist"; path = "Example/Pods/AppHost-GradientLoadingBar-Unit-Tests/AppHost-GradientLoadingBar-Unit-Tests-Info.plist"; sourceTree = ""; };
- 5BEE9E1A4383D0C413715CD83DBF635B /* NotchGradientLoadingBarViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NotchGradientLoadingBarViewModel.swift; sourceTree = ""; };
- 5EBC8F300895E39EA0DF6D6B2B5E6BCD /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
- 6300A298D0C28699F231141E247B2D02 /* Wait.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Wait.swift; path = Sources/SnapshotTesting/Extensions/Wait.swift; sourceTree = ""; };
- 6322D93A5C7C2FF2358090E16BD82A0F /* UIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIView.swift; path = Sources/SnapshotTesting/Snapshotting/UIView.swift; sourceTree = ""; };
- 64D1AB601CB8942D953D27A7F77AD429 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; };
- 67873E92210DD4E777C49C6E8AEDC108 /* GradientLoadingBar */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GradientLoadingBar; path = GradientLoadingBar.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 6C882DC171D273C8FF897DFB2FE3B7CC /* SnapshotTestCase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SnapshotTestCase.swift; path = Sources/SnapshotTesting/SnapshotTestCase.swift; sourceTree = ""; };
- 6D6519624624C2360C7B1023393CBE86 /* GradientLoadingBarViewTestCase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GradientLoadingBarViewTestCase.swift; sourceTree = ""; };
- 71D71792F9CE9BE2F2EA34DEADAFCD0E /* Diffing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Diffing.swift; path = Sources/SnapshotTesting/Diffing.swift; sourceTree = ""; };
- 7825A90E082A1582EB16256B0E722B3F /* Pods-Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Example-umbrella.h"; sourceTree = ""; };
- 7B5D9557874A5361BA0639AD2A364151 /* GradientActivityIndicatorView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GradientActivityIndicatorView.swift; sourceTree = ""; };
- 80F8E91647A880AED7C46631E490D66B /* NSView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSView.swift; path = Sources/SnapshotTesting/Snapshotting/NSView.swift; sourceTree = ""; };
- 83DD74C4A13D0725CA40F2810A2C3FA0 /* SwiftFormat.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftFormat.debug.xcconfig; sourceTree = ""; };
- 86FF7752DF7A138DFB23770E012AE807 /* AssertSnapshot.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertSnapshot.swift; path = Sources/SnapshotTesting/AssertSnapshot.swift; sourceTree = ""; };
- 88BFE21D2713C10409DB47F0F21882A6 /* String+SpecialCharacters.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+SpecialCharacters.swift"; path = "Sources/SnapshotTesting/Common/String+SpecialCharacters.swift"; sourceTree = ""; };
- 8C0C1AE8F5B4B54E80DF78EBE9113EFF /* GradientLoadingBar.unit-tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "GradientLoadingBar.unit-tests.release.xcconfig"; sourceTree = ""; };
- 8F234912C6C11BD0C26751D9DAFD98B0 /* SnapshotTesting-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapshotTesting-Info.plist"; sourceTree = ""; };
- 8F94052031AFA32400D582F8326AFCCA /* Codable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Codable.swift; path = Sources/SnapshotTesting/Snapshotting/Codable.swift; sourceTree = ""; };
- 93B2810B1B5FB3CD5EE96A56FCA48750 /* NSBezierPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSBezierPath.swift; path = Sources/SnapshotTesting/Snapshotting/NSBezierPath.swift; sourceTree = ""; };
- 966453F157F0E6D5DB08A2D38515749B /* NSViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSViewController.swift; path = Sources/SnapshotTesting/Snapshotting/NSViewController.swift; sourceTree = ""; };
- 98950FFC6EBB992D35E49ADEBB822AD6 /* SceneKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SceneKit.swift; path = Sources/SnapshotTesting/Snapshotting/SceneKit.swift; sourceTree = ""; };
- 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
- 9ED91F61AB707C323C453A88B777351A /* GradientLoadingBar-Unit-Tests-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GradientLoadingBar-Unit-Tests-prefix.pch"; sourceTree = ""; };
- 9FBD0E14174DBAA61835B53F4BE0A1C6 /* SwiftLint.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftLint.debug.xcconfig; sourceTree = ""; };
- 9FD2F1A4D28F113D8EF502634CBECA5F /* GradientLoadingBarViewModelTestCase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GradientLoadingBarViewModelTestCase.swift; sourceTree = ""; };
- A037DBBCCACBFACB5C39A80B1C273043 /* SnapshotTesting */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapshotTesting; path = SnapshotTesting.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- A34D867751E16B18A9C56E357E9B866A /* readme.md */ = {isa = PBXFileReference; includeInIndex = 1; path = readme.md; sourceTree = ""; };
- A4E3D8D682DA992F32DFFC3C5BB5F6C6 /* CGPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CGPath.swift; path = Sources/SnapshotTesting/Snapshotting/CGPath.swift; sourceTree = ""; };
- A5F1EA2D3AF4051ECDEF7A733ECD1F31 /* SwiftUIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftUIView.swift; path = Sources/SnapshotTesting/Snapshotting/SwiftUIView.swift; sourceTree = ""; };
- A64E5EE1B24BD953A55E4034119A210C /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; };
- A7E7896243A385457C57299AD3B48794 /* UIImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIImage.swift; path = Sources/SnapshotTesting/Snapshotting/UIImage.swift; sourceTree = ""; };
- A8A1E1D46F4AE7109B3D37EFC6748941 /* GradientActivityIndicatorViewTestCase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GradientActivityIndicatorViewTestCase.swift; sourceTree = ""; };
- AB7345B65BC2E6AEED51A68C09DDF9D3 /* SpriteKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SpriteKit.swift; path = Sources/SnapshotTesting/Snapshotting/SpriteKit.swift; sourceTree = ""; };
- AF1357DCAC8C9D630923A559CF69377F /* GradientLoadingBarControllerTestCase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GradientLoadingBarControllerTestCase.swift; sourceTree = ""; };
- AFECBC24E09D0D25F822C27BD944AFD4 /* Pods-Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Example-frameworks.sh"; sourceTree = ""; };
- B45138496B85A072654D1D0F8EBBEDE5 /* Pods-Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Example.debug.xcconfig"; sourceTree = ""; };
- B8E489E08DC3F98DDD08A94BB85F95B3 /* GradientLoadingBar.unit-tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "GradientLoadingBar.unit-tests.debug.xcconfig"; sourceTree = ""; };
- BFD6639600680D489F1A72928C544F6F /* Any.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Any.swift; path = Sources/SnapshotTesting/Snapshotting/Any.swift; sourceTree = ""; };
- C79C001417A308CD3E3E9388ADA7A7DE /* SnapshotTesting-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapshotTesting-prefix.pch"; sourceTree = ""; };
- C8561314A3DA7D23140D2877058162B3 /* SwiftConfigurationFiles.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftConfigurationFiles.debug.xcconfig; sourceTree = ""; };
- CA4C8194D5D065C3DB5F515FA0DDD0FB /* LaunchScreen.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = "Example/Pods/AppHost-GradientLoadingBar-Unit-Tests/LaunchScreen.storyboard"; sourceTree = ""; };
- CA8B94E9D3B433157168D1EECCEC11CD /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
- CB525A4BD0739D1F27CFE5BF030133DC /* SwiftFormat.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftFormat.release.xcconfig; sourceTree = ""; };
- CBA17F86AFC7D538904E056CA188E2B7 /* GradientLoadingBar.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GradientLoadingBar.debug.xcconfig; sourceTree = ""; };
- CBC9A0B4D6CFB06A9485278F8148AD16 /* NSImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSImage.swift; path = Sources/SnapshotTesting/Snapshotting/NSImage.swift; sourceTree = ""; };
- CC830FB4E7AD67676025629098DFCB83 /* GradientLoadingBar-Unit-Tests */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "GradientLoadingBar-Unit-Tests"; path = "GradientLoadingBar-Unit-Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
- CD46DDFC661BED5E686F5FC283A0B473 /* GradientLoadingBarController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GradientLoadingBarController.swift; sourceTree = ""; };
- CEE3DFAC03CEBE58F8287C0FCF071BD5 /* URLRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLRequest.swift; path = Sources/SnapshotTesting/Snapshotting/URLRequest.swift; sourceTree = ""; };
- D20AB62AFBEB6AFB56B3EEBEBA37CA07 /* NotchGradientLoadingBarController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NotchGradientLoadingBarController.swift; sourceTree = ""; };
- D4158B7BB021CE8B5F8A2FF85BCB9287 /* GradientLoadingBar-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GradientLoadingBar-prefix.pch"; sourceTree = ""; };
- D422A690C241AF646D9271C59C8DD71C /* Snapshotting.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Snapshotting.swift; path = Sources/SnapshotTesting/Snapshotting.swift; sourceTree = ""; };
- D550A12BE325CF959DC999A943C79C1B /* GradientActivityIndicatorViewModel+SizeUpdateTestCase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "GradientActivityIndicatorViewModel+SizeUpdateTestCase.swift"; sourceTree = ""; };
- D6D7C498FA339E02BD53ECB8916CEA8E /* Pods-Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Example-dummy.m"; sourceTree = ""; };
- D9AC4E8CE11830D91FFA1CEBBE5CC167 /* SnapshotTesting.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapshotTesting.modulemap; sourceTree = ""; };
- DAE0B1C3BCC92C7420F8CE109BAB8F72 /* main.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = main.m; path = "Example/Pods/AppHost-GradientLoadingBar-Unit-Tests/main.m"; sourceTree = ""; };
- DB3B2BC75CC5B008724BAA201DC6388D /* GradientLoadingBar.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GradientLoadingBar.release.xcconfig; sourceTree = ""; };
- DBBA25BF70EC9E43B11D1ABD4A052578 /* SnapshotTesting-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapshotTesting-umbrella.h"; sourceTree = ""; };
- DBE022DB1E4E7109A78413B287A3CE2C /* SnapshotTesting-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapshotTesting-dummy.m"; sourceTree = ""; };
- DF87137F9667F0C25AA55E77B4977D50 /* SwiftConfigurationFiles.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftConfigurationFiles.release.xcconfig; sourceTree = ""; };
- E6197A6CB9B561CC232DFDD747127779 /* GradientLoadingBar.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GradientLoadingBar.modulemap; sourceTree = ""; };
- EA21B344259B58996DB73382B1B1521F /* Pods-Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Example-acknowledgements.plist"; sourceTree = ""; };
- EBBEA2B36F48CA1D6E4CA325EA91C4C7 /* GradientActivityIndicatorViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GradientActivityIndicatorViewModel.swift; sourceTree = ""; };
- EE38CBAA3AA7C73AA148D79A1BC4D8B0 /* GradientLoadingBar-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GradientLoadingBar-Info.plist"; sourceTree = ""; };
- F15E3D2604499C5905C145503CF0AEF2 /* GradientLoadingBar.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = GradientLoadingBar.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
- F776327B63AC7738D831A067EEB9DA4C /* GradientActivityIndicatorViewModelTestCase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GradientActivityIndicatorViewModelTestCase.swift; sourceTree = ""; };
- FB343E4C08230DD205DFE579BBED6943 /* SnapshotTesting.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapshotTesting.debug.xcconfig; sourceTree = ""; };
- FB53F2B45CB5D7D98F03EDF1C9CA79EE /* PlistEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PlistEncoder.swift; path = Sources/SnapshotTesting/Common/PlistEncoder.swift; sourceTree = ""; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- 4B9708FC6CCCD21C03371E15235662B2 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 9982EE05C8FF25661C9E0BE890D83B81 /* Foundation.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 63E91520330D1271B764E6FCC5F7634E /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 565E898EB0781C0832A2688C3E382443 /* Foundation.framework in Frameworks */,
- E15654CB61DD6B45B3D1E58E99B1155E /* XCTest.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 9A56089B53D133A733C876ABD2AC46C5 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- B1547321903DB686BB403D6E6C1DFDCC /* Foundation.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- BEF1F637BEDBAD78C9F541DFE7D59C33 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 61B9ED0EF5672FE397A9ECE9C987A88B /* Foundation.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- D762B6E0A26AF53CBC4026B042C32F26 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 0A5BF68C384BA94FBC2AA21FC00A113D /* Foundation.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 06F693C7A39A0F5BF2B4B434087EF800 /* Support Files */ = {
- isa = PBXGroup;
- children = (
- 9FBD0E14174DBAA61835B53F4BE0A1C6 /* SwiftLint.debug.xcconfig */,
- 301D196AEF80B82DDC3AA964412AFF48 /* SwiftLint.release.xcconfig */,
- );
- name = "Support Files";
- path = "../Target Support Files/SwiftLint";
- sourceTree = "";
- };
- 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- 974814B39C0012DECD183BBB91B32103 /* iOS */,
- );
- name = Frameworks;
- sourceTree = "";
- };
- 16461A765873BF95604C634D3908A84A /* Pod */ = {
- isa = PBXGroup;
- children = (
- F15E3D2604499C5905C145503CF0AEF2 /* GradientLoadingBar.podspec */,
- 64D1AB601CB8942D953D27A7F77AD429 /* LICENSE */,
- A34D867751E16B18A9C56E357E9B866A /* readme.md */,
- );
- name = Pod;
- sourceTree = "";
- };
- 1D73926BF938E676C74BBCA9AE873E96 /* Support Files */ = {
- isa = PBXGroup;
- children = (
- C8561314A3DA7D23140D2877058162B3 /* SwiftConfigurationFiles.debug.xcconfig */,
- DF87137F9667F0C25AA55E77B4977D50 /* SwiftConfigurationFiles.release.xcconfig */,
- );
- name = "Support Files";
- path = "../Target Support Files/SwiftConfigurationFiles";
- sourceTree = "";
- };
- 2E3CD5CD009CAE07E3636D51B9BA042D /* GradientLoadingBarView */ = {
- isa = PBXGroup;
- children = (
- 6D6519624624C2360C7B1023393CBE86 /* GradientLoadingBarViewTestCase.swift */,
- );
- name = GradientLoadingBarView;
- path = GradientLoadingBarView;
- sourceTree = "";
- };
- 30012669746AF0B9C8295EBCC374903E /* Support Files */ = {
- isa = PBXGroup;
- children = (
- D9AC4E8CE11830D91FFA1CEBBE5CC167 /* SnapshotTesting.modulemap */,
- DBE022DB1E4E7109A78413B287A3CE2C /* SnapshotTesting-dummy.m */,
- 8F234912C6C11BD0C26751D9DAFD98B0 /* SnapshotTesting-Info.plist */,
- C79C001417A308CD3E3E9388ADA7A7DE /* SnapshotTesting-prefix.pch */,
- DBBA25BF70EC9E43B11D1ABD4A052578 /* SnapshotTesting-umbrella.h */,
- FB343E4C08230DD205DFE579BBED6943 /* SnapshotTesting.debug.xcconfig */,
- 00160DB7CE7B9129CA2FC53486F1DC31 /* SnapshotTesting.release.xcconfig */,
- );
- name = "Support Files";
- path = "../Target Support Files/SnapshotTesting";
- sourceTree = "";
- };
- 3A219F4FCCE637BD1C898E78F7117601 /* Tests */ = {
- isa = PBXGroup;
- children = (
- 49386E682F7134B2653E64816733E73F /* SnapshotTests */,
- 3D1A22DE844611AF3EF1FBD0699D459E /* UnitTests */,
- );
- name = Tests;
- sourceTree = "";
- };
- 3C62E73663346A4EC0083FE9F351D55E /* NotchGradientLoadingBar */ = {
- isa = PBXGroup;
- children = (
- D20AB62AFBEB6AFB56B3EEBEBA37CA07 /* NotchGradientLoadingBarController.swift */,
- 5BEE9E1A4383D0C413715CD83DBF635B /* NotchGradientLoadingBarViewModel.swift */,
- );
- name = NotchGradientLoadingBar;
- path = NotchGradientLoadingBar;
- sourceTree = "";
- };
- 3D1A22DE844611AF3EF1FBD0699D459E /* UnitTests */ = {
- isa = PBXGroup;
- children = (
- A72B86D1FD5641B2BD861B6DDC3A77B4 /* GradientActivityIndicatorView */,
- 5101F5B2716AD233B91D91CE76D4FB33 /* GradientLoadingBar */,
- D0E7F41DF23FE016C427D4B22E412943 /* GradientLoadingBarView */,
- 41B094B7B7FD09244CD32ED739F59E7E /* NotchGradientLoadingBar */,
- );
- name = UnitTests;
- path = GradientLoadingBar/Tests/UnitTests;
- sourceTree = "";
- };
- 41B094B7B7FD09244CD32ED739F59E7E /* NotchGradientLoadingBar */ = {
- isa = PBXGroup;
- children = (
- 4DC75067FBFAE2101CDC04ACEEAF52A5 /* NotchGradientLoadingBarViewModelTestCase.swift */,
- );
- name = NotchGradientLoadingBar;
- path = NotchGradientLoadingBar;
- sourceTree = "";
- };
- 47878F2D7A0B10E123BA2F62FBB7FA9F /* Helper */ = {
- isa = PBXGroup;
- children = (
- 550C6A48FB0A4741A05944C8694352A8 /* Constants.swift */,
- );
- name = Helper;
- path = GradientLoadingBar/Sources/Helper;
- sourceTree = "";
- };
- 49386E682F7134B2653E64816733E73F /* SnapshotTests */ = {
- isa = PBXGroup;
- children = (
- A64E5EE1B24BD953A55E4034119A210C /* README.md */,
- A8650AA5ECE59E3ADFAA59700F9F8596 /* GradientActivityIndicatorView */,
- B555B7835959996152A3D9311092041D /* GradientLoadingBar */,
- 2E3CD5CD009CAE07E3636D51B9BA042D /* GradientLoadingBarView */,
- 980B854ED8686498363F21CEFA9F9480 /* NotchGradientLoadingBar */,
- );
- name = SnapshotTests;
- path = GradientLoadingBar/Tests/SnapshotTests;
- sourceTree = "";
- };
- 5101F5B2716AD233B91D91CE76D4FB33 /* GradientLoadingBar */ = {
- isa = PBXGroup;
- children = (
- 9FD2F1A4D28F113D8EF502634CBECA5F /* GradientLoadingBarViewModelTestCase.swift */,
- );
- name = GradientLoadingBar;
- path = GradientLoadingBar;
- sourceTree = "";
- };
- 5A3D8A8DE7556A6A755A67F4958C9D5C /* GradientLoadingBar */ = {
- isa = PBXGroup;
- children = (
- 5C769A6B0642F48C0F1AD8DC1E9BD4CD /* AppHost-GradientLoadingBar-Unit-Tests */,
- 8548E0070FC65325F1EDEB289E903A87 /* Feature */,
- 47878F2D7A0B10E123BA2F62FBB7FA9F /* Helper */,
- 16461A765873BF95604C634D3908A84A /* Pod */,
- DE00CAB93DBE1D0B301AF7BDA8B5E1FD /* Support Files */,
- 3A219F4FCCE637BD1C898E78F7117601 /* Tests */,
- );
- name = GradientLoadingBar;
- path = ../..;
- sourceTree = "";
- };
- 5C769A6B0642F48C0F1AD8DC1E9BD4CD /* AppHost-GradientLoadingBar-Unit-Tests */ = {
- isa = PBXGroup;
- children = (
- 58D3B36D45EC14FED18273D9426BFD9D /* AppHost-GradientLoadingBar-Unit-Tests-Info.plist */,
- CA4C8194D5D065C3DB5F515FA0DDD0FB /* LaunchScreen.storyboard */,
- DAE0B1C3BCC92C7420F8CE109BAB8F72 /* main.m */,
- );
- name = "AppHost-GradientLoadingBar-Unit-Tests";
- sourceTree = "";
- };
- 6083CB933269AE8EC9B95029E6B5BCD8 /* Development Pods */ = {
- isa = PBXGroup;
- children = (
- 5A3D8A8DE7556A6A755A67F4958C9D5C /* GradientLoadingBar */,
- );
- name = "Development Pods";
- sourceTree = "";
- };
- 6A8462A6589515796672F99982F010C1 /* Products */ = {
- isa = PBXGroup;
- children = (
- 313CCB0006B673ED2F380FA1490BFDF1 /* AppHost-GradientLoadingBar-Unit-Tests.app */,
- 67873E92210DD4E777C49C6E8AEDC108 /* GradientLoadingBar */,
- CC830FB4E7AD67676025629098DFCB83 /* GradientLoadingBar-Unit-Tests */,
- 1F667CC0E19EAF34E5A4119E2121F585 /* Pods-Example */,
- A037DBBCCACBFACB5C39A80B1C273043 /* SnapshotTesting */,
- );
- name = Products;
- sourceTree = "";
- };
- 74018AB2D4B5C7057C7703888BB538CF /* GradientActivityIndicatorView */ = {
- isa = PBXGroup;
- children = (
- 7B5D9557874A5361BA0639AD2A364151 /* GradientActivityIndicatorView.swift */,
- 10E926B508663C7A173E887DB2A3FFB5 /* GradientActivityIndicatorView+AnimateIsHidden.swift */,
- EBBEA2B36F48CA1D6E4CA325EA91C4C7 /* GradientActivityIndicatorViewModel.swift */,
- );
- name = GradientActivityIndicatorView;
- path = GradientActivityIndicatorView;
- sourceTree = "";
- };
- 80A139B451C921F970ED77952CB5C6C4 /* SwiftConfigurationFiles */ = {
- isa = PBXGroup;
- children = (
- 1D73926BF938E676C74BBCA9AE873E96 /* Support Files */,
- );
- name = SwiftConfigurationFiles;
- path = SwiftConfigurationFiles;
- sourceTree = "";
- };
- 8548E0070FC65325F1EDEB289E903A87 /* Feature */ = {
- isa = PBXGroup;
- children = (
- 74018AB2D4B5C7057C7703888BB538CF /* GradientActivityIndicatorView */,
- 9F260C9417EA57E3E5FF7C7975173CCB /* GradientLoadingBar */,
- E5DE3097F4EF525463312F19971621BC /* GradientLoadingBarView */,
- 3C62E73663346A4EC0083FE9F351D55E /* NotchGradientLoadingBar */,
- );
- name = Feature;
- path = GradientLoadingBar/Sources/Feature;
- sourceTree = "";
- };
- 956EDA2F5D3FBE01915638662991ED47 /* Support Files */ = {
- isa = PBXGroup;
- children = (
- 83DD74C4A13D0725CA40F2810A2C3FA0 /* SwiftFormat.debug.xcconfig */,
- CB525A4BD0739D1F27CFE5BF030133DC /* SwiftFormat.release.xcconfig */,
- );
- name = "Support Files";
- path = "../Target Support Files/SwiftFormat";
- sourceTree = "";
- };
- 974814B39C0012DECD183BBB91B32103 /* iOS */ = {
- isa = PBXGroup;
- children = (
- CA8B94E9D3B433157168D1EECCEC11CD /* Foundation.framework */,
- 5EBC8F300895E39EA0DF6D6B2B5E6BCD /* XCTest.framework */,
- );
- name = iOS;
- sourceTree = "";
- };
- 980B854ED8686498363F21CEFA9F9480 /* NotchGradientLoadingBar */ = {
- isa = PBXGroup;
- children = (
- 4AE75973628059AB67B3FDC662361F71 /* NotchGradientLoadingBarControllerTestCase.swift */,
- );
- name = NotchGradientLoadingBar;
- path = NotchGradientLoadingBar;
- sourceTree = "";
- };
- 9BDBD95ED116334D1B2835202D8D3060 /* Pods-Example */ = {
- isa = PBXGroup;
- children = (
- 35C305D3797C284E6F5BAA1D3E6F9BF8 /* Pods-Example.modulemap */,
- 441854E35F81731E63E53DC7E4EEAD9D /* Pods-Example-acknowledgements.markdown */,
- EA21B344259B58996DB73382B1B1521F /* Pods-Example-acknowledgements.plist */,
- D6D7C498FA339E02BD53ECB8916CEA8E /* Pods-Example-dummy.m */,
- AFECBC24E09D0D25F822C27BD944AFD4 /* Pods-Example-frameworks.sh */,
- 31C1D37707DFAA5E6A164BCC07834264 /* Pods-Example-Info.plist */,
- 7825A90E082A1582EB16256B0E722B3F /* Pods-Example-umbrella.h */,
- B45138496B85A072654D1D0F8EBBEDE5 /* Pods-Example.debug.xcconfig */,
- 243410B9535472556EA4BB6DBC133A0D /* Pods-Example.release.xcconfig */,
- );
- name = "Pods-Example";
- path = "Target Support Files/Pods-Example";
- sourceTree = "";
- };
- 9C29CEA8F27F07207F8DD3745BB9E281 /* SnapshotTesting */ = {
- isa = PBXGroup;
- children = (
- BFD6639600680D489F1A72928C544F6F /* Any.swift */,
- 1CBBC4BFDFF7B467C1668BA81EE0EFAB /* AssertInlineSnapshot.swift */,
- 86FF7752DF7A138DFB23770E012AE807 /* AssertSnapshot.swift */,
- 2F7B16214A68F20137A4AEF73266686F /* Async.swift */,
- 231E8C69DC0738D9232AC6A19B06C742 /* CALayer.swift */,
- 1388E5A13C5D7C36F34352CC05F2E2B8 /* CaseIterable.swift */,
- A4E3D8D682DA992F32DFFC3C5BB5F6C6 /* CGPath.swift */,
- 8F94052031AFA32400D582F8326AFCCA /* Codable.swift */,
- 1CB6FFB8809A19166E02AA30ADA6F129 /* Data.swift */,
- 2D6F47C68158530256A4C877A272B671 /* Description.swift */,
- 266337084D6D4DDB264B72BDE3CBD702 /* Diff.swift */,
- 71D71792F9CE9BE2F2EA34DEADAFCD0E /* Diffing.swift */,
- 49843B6CCFBD52C4F39EA9555035F224 /* Internal.swift */,
- 93B2810B1B5FB3CD5EE96A56FCA48750 /* NSBezierPath.swift */,
- CBC9A0B4D6CFB06A9485278F8148AD16 /* NSImage.swift */,
- 80F8E91647A880AED7C46631E490D66B /* NSView.swift */,
- 966453F157F0E6D5DB08A2D38515749B /* NSViewController.swift */,
- FB53F2B45CB5D7D98F03EDF1C9CA79EE /* PlistEncoder.swift */,
- 98950FFC6EBB992D35E49ADEBB822AD6 /* SceneKit.swift */,
- 6C882DC171D273C8FF897DFB2FE3B7CC /* SnapshotTestCase.swift */,
- D422A690C241AF646D9271C59C8DD71C /* Snapshotting.swift */,
- AB7345B65BC2E6AEED51A68C09DDF9D3 /* SpriteKit.swift */,
- 2656F61BD2F10B00487AF6D249FFD0EA /* String.swift */,
- 88BFE21D2713C10409DB47F0F21882A6 /* String+SpecialCharacters.swift */,
- A5F1EA2D3AF4051ECDEF7A733ECD1F31 /* SwiftUIView.swift */,
- 2C3B9909B138940F75E3FE22FFADC619 /* UIBezierPath.swift */,
- A7E7896243A385457C57299AD3B48794 /* UIImage.swift */,
- 6322D93A5C7C2FF2358090E16BD82A0F /* UIView.swift */,
- 0A113998B49E270909660041C22A28B2 /* UIViewController.swift */,
- CEE3DFAC03CEBE58F8287C0FCF071BD5 /* URLRequest.swift */,
- 2EFA456CEFE923C8273B73C2B30B943E /* View.swift */,
- 6300A298D0C28699F231141E247B2D02 /* Wait.swift */,
- 0AA6FA5304879E0A8492BE211FA27D0E /* XCTAttachment.swift */,
- 30012669746AF0B9C8295EBCC374903E /* Support Files */,
- );
- name = SnapshotTesting;
- path = SnapshotTesting;
- sourceTree = "";
- };
- 9F260C9417EA57E3E5FF7C7975173CCB /* GradientLoadingBar */ = {
- isa = PBXGroup;
- children = (
- CD46DDFC661BED5E686F5FC283A0B473 /* GradientLoadingBarController.swift */,
- 0B8AD1EB4E319274E3074E4EA5010C79 /* GradientLoadingBarViewModel.swift */,
- );
- name = GradientLoadingBar;
- path = GradientLoadingBar;
- sourceTree = "";
- };
- A72B86D1FD5641B2BD861B6DDC3A77B4 /* GradientActivityIndicatorView */ = {
- isa = PBXGroup;
- children = (
- 379ADEDFCD6A4441722D8A28283E8739 /* GradientActivityIndicatorView+AnimateIsHiddenTestCase.swift */,
- D550A12BE325CF959DC999A943C79C1B /* GradientActivityIndicatorViewModel+SizeUpdateTestCase.swift */,
- F776327B63AC7738D831A067EEB9DA4C /* GradientActivityIndicatorViewModelTestCase.swift */,
- );
- name = GradientActivityIndicatorView;
- path = GradientActivityIndicatorView;
- sourceTree = "";
- };
- A8650AA5ECE59E3ADFAA59700F9F8596 /* GradientActivityIndicatorView */ = {
- isa = PBXGroup;
- children = (
- A8A1E1D46F4AE7109B3D37EFC6748941 /* GradientActivityIndicatorViewTestCase.swift */,
- );
- name = GradientActivityIndicatorView;
- path = GradientActivityIndicatorView;
- sourceTree = "";
- };
- B555B7835959996152A3D9311092041D /* GradientLoadingBar */ = {
- isa = PBXGroup;
- children = (
- AF1357DCAC8C9D630923A559CF69377F /* GradientLoadingBarControllerTestCase.swift */,
- );
- name = GradientLoadingBar;
- path = GradientLoadingBar;
- sourceTree = "";
- };
- B815371469D6FBFA912CD532BB6E046F /* Pods */ = {
- isa = PBXGroup;
- children = (
- 9C29CEA8F27F07207F8DD3745BB9E281 /* SnapshotTesting */,
- 80A139B451C921F970ED77952CB5C6C4 /* SwiftConfigurationFiles */,
- F814A96E2D8B44DF296DC92B80A7CCC4 /* SwiftFormat */,
- D034FCF67A18AA80DE1892605B59A35D /* SwiftLint */,
- );
- name = Pods;
- sourceTree = "";
- };
- CE2E825F08D3AD0FD76E6D78D7512ED0 /* Targets Support Files */ = {
- isa = PBXGroup;
- children = (
- 9BDBD95ED116334D1B2835202D8D3060 /* Pods-Example */,
- );
- name = "Targets Support Files";
- sourceTree = "";
- };
- CF1408CF629C7361332E53B88F7BD30C = {
- isa = PBXGroup;
- children = (
- 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */,
- 6083CB933269AE8EC9B95029E6B5BCD8 /* Development Pods */,
- 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */,
- B815371469D6FBFA912CD532BB6E046F /* Pods */,
- 6A8462A6589515796672F99982F010C1 /* Products */,
- CE2E825F08D3AD0FD76E6D78D7512ED0 /* Targets Support Files */,
- );
- sourceTree = "";
- };
- D034FCF67A18AA80DE1892605B59A35D /* SwiftLint */ = {
- isa = PBXGroup;
- children = (
- 06F693C7A39A0F5BF2B4B434087EF800 /* Support Files */,
- );
- name = SwiftLint;
- path = SwiftLint;
- sourceTree = "";
- };
- D0E7F41DF23FE016C427D4B22E412943 /* GradientLoadingBarView */ = {
- isa = PBXGroup;
- children = (
- 3A47B6CB232A77E910C75D6FEA1AAA4A /* GradientLoadingBarView+ViewModelTestCase.swift */,
- );
- name = GradientLoadingBarView;
- path = GradientLoadingBarView;
- sourceTree = "";
- };
- DE00CAB93DBE1D0B301AF7BDA8B5E1FD /* Support Files */ = {
- isa = PBXGroup;
- children = (
- E6197A6CB9B561CC232DFDD747127779 /* GradientLoadingBar.modulemap */,
- 1BB5FF8A88BF23FA9C9AE4246CF98584 /* GradientLoadingBar-dummy.m */,
- EE38CBAA3AA7C73AA148D79A1BC4D8B0 /* GradientLoadingBar-Info.plist */,
- D4158B7BB021CE8B5F8A2FF85BCB9287 /* GradientLoadingBar-prefix.pch */,
- 044B060397F0D69833748CBE684016B0 /* GradientLoadingBar-umbrella.h */,
- 2D37B379709695B38E68243F13211C38 /* GradientLoadingBar-Unit-Tests-frameworks.sh */,
- 1376748BA48C7A6D4D0A2618DA2B2B02 /* GradientLoadingBar-Unit-Tests-Info.plist */,
- 9ED91F61AB707C323C453A88B777351A /* GradientLoadingBar-Unit-Tests-prefix.pch */,
- CBA17F86AFC7D538904E056CA188E2B7 /* GradientLoadingBar.debug.xcconfig */,
- DB3B2BC75CC5B008724BAA201DC6388D /* GradientLoadingBar.release.xcconfig */,
- B8E489E08DC3F98DDD08A94BB85F95B3 /* GradientLoadingBar.unit-tests.debug.xcconfig */,
- 8C0C1AE8F5B4B54E80DF78EBE9113EFF /* GradientLoadingBar.unit-tests.release.xcconfig */,
- );
- name = "Support Files";
- path = "Example/Pods/Target Support Files/GradientLoadingBar";
- sourceTree = "";
- };
- E5DE3097F4EF525463312F19971621BC /* GradientLoadingBarView */ = {
- isa = PBXGroup;
- children = (
- 45BC12A96E7B8018A28C37440814D3E9 /* GradientLoadingBarView.swift */,
- 1D2F56F0A20299B6B3099D8F5A654106 /* GradientLoadingBarView+ViewModel.swift */,
- );
- name = GradientLoadingBarView;
- path = GradientLoadingBarView;
- sourceTree = "";
- };
- F814A96E2D8B44DF296DC92B80A7CCC4 /* SwiftFormat */ = {
- isa = PBXGroup;
- children = (
- 956EDA2F5D3FBE01915638662991ED47 /* Support Files */,
- );
- name = SwiftFormat;
- path = SwiftFormat;
- sourceTree = "";
- };
-/* End PBXGroup section */
-
-/* Begin PBXHeadersBuildPhase section */
- 25E2AFAEE0A07E311DEDB9A780D737E6 /* Headers */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 4D1CAF085B8A4AB40B96303C3A1BC786 /* Pods-Example-umbrella.h in Headers */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 4C0C1F80E1645A072081144913A486F1 /* Headers */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- CD72E5C540AA0BA018124E62CB359982 /* SnapshotTesting-umbrella.h in Headers */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 663515D615CDC2F7A42200039A1C3178 /* Headers */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- A7C6EAB711158AFEA36E7DF1D77A5264 /* GradientLoadingBar-umbrella.h in Headers */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXHeadersBuildPhase section */
-
-/* Begin PBXNativeTarget section */
- 0AEE99A309977BD12A049FF48AF9BA4B /* Pods-Example */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = C02ADEED1DC8743D7ADDE452933B7CA4 /* Build configuration list for PBXNativeTarget "Pods-Example" */;
- buildPhases = (
- 25E2AFAEE0A07E311DEDB9A780D737E6 /* Headers */,
- 0D7321B7AB5E2BB6B48FB115F31E3EE3 /* Sources */,
- 4B9708FC6CCCD21C03371E15235662B2 /* Frameworks */,
- FFA7B40BDF131B9B8213A2F741431A3A /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- E0D46373EEAFBBAE4EF69F55F4A14518 /* PBXTargetDependency */,
- 67215CC9BF92CA880BB529267A41980D /* PBXTargetDependency */,
- 89FA6B65C89957D4504D1B8ECE50AB68 /* PBXTargetDependency */,
- E45A6D85106708A048ABC53D317937BF /* PBXTargetDependency */,
- );
- name = "Pods-Example";
- productName = Pods_Example;
- productReference = 1F667CC0E19EAF34E5A4119E2121F585 /* Pods-Example */;
- productType = "com.apple.product-type.framework";
- };
- 1A92A7C75080512A0168578180C192A2 /* GradientLoadingBar-Unit-Tests */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 1D3F6C4419B24BF7FB3D2E922873BE3F /* Build configuration list for PBXNativeTarget "GradientLoadingBar-Unit-Tests" */;
- buildPhases = (
- 6E248337DE1BC2DD115A2CCB288005F0 /* Sources */,
- D762B6E0A26AF53CBC4026B042C32F26 /* Frameworks */,
- F47F90893E46A98504653DF7DEA110AE /* Resources */,
- 13459BDB572C6FF8C8443DB9F960625F /* [CP] Embed Pods Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 98B3F5A85E2FF67ABDFA5DC69EDC003B /* PBXTargetDependency */,
- 87592E10A5FC6C0D93E64DEE3E9E3042 /* PBXTargetDependency */,
- 1DB731E9A4F1C5F7BAA51C5C912498D5 /* PBXTargetDependency */,
- );
- name = "GradientLoadingBar-Unit-Tests";
- productName = "GradientLoadingBar-Unit-Tests";
- productReference = CC830FB4E7AD67676025629098DFCB83 /* GradientLoadingBar-Unit-Tests */;
- productType = "com.apple.product-type.bundle.unit-test";
- };
- 9407360C7A4B285137243964F1612601 /* AppHost-GradientLoadingBar-Unit-Tests */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = C578B84345EF21DCA098765B59E20BA6 /* Build configuration list for PBXNativeTarget "AppHost-GradientLoadingBar-Unit-Tests" */;
- buildPhases = (
- 0BD758FAA6F470BCD40DC7A8040373DA /* Sources */,
- BEF1F637BEDBAD78C9F541DFE7D59C33 /* Frameworks */,
- CBB75A513AB16DEE9B9A66364FDC1086 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = "AppHost-GradientLoadingBar-Unit-Tests";
- productName = "AppHost-GradientLoadingBar-Unit-Tests";
- productReference = 313CCB0006B673ED2F380FA1490BFDF1 /* AppHost-GradientLoadingBar-Unit-Tests.app */;
- productType = "com.apple.product-type.application";
- };
- AD9297F9E6CC3E50EDCFECA0A77800B7 /* GradientLoadingBar */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 7DCB3692213D8AF4CFA71A9A91042AEB /* Build configuration list for PBXNativeTarget "GradientLoadingBar" */;
- buildPhases = (
- 663515D615CDC2F7A42200039A1C3178 /* Headers */,
- 85CC367955E730FD0E114BC2A04E00F8 /* Sources */,
- 9A56089B53D133A733C876ABD2AC46C5 /* Frameworks */,
- CA903BB1063E9D706B0869AB25347C5B /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = GradientLoadingBar;
- productName = GradientLoadingBar;
- productReference = 67873E92210DD4E777C49C6E8AEDC108 /* GradientLoadingBar */;
- productType = "com.apple.product-type.framework";
- };
- ADEAE7CDD604DE4F3072E6021A314487 /* SnapshotTesting */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = D4D9657E79114CA6C13BB2F5AC6B7468 /* Build configuration list for PBXNativeTarget "SnapshotTesting" */;
- buildPhases = (
- 4C0C1F80E1645A072081144913A486F1 /* Headers */,
- 438AE4FDB0AA8A7C51F26849EA3745DA /* Sources */,
- 63E91520330D1271B764E6FCC5F7634E /* Frameworks */,
- 6334A4F0618C2FD63D9CBFB8CC894E91 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = SnapshotTesting;
- productName = SnapshotTesting;
- productReference = A037DBBCCACBFACB5C39A80B1C273043 /* SnapshotTesting */;
- productType = "com.apple.product-type.framework";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- BFDFE7DC352907FC980B868725387E98 /* Project object */ = {
- isa = PBXProject;
- attributes = {
- LastSwiftUpdateCheck = 1240;
- LastUpgradeCheck = 1240;
- TargetAttributes = {
- 1A92A7C75080512A0168578180C192A2 = {
- TestTargetID = 9407360C7A4B285137243964F1612601;
- };
- };
- };
- buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */;
- compatibilityVersion = "Xcode 13.0";
- developmentRegion = en;
- hasScannedForEncodings = 0;
- knownRegions = (
- Base,
- en,
- );
- mainGroup = CF1408CF629C7361332E53B88F7BD30C;
- productRefGroup = 6A8462A6589515796672F99982F010C1 /* Products */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- 9407360C7A4B285137243964F1612601 /* AppHost-GradientLoadingBar-Unit-Tests */,
- AD9297F9E6CC3E50EDCFECA0A77800B7 /* GradientLoadingBar */,
- 1A92A7C75080512A0168578180C192A2 /* GradientLoadingBar-Unit-Tests */,
- 0AEE99A309977BD12A049FF48AF9BA4B /* Pods-Example */,
- ADEAE7CDD604DE4F3072E6021A314487 /* SnapshotTesting */,
- B951B6FCD3E55AF969FBA9F7B476B877 /* SwiftConfigurationFiles */,
- 1CD0618C486973D5588EF20D2E8C0AEA /* SwiftFormat */,
- 52B60EC2A583F24ACBB69C113F5488B9 /* SwiftLint */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- 6334A4F0618C2FD63D9CBFB8CC894E91 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- CA903BB1063E9D706B0869AB25347C5B /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- CBB75A513AB16DEE9B9A66364FDC1086 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- A5EEE2181466D210351C54DB19F6599B /* LaunchScreen.storyboard in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- F47F90893E46A98504653DF7DEA110AE /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- FFA7B40BDF131B9B8213A2F741431A3A /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
- 13459BDB572C6FF8C8443DB9F960625F /* [CP] Embed Pods Frameworks */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/GradientLoadingBar/GradientLoadingBar-Unit-Tests-frameworks-input-files.xcfilelist",
- );
- name = "[CP] Embed Pods Frameworks";
- outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/GradientLoadingBar/GradientLoadingBar-Unit-Tests-frameworks-output-files.xcfilelist",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/GradientLoadingBar/GradientLoadingBar-Unit-Tests-frameworks.sh\"\n";
- showEnvVarsInLog = 0;
- };
-/* End PBXShellScriptBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- 0BD758FAA6F470BCD40DC7A8040373DA /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- DB8CC3E70438E372B026487E9BA8D9BE /* main.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 0D7321B7AB5E2BB6B48FB115F31E3EE3 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 16BE8F5F7A63A59965A2C318B044F25D /* Pods-Example-dummy.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 438AE4FDB0AA8A7C51F26849EA3745DA /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 869989422C880D5DFB1A1A85EDEC042C /* Any.swift in Sources */,
- 42BC8C916A56AAFE426EA7EEE767DC77 /* AssertInlineSnapshot.swift in Sources */,
- EEFDC56304A876442F4003927FDF4190 /* AssertSnapshot.swift in Sources */,
- 8736B3D201CF21FD02B97EFBD20E63C0 /* Async.swift in Sources */,
- 64F4C1D9998F48C0B7CBB8250A479F41 /* CALayer.swift in Sources */,
- 8AFE90E2648DD774687E6558850E5F55 /* CaseIterable.swift in Sources */,
- 634706EAC8DB4714CBE3CFDE13754E71 /* CGPath.swift in Sources */,
- 053939AEA809E304513064E25F3614FC /* Codable.swift in Sources */,
- 8FB1043A06A1167870A6DAA145F491DB /* Data.swift in Sources */,
- 5FB7653163F6C266EE63B15C86CBC18D /* Description.swift in Sources */,
- A29CA8B5D19DE6970823549879ED8A44 /* Diff.swift in Sources */,
- C27D044EB087ABBAA67E24499FF8E1D0 /* Diffing.swift in Sources */,
- 65264C62384A1D00D8B5101058E8583D /* Internal.swift in Sources */,
- 6486606E4D936C190469E7857F2D5B3E /* NSBezierPath.swift in Sources */,
- 26DB1CABC1D1A4209BF437D300F21D15 /* NSImage.swift in Sources */,
- C71ABFBE24266435FE24E4E58FFA8D02 /* NSView.swift in Sources */,
- 7CF172618AE48B0946EB06DE701BB06E /* NSViewController.swift in Sources */,
- 3F668C0F44DF65D9DC09F68A9377592D /* PlistEncoder.swift in Sources */,
- 667A0A1C8B12663CADD98C9FD0A6CEDD /* SceneKit.swift in Sources */,
- A0A10801121581A1C77858185365DC26 /* SnapshotTestCase.swift in Sources */,
- 50E35CD79B1FEE2398F8F2A3E4388899 /* SnapshotTesting-dummy.m in Sources */,
- FF9A967D0F07BD1A3D589A92D62BDE07 /* Snapshotting.swift in Sources */,
- 11AA9870DBA064FB6AC2D6C05EA4043D /* SpriteKit.swift in Sources */,
- 90122844335989ACD9148A54CEF7C6DB /* String.swift in Sources */,
- 38811E3E79E0C51E8267949B862A6401 /* String+SpecialCharacters.swift in Sources */,
- 453874BF1A255D67D63C20C564FD844B /* SwiftUIView.swift in Sources */,
- 950C48512418F6346F6BD099E2194218 /* UIBezierPath.swift in Sources */,
- 455D032F8818DD5D9D0F74115237C37B /* UIImage.swift in Sources */,
- 95ECF7C006872F5F5699C122BD0A1A13 /* UIView.swift in Sources */,
- 2AA1041CDC89AA663E18DC2418FB185F /* UIViewController.swift in Sources */,
- 48D234A26F50D0501FAFE2DC619D3574 /* URLRequest.swift in Sources */,
- 39005FDE959EFEF742B40EC4B93305FD /* View.swift in Sources */,
- D34C28402E44804F9A2199DDC0E5ABCC /* Wait.swift in Sources */,
- ED8A155A563C9BCDB5160B922065F48B /* XCTAttachment.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 6E248337DE1BC2DD115A2CCB288005F0 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 2478BA150A8D1ABEE55FAC74C17E59FC /* GradientActivityIndicatorView+AnimateIsHiddenTestCase.swift in Sources */,
- B2139D13F81B24AB00363B321F9B210B /* GradientActivityIndicatorViewModel+SizeUpdateTestCase.swift in Sources */,
- E78626B8E27AEBD9945748126E246738 /* GradientActivityIndicatorViewModelTestCase.swift in Sources */,
- FD08AC3299CA408DD6C7DBA603FA5FA5 /* GradientActivityIndicatorViewTestCase.swift in Sources */,
- A0F1E5E62259CA69ADE34D25FC85C824 /* GradientLoadingBarControllerTestCase.swift in Sources */,
- 6FF2B1619BBA12103B9F5183C01764FA /* GradientLoadingBarView+ViewModelTestCase.swift in Sources */,
- 694D1A1707416FB7AD3F1938ADC5D298 /* GradientLoadingBarViewModelTestCase.swift in Sources */,
- 1D870BB7F6706FCA8AE0BD472DC9B9A4 /* GradientLoadingBarViewTestCase.swift in Sources */,
- 2B7734C9C50BBAF595D64D931B9C4FE8 /* NotchGradientLoadingBarControllerTestCase.swift in Sources */,
- 90DFFC43930C9AB601074ACD760BA42F /* NotchGradientLoadingBarViewModelTestCase.swift in Sources */,
- 7008482F299AF7E8B3A7A9BFACB6FE54 /* README.md in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 85CC367955E730FD0E114BC2A04E00F8 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 15FE4395AACC6ADC7A4341096C052A4A /* Constants.swift in Sources */,
- 447BCD024E0394EB29FFE20B5E239731 /* GradientActivityIndicatorView.swift in Sources */,
- 870A02D78217710AE43C97B8A0BC389B /* GradientActivityIndicatorView+AnimateIsHidden.swift in Sources */,
- E389705E05BE2B6048952E8C880E3EE3 /* GradientActivityIndicatorViewModel.swift in Sources */,
- 4214C078AC5FEB970B06D75605D82BEB /* GradientLoadingBar-dummy.m in Sources */,
- F2DBAE1958541B2ABAB3C30EE18DEFB0 /* GradientLoadingBarController.swift in Sources */,
- 51CD64623A68EF6304826AB6958E7AE1 /* GradientLoadingBarView.swift in Sources */,
- D88240CD173FC6813C3A01C1D5A65EF8 /* GradientLoadingBarView+ViewModel.swift in Sources */,
- 6A8DF125D3A2859A195B1F69E6C97312 /* GradientLoadingBarViewModel.swift in Sources */,
- E71953EF30C685953B04DC3D9A46C21C /* NotchGradientLoadingBarController.swift in Sources */,
- 2FBAB5E75D393F0B801920CDE4B74899 /* NotchGradientLoadingBarViewModel.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
- 1DB731E9A4F1C5F7BAA51C5C912498D5 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- name = SnapshotTesting;
- target = ADEAE7CDD604DE4F3072E6021A314487 /* SnapshotTesting */;
- targetProxy = F9A9F5329967A07C9C59D64CACF82695 /* PBXContainerItemProxy */;
- };
- 67215CC9BF92CA880BB529267A41980D /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- name = SwiftConfigurationFiles;
- target = B951B6FCD3E55AF969FBA9F7B476B877 /* SwiftConfigurationFiles */;
- targetProxy = DB0A50698830C469FDB2820BD788DAAB /* PBXContainerItemProxy */;
- };
- 87592E10A5FC6C0D93E64DEE3E9E3042 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- name = GradientLoadingBar;
- target = AD9297F9E6CC3E50EDCFECA0A77800B7 /* GradientLoadingBar */;
- targetProxy = 4C710C00C1B5C34151BAE58AB7143354 /* PBXContainerItemProxy */;
- };
- 89FA6B65C89957D4504D1B8ECE50AB68 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- name = SwiftFormat;
- target = 1CD0618C486973D5588EF20D2E8C0AEA /* SwiftFormat */;
- targetProxy = 9B42ED775EFE5BBEDD6E6F3E60D310A5 /* PBXContainerItemProxy */;
- };
- 98B3F5A85E2FF67ABDFA5DC69EDC003B /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- name = "AppHost-GradientLoadingBar-Unit-Tests";
- target = 9407360C7A4B285137243964F1612601 /* AppHost-GradientLoadingBar-Unit-Tests */;
- targetProxy = F08090CE87BB8E67E831F748574311A9 /* PBXContainerItemProxy */;
- };
- E0D46373EEAFBBAE4EF69F55F4A14518 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- name = GradientLoadingBar;
- target = AD9297F9E6CC3E50EDCFECA0A77800B7 /* GradientLoadingBar */;
- targetProxy = 36AA100304E6631F98B0897A7B2B3EED /* PBXContainerItemProxy */;
- };
- E45A6D85106708A048ABC53D317937BF /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- name = SwiftLint;
- target = 52B60EC2A583F24ACBB69C113F5488B9 /* SwiftLint */;
- targetProxy = B51AC342985001CF5C57BC1B21EDA84A /* PBXContainerItemProxy */;
- };
-/* End PBXTargetDependency section */
-
-/* Begin XCBuildConfiguration section */
- 00AAD58F08A6CFDF9987F8B7D334AD29 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = CBA17F86AFC7D538904E056CA188E2B7 /* GradientLoadingBar.debug.xcconfig */;
- buildSettings = {
- CLANG_ENABLE_OBJC_WEAK = NO;
- "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
- CURRENT_PROJECT_VERSION = 1;
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- GCC_PREFIX_HEADER = "Target Support Files/GradientLoadingBar/GradientLoadingBar-prefix.pch";
- INFOPLIST_FILE = "Target Support Files/GradientLoadingBar/GradientLoadingBar-Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 13.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@loader_path/Frameworks",
- );
- MODULEMAP_FILE = "Target Support Files/GradientLoadingBar/GradientLoadingBar.modulemap";
- PRODUCT_MODULE_NAME = GradientLoadingBar;
- PRODUCT_NAME = GradientLoadingBar;
- SDKROOT = iphoneos;
- SKIP_INSTALL = YES;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
- SWIFT_VERSION = 5.5;
- TARGETED_DEVICE_FAMILY = "1,2";
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Debug;
- };
- 153CA3E82B38ED7082D167ECAF573508 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
- CLANG_ENABLE_OBJC_WEAK = NO;
- CODE_SIGN_IDENTITY = "iPhone Developer";
- CURRENT_PROJECT_VERSION = 1;
- INFOPLIST_FILE = "AppHost-GradientLoadingBar-Unit-Tests/AppHost-GradientLoadingBar-Unit-Tests-Info.plist";
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
- PRODUCT_NAME = "AppHost-GradientLoadingBar-Unit-Tests";
- SDKROOT = iphoneos;
- TARGETED_DEVICE_FAMILY = "1,2";
- };
- name = Debug;
- };
- 237957FDBC9D393DA609D7ABE36B4BBF /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
- CLANG_ENABLE_OBJC_WEAK = NO;
- CODE_SIGN_IDENTITY = "iPhone Developer";
- CURRENT_PROJECT_VERSION = 1;
- INFOPLIST_FILE = "AppHost-GradientLoadingBar-Unit-Tests/AppHost-GradientLoadingBar-Unit-Tests-Info.plist";
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
- PRODUCT_NAME = "AppHost-GradientLoadingBar-Unit-Tests";
- SDKROOT = iphoneos;
- TARGETED_DEVICE_FAMILY = "1,2";
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
- 2B2DA8B0D31ED0589751719B51DA4389 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = FB343E4C08230DD205DFE579BBED6943 /* SnapshotTesting.debug.xcconfig */;
- buildSettings = {
- CLANG_ENABLE_OBJC_WEAK = NO;
- "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
- CURRENT_PROJECT_VERSION = 1;
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- GCC_PREFIX_HEADER = "Target Support Files/SnapshotTesting/SnapshotTesting-prefix.pch";
- INFOPLIST_FILE = "Target Support Files/SnapshotTesting/SnapshotTesting-Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@loader_path/Frameworks",
- );
- MODULEMAP_FILE = "Target Support Files/SnapshotTesting/SnapshotTesting.modulemap";
- PRODUCT_MODULE_NAME = SnapshotTesting;
- PRODUCT_NAME = SnapshotTesting;
- SDKROOT = iphoneos;
- SKIP_INSTALL = YES;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
- SWIFT_VERSION = 5.2;
- TARGETED_DEVICE_FAMILY = "1,2";
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Debug;
- };
- 36709DC94726557E30ADF7770D0891A3 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = DB3B2BC75CC5B008724BAA201DC6388D /* GradientLoadingBar.release.xcconfig */;
- buildSettings = {
- CLANG_ENABLE_OBJC_WEAK = NO;
- "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
- CURRENT_PROJECT_VERSION = 1;
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- GCC_PREFIX_HEADER = "Target Support Files/GradientLoadingBar/GradientLoadingBar-prefix.pch";
- INFOPLIST_FILE = "Target Support Files/GradientLoadingBar/GradientLoadingBar-Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 13.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@loader_path/Frameworks",
- );
- MODULEMAP_FILE = "Target Support Files/GradientLoadingBar/GradientLoadingBar.modulemap";
- PRODUCT_MODULE_NAME = GradientLoadingBar;
- PRODUCT_NAME = GradientLoadingBar;
- SDKROOT = iphoneos;
- SKIP_INSTALL = YES;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
- SWIFT_VERSION = 5.5;
- TARGETED_DEVICE_FAMILY = "1,2";
- VALIDATE_PRODUCT = YES;
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Release;
- };
- 4062373683B4E7F5C7166110E2F5B2A9 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = C8561314A3DA7D23140D2877058162B3 /* SwiftConfigurationFiles.debug.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- SDKROOT = iphoneos;
- TARGETED_DEVICE_FAMILY = "1,2";
- };
- name = Debug;
- };
- 68AE94C345EE61ADF6C53BC0C5581E8F /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = B45138496B85A072654D1D0F8EBBEDE5 /* Pods-Example.debug.xcconfig */;
- buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
- CLANG_ENABLE_OBJC_WEAK = NO;
- "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
- CURRENT_PROJECT_VERSION = 1;
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- INFOPLIST_FILE = "Target Support Files/Pods-Example/Pods-Example-Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@loader_path/Frameworks",
- );
- MACH_O_TYPE = staticlib;
- MODULEMAP_FILE = "Target Support Files/Pods-Example/Pods-Example.modulemap";
- OTHER_LDFLAGS = "";
- OTHER_LIBTOOLFLAGS = "";
- PODS_ROOT = "$(SRCROOT)";
- PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
- PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
- SDKROOT = iphoneos;
- SKIP_INSTALL = YES;
- TARGETED_DEVICE_FAMILY = "1,2";
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Debug;
- };
- 8DE5143C03248BB6CD542DE3963D6F3A /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_ENABLE_OBJC_WEAK = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = dwarf;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_TESTABILITY = YES;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "POD_CONFIGURATION_DEBUG=1",
- "DEBUG=1",
- "$(inherited)",
- );
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 13.0;
- LD_RUNPATH_SEARCH_PATHS = "$(FRAMEWORK_SEARCH_PATHS)";
- MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
- MTL_FAST_MATH = YES;
- ONLY_ACTIVE_ARCH = YES;
- PRODUCT_NAME = "$(TARGET_NAME)";
- STRIP_INSTALLED_PRODUCT = NO;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- SWIFT_VERSION = 5.0;
- SYMROOT = "${SRCROOT}/../build";
- };
- name = Debug;
- };
- 8DEF60E8A61723230ABCDDDD8B05F224 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = CB525A4BD0739D1F27CFE5BF030133DC /* SwiftFormat.release.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- SDKROOT = iphoneos;
- TARGETED_DEVICE_FAMILY = "1,2";
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
- 9E406C6AAF85E580207CD97B0044DEAB /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_ENABLE_OBJC_WEAK = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_C_LANGUAGE_STANDARD = gnu11;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "POD_CONFIGURATION_RELEASE=1",
- "$(inherited)",
- );
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 13.0;
- MTL_ENABLE_DEBUG_INFO = NO;
- MTL_FAST_MATH = YES;
- PRODUCT_NAME = "$(TARGET_NAME)";
- STRIP_INSTALLED_PRODUCT = NO;
- SWIFT_COMPILATION_MODE = wholemodule;
- SWIFT_OPTIMIZATION_LEVEL = "-O";
- SWIFT_VERSION = 5.0;
- SYMROOT = "${SRCROOT}/../build";
- };
- name = Release;
- };
- A98D3D256314625B9B468A99787910F4 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = B8E489E08DC3F98DDD08A94BB85F95B3 /* GradientLoadingBar.unit-tests.debug.xcconfig */;
- buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
- BUNDLE_LOADER = "$(TEST_HOST)";
- CLANG_ENABLE_OBJC_WEAK = NO;
- CODE_SIGNING_ALLOWED = YES;
- CODE_SIGNING_REQUIRED = YES;
- CODE_SIGN_IDENTITY = "iPhone Developer";
- "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
- GCC_PREFIX_HEADER = "Target Support Files/GradientLoadingBar/GradientLoadingBar-Unit-Tests-prefix.pch";
- INFOPLIST_FILE = "Target Support Files/GradientLoadingBar/GradientLoadingBar-Unit-Tests-Info.plist";
- PRODUCT_NAME = "GradientLoadingBar-Unit-Tests";
- SDKROOT = iphoneos;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
- SWIFT_VERSION = 5.5;
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AppHost-GradientLoadingBar-Unit-Tests.app/AppHost-GradientLoadingBar-Unit-Tests";
- };
- name = Debug;
- };
- AD81E62ACCB0B7A923FC8AA288F9921E /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 301D196AEF80B82DDC3AA964412AFF48 /* SwiftLint.release.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- SDKROOT = iphoneos;
- TARGETED_DEVICE_FAMILY = "1,2";
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
- AEB44DAC8D4C8381ADAD28227CDA1D78 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 00160DB7CE7B9129CA2FC53486F1DC31 /* SnapshotTesting.release.xcconfig */;
- buildSettings = {
- CLANG_ENABLE_OBJC_WEAK = NO;
- "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
- CURRENT_PROJECT_VERSION = 1;
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- GCC_PREFIX_HEADER = "Target Support Files/SnapshotTesting/SnapshotTesting-prefix.pch";
- INFOPLIST_FILE = "Target Support Files/SnapshotTesting/SnapshotTesting-Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@loader_path/Frameworks",
- );
- MODULEMAP_FILE = "Target Support Files/SnapshotTesting/SnapshotTesting.modulemap";
- PRODUCT_MODULE_NAME = SnapshotTesting;
- PRODUCT_NAME = SnapshotTesting;
- SDKROOT = iphoneos;
- SKIP_INSTALL = YES;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
- SWIFT_VERSION = 5.2;
- TARGETED_DEVICE_FAMILY = "1,2";
- VALIDATE_PRODUCT = YES;
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Release;
- };
- B4D735C278D065C9DB708F250D0B915D /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 83DD74C4A13D0725CA40F2810A2C3FA0 /* SwiftFormat.debug.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- SDKROOT = iphoneos;
- TARGETED_DEVICE_FAMILY = "1,2";
- };
- name = Debug;
- };
- D2E2A385931B22FAADBBF66D4C5E591D /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = DF87137F9667F0C25AA55E77B4977D50 /* SwiftConfigurationFiles.release.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- SDKROOT = iphoneos;
- TARGETED_DEVICE_FAMILY = "1,2";
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
- D393D3DAB9288449DCE28E29E59F54D2 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 8C0C1AE8F5B4B54E80DF78EBE9113EFF /* GradientLoadingBar.unit-tests.release.xcconfig */;
- buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
- BUNDLE_LOADER = "$(TEST_HOST)";
- CLANG_ENABLE_OBJC_WEAK = NO;
- CODE_SIGNING_ALLOWED = YES;
- CODE_SIGNING_REQUIRED = YES;
- CODE_SIGN_IDENTITY = "iPhone Developer";
- "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
- GCC_PREFIX_HEADER = "Target Support Files/GradientLoadingBar/GradientLoadingBar-Unit-Tests-prefix.pch";
- INFOPLIST_FILE = "Target Support Files/GradientLoadingBar/GradientLoadingBar-Unit-Tests-Info.plist";
- PRODUCT_NAME = "GradientLoadingBar-Unit-Tests";
- SDKROOT = iphoneos;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
- SWIFT_VERSION = 5.5;
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AppHost-GradientLoadingBar-Unit-Tests.app/AppHost-GradientLoadingBar-Unit-Tests";
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
- EADD1F50ABC8096A0D6CB18822BB4EE4 /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 9FBD0E14174DBAA61835B53F4BE0A1C6 /* SwiftLint.debug.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- SDKROOT = iphoneos;
- TARGETED_DEVICE_FAMILY = "1,2";
- };
- name = Debug;
- };
- EFAB7B60C35CB9C7AE96F1D6CD5FCDCE /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 243410B9535472556EA4BB6DBC133A0D /* Pods-Example.release.xcconfig */;
- buildSettings = {
- ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
- CLANG_ENABLE_OBJC_WEAK = NO;
- "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
- CURRENT_PROJECT_VERSION = 1;
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- INFOPLIST_FILE = "Target Support Files/Pods-Example/Pods-Example-Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@loader_path/Frameworks",
- );
- MACH_O_TYPE = staticlib;
- MODULEMAP_FILE = "Target Support Files/Pods-Example/Pods-Example.modulemap";
- OTHER_LDFLAGS = "";
- OTHER_LIBTOOLFLAGS = "";
- PODS_ROOT = "$(SRCROOT)";
- PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
- PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
- SDKROOT = iphoneos;
- SKIP_INSTALL = YES;
- TARGETED_DEVICE_FAMILY = "1,2";
- VALIDATE_PRODUCT = YES;
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- 1D3F6C4419B24BF7FB3D2E922873BE3F /* Build configuration list for PBXNativeTarget "GradientLoadingBar-Unit-Tests" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- A98D3D256314625B9B468A99787910F4 /* Debug */,
- D393D3DAB9288449DCE28E29E59F54D2 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 8DE5143C03248BB6CD542DE3963D6F3A /* Debug */,
- 9E406C6AAF85E580207CD97B0044DEAB /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 6B2B7DF197DF6A7CA487150557230A41 /* Build configuration list for PBXAggregateTarget "SwiftFormat" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- B4D735C278D065C9DB708F250D0B915D /* Debug */,
- 8DEF60E8A61723230ABCDDDD8B05F224 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 7DCB3692213D8AF4CFA71A9A91042AEB /* Build configuration list for PBXNativeTarget "GradientLoadingBar" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 00AAD58F08A6CFDF9987F8B7D334AD29 /* Debug */,
- 36709DC94726557E30ADF7770D0891A3 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- AE7B4FB01588B9E6DF09CB79FC7CE7BD /* Build configuration list for PBXAggregateTarget "SwiftLint" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- EADD1F50ABC8096A0D6CB18822BB4EE4 /* Debug */,
- AD81E62ACCB0B7A923FC8AA288F9921E /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- C02ADEED1DC8743D7ADDE452933B7CA4 /* Build configuration list for PBXNativeTarget "Pods-Example" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 68AE94C345EE61ADF6C53BC0C5581E8F /* Debug */,
- EFAB7B60C35CB9C7AE96F1D6CD5FCDCE /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- C578B84345EF21DCA098765B59E20BA6 /* Build configuration list for PBXNativeTarget "AppHost-GradientLoadingBar-Unit-Tests" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 153CA3E82B38ED7082D167ECAF573508 /* Debug */,
- 237957FDBC9D393DA609D7ABE36B4BBF /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- C94370DDBAF2E85B239A19BD8F0908C6 /* Build configuration list for PBXAggregateTarget "SwiftConfigurationFiles" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 4062373683B4E7F5C7166110E2F5B2A9 /* Debug */,
- D2E2A385931B22FAADBBF66D4C5E591D /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- D4D9657E79114CA6C13BB2F5AC6B7468 /* Build configuration list for PBXNativeTarget "SnapshotTesting" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 2B2DA8B0D31ED0589751719B51DA4389 /* Debug */,
- AEB44DAC8D4C8381ADAD28227CDA1D78 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
- };
- rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */;
-}
diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/GradientLoadingBar-Unit-Tests.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/GradientLoadingBar-Unit-Tests.xcscheme
deleted file mode 100644
index b275cd0..0000000
--- a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/GradientLoadingBar-Unit-Tests.xcscheme
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/GradientLoadingBar.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/GradientLoadingBar.xcscheme
deleted file mode 100644
index 5d01e55..0000000
--- a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/GradientLoadingBar.xcscheme
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Example/Pods/SnapshotTesting/LICENSE b/Example/Pods/SnapshotTesting/LICENSE
deleted file mode 100644
index cb545c0..0000000
--- a/Example/Pods/SnapshotTesting/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2019 Point-Free, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-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.
diff --git a/Example/Pods/SnapshotTesting/README.md b/Example/Pods/SnapshotTesting/README.md
deleted file mode 100644
index 6382483..0000000
--- a/Example/Pods/SnapshotTesting/README.md
+++ /dev/null
@@ -1,244 +0,0 @@
-# 📸 SnapshotTesting
-
-[](https://swift.org/download/)
-[](https://actions-badge.atrox.dev/pointfreeco/swift-snapshot-testing/goto)
-[](https://twitter.com/pointfreeco)
-
-Delightful Swift snapshot testing.
-
-
-
-## Usage
-
-Once [installed](#installation), _no additional configuration is required_. You can import the `SnapshotTesting` module and call the `assertSnapshot` function.
-
-``` swift
-import SnapshotTesting
-import XCTest
-
-class MyViewControllerTests: XCTestCase {
- func testMyViewController() {
- let vc = MyViewController()
-
- assertSnapshot(matching: vc, as: .image)
- }
-}
-```
-
-When an assertion first runs, a snapshot is automatically recorded to disk and the test will fail, printing out the file path of any newly-recorded reference.
-
-> 🛑 failed - No reference was found on disk. Automatically recorded snapshot: …
->
-> open "…/MyAppTests/\_\_Snapshots\_\_/MyViewControllerTests/testMyViewController.png"
->
-> Re-run "testMyViewController" to test against the newly-recorded snapshot.
-
-Repeat test runs will load this reference and compare it with the runtime value. If they don't match, the test will fail and describe the difference. Failures can be inspected from Xcode's Report Navigator or by inspecting the file URLs of the failure.
-
-You can record a new reference by setting the `record` parameter to `true` on the assertion or setting `isRecording` globally.
-
-``` swift
-assertSnapshot(matching: vc, as: .image, record: true)
-
-// or globally
-
-isRecording = true
-assertSnapshot(matching: vc, as: .image)
-```
-
-## Snapshot Anything
-
-While most snapshot testing libraries in the Swift community are limited to `UIImage`s of `UIView`s, SnapshotTesting can work with _any_ format of _any_ value on _any_ Swift platform!
-
-The `assertSnapshot` function accepts a value and any snapshot strategy that value supports. This means that a [view](Documentation/Available-Snapshot-Strategies.md#uiview) or [view controller](Documentation/Available-Snapshot-Strategies.md#uiviewcontroller) can be tested against an image representation _and_ against a textual representation of its properties and subview hierarchy.
-
-``` swift
-assertSnapshot(matching: vc, as: .image)
-assertSnapshot(matching: vc, as: .recursiveDescription)
-```
-
-View testing is [highly configurable](Documentation/Available-Snapshot-Strategies.md#uiviewcontroller). You can override trait collections (for specific size classes and content size categories) and generate device-agnostic snapshots, all from a single simulator.
-
-``` swift
-assertSnapshot(matching: vc, as: .image(on: .iPhoneSe))
-assertSnapshot(matching: vc, as: .recursiveDescription(on: .iPhoneSe))
-
-assertSnapshot(matching: vc, as: .image(on: .iPhoneSe(.landscape)))
-assertSnapshot(matching: vc, as: .recursiveDescription(on: .iPhoneSe(.landscape)))
-
-assertSnapshot(matching: vc, as: .image(on: .iPhoneX))
-assertSnapshot(matching: vc, as: .recursiveDescription(on: .iPhoneX))
-
-assertSnapshot(matching: vc, as: .image(on: .iPadMini(.portrait)))
-assertSnapshot(matching: vc, as: .recursiveDescription(on: .iPadMini(.portrait)))
-```
-
-> ⚠️ Warning: Snapshots must be compared using a simulator with the same OS, device gamut, and scale as the simulator that originally took the reference to avoid discrepancies between images.
-
-Better yet, SnapshotTesting isn't limited to views and view controllers! There are [a number of available snapshot strategies](Documentation/Available-Snapshot-Strategies.md) to choose from.
-
-For example, you can snapshot test URL requests (_e.g._, those that your API client prepares).
-
-``` swift
-assertSnapshot(matching: urlRequest, as: .raw)
-// POST http://localhost:8080/account
-// Cookie: pf_session={"userId":"1"}
-//
-// email=blob%40pointfree.co&name=Blob
-```
-
-And you can snapshot test `Encodable` values against their JSON _and_ property list representations.
-
-``` swift
-assertSnapshot(matching: user, as: .json)
-// {
-// "bio" : "Blobbed around the world.",
-// "id" : 1,
-// "name" : "Blobby"
-// }
-
-assertSnapshot(matching: user, as: .plist)
-//
-//
-//
-//
-// bio
-// Blobbed around the world.
-// id
-// 1
-// name
-// Blobby
-//
-//
-```
-
-In fact, _[any](Documentation/Available-Snapshot-Strategies.md#any)_ value can be snapshot-tested by default using its [mirror](https://developer.apple.com/documentation/swift/mirror)!
-
-``` swift
-assertSnapshot(matching: user, as: .dump)
-// ▿ User
-// - bio: "Blobbed around the world."
-// - id: 1
-// - name: "Blobby"
-```
-
-If your data can be represented as an image, text, or data, you can write a snapshot test for it! Check out [all of the snapshot strategies](Documentation/Available-Snapshot-Strategies.md) that ship with SnapshotTesting and [learn how to define your own custom strategies](Documentation/Defining-Custom-Snapshot-Strategies.md).
-
-## Installation
-
-### Xcode 11
-
-> ⚠️ Warning: By default, Xcode will try to add the SnapshotTesting package to your project's main application/framework target. Please ensure that SnapshotTesting is added to a _test_ target instead, as documented in the last step, below.
-
- 1. From the **File** menu, navigate through **Swift Packages** and select **Add Package Dependency…**.
- 2. Enter package repository URL: `https://github.com/pointfreeco/swift-snapshot-testing.git`
- 3. Confirm the version and let Xcode resolve the package
- 4. On the final dialog, update SnapshotTesting's **Add to Target** column to a test target that will contain snapshot tests (if you have more than one test target, you can later add SnapshotTesting to them by manually linking the library in its build phase)
-
-### Swift Package Manager
-
-If you want to use SnapshotTesting in any other project that uses [SwiftPM](https://swift.org/package-manager/), add the package as a dependency in `Package.swift`:
-
-```swift
-dependencies: [
- .package(name: "SnapshotTesting", url: "https://github.com/pointfreeco/swift-snapshot-testing.git", from: "1.8.1"),
-]
-```
-
-Next, add `SnapshotTesting` as a dependency of your test target:
-
-```swift
-targets: [
- .target(name: "MyApp", dependencies: [], path: "Sources"),
- .testTarget(name: "MyAppTests", dependencies: ["MyApp", "SnapshotTesting"])
-]
-```
-
-### Carthage
-
-If you use [Carthage](https://github.com/Carthage/Carthage), you can add the following dependency to your `Cartfile`:
-
-``` ruby
-github "pointfreeco/swift-snapshot-testing" ~> 1.8.0
-```
-
-> ⚠️ Warning: Carthage instructs you to drag frameworks into your Xcode project. Xcode may automatically attempt to link these frameworks to your app target. `SnapshotTesting.framework` is only compatible with test targets, so when you first add it to your project:
->
-> 1. Remove `SnapshotTesting.framework` from any non-test target it may have been added to.
-> 2. Add `SnapshotTesting.framework` to any applicable test targets.
-> 3. Add a **New Copy Build Phase** to any applicable test targets with **Destination** set to "Frameworks", and add `SnapshotTesting.framework` as an item to this phase.
-> 4. Do _not_ add `SnapshotTesting.framework` to the "Input Files" or "Output Files" of your app target's Carthage `copy-frameworks` **Run Script Phase**.
->
-> See Carthage's "[Adding frameworks to unit tests or a framework](https://github.com/Carthage/Carthage#adding-frameworks-to-unit-tests-or-a-framework)" documentation for more.
-
-### CocoaPods
-
-If your project uses [CocoaPods](https://cocoapods.org), add the pod to any applicable test targets in your `Podfile`:
-
-```ruby
-target 'MyAppTests' do
- pod 'SnapshotTesting', '~> 1.8.1'
-end
-```
-
-## Features
-
- - [**Dozens of snapshot strategies**](Documentation/Available-Snapshot-Strategies.md). Snapshot testing isn't just for `UIView`s and `CALayer`s. Write snapshots against _any_ value.
- - [**Write your own snapshot strategies**](Documentation/Defining-Custom-Snapshot-Strategies.md). If you can convert it to an image, string, data, or your own diffable format, you can snapshot test it! Build your own snapshot strategies from scratch or transform existing ones.
- - **No configuration required.** Don't fuss with scheme settings and environment variables. Snapshots are automatically saved alongside your tests.
- - **More hands-off.** New snapshots are recorded whether `isRecording` mode is `true` or not.
- - **Subclass-free.** Assert from any XCTest case or Quick spec.
- - **Device-agnostic snapshots.** Render views and view controllers for specific devices and trait collections from a single simulator.
- - **First-class Xcode support.** Image differences are captured as XCTest attachments. Text differences are rendered in inline error messages.
- - **Supports any platform that supports Swift.** Write snapshot tests for iOS, Linux, macOS, and tvOS.
- - **SceneKit, SpriteKit, and WebKit support.** Most snapshot testing libraries don't support these view subclasses.
- - **`Codable` support**. Snapshot encodable data structures into their [JSON](Documentation/Available-Snapshot-Strategies.md#json) and [property list](Documentation/Available-Snapshot-Strategies.md#plist) representations.
- - **Custom diff tool integration**.
-
-## Plug-ins
-
- - [swift-snapshot-testing-nimble](https://github.com/Killectro/swift-snapshot-testing-nimble) adds [Nimble](https://github.com/Quick/Nimble) matchers for SnapshotTesting.
-
- - [swift-html](https://github.com/pointfreeco/swift-html) is a Swift DSL for type-safe, extensible, and transformable HTML documents and includes an `HtmlSnapshotTesting` module to snapshot test its HTML documents.
-
- - [GRDBSnapshotTesting](https://github.com/SebastianOsinski/GRDBSnapshotTesting) adds snapshot strategy for testing SQLite database migrations made with [GRDB](https://github.com/groue/GRDB.swift).
-
- - [AccessibilitySnapshot](https://github.com/cashapp/AccessibilitySnapshot) adds easy regression testing for iOS accessibility.
-
- - [AccessibilitySnapshotColorBlindness](https://github.com/Sherlouk/AccessibilitySnapshotColorBlindness) adds snapshot strategies for color blindness simulation on iOS views, view controllers and images.
-
-Have you written your own SnapshotTesting plug-in? [Add it here](https://github.com/pointfreeco/swift-snapshot-testing/edit/master/README.md) and submit a pull request!
-
-## Related Tools
-
- - [`iOSSnapshotTestCase`](https://github.com/uber/ios-snapshot-test-case/) helped introduce screen shot testing to a broad audience in the iOS community. Experience with it inspired the creation of this library.
-
- - [Jest](https://jestjs.io) brought generalized snapshot testing to the JavaScript community with a polished user experience. Several features of this library (diffing, automatically capturing new snapshots) were directly influenced.
-
-## Learn More
-
-SnapshotTesting was designed with [witness-oriented programming](https://www.pointfree.co/episodes/ep39-witness-oriented-library-design).
-
-This concept (and more) are explored thoroughly in a series of episodes on [Point-Free](https://www.pointfree.co), a video series exploring functional programming and Swift hosted by [Brandon Williams](https://twitter.com/mbrandonw) and [Stephen Celis](https://twitter.com/stephencelis).
-
-Witness-oriented programming and the design of this library was explored in the following [Point-Free](https://www.pointfree.co) episodes:
-
- - [Episode 33](https://www.pointfree.co/episodes/ep33-protocol-witnesses-part-1): Protocol Witnesses: Part 1
- - [Episode 34](https://www.pointfree.co/episodes/ep34-protocol-witnesses-part-1): Protocol Witnesses: Part 2
- - [Episode 35](https://www.pointfree.co/episodes/ep35-advanced-protocol-witnesses-part-1): Advanced Protocol Witnesses: Part 1
- - [Episode 36](https://www.pointfree.co/episodes/ep36-advanced-protocol-witnesses-part-2): Advanced Protocol Witnesses: Part 2
- - [Episode 37](https://www.pointfree.co/episodes/ep37-protocol-oriented-library-design-part-1): Protocol-Oriented Library Design: Part 1
- - [Episode 38](https://www.pointfree.co/episodes/ep38-protocol-oriented-library-design-part-2): Protocol-Oriented Library Design: Part 2
- - [Episode 39](https://www.pointfree.co/episodes/ep39-witness-oriented-library-design): Witness-Oriented Library Design
- - [Episode 40](https://www.pointfree.co/episodes/ep40-async-functional-refactoring): Async Functional Refactoring
- - [Episode 41](https://www.pointfree.co/episodes/ep41-a-tour-of-snapshot-testing): A Tour of Snapshot Testing 🆓
-
-
-
-
-
-## License
-
-This library is released under the MIT license. See [LICENSE](LICENSE) for details.
diff --git a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/AssertInlineSnapshot.swift b/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/AssertInlineSnapshot.swift
deleted file mode 100644
index 434cbfd..0000000
--- a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/AssertInlineSnapshot.swift
+++ /dev/null
@@ -1,326 +0,0 @@
-import XCTest
-
-/// Asserts that a given value matches a string literal.
-///
-/// Note: Empty `reference` will be replaced automatically with generated output.
-///
-/// Usage:
-/// ```
-/// _assertInlineSnapshot(matching: value, as: .dump, with: """
-/// """)
-/// ```
-///
-/// - Parameters:
-/// - value: A value to compare against a reference.
-/// - snapshotting: A strategy for serializing, deserializing, and comparing values.
-/// - recording: Whether or not to record a new reference.
-/// - timeout: The amount of time a snapshot must be generated in.
-/// - reference: The expected output of snapshotting.
-/// - file: The file in which failure occurred. Defaults to the file name of the test case in which this function was called.
-/// - line: The line number on which failure occurred. Defaults to the line number on which this function was called.
-public func _assertInlineSnapshot(
- matching value: @autoclosure () throws -> Value,
- as snapshotting: Snapshotting,
- record recording: Bool = false,
- timeout: TimeInterval = 5,
- with reference: String,
- file: StaticString = #file,
- testName: String = #function,
- line: UInt = #line
- ) {
-
- let failure = _verifyInlineSnapshot(
- matching: try value(),
- as: snapshotting,
- record: recording,
- timeout: timeout,
- with: reference,
- file: file,
- testName: testName,
- line: line
- )
- guard let message = failure else { return }
- XCTFail(message, file: file, line: line)
-}
-
-/// Verifies that a given value matches a string literal.
-///
-/// Third party snapshot assert helpers can be built on top of this function. Simply invoke `verifyInlineSnapshot` with your own arguments, and then invoke `XCTFail` with the string returned if it is non-`nil`.
-///
-/// - Parameters:
-/// - value: A value to compare against a reference.
-/// - snapshotting: A strategy for serializing, deserializing, and comparing values.
-/// - recording: Whether or not to record a new reference.
-/// - timeout: The amount of time a snapshot must be generated in.
-/// - reference: The expected output of snapshotting.
-/// - file: The file in which failure occurred. Defaults to the file name of the test case in which this function was called.
-/// - testName: The name of the test in which failure occurred. Defaults to the function name of the test case in which this function was called.
-/// - line: The line number on which failure occurred. Defaults to the line number on which this function was called.
-/// - Returns: A failure message or, if the value matches, nil.
-public func _verifyInlineSnapshot(
- matching value: @autoclosure () throws -> Value,
- as snapshotting: Snapshotting,
- record recording: Bool = false,
- timeout: TimeInterval = 5,
- with reference: String,
- file: StaticString = #file,
- testName: String = #function,
- line: UInt = #line
- )
- -> String? {
-
- let recording = recording || isRecording
-
- do {
- let tookSnapshot = XCTestExpectation(description: "Took snapshot")
- var optionalDiffable: String?
- snapshotting.snapshot(try value()).run { b in
- optionalDiffable = b
- tookSnapshot.fulfill()
- }
- let result = XCTWaiter.wait(for: [tookSnapshot], timeout: timeout)
- switch result {
- case .completed:
- break
- case .timedOut:
- return """
- Exceeded timeout of \(timeout) seconds waiting for snapshot.
-
- This can happen when an asynchronously rendered view (like a web view) has not loaded. \
- Ensure that every subview of the view hierarchy has loaded to avoid timeouts, or, if a \
- timeout is unavoidable, consider setting the "timeout" parameter of "assertSnapshot" to \
- a higher value.
- """
- case .incorrectOrder, .invertedFulfillment, .interrupted:
- return "Couldn't snapshot value"
- @unknown default:
- return "Couldn't snapshot value"
- }
-
- let trimmingChars = CharacterSet.whitespacesAndNewlines.union(CharacterSet(charactersIn: "\u{FEFF}"))
- guard let diffable = optionalDiffable?.trimmingCharacters(in: trimmingChars) else {
- return "Couldn't snapshot value"
- }
-
- let trimmedReference = reference.trimmingCharacters(in: .whitespacesAndNewlines)
-
- // Always perform diff, and return early on success!
- guard let (failure, attachments) = snapshotting.diffing.diff(trimmedReference, diffable) else {
- return nil
- }
-
- // If that diff failed, we either record or fail.
- if recording || trimmedReference.isEmpty {
- let fileName = "\(file)"
- let sourceCodeFilePath = URL(fileURLWithPath: fileName, isDirectory: false)
- let sourceCode = try String(contentsOf: sourceCodeFilePath)
- var newRecordings = recordings
-
- let modifiedSource = try writeInlineSnapshot(
- &newRecordings,
- Context(
- sourceCode: sourceCode,
- diffable: diffable,
- fileName: fileName,
- lineIndex: Int(line)
- )
- ).sourceCode
-
- try modifiedSource
- .data(using: String.Encoding.utf8)?
- .write(to: sourceCodeFilePath)
-
- if newRecordings != recordings {
- recordings = newRecordings
- /// If no other recording has been made, then fail!
- return """
- No reference was found inline. Automatically recorded snapshot.
-
- Re-run "\(sanitizePathComponent(testName))" to test against the newly-recorded snapshot.
- """
- } else {
- /// There is already an failure in this file,
- /// and we don't want to write to the wrong place.
- return nil
- }
- }
-
- /// Did not successfully record, so we will fail.
- if !attachments.isEmpty {
- #if !os(Linux)
- if ProcessInfo.processInfo.environment.keys.contains("__XCODE_BUILT_PRODUCTS_DIR_PATHS") {
- XCTContext.runActivity(named: "Attached Failure Diff") { activity in
- attachments.forEach {
- activity.add($0)
- }
- }
- }
- #endif
- }
-
- return """
- Snapshot does not match reference.
-
- \(failure.trimmingCharacters(in: .whitespacesAndNewlines))
- """
-
- } catch {
- return error.localizedDescription
- }
-}
-
-internal typealias Recordings = [String: [FileRecording]]
-
-internal struct Context {
- let sourceCode: String
- let diffable: String
- let fileName: String
- // First line of a file is line 1 (as with the #line macro)
- let lineIndex: Int
-
- func setSourceCode(_ newSourceCode: String) -> Context {
- return Context(
- sourceCode: newSourceCode,
- diffable: diffable,
- fileName: fileName,
- lineIndex: lineIndex
- )
- }
-}
-
-internal func writeInlineSnapshot(
- _ recordings: inout Recordings,
- _ context: Context
-) throws -> Context {
- var sourceCodeLines = context.sourceCode
- .split(separator: "\n", omittingEmptySubsequences: false)
-
- let otherRecordings = recordings[context.fileName, default: []]
- let otherRecordingsAboveThisLine = otherRecordings.filter { $0.line < context.lineIndex }
- let offsetStartIndex = otherRecordingsAboveThisLine.reduce(context.lineIndex) { $0 + $1.difference }
- let functionLineIndex = offsetStartIndex - 1
- var lineCountDifference = 0
-
- // Convert `""` to multi-line literal
- if sourceCodeLines[functionLineIndex].hasSuffix(emptyStringLiteralWithCloseBrace) {
- // Convert:
- // _assertInlineSnapshot(matching: value, as: .dump, with: "")
- // to:
- // _assertInlineSnapshot(matching: value, as: .dump, with: """
- // """)
- var functionCallLine = sourceCodeLines.remove(at: functionLineIndex)
- functionCallLine.removeLast(emptyStringLiteralWithCloseBrace.count)
- let indentText = indentation(of: functionCallLine)
- sourceCodeLines.insert(contentsOf: [
- functionCallLine + multiLineStringLiteralTerminator,
- indentText + multiLineStringLiteralTerminator + ")",
- ] as [String.SubSequence], at: functionLineIndex)
- lineCountDifference += 1
- }
-
- /// If they haven't got a multi-line literal by now, then just fail.
- guard sourceCodeLines[functionLineIndex].hasSuffix(multiLineStringLiteralTerminator) else {
- struct InlineError: LocalizedError {
- var errorDescription: String? {
- return """
-To use inline snapshots, please convert the "with" argument to a multi-line literal.
-"""
- }
- }
- throw InlineError()
- }
-
- /// Find the end of multi-line literal and replace contents with recording.
- if let multiLineLiteralEndIndex = sourceCodeLines[offsetStartIndex...].firstIndex(where: { $0.hasClosingMultilineStringDelimiter() }) {
-
- let diffableLines = context.diffable.split(separator: "\n")
-
- // Add #'s to the multiline string literal if needed
- let numberSigns: String
- if context.diffable.hasEscapedSpecialCharactersLiteral() {
- numberSigns = String(repeating: "#", count: context.diffable.numberOfNumberSignsNeeded())
- } else if nil != diffableLines.first(where: { $0.endsInBackslash() }) {
- // We want to avoid \ being interpreted as an escaped newline in the recorded inline snapshot
- numberSigns = "#"
- } else {
- numberSigns = ""
- }
- let multiLineStringLiteralTerminatorPre = numberSigns + multiLineStringLiteralTerminator
- let multiLineStringLiteralTerminatorPost = multiLineStringLiteralTerminator + numberSigns
-
- // Update opening (#...)"""
- sourceCodeLines[functionLineIndex].replaceFirstOccurrence(
- of: extendedOpeningStringDelimitersPattern,
- with: multiLineStringLiteralTerminatorPre
- )
-
- // Update closing """(#...)
- sourceCodeLines[multiLineLiteralEndIndex].replaceFirstOccurrence(
- of: extendedClosingStringDelimitersPattern,
- with: multiLineStringLiteralTerminatorPost
- )
-
- /// Convert actual value to Lines to insert
- let indentText = indentation(of: sourceCodeLines[multiLineLiteralEndIndex])
- let newDiffableLines = context.diffable
- .split(separator: "\n", omittingEmptySubsequences: false)
- .map { Substring(indentText + $0) }
- lineCountDifference += newDiffableLines.count - (multiLineLiteralEndIndex - offsetStartIndex)
-
- let fileRecording = FileRecording(line: context.lineIndex, difference: lineCountDifference)
-
- /// Insert the lines
- sourceCodeLines.replaceSubrange(offsetStartIndex..(of str: S) -> String {
- var count = 0
- for char in str {
- guard char == " " else { break }
- count += 1
- }
- return String(repeating: " ", count: count)
-}
-
-fileprivate extension Substring {
- mutating func replaceFirstOccurrence(of pattern: String, with newString: String) {
- let newString = replacingOccurrences(of: pattern, with: newString, options: .regularExpression)
- self = Substring(newString)
- }
-
- func hasOpeningMultilineStringDelimiter() -> Bool {
- return range(of: extendedOpeningStringDelimitersPattern, options: .regularExpression) != nil
- }
-
- func hasClosingMultilineStringDelimiter() -> Bool {
- return range(of: extendedClosingStringDelimitersPattern, options: .regularExpression) != nil
- }
-
- func endsInBackslash() -> Bool {
- if let lastChar = last {
- return lastChar == Character(#"\"#)
- }
- return false
- }
-}
-
-private let emptyStringLiteralWithCloseBrace = "\"\")"
-private let multiLineStringLiteralTerminator = "\"\"\""
-private let extendedOpeningStringDelimitersPattern = #"#{0,}\"\"\""#
-private let extendedClosingStringDelimitersPattern = ##"\"\"\"#{0,}"##
-
-// When we modify a file, the line numbers reported by the compiler through #line are no longer
-// accurate. With the FileRecording values we keep track of we modify the files so we can adjust
-// line numbers.
-private var recordings: Recordings = [:]
diff --git a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/AssertSnapshot.swift b/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/AssertSnapshot.swift
deleted file mode 100644
index dd6ca4f..0000000
--- a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/AssertSnapshot.swift
+++ /dev/null
@@ -1,313 +0,0 @@
-import XCTest
-
-/// Enhances failure messages with a command line diff tool expression that can be copied and pasted into a terminal.
-///
-/// diffTool = "ksdiff"
-public var diffTool: String? = nil
-
-/// Whether or not to record all new references.
-public var isRecording = false
-
-/// Whether or not to record all new references.
-/// Due to a name clash in Xcode 12, this has been renamed to `isRecording`.
-@available(*, deprecated, renamed: "isRecording")
-public var record: Bool {
- get { isRecording }
- set { isRecording = newValue }
-}
-
-/// Asserts that a given value matches a reference on disk.
-///
-/// - Parameters:
-/// - value: A value to compare against a reference.
-/// - snapshotting: A strategy for serializing, deserializing, and comparing values.
-/// - name: An optional description of the snapshot.
-/// - recording: Whether or not to record a new reference.
-/// - timeout: The amount of time a snapshot must be generated in.
-/// - file: The file in which failure occurred. Defaults to the file name of the test case in which this function was called.
-/// - testName: The name of the test in which failure occurred. Defaults to the function name of the test case in which this function was called.
-/// - line: The line number on which failure occurred. Defaults to the line number on which this function was called.
-public func assertSnapshot(
- matching value: @autoclosure () throws -> Value,
- as snapshotting: Snapshotting,
- named name: String? = nil,
- record recording: Bool = false,
- timeout: TimeInterval = 5,
- file: StaticString = #file,
- testName: String = #function,
- line: UInt = #line
- ) {
-
- let failure = verifySnapshot(
- matching: try value(),
- as: snapshotting,
- named: name,
- record: recording,
- timeout: timeout,
- file: file,
- testName: testName,
- line: line
- )
- guard let message = failure else { return }
- XCTFail(message, file: file, line: line)
-}
-
-/// Asserts that a given value matches references on disk.
-///
-/// - Parameters:
-/// - value: A value to compare against a reference.
-/// - snapshotting: A dictionary of names and strategies for serializing, deserializing, and comparing values.
-/// - recording: Whether or not to record a new reference.
-/// - timeout: The amount of time a snapshot must be generated in.
-/// - file: The file in which failure occurred. Defaults to the file name of the test case in which this function was called.
-/// - testName: The name of the test in which failure occurred. Defaults to the function name of the test case in which this function was called.
-/// - line: The line number on which failure occurred. Defaults to the line number on which this function was called.
-public func assertSnapshots(
- matching value: @autoclosure () throws -> Value,
- as strategies: [String: Snapshotting],
- record recording: Bool = false,
- timeout: TimeInterval = 5,
- file: StaticString = #file,
- testName: String = #function,
- line: UInt = #line
- ) {
-
- try? strategies.forEach { name, strategy in
- assertSnapshot(
- matching: try value(),
- as: strategy,
- named: name,
- record: recording,
- timeout: timeout,
- file: file,
- testName: testName,
- line: line
- )
- }
-}
-
-/// Asserts that a given value matches references on disk.
-///
-/// - Parameters:
-/// - value: A value to compare against a reference.
-/// - snapshotting: An array of strategies for serializing, deserializing, and comparing values.
-/// - recording: Whether or not to record a new reference.
-/// - timeout: The amount of time a snapshot must be generated in.
-/// - file: The file in which failure occurred. Defaults to the file name of the test case in which this function was called.
-/// - testName: The name of the test in which failure occurred. Defaults to the function name of the test case in which this function was called.
-/// - line: The line number on which failure occurred. Defaults to the line number on which this function was called.
-public func assertSnapshots(
- matching value: @autoclosure () throws -> Value,
- as strategies: [Snapshotting],
- record recording: Bool = false,
- timeout: TimeInterval = 5,
- file: StaticString = #file,
- testName: String = #function,
- line: UInt = #line
- ) {
-
- try? strategies.forEach { strategy in
- assertSnapshot(
- matching: try value(),
- as: strategy,
- record: recording,
- timeout: timeout,
- file: file,
- testName: testName,
- line: line
- )
- }
-}
-
-/// Verifies that a given value matches a reference on disk.
-///
-/// Third party snapshot assert helpers can be built on top of this function. Simply invoke `verifySnapshot` with your own arguments, and then invoke `XCTFail` with the string returned if it is non-`nil`. For example, if you want the snapshot directory to be determined by an environment variable, you can create your own assert helper like so:
-///
-/// public func myAssertSnapshot(
-/// matching value: @autoclosure () throws -> Value,
-/// as snapshotting: Snapshotting,
-/// named name: String? = nil,
-/// record recording: Bool = false,
-/// timeout: TimeInterval = 5,
-/// file: StaticString = #file,
-/// testName: String = #function,
-/// line: UInt = #line
-/// ) {
-///
-/// let snapshotDirectory = ProcessInfo.processInfo.environment["SNAPSHOT_REFERENCE_DIR"]! + "/" + #file
-/// let failure = verifySnapshot(
-/// matching: value,
-/// as: snapshotting,
-/// named: name,
-/// record: recording,
-/// snapshotDirectory: snapshotDirectory,
-/// timeout: timeout,
-/// file: file,
-/// testName: testName
-/// )
-/// guard let message = failure else { return }
-/// XCTFail(message, file: file, line: line)
-/// }
-///
-/// - Parameters:
-/// - value: A value to compare against a reference.
-/// - snapshotting: A strategy for serializing, deserializing, and comparing values.
-/// - name: An optional description of the snapshot.
-/// - recording: Whether or not to record a new reference.
-/// - snapshotDirectory: Optional directory to save snapshots. By default snapshots will be saved in a directory with the same name as the test file, and that directory will sit inside a directory `__Snapshots__` that sits next to your test file.
-/// - timeout: The amount of time a snapshot must be generated in.
-/// - file: The file in which failure occurred. Defaults to the file name of the test case in which this function was called.
-/// - testName: The name of the test in which failure occurred. Defaults to the function name of the test case in which this function was called.
-/// - line: The line number on which failure occurred. Defaults to the line number on which this function was called.
-/// - Returns: A failure message or, if the value matches, nil.
-public func verifySnapshot(
- matching value: @autoclosure () throws -> Value,
- as snapshotting: Snapshotting,
- named name: String? = nil,
- record recording: Bool = false,
- snapshotDirectory: String? = nil,
- timeout: TimeInterval = 5,
- file: StaticString = #file,
- testName: String = #function,
- line: UInt = #line
- )
- -> String? {
-
- let recording = recording || isRecording
-
- do {
- let fileUrl = URL(fileURLWithPath: "\(file)", isDirectory: false)
- let fileName = fileUrl.deletingPathExtension().lastPathComponent
-
- let snapshotDirectoryUrl = snapshotDirectory.map { URL(fileURLWithPath: $0, isDirectory: true) }
- ?? fileUrl
- .deletingLastPathComponent()
- .appendingPathComponent("__Snapshots__")
- .appendingPathComponent(fileName)
-
- let identifier: String
- if let name = name {
- identifier = sanitizePathComponent(name)
- } else {
- let counter = counterQueue.sync { () -> Int in
- let key = snapshotDirectoryUrl.appendingPathComponent(testName)
- counterMap[key, default: 0] += 1
- return counterMap[key]!
- }
- identifier = String(counter)
- }
-
- let testName = sanitizePathComponent(testName)
- let snapshotFileUrl = snapshotDirectoryUrl
- .appendingPathComponent("\(testName).\(identifier)")
- .appendingPathExtension(snapshotting.pathExtension ?? "")
- let fileManager = FileManager.default
- try fileManager.createDirectory(at: snapshotDirectoryUrl, withIntermediateDirectories: true)
-
- let tookSnapshot = XCTestExpectation(description: "Took snapshot")
- var optionalDiffable: Format?
- snapshotting.snapshot(try value()).run { b in
- optionalDiffable = b
- tookSnapshot.fulfill()
- }
- let result = XCTWaiter.wait(for: [tookSnapshot], timeout: timeout)
- switch result {
- case .completed:
- break
- case .timedOut:
- return """
- Exceeded timeout of \(timeout) seconds waiting for snapshot.
-
- This can happen when an asynchronously rendered view (like a web view) has not loaded. \
- Ensure that every subview of the view hierarchy has loaded to avoid timeouts, or, if a \
- timeout is unavoidable, consider setting the "timeout" parameter of "assertSnapshot" to \
- a higher value.
- """
- case .incorrectOrder, .invertedFulfillment, .interrupted:
- return "Couldn't snapshot value"
- @unknown default:
- return "Couldn't snapshot value"
- }
-
- guard var diffable = optionalDiffable else {
- return "Couldn't snapshot value"
- }
-
- guard !recording, fileManager.fileExists(atPath: snapshotFileUrl.path) else {
- try snapshotting.diffing.toData(diffable).write(to: snapshotFileUrl)
- return recording
- ? """
- Record mode is on. Turn record mode off and re-run "\(testName)" to test against the newly-recorded snapshot.
-
- open "\(snapshotFileUrl.path)"
-
- Recorded snapshot: …
- """
- : """
- No reference was found on disk. Automatically recorded snapshot: …
-
- open "\(snapshotFileUrl.path)"
-
- Re-run "\(testName)" to test against the newly-recorded snapshot.
- """
- }
-
- let data = try Data(contentsOf: snapshotFileUrl)
- let reference = snapshotting.diffing.fromData(data)
-
- #if os(iOS) || os(tvOS)
- // If the image generation fails for the diffable part use the reference
- if let localDiff = diffable as? UIImage, localDiff.size == .zero {
- diffable = reference
- }
- #endif
-
- guard let (failure, attachments) = snapshotting.diffing.diff(reference, diffable) else {
- return nil
- }
-
- let artifactsUrl = URL(
- fileURLWithPath: ProcessInfo.processInfo.environment["SNAPSHOT_ARTIFACTS"] ?? NSTemporaryDirectory(), isDirectory: true
- )
- let artifactsSubUrl = artifactsUrl.appendingPathComponent(fileName)
- try fileManager.createDirectory(at: artifactsSubUrl, withIntermediateDirectories: true)
- let failedSnapshotFileUrl = artifactsSubUrl.appendingPathComponent(snapshotFileUrl.lastPathComponent)
- try snapshotting.diffing.toData(diffable).write(to: failedSnapshotFileUrl)
-
- if !attachments.isEmpty {
- #if !os(Linux)
- if ProcessInfo.processInfo.environment.keys.contains("__XCODE_BUILT_PRODUCTS_DIR_PATHS") {
- XCTContext.runActivity(named: "Attached Failure Diff") { activity in
- attachments.forEach {
- activity.add($0)
- }
- }
- }
- #endif
- }
-
- let diffMessage = diffTool
- .map { "\($0) \"\(snapshotFileUrl.path)\" \"\(failedSnapshotFileUrl.path)\"" }
- ?? "@\(minus)\n\"\(snapshotFileUrl.path)\"\n@\(plus)\n\"\(failedSnapshotFileUrl.path)\""
- return """
- Snapshot does not match reference.
-
- \(diffMessage)
-
- \(failure.trimmingCharacters(in: .whitespacesAndNewlines))
- """
- } catch {
- return error.localizedDescription
- }
-}
-
-// MARK: - Private
-
-private let counterQueue = DispatchQueue(label: "co.pointfree.SnapshotTesting.counter")
-private var counterMap: [URL: Int] = [:]
-
-func sanitizePathComponent(_ string: String) -> String {
- return string
- .replacingOccurrences(of: "\\W+", with: "-", options: .regularExpression)
- .replacingOccurrences(of: "^-|-$", with: "", options: .regularExpression)
-}
diff --git a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Async.swift b/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Async.swift
deleted file mode 100644
index 427d5a5..0000000
--- a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Async.swift
+++ /dev/null
@@ -1,39 +0,0 @@
-/// A wrapper around an asynchronous operation.
-///
-/// Snapshot strategies may utilize this type to create snapshots in an asynchronous fashion.
-///
-/// For example, WebKit's `WKWebView` offers a callback-based API for taking image snapshots (`takeSnapshot`). `Async` allows us to build a value that can pass its callback along to the scope in which the image has been created.
-///
-/// Async { callback in
-/// webView.takeSnapshot(with: nil) { image, error in
-/// callback(image!)
-/// }
-/// }
-public struct Async {
- public let run: (@escaping (Value) -> Void) -> Void
-
- /// Creates an asynchronous operation.
- ///
- /// - Parameters:
- /// - run: A function that, when called, can hand a value to a callback.
- /// - callback: A function that can be called with a value.
- public init(run: @escaping (_ callback: @escaping (Value) -> Void) -> Void) {
- self.run = run
- }
-
- /// Wraps a pure value in an asynchronous operation.
- ///
- /// - Parameter value: A value to be wrapped in an asynchronous operation.
- public init(value: Value) {
- self.init { callback in callback(value) }
- }
-
- /// Transforms an Async into an Async with a function `(Value) -> NewValue`.
- ///
- /// - Parameter f: A transformation to apply to the value wrapped by the async value.
- public func map(_ f: @escaping (Value) -> NewValue) -> Async {
- return .init { callback in
- self.run { a in callback(f(a)) }
- }
- }
-}
diff --git a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/Internal.swift b/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/Internal.swift
deleted file mode 100644
index af77913..0000000
--- a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/Internal.swift
+++ /dev/null
@@ -1,11 +0,0 @@
-#if os(macOS)
-import Cocoa
-typealias Image = NSImage
-typealias ImageView = NSImageView
-typealias View = NSView
-#elseif os(iOS) || os(tvOS)
-import UIKit
-typealias Image = UIImage
-typealias ImageView = UIImageView
-typealias View = UIView
-#endif
diff --git a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/PlistEncoder.swift b/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/PlistEncoder.swift
deleted file mode 100644
index 589557e..0000000
--- a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/PlistEncoder.swift
+++ /dev/null
@@ -1,1828 +0,0 @@
-// NB: This file is copied from Swift to make available to Linux Swift 4.2 and below.
-//
-// https://github.com/apple/swift/blob/master/stdlib/public/SDK/Foundation/PlistEncoder.swift
-import Foundation
-
-extension DecodingError {
- internal static func _typeMismatch(at path: [CodingKey], expectation: Any.Type, reality: Any) -> DecodingError {
- let description = "Expected to decode \(expectation) but found \(type(of: reality)) instead."
- return .typeMismatch(expectation, Context(codingPath: path, debugDescription: description))
- }
-}
-
-let kCFBooleanTrue = NSNumber(booleanLiteral: true)
-let kCFBooleanFalse = NSNumber(booleanLiteral: false)
-
-
-//===----------------------------------------------------------------------===//
-//
-// This source file is part of the Swift.org open source project
-//
-// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
-// Licensed under Apache License v2.0 with Runtime Library Exception
-//
-// See https://swift.org/LICENSE.txt for license information
-// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
-//
-//===----------------------------------------------------------------------===//
-
-//===----------------------------------------------------------------------===//
-// Plist Encoder
-//===----------------------------------------------------------------------===//
-
-/// `PropertyListEncoder` facilitates the encoding of `Encodable` values into property lists.
-open class PropertyListEncoder {
-
- // MARK: - Options
-
- /// The output format to write the property list data in. Defaults to `.binary`.
- open var outputFormat: PropertyListSerialization.PropertyListFormat = .binary
-
- /// Contextual user-provided information for use during encoding.
- open var userInfo: [CodingUserInfoKey : Any] = [:]
-
- /// Options set on the top-level encoder to pass down the encoding hierarchy.
- fileprivate struct _Options {
- let outputFormat: PropertyListSerialization.PropertyListFormat
- let userInfo: [CodingUserInfoKey : Any]
- }
-
- /// The options set on the top-level encoder.
- fileprivate var options: _Options {
- return _Options(outputFormat: outputFormat, userInfo: userInfo)
- }
-
- // MARK: - Constructing a Property List Encoder
-
- /// Initializes `self` with default strategies.
- public init() {}
-
- // MARK: - Encoding Values
-
- /// Encodes the given top-level value and returns its property list representation.
- ///
- /// - parameter value: The value to encode.
- /// - returns: A new `Data` value containing the encoded property list data.
- /// - throws: `EncodingError.invalidValue` if a non-conforming floating-point value is encountered during encoding, and the encoding strategy is `.throw`.
- /// - throws: An error if any value throws an error during encoding.
- open func encode(_ value: Value) throws -> Data {
- let topLevel = try encodeToTopLevelContainer(value)
- if topLevel is NSNumber {
- throw EncodingError.invalidValue(value,
- EncodingError.Context(codingPath: [],
- debugDescription: "Top-level \(Value.self) encoded as number property list fragment."))
- } else if topLevel is NSString {
- throw EncodingError.invalidValue(value,
- EncodingError.Context(codingPath: [],
- debugDescription: "Top-level \(Value.self) encoded as string property list fragment."))
- } else if topLevel is NSDate {
- throw EncodingError.invalidValue(value,
- EncodingError.Context(codingPath: [],
- debugDescription: "Top-level \(Value.self) encoded as date property list fragment."))
- }
-
- do {
- return try PropertyListSerialization.data(fromPropertyList: topLevel, format: self.outputFormat, options: 0)
- } catch {
- throw EncodingError.invalidValue(value,
- EncodingError.Context(codingPath: [], debugDescription: "Unable to encode the given top-level value as a property list", underlyingError: error))
- }
- }
-
- /// Encodes the given top-level value and returns its plist-type representation.
- ///
- /// - parameter value: The value to encode.
- /// - returns: A new top-level array or dictionary representing the value.
- /// - throws: `EncodingError.invalidValue` if a non-conforming floating-point value is encountered during encoding, and the encoding strategy is `.throw`.
- /// - throws: An error if any value throws an error during encoding.
- internal func encodeToTopLevelContainer(_ value: Value) throws -> Any {
- let encoder = _PlistEncoder(options: self.options)
- guard let topLevel = try encoder.box_(value) else {
- throw EncodingError.invalidValue(value,
- EncodingError.Context(codingPath: [],
- debugDescription: "Top-level \(Value.self) did not encode any values."))
- }
-
- return topLevel
- }
-}
-
-// MARK: - _PlistEncoder
-
-fileprivate class _PlistEncoder : Encoder {
- // MARK: Properties
-
- /// The encoder's storage.
- fileprivate var storage: _PlistEncodingStorage
-
- /// Options set on the top-level encoder.
- fileprivate let options: PropertyListEncoder._Options
-
- /// The path to the current point in encoding.
- fileprivate(set) public var codingPath: [CodingKey]
-
- /// Contextual user-provided information for use during encoding.
- public var userInfo: [CodingUserInfoKey : Any] {
- return self.options.userInfo
- }
-
- // MARK: - Initialization
-
- /// Initializes `self` with the given top-level encoder options.
- fileprivate init(options: PropertyListEncoder._Options, codingPath: [CodingKey] = []) {
- self.options = options
- self.storage = _PlistEncodingStorage()
- self.codingPath = codingPath
- }
-
- /// Returns whether a new element can be encoded at this coding path.
- ///
- /// `true` if an element has not yet been encoded at this coding path; `false` otherwise.
- fileprivate var canEncodeNewValue: Bool {
- // Every time a new value gets encoded, the key it's encoded for is pushed onto the coding path (even if it's a nil key from an unkeyed container).
- // At the same time, every time a container is requested, a new value gets pushed onto the storage stack.
- // If there are more values on the storage stack than on the coding path, it means the value is requesting more than one container, which violates the precondition.
- //
- // This means that anytime something that can request a new container goes onto the stack, we MUST push a key onto the coding path.
- // Things which will not request containers do not need to have the coding path extended for them (but it doesn't matter if it is, because they will not reach here).
- return self.storage.count == self.codingPath.count
- }
-
- // MARK: - Encoder Methods
- public func container(keyedBy: Key.Type) -> KeyedEncodingContainer {
- // If an existing keyed container was already requested, return that one.
- let topContainer: NSMutableDictionary
- if self.canEncodeNewValue {
- // We haven't yet pushed a container at this level; do so here.
- topContainer = self.storage.pushKeyedContainer()
- } else {
- guard let container = self.storage.containers.last as? NSMutableDictionary else {
- preconditionFailure("Attempt to push new keyed encoding container when already previously encoded at this path.")
- }
-
- topContainer = container
- }
-
- let container = _PlistKeyedEncodingContainer(referencing: self, codingPath: self.codingPath, wrapping: topContainer)
- return KeyedEncodingContainer(container)
- }
-
- public func unkeyedContainer() -> UnkeyedEncodingContainer {
- // If an existing unkeyed container was already requested, return that one.
- let topContainer: NSMutableArray
- if self.canEncodeNewValue {
- // We haven't yet pushed a container at this level; do so here.
- topContainer = self.storage.pushUnkeyedContainer()
- } else {
- guard let container = self.storage.containers.last as? NSMutableArray else {
- preconditionFailure("Attempt to push new unkeyed encoding container when already previously encoded at this path.")
- }
-
- topContainer = container
- }
-
- return _PlistUnkeyedEncodingContainer(referencing: self, codingPath: self.codingPath, wrapping: topContainer)
- }
-
- public func singleValueContainer() -> SingleValueEncodingContainer {
- return self
- }
-}
-
-// MARK: - Encoding Storage and Containers
-
-fileprivate struct _PlistEncodingStorage {
- // MARK: Properties
-
- /// The container stack.
- /// Elements may be any one of the plist types (NSNumber, NSString, NSDate, NSArray, NSDictionary).
- private(set) fileprivate var containers: [NSObject] = []
-
- // MARK: - Initialization
-
- /// Initializes `self` with no containers.
- fileprivate init() {}
-
- // MARK: - Modifying the Stack
-
- fileprivate var count: Int {
- return self.containers.count
- }
-
- fileprivate mutating func pushKeyedContainer() -> NSMutableDictionary {
- let dictionary = NSMutableDictionary()
- self.containers.append(dictionary)
- return dictionary
- }
-
- fileprivate mutating func pushUnkeyedContainer() -> NSMutableArray {
- let array = NSMutableArray()
- self.containers.append(array)
- return array
- }
-
- fileprivate mutating func push(container: __owned NSObject) {
- self.containers.append(container)
- }
-
- fileprivate mutating func popContainer() -> NSObject {
- precondition(!self.containers.isEmpty, "Empty container stack.")
- return self.containers.popLast()!
- }
-}
-
-// MARK: - Encoding Containers
-
-fileprivate struct _PlistKeyedEncodingContainer : KeyedEncodingContainerProtocol {
- typealias Key = K
-
- // MARK: Properties
-
- /// A reference to the encoder we're writing to.
- private let encoder: _PlistEncoder
-
- /// A reference to the container we're writing to.
- private let container: NSMutableDictionary
-
- /// The path of coding keys taken to get to this point in encoding.
- private(set) public var codingPath: [CodingKey]
-
- // MARK: - Initialization
-
- /// Initializes `self` with the given references.
- fileprivate init(referencing encoder: _PlistEncoder, codingPath: [CodingKey], wrapping container: NSMutableDictionary) {
- self.encoder = encoder
- self.codingPath = codingPath
- self.container = container
- }
-
- // MARK: - KeyedEncodingContainerProtocol Methods
-
- public mutating func encodeNil(forKey key: Key) throws { self.container[key.stringValue] = _plistNullNSString }
- public mutating func encode(_ value: Bool, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) }
- public mutating func encode(_ value: Int, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) }
- public mutating func encode(_ value: Int8, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) }
- public mutating func encode(_ value: Int16, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) }
- public mutating func encode(_ value: Int32, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) }
- public mutating func encode(_ value: Int64, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) }
- public mutating func encode(_ value: UInt, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) }
- public mutating func encode(_ value: UInt8, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) }
- public mutating func encode(_ value: UInt16, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) }
- public mutating func encode(_ value: UInt32, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) }
- public mutating func encode(_ value: UInt64, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) }
- public mutating func encode(_ value: String, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) }
- public mutating func encode(_ value: Float, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) }
- public mutating func encode(_ value: Double, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) }
-
- public mutating func encode(_ value: T, forKey key: Key) throws {
- self.encoder.codingPath.append(key)
- defer { self.encoder.codingPath.removeLast() }
- self.container[key.stringValue] = try self.encoder.box(value)
- }
-
- public mutating func nestedContainer(keyedBy keyType: NestedKey.Type, forKey key: Key) -> KeyedEncodingContainer {
- let dictionary = NSMutableDictionary()
- self.container[key.stringValue] = dictionary
-
- self.codingPath.append(key)
- defer { self.codingPath.removeLast() }
-
- let container = _PlistKeyedEncodingContainer(referencing: self.encoder, codingPath: self.codingPath, wrapping: dictionary)
- return KeyedEncodingContainer(container)
- }
-
- public mutating func nestedUnkeyedContainer(forKey key: Key) -> UnkeyedEncodingContainer {
- let array = NSMutableArray()
- self.container[key.stringValue] = array
-
- self.codingPath.append(key)
- defer { self.codingPath.removeLast() }
- return _PlistUnkeyedEncodingContainer(referencing: self.encoder, codingPath: self.codingPath, wrapping: array)
- }
-
- public mutating func superEncoder() -> Encoder {
- return _PlistReferencingEncoder(referencing: self.encoder, at: _PlistKey.super, wrapping: self.container)
- }
-
- public mutating func superEncoder(forKey key: Key) -> Encoder {
- return _PlistReferencingEncoder(referencing: self.encoder, at: key, wrapping: self.container)
- }
-}
-
-fileprivate struct _PlistUnkeyedEncodingContainer : UnkeyedEncodingContainer {
- // MARK: Properties
-
- /// A reference to the encoder we're writing to.
- private let encoder: _PlistEncoder
-
- /// A reference to the container we're writing to.
- private let container: NSMutableArray
-
- /// The path of coding keys taken to get to this point in encoding.
- private(set) public var codingPath: [CodingKey]
-
- /// The number of elements encoded into the container.
- public var count: Int {
- return self.container.count
- }
-
- // MARK: - Initialization
-
- /// Initializes `self` with the given references.
- fileprivate init(referencing encoder: _PlistEncoder, codingPath: [CodingKey], wrapping container: NSMutableArray) {
- self.encoder = encoder
- self.codingPath = codingPath
- self.container = container
- }
-
- // MARK: - UnkeyedEncodingContainer Methods
-
- public mutating func encodeNil() throws { self.container.add(_plistNullNSString) }
- public mutating func encode(_ value: Bool) throws { self.container.add(self.encoder.box(value)) }
- public mutating func encode(_ value: Int) throws { self.container.add(self.encoder.box(value)) }
- public mutating func encode(_ value: Int8) throws { self.container.add(self.encoder.box(value)) }
- public mutating func encode(_ value: Int16) throws { self.container.add(self.encoder.box(value)) }
- public mutating func encode(_ value: Int32) throws { self.container.add(self.encoder.box(value)) }
- public mutating func encode(_ value: Int64) throws { self.container.add(self.encoder.box(value)) }
- public mutating func encode(_ value: UInt) throws { self.container.add(self.encoder.box(value)) }
- public mutating func encode(_ value: UInt8) throws { self.container.add(self.encoder.box(value)) }
- public mutating func encode(_ value: UInt16) throws { self.container.add(self.encoder.box(value)) }
- public mutating func encode(_ value: UInt32) throws { self.container.add(self.encoder.box(value)) }
- public mutating func encode(_ value: UInt64) throws { self.container.add(self.encoder.box(value)) }
- public mutating func encode(_ value: Float) throws { self.container.add(self.encoder.box(value)) }
- public mutating func encode(_ value: Double) throws { self.container.add(self.encoder.box(value)) }
- public mutating func encode(_ value: String) throws { self.container.add(self.encoder.box(value)) }
-
- public mutating func encode(_ value: T) throws {
- self.encoder.codingPath.append(_PlistKey(index: self.count))
- defer { self.encoder.codingPath.removeLast() }
- self.container.add(try self.encoder.box(value))
- }
-
- public mutating func nestedContainer(keyedBy keyType: NestedKey.Type) -> KeyedEncodingContainer {
- self.codingPath.append(_PlistKey(index: self.count))
- defer { self.codingPath.removeLast() }
-
- let dictionary = NSMutableDictionary()
- self.container.add(dictionary)
-
- let container = _PlistKeyedEncodingContainer(referencing: self.encoder, codingPath: self.codingPath, wrapping: dictionary)
- return KeyedEncodingContainer(container)
- }
-
- public mutating func nestedUnkeyedContainer() -> UnkeyedEncodingContainer {
- self.codingPath.append(_PlistKey(index: self.count))
- defer { self.codingPath.removeLast() }
-
- let array = NSMutableArray()
- self.container.add(array)
- return _PlistUnkeyedEncodingContainer(referencing: self.encoder, codingPath: self.codingPath, wrapping: array)
- }
-
- public mutating func superEncoder() -> Encoder {
- return _PlistReferencingEncoder(referencing: self.encoder, at: self.container.count, wrapping: self.container)
- }
-}
-
-extension _PlistEncoder : SingleValueEncodingContainer {
- // MARK: - SingleValueEncodingContainer Methods
-
- private func assertCanEncodeNewValue() {
- precondition(self.canEncodeNewValue, "Attempt to encode value through single value container when previously value already encoded.")
- }
-
- public func encodeNil() throws {
- assertCanEncodeNewValue()
- self.storage.push(container: _plistNullNSString)
- }
-
- public func encode(_ value: Bool) throws {
- assertCanEncodeNewValue()
- self.storage.push(container: self.box(value))
- }
-
- public func encode(_ value: Int) throws {
- assertCanEncodeNewValue()
- self.storage.push(container: self.box(value))
- }
-
- public func encode(_ value: Int8) throws {
- assertCanEncodeNewValue()
- self.storage.push(container: self.box(value))
- }
-
- public func encode(_ value: Int16) throws {
- assertCanEncodeNewValue()
- self.storage.push(container: self.box(value))
- }
-
- public func encode(_ value: Int32) throws {
- assertCanEncodeNewValue()
- self.storage.push(container: self.box(value))
- }
-
- public func encode(_ value: Int64) throws {
- assertCanEncodeNewValue()
- self.storage.push(container: self.box(value))
- }
-
- public func encode(_ value: UInt) throws {
- assertCanEncodeNewValue()
- self.storage.push(container: self.box(value))
- }
-
- public func encode(_ value: UInt8) throws {
- assertCanEncodeNewValue()
- self.storage.push(container: self.box(value))
- }
-
- public func encode(_ value: UInt16) throws {
- assertCanEncodeNewValue()
- self.storage.push(container: self.box(value))
- }
-
- public func encode(_ value: UInt32) throws {
- assertCanEncodeNewValue()
- self.storage.push(container: self.box(value))
- }
-
- public func encode(_ value: UInt64) throws {
- assertCanEncodeNewValue()
- self.storage.push(container: self.box(value))
- }
-
- public func encode(_ value: String) throws {
- assertCanEncodeNewValue()
- self.storage.push(container: self.box(value))
- }
-
- public func encode(_ value: Float) throws {
- assertCanEncodeNewValue()
- self.storage.push(container: self.box(value))
- }
-
- public func encode(_ value: Double) throws {
- assertCanEncodeNewValue()
- self.storage.push(container: self.box(value))
- }
-
- public func encode(_ value: T) throws {
- assertCanEncodeNewValue()
- try self.storage.push(container: self.box(value))
- }
-}
-
-// MARK: - Concrete Value Representations
-
-extension _PlistEncoder {
-
- /// Returns the given value boxed in a container appropriate for pushing onto the container stack.
- fileprivate func box(_ value: Bool) -> NSObject { return NSNumber(value: value) }
- fileprivate func box(_ value: Int) -> NSObject { return NSNumber(value: value) }
- fileprivate func box(_ value: Int8) -> NSObject { return NSNumber(value: value) }
- fileprivate func box(_ value: Int16) -> NSObject { return NSNumber(value: value) }
- fileprivate func box(_ value: Int32) -> NSObject { return NSNumber(value: value) }
- fileprivate func box(_ value: Int64) -> NSObject { return NSNumber(value: value) }
- fileprivate func box(_ value: UInt) -> NSObject { return NSNumber(value: value) }
- fileprivate func box(_ value: UInt8) -> NSObject { return NSNumber(value: value) }
- fileprivate func box(_ value: UInt16) -> NSObject { return NSNumber(value: value) }
- fileprivate func box(_ value: UInt32) -> NSObject { return NSNumber(value: value) }
- fileprivate func box(_ value: UInt64) -> NSObject { return NSNumber(value: value) }
- fileprivate func box(_ value: Float) -> NSObject { return NSNumber(value: value) }
- fileprivate func box(_ value: Double) -> NSObject { return NSNumber(value: value) }
- fileprivate func box(_ value: String) -> NSObject { return NSString(string: value) }
-
- fileprivate func box(_ value: T) throws -> NSObject {
- return try self.box_(value) ?? NSDictionary()
- }
-
- fileprivate func box_(_ value: T) throws -> NSObject? {
- if T.self == Date.self || T.self == NSDate.self {
- // PropertyListSerialization handles NSDate directly.
- return (value as! NSDate)
- } else if T.self == Data.self || T.self == NSData.self {
- // PropertyListSerialization handles NSData directly.
- return (value as! NSData)
- }
-
- // The value should request a container from the _PlistEncoder.
- let depth = self.storage.count
- do {
- try value.encode(to: self)
- } catch let error {
- // If the value pushed a container before throwing, pop it back off to restore state.
- if self.storage.count > depth {
- let _ = self.storage.popContainer()
- }
-
- throw error
- }
-
- // The top container should be a new container.
- guard self.storage.count > depth else {
- return nil
- }
-
- return self.storage.popContainer()
- }
-}
-
-// MARK: - _PlistReferencingEncoder
-
-/// _PlistReferencingEncoder is a special subclass of _PlistEncoder which has its own storage, but references the contents of a different encoder.
-/// It's used in superEncoder(), which returns a new encoder for encoding a superclass -- the lifetime of the encoder should not escape the scope it's created in, but it doesn't necessarily know when it's done being used (to write to the original container).
-fileprivate class _PlistReferencingEncoder : _PlistEncoder {
- // MARK: Reference types.
-
- /// The type of container we're referencing.
- private enum Reference {
- /// Referencing a specific index in an array container.
- case array(NSMutableArray, Int)
-
- /// Referencing a specific key in a dictionary container.
- case dictionary(NSMutableDictionary, String)
- }
-
- // MARK: - Properties
-
- /// The encoder we're referencing.
- private let encoder: _PlistEncoder
-
- /// The container reference itself.
- private let reference: Reference
-
- // MARK: - Initialization
-
- /// Initializes `self` by referencing the given array container in the given encoder.
- fileprivate init(referencing encoder: _PlistEncoder, at index: Int, wrapping array: NSMutableArray) {
- self.encoder = encoder
- self.reference = .array(array, index)
- super.init(options: encoder.options, codingPath: encoder.codingPath)
-
- self.codingPath.append(_PlistKey(index: index))
- }
-
- /// Initializes `self` by referencing the given dictionary container in the given encoder.
- fileprivate init(referencing encoder: _PlistEncoder, at key: CodingKey, wrapping dictionary: NSMutableDictionary) {
- self.encoder = encoder
- self.reference = .dictionary(dictionary, key.stringValue)
- super.init(options: encoder.options, codingPath: encoder.codingPath)
-
- self.codingPath.append(key)
- }
-
- // MARK: - Coding Path Operations
-
- fileprivate override var canEncodeNewValue: Bool {
- // With a regular encoder, the storage and coding path grow together.
- // A referencing encoder, however, inherits its parents coding path, as well as the key it was created for.
- // We have to take this into account.
- return self.storage.count == self.codingPath.count - self.encoder.codingPath.count - 1
- }
-
- // MARK: - Deinitialization
-
- // Finalizes `self` by writing the contents of our storage to the referenced encoder's storage.
- deinit {
- let value: Any
- switch self.storage.count {
- case 0: value = NSDictionary()
- case 1: value = self.storage.popContainer()
- default: fatalError("Referencing encoder deallocated with multiple containers on stack.")
- }
-
- switch self.reference {
- case .array(let array, let index):
- array.insert(value, at: index)
-
- case .dictionary(let dictionary, let key):
- dictionary[NSString(string: key)] = value
- }
- }
-}
-
-//===----------------------------------------------------------------------===//
-// Plist Decoder
-//===----------------------------------------------------------------------===//
-
-/// `PropertyListDecoder` facilitates the decoding of property list values into semantic `Decodable` types.
-open class PropertyListDecoder {
- // MARK: Options
-
- /// Contextual user-provided information for use during decoding.
- open var userInfo: [CodingUserInfoKey : Any] = [:]
-
- /// Options set on the top-level encoder to pass down the decoding hierarchy.
- fileprivate struct _Options {
- let userInfo: [CodingUserInfoKey : Any]
- }
-
- /// The options set on the top-level decoder.
- fileprivate var options: _Options {
- return _Options(userInfo: userInfo)
- }
-
- // MARK: - Constructing a Property List Decoder
-
- /// Initializes `self` with default strategies.
- public init() {}
-
- // MARK: - Decoding Values
-
- /// Decodes a top-level value of the given type from the given property list representation.
- ///
- /// - parameter type: The type of the value to decode.
- /// - parameter data: The data to decode from.
- /// - returns: A value of the requested type.
- /// - throws: `DecodingError.dataCorrupted` if values requested from the payload are corrupted, or if the given data is not a valid property list.
- /// - throws: An error if any value throws an error during decoding.
- open func decode(_ type: T.Type, from data: Data) throws -> T {
- var format: PropertyListSerialization.PropertyListFormat = .binary
- return try decode(type, from: data, format: &format)
- }
-
- /// Decodes a top-level value of the given type from the given property list representation.
- ///
- /// - parameter type: The type of the value to decode.
- /// - parameter data: The data to decode from.
- /// - parameter format: The parsed property list format.
- /// - returns: A value of the requested type along with the detected format of the property list.
- /// - throws: `DecodingError.dataCorrupted` if values requested from the payload are corrupted, or if the given data is not a valid property list.
- /// - throws: An error if any value throws an error during decoding.
- open func decode(_ type: T.Type, from data: Data, format: inout PropertyListSerialization.PropertyListFormat) throws -> T {
- let topLevel: Any
- do {
- topLevel = try PropertyListSerialization.propertyList(from: data, options: [], format: &format)
- } catch {
- throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: [], debugDescription: "The given data was not a valid property list.", underlyingError: error))
- }
-
- return try decode(type, fromTopLevel: topLevel)
- }
-
- /// Decodes a top-level value of the given type from the given property list container (top-level array or dictionary).
- ///
- /// - parameter type: The type of the value to decode.
- /// - parameter container: The top-level plist container.
- /// - returns: A value of the requested type.
- /// - throws: `DecodingError.dataCorrupted` if values requested from the payload are corrupted, or if the given data is not a valid property list.
- /// - throws: An error if any value throws an error during decoding.
- internal func decode(_ type: T.Type, fromTopLevel container: Any) throws -> T {
- let decoder = _PlistDecoder(referencing: container, options: self.options)
- guard let value = try decoder.unbox(container, as: type) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: [], debugDescription: "The given data did not contain a top-level value."))
- }
-
- return value
- }
-}
-
-// MARK: - _PlistDecoder
-
-fileprivate class _PlistDecoder : Decoder {
- // MARK: Properties
-
- /// The decoder's storage.
- fileprivate var storage: _PlistDecodingStorage
-
- /// Options set on the top-level decoder.
- fileprivate let options: PropertyListDecoder._Options
-
- /// The path to the current point in encoding.
- fileprivate(set) public var codingPath: [CodingKey]
-
- /// Contextual user-provided information for use during encoding.
- public var userInfo: [CodingUserInfoKey : Any] {
- return self.options.userInfo
- }
-
- // MARK: - Initialization
-
- /// Initializes `self` with the given top-level container and options.
- fileprivate init(referencing container: Any, at codingPath: [CodingKey] = [], options: PropertyListDecoder._Options) {
- self.storage = _PlistDecodingStorage()
- self.storage.push(container: container)
- self.codingPath = codingPath
- self.options = options
- }
-
- // MARK: - Decoder Methods
-
- public func container(keyedBy type: Key.Type) throws -> KeyedDecodingContainer {
- guard !(self.storage.topContainer is NSNull) else {
- throw DecodingError.valueNotFound(KeyedDecodingContainer.self,
- DecodingError.Context(codingPath: self.codingPath,
- debugDescription: "Cannot get keyed decoding container -- found null value instead."))
- }
-
- guard let topContainer = self.storage.topContainer as? [String : Any] else {
- throw DecodingError._typeMismatch(at: self.codingPath, expectation: [String : Any].self, reality: self.storage.topContainer)
- }
-
- let container = _PlistKeyedDecodingContainer(referencing: self, wrapping: topContainer)
- return KeyedDecodingContainer(container)
- }
-
- public func unkeyedContainer() throws -> UnkeyedDecodingContainer {
- guard !(self.storage.topContainer is NSNull) else {
- throw DecodingError.valueNotFound(UnkeyedDecodingContainer.self,
- DecodingError.Context(codingPath: self.codingPath,
- debugDescription: "Cannot get unkeyed decoding container -- found null value instead."))
- }
-
- guard let topContainer = self.storage.topContainer as? [Any] else {
- throw DecodingError._typeMismatch(at: self.codingPath, expectation: [Any].self, reality: self.storage.topContainer)
- }
-
- return _PlistUnkeyedDecodingContainer(referencing: self, wrapping: topContainer)
- }
-
- public func singleValueContainer() throws -> SingleValueDecodingContainer {
- return self
- }
-}
-
-// MARK: - Decoding Storage
-
-fileprivate struct _PlistDecodingStorage {
- // MARK: Properties
-
- /// The container stack.
- /// Elements may be any one of the plist types (NSNumber, Date, String, Array, [String : Any]).
- private(set) fileprivate var containers: [Any] = []
-
- // MARK: - Initialization
-
- /// Initializes `self` with no containers.
- fileprivate init() {}
-
- // MARK: - Modifying the Stack
-
- fileprivate var count: Int {
- return self.containers.count
- }
-
- fileprivate var topContainer: Any {
- precondition(!self.containers.isEmpty, "Empty container stack.")
- return self.containers.last!
- }
-
- fileprivate mutating func push(container: __owned Any) {
- self.containers.append(container)
- }
-
- fileprivate mutating func popContainer() {
- precondition(!self.containers.isEmpty, "Empty container stack.")
- self.containers.removeLast()
- }
-}
-
-// MARK: Decoding Containers
-
-fileprivate struct _PlistKeyedDecodingContainer : KeyedDecodingContainerProtocol {
- typealias Key = K
-
- // MARK: Properties
-
- /// A reference to the decoder we're reading from.
- private let decoder: _PlistDecoder
-
- /// A reference to the container we're reading from.
- private let container: [String : Any]
-
- /// The path of coding keys taken to get to this point in decoding.
- private(set) public var codingPath: [CodingKey]
-
- // MARK: - Initialization
-
- /// Initializes `self` by referencing the given decoder and container.
- fileprivate init(referencing decoder: _PlistDecoder, wrapping container: [String : Any]) {
- self.decoder = decoder
- self.container = container
- self.codingPath = decoder.codingPath
- }
-
- // MARK: - KeyedDecodingContainerProtocol Methods
-
- public var allKeys: [Key] {
- return self.container.keys.compactMap { Key(stringValue: $0) }
- }
-
- public func contains(_ key: Key) -> Bool {
- return self.container[key.stringValue] != nil
- }
-
- public func decodeNil(forKey key: Key) throws -> Bool {
- guard let entry = self.container[key.stringValue] else {
- throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\")."))
- }
-
- guard let value = entry as? String else {
- return false
- }
-
- return value == _plistNull
- }
-
- public func decode(_ type: Bool.Type, forKey key: Key) throws -> Bool {
- guard let entry = self.container[key.stringValue] else {
- throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\")."))
- }
-
- self.decoder.codingPath.append(key)
- defer { self.decoder.codingPath.removeLast() }
-
- guard let value = try self.decoder.unbox(entry, as: Bool.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead."))
- }
-
- return value
- }
-
- public func decode(_ type: Int.Type, forKey key: Key) throws -> Int {
- guard let entry = self.container[key.stringValue] else {
- throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\")."))
- }
-
- self.decoder.codingPath.append(key)
- defer { self.decoder.codingPath.removeLast() }
-
- guard let value = try self.decoder.unbox(entry, as: Int.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead."))
- }
-
- return value
- }
-
- public func decode(_ type: Int8.Type, forKey key: Key) throws -> Int8 {
- guard let entry = self.container[key.stringValue] else {
- throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\")."))
- }
-
- self.decoder.codingPath.append(key)
- defer { self.decoder.codingPath.removeLast() }
-
- guard let value = try self.decoder.unbox(entry, as: Int8.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead."))
- }
-
- return value
- }
-
- public func decode(_ type: Int16.Type, forKey key: Key) throws -> Int16 {
- guard let entry = self.container[key.stringValue] else {
- throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\")."))
- }
-
- self.decoder.codingPath.append(key)
- defer { self.decoder.codingPath.removeLast() }
-
- guard let value = try self.decoder.unbox(entry, as: Int16.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead."))
- }
-
- return value
- }
-
- public func decode(_ type: Int32.Type, forKey key: Key) throws -> Int32 {
- guard let entry = self.container[key.stringValue] else {
- throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\")."))
- }
-
- self.decoder.codingPath.append(key)
- defer { self.decoder.codingPath.removeLast() }
-
- guard let value = try self.decoder.unbox(entry, as: Int32.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead."))
- }
-
- return value
- }
-
- public func decode(_ type: Int64.Type, forKey key: Key) throws -> Int64 {
- guard let entry = self.container[key.stringValue] else {
- throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\")."))
- }
-
- self.decoder.codingPath.append(key)
- defer { self.decoder.codingPath.removeLast() }
-
- guard let value = try self.decoder.unbox(entry, as: Int64.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead."))
- }
-
- return value
- }
-
- public func decode(_ type: UInt.Type, forKey key: Key) throws -> UInt {
- guard let entry = self.container[key.stringValue] else {
- throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\")."))
- }
-
- self.decoder.codingPath.append(key)
- defer { self.decoder.codingPath.removeLast() }
-
- guard let value = try self.decoder.unbox(entry, as: UInt.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead."))
- }
-
- return value
- }
-
- public func decode(_ type: UInt8.Type, forKey key: Key) throws -> UInt8 {
- guard let entry = self.container[key.stringValue] else {
- throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\")."))
- }
-
- self.decoder.codingPath.append(key)
- defer { self.decoder.codingPath.removeLast() }
-
- guard let value = try self.decoder.unbox(entry, as: UInt8.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead."))
- }
-
- return value
- }
-
- public func decode(_ type: UInt16.Type, forKey key: Key) throws -> UInt16 {
- guard let entry = self.container[key.stringValue] else {
- throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\")."))
- }
-
- self.decoder.codingPath.append(key)
- defer { self.decoder.codingPath.removeLast() }
-
- guard let value = try self.decoder.unbox(entry, as: UInt16.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead."))
- }
-
- return value
- }
-
- public func decode(_ type: UInt32.Type, forKey key: Key) throws -> UInt32 {
- guard let entry = self.container[key.stringValue] else {
- throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\")."))
- }
-
- self.decoder.codingPath.append(key)
- defer { self.decoder.codingPath.removeLast() }
-
- guard let value = try self.decoder.unbox(entry, as: UInt32.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead."))
- }
-
- return value
- }
-
- public func decode(_ type: UInt64.Type, forKey key: Key) throws -> UInt64 {
- guard let entry = self.container[key.stringValue] else {
- throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\")."))
- }
-
- self.decoder.codingPath.append(key)
- defer { self.decoder.codingPath.removeLast() }
-
- guard let value = try self.decoder.unbox(entry, as: UInt64.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead."))
- }
-
- return value
- }
-
- public func decode(_ type: Float.Type, forKey key: Key) throws -> Float {
- guard let entry = self.container[key.stringValue] else {
- throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\")."))
- }
-
- self.decoder.codingPath.append(key)
- defer { self.decoder.codingPath.removeLast() }
- guard let value = try self.decoder.unbox(entry, as: Float.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead."))
- }
-
- return value
- }
-
- public func decode(_ type: Double.Type, forKey key: Key) throws -> Double {
- guard let entry = self.container[key.stringValue] else {
- throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\")."))
- }
-
- self.decoder.codingPath.append(key)
- defer { self.decoder.codingPath.removeLast() }
-
- guard let value = try self.decoder.unbox(entry, as: Double.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead."))
- }
-
- return value
- }
-
- public func decode(_ type: String.Type, forKey key: Key) throws -> String {
- guard let entry = self.container[key.stringValue] else {
- throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\")."))
- }
-
- self.decoder.codingPath.append(key)
- defer { self.decoder.codingPath.removeLast() }
-
- guard let value = try self.decoder.unbox(entry, as: String.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead."))
- }
-
- return value
- }
-
- public func decode(_ type: T.Type, forKey key: Key) throws -> T {
- guard let entry = self.container[key.stringValue] else {
- throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\")."))
- }
-
- self.decoder.codingPath.append(key)
- defer { self.decoder.codingPath.removeLast() }
-
- guard let value = try self.decoder.unbox(entry, as: type) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead."))
- }
-
- return value
- }
-
- public func nestedContainer(keyedBy type: NestedKey.Type, forKey key: Key) throws -> KeyedDecodingContainer {
- self.decoder.codingPath.append(key)
- defer { self.decoder.codingPath.removeLast() }
-
- guard let value = self.container[key.stringValue] else {
- throw DecodingError.valueNotFound(KeyedDecodingContainer.self,
- DecodingError.Context(codingPath: self.codingPath,
- debugDescription: "Cannot get nested keyed container -- no value found for key \"\(key.stringValue)\""))
- }
-
- guard let dictionary = value as? [String : Any] else {
- throw DecodingError._typeMismatch(at: self.codingPath, expectation: [String : Any].self, reality: value)
- }
-
- let container = _PlistKeyedDecodingContainer(referencing: self.decoder, wrapping: dictionary)
- return KeyedDecodingContainer(container)
- }
-
- public func nestedUnkeyedContainer(forKey key: Key) throws -> UnkeyedDecodingContainer {
- self.decoder.codingPath.append(key)
- defer { self.decoder.codingPath.removeLast() }
-
- guard let value = self.container[key.stringValue] else {
- throw DecodingError.valueNotFound(UnkeyedDecodingContainer.self,
- DecodingError.Context(codingPath: self.codingPath,
- debugDescription: "Cannot get nested unkeyed container -- no value found for key \"\(key.stringValue)\""))
- }
-
- guard let array = value as? [Any] else {
- throw DecodingError._typeMismatch(at: self.codingPath, expectation: [Any].self, reality: value)
- }
-
- return _PlistUnkeyedDecodingContainer(referencing: self.decoder, wrapping: array)
- }
-
- private func _superDecoder(forKey key: __owned CodingKey) throws -> Decoder {
- self.decoder.codingPath.append(key)
- defer { self.decoder.codingPath.removeLast() }
-
- let value: Any = self.container[key.stringValue] ?? NSNull()
- return _PlistDecoder(referencing: value, at: self.decoder.codingPath, options: self.decoder.options)
- }
-
- public func superDecoder() throws -> Decoder {
- return try _superDecoder(forKey: _PlistKey.super)
- }
-
- public func superDecoder(forKey key: Key) throws -> Decoder {
- return try _superDecoder(forKey: key)
- }
-}
-
-fileprivate struct _PlistUnkeyedDecodingContainer : UnkeyedDecodingContainer {
- // MARK: Properties
-
- /// A reference to the decoder we're reading from.
- private let decoder: _PlistDecoder
-
- /// A reference to the container we're reading from.
- private let container: [Any]
-
- /// The path of coding keys taken to get to this point in decoding.
- private(set) public var codingPath: [CodingKey]
-
- /// The index of the element we're about to decode.
- private(set) public var currentIndex: Int
-
- // MARK: - Initialization
-
- /// Initializes `self` by referencing the given decoder and container.
- fileprivate init(referencing decoder: _PlistDecoder, wrapping container: [Any]) {
- self.decoder = decoder
- self.container = container
- self.codingPath = decoder.codingPath
- self.currentIndex = 0
- }
-
- // MARK: - UnkeyedDecodingContainer Methods
-
- public var count: Int? {
- return self.container.count
- }
-
- public var isAtEnd: Bool {
- return self.currentIndex >= self.count!
- }
-
- public mutating func decodeNil() throws -> Bool {
- guard !self.isAtEnd else {
- throw DecodingError.valueNotFound(Any?.self, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end."))
- }
-
- if self.container[self.currentIndex] is NSNull {
- self.currentIndex += 1
- return true
- } else {
- return false
- }
- }
-
- public mutating func decode(_ type: Bool.Type) throws -> Bool {
- guard !self.isAtEnd else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end."))
- }
-
- self.decoder.codingPath.append(_PlistKey(index: self.currentIndex))
- defer { self.decoder.codingPath.removeLast() }
-
- guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Bool.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead."))
- }
-
- self.currentIndex += 1
- return decoded
- }
-
- public mutating func decode(_ type: Int.Type) throws -> Int {
- guard !self.isAtEnd else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end."))
- }
-
- self.decoder.codingPath.append(_PlistKey(index: self.currentIndex))
- defer { self.decoder.codingPath.removeLast() }
-
- guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead."))
- }
-
- self.currentIndex += 1
- return decoded
- }
-
- public mutating func decode(_ type: Int8.Type) throws -> Int8 {
- guard !self.isAtEnd else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end."))
- }
-
- self.decoder.codingPath.append(_PlistKey(index: self.currentIndex))
- defer { self.decoder.codingPath.removeLast() }
-
- guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int8.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead."))
- }
-
- self.currentIndex += 1
- return decoded
- }
-
- public mutating func decode(_ type: Int16.Type) throws -> Int16 {
- guard !self.isAtEnd else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end."))
- }
-
- self.decoder.codingPath.append(_PlistKey(index: self.currentIndex))
- defer { self.decoder.codingPath.removeLast() }
-
- guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int16.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead."))
- }
-
- self.currentIndex += 1
- return decoded
- }
-
- public mutating func decode(_ type: Int32.Type) throws -> Int32 {
- guard !self.isAtEnd else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end."))
- }
-
- self.decoder.codingPath.append(_PlistKey(index: self.currentIndex))
- defer { self.decoder.codingPath.removeLast() }
-
- guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int32.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead."))
- }
-
- self.currentIndex += 1
- return decoded
- }
-
- public mutating func decode(_ type: Int64.Type) throws -> Int64 {
- guard !self.isAtEnd else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end."))
- }
-
- self.decoder.codingPath.append(_PlistKey(index: self.currentIndex))
- defer { self.decoder.codingPath.removeLast() }
-
- guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int64.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead."))
- }
-
- self.currentIndex += 1
- return decoded
- }
-
- public mutating func decode(_ type: UInt.Type) throws -> UInt {
- guard !self.isAtEnd else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end."))
- }
-
- self.decoder.codingPath.append(_PlistKey(index: self.currentIndex))
- defer { self.decoder.codingPath.removeLast() }
-
- guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead."))
- }
-
- self.currentIndex += 1
- return decoded
- }
-
- public mutating func decode(_ type: UInt8.Type) throws -> UInt8 {
- guard !self.isAtEnd else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end."))
- }
-
- self.decoder.codingPath.append(_PlistKey(index: self.currentIndex))
- defer { self.decoder.codingPath.removeLast() }
-
- guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt8.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead."))
- }
-
- self.currentIndex += 1
- return decoded
- }
-
- public mutating func decode(_ type: UInt16.Type) throws -> UInt16 {
- guard !self.isAtEnd else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end."))
- }
-
- self.decoder.codingPath.append(_PlistKey(index: self.currentIndex))
- defer { self.decoder.codingPath.removeLast() }
-
- guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt16.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead."))
- }
-
- self.currentIndex += 1
- return decoded
- }
-
- public mutating func decode(_ type: UInt32.Type) throws -> UInt32 {
- guard !self.isAtEnd else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end."))
- }
-
- self.decoder.codingPath.append(_PlistKey(index: self.currentIndex))
- defer { self.decoder.codingPath.removeLast() }
-
- guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt32.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead."))
- }
-
- self.currentIndex += 1
- return decoded
- }
-
- public mutating func decode(_ type: UInt64.Type) throws -> UInt64 {
- guard !self.isAtEnd else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end."))
- }
-
- self.decoder.codingPath.append(_PlistKey(index: self.currentIndex))
- defer { self.decoder.codingPath.removeLast() }
-
- guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt64.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead."))
- }
-
- self.currentIndex += 1
- return decoded
- }
-
- public mutating func decode(_ type: Float.Type) throws -> Float {
- guard !self.isAtEnd else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end."))
- }
-
- self.decoder.codingPath.append(_PlistKey(index: self.currentIndex))
- defer { self.decoder.codingPath.removeLast() }
-
- guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Float.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead."))
- }
-
- self.currentIndex += 1
- return decoded
- }
-
- public mutating func decode(_ type: Double.Type) throws -> Double {
- guard !self.isAtEnd else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end."))
- }
-
- self.decoder.codingPath.append(_PlistKey(index: self.currentIndex))
- defer { self.decoder.codingPath.removeLast() }
-
- guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Double.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead."))
- }
-
- self.currentIndex += 1
- return decoded
- }
-
- public mutating func decode(_ type: String.Type) throws -> String {
- guard !self.isAtEnd else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end."))
- }
-
- self.decoder.codingPath.append(_PlistKey(index: self.currentIndex))
- defer { self.decoder.codingPath.removeLast() }
-
- guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: String.self) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead."))
- }
-
- self.currentIndex += 1
- return decoded
- }
-
- public mutating func decode(_ type: T.Type) throws -> T {
- guard !self.isAtEnd else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end."))
- }
-
- self.decoder.codingPath.append(_PlistKey(index: self.currentIndex))
- defer { self.decoder.codingPath.removeLast() }
-
- guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: type) else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead."))
- }
-
- self.currentIndex += 1
- return decoded
- }
-
- public mutating func nestedContainer(keyedBy type: NestedKey.Type) throws -> KeyedDecodingContainer {
- self.decoder.codingPath.append(_PlistKey(index: self.currentIndex))
- defer { self.decoder.codingPath.removeLast() }
-
- guard !self.isAtEnd else {
- throw DecodingError.valueNotFound(KeyedDecodingContainer.self,
- DecodingError.Context(codingPath: self.codingPath,
- debugDescription: "Cannot get nested keyed container -- unkeyed container is at end."))
- }
-
- let value = self.container[self.currentIndex]
- guard !(value is NSNull) else {
- throw DecodingError.valueNotFound(KeyedDecodingContainer.self,
- DecodingError.Context(codingPath: self.codingPath,
- debugDescription: "Cannot get keyed decoding container -- found null value instead."))
- }
-
- guard let dictionary = value as? [String : Any] else {
- throw DecodingError._typeMismatch(at: self.codingPath, expectation: [String : Any].self, reality: value)
- }
-
- self.currentIndex += 1
- let container = _PlistKeyedDecodingContainer(referencing: self.decoder, wrapping: dictionary)
- return KeyedDecodingContainer(container)
- }
-
- public mutating func nestedUnkeyedContainer() throws -> UnkeyedDecodingContainer {
- self.decoder.codingPath.append(_PlistKey(index: self.currentIndex))
- defer { self.decoder.codingPath.removeLast() }
-
- guard !self.isAtEnd else {
- throw DecodingError.valueNotFound(UnkeyedDecodingContainer.self,
- DecodingError.Context(codingPath: self.codingPath,
- debugDescription: "Cannot get nested unkeyed container -- unkeyed container is at end."))
- }
-
- let value = self.container[self.currentIndex]
- guard !(value is NSNull) else {
- throw DecodingError.valueNotFound(UnkeyedDecodingContainer.self,
- DecodingError.Context(codingPath: self.codingPath,
- debugDescription: "Cannot get keyed decoding container -- found null value instead."))
- }
-
- guard let array = value as? [Any] else {
- throw DecodingError._typeMismatch(at: self.codingPath, expectation: [Any].self, reality: value)
- }
-
- self.currentIndex += 1
- return _PlistUnkeyedDecodingContainer(referencing: self.decoder, wrapping: array)
- }
-
- public mutating func superDecoder() throws -> Decoder {
- self.decoder.codingPath.append(_PlistKey(index: self.currentIndex))
- defer { self.decoder.codingPath.removeLast() }
-
- guard !self.isAtEnd else {
- throw DecodingError.valueNotFound(Decoder.self, DecodingError.Context(codingPath: self.codingPath,
- debugDescription: "Cannot get superDecoder() -- unkeyed container is at end."))
- }
-
- let value = self.container[self.currentIndex]
- self.currentIndex += 1
- return _PlistDecoder(referencing: value, at: self.decoder.codingPath, options: self.decoder.options)
- }
-}
-
-extension _PlistDecoder : SingleValueDecodingContainer {
- // MARK: SingleValueDecodingContainer Methods
-
- private func expectNonNull(_ type: T.Type) throws {
- guard !self.decodeNil() else {
- throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "Expected \(type) but found null value instead."))
- }
- }
-
- public func decodeNil() -> Bool {
- guard let string = self.storage.topContainer as? String else {
- return false
- }
-
- return string == _plistNull
- }
-
- public func decode(_ type: Bool.Type) throws -> Bool {
- try expectNonNull(Bool.self)
- return try self.unbox(self.storage.topContainer, as: Bool.self)!
- }
-
- public func decode(_ type: Int.Type) throws -> Int {
- try expectNonNull(Int.self)
- return try self.unbox(self.storage.topContainer, as: Int.self)!
- }
-
- public func decode(_ type: Int8.Type) throws -> Int8 {
- try expectNonNull(Int8.self)
- return try self.unbox(self.storage.topContainer, as: Int8.self)!
- }
-
- public func decode(_ type: Int16.Type) throws -> Int16 {
- try expectNonNull(Int16.self)
- return try self.unbox(self.storage.topContainer, as: Int16.self)!
- }
-
- public func decode(_ type: Int32.Type) throws -> Int32 {
- try expectNonNull(Int32.self)
- return try self.unbox(self.storage.topContainer, as: Int32.self)!
- }
-
- public func decode(_ type: Int64.Type) throws -> Int64 {
- try expectNonNull(Int64.self)
- return try self.unbox(self.storage.topContainer, as: Int64.self)!
- }
-
- public func decode(_ type: UInt.Type) throws -> UInt {
- try expectNonNull(UInt.self)
- return try self.unbox(self.storage.topContainer, as: UInt.self)!
- }
-
- public func decode(_ type: UInt8.Type) throws -> UInt8 {
- try expectNonNull(UInt8.self)
- return try self.unbox(self.storage.topContainer, as: UInt8.self)!
- }
-
- public func decode(_ type: UInt16.Type) throws -> UInt16 {
- try expectNonNull(UInt16.self)
- return try self.unbox(self.storage.topContainer, as: UInt16.self)!
- }
-
- public func decode(_ type: UInt32.Type) throws -> UInt32 {
- try expectNonNull(UInt32.self)
- return try self.unbox(self.storage.topContainer, as: UInt32.self)!
- }
-
- public func decode(_ type: UInt64.Type) throws -> UInt64 {
- try expectNonNull(UInt64.self)
- return try self.unbox(self.storage.topContainer, as: UInt64.self)!
- }
-
- public func decode(_ type: Float.Type) throws -> Float {
- try expectNonNull(Float.self)
- return try self.unbox(self.storage.topContainer, as: Float.self)!
- }
-
- public func decode(_ type: Double.Type) throws -> Double {
- try expectNonNull(Double.self)
- return try self.unbox(self.storage.topContainer, as: Double.self)!
- }
-
- public func decode(_ type: String.Type) throws -> String {
- try expectNonNull(String.self)
- return try self.unbox(self.storage.topContainer, as: String.self)!
- }
-
- public func decode(_ type: T.Type) throws -> T {
- try expectNonNull(type)
- return try self.unbox(self.storage.topContainer, as: type)!
- }
-}
-
-// MARK: - Concrete Value Representations
-
-extension _PlistDecoder {
- /// Returns the given value unboxed from a container.
- fileprivate func unbox(_ value: Any, as type: Bool.Type) throws -> Bool? {
- if let string = value as? String, string == _plistNull { return nil }
-
- if let number = value as? NSNumber {
- // TODO: Add a flag to coerce non-boolean numbers into Bools?
- if number === kCFBooleanTrue as NSNumber {
- return true
- } else if number === kCFBooleanFalse as NSNumber {
- return false
- }
-
- /* FIXME: If swift-corelibs-foundation doesn't change to use NSNumber, this code path will need to be included and tested:
- } else if let bool = value as? Bool {
- return bool
- */
-
- }
-
- throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
- }
-
- fileprivate func unbox(_ value: Any, as type: Int.Type) throws -> Int? {
- if let string = value as? String, string == _plistNull { return nil }
-
- guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
- throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
- }
-
- let int = number.intValue
- guard NSNumber(value: int) == number else {
- throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type)."))
- }
-
- return int
- }
-
- fileprivate func unbox(_ value: Any, as type: Int8.Type) throws -> Int8? {
- if let string = value as? String, string == _plistNull { return nil }
-
- guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
- throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
- }
-
- let int8 = number.int8Value
- guard NSNumber(value: int8) == number else {
- throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type)."))
- }
-
- return int8
- }
-
- fileprivate func unbox(_ value: Any, as type: Int16.Type) throws -> Int16? {
- if let string = value as? String, string == _plistNull { return nil }
-
- guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
- throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
- }
-
- let int16 = number.int16Value
- guard NSNumber(value: int16) == number else {
- throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type)."))
- }
-
- return int16
- }
-
- fileprivate func unbox(_ value: Any, as type: Int32.Type) throws -> Int32? {
- if let string = value as? String, string == _plistNull { return nil }
-
- guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
- throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
- }
-
- let int32 = number.int32Value
- guard NSNumber(value: int32) == number else {
- throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type)."))
- }
-
- return int32
- }
-
- fileprivate func unbox(_ value: Any, as type: Int64.Type) throws -> Int64? {
- if let string = value as? String, string == _plistNull { return nil }
-
- guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
- throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
- }
-
- let int64 = number.int64Value
- guard NSNumber(value: int64) == number else {
- throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type)."))
- }
-
- return int64
- }
-
- fileprivate func unbox(_ value: Any, as type: UInt.Type) throws -> UInt? {
- if let string = value as? String, string == _plistNull { return nil }
-
- guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
- throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
- }
-
- let uint = number.uintValue
- guard NSNumber(value: uint) == number else {
- throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type)."))
- }
-
- return uint
- }
-
- fileprivate func unbox(_ value: Any, as type: UInt8.Type) throws -> UInt8? {
- if let string = value as? String, string == _plistNull { return nil }
-
- guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
- throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
- }
-
- let uint8 = number.uint8Value
- guard NSNumber(value: uint8) == number else {
- throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type)."))
- }
-
- return uint8
- }
-
- fileprivate func unbox(_ value: Any, as type: UInt16.Type) throws -> UInt16? {
- if let string = value as? String, string == _plistNull { return nil }
-
- guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
- throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
- }
-
- let uint16 = number.uint16Value
- guard NSNumber(value: uint16) == number else {
- throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type)."))
- }
-
- return uint16
- }
-
- fileprivate func unbox(_ value: Any, as type: UInt32.Type) throws -> UInt32? {
- if let string = value as? String, string == _plistNull { return nil }
-
- guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
- throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
- }
-
- let uint32 = number.uint32Value
- guard NSNumber(value: uint32) == number else {
- throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type)."))
- }
-
- return uint32
- }
-
- fileprivate func unbox(_ value: Any, as type: UInt64.Type) throws -> UInt64? {
- if let string = value as? String, string == _plistNull { return nil }
-
- guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
- throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
- }
-
- let uint64 = number.uint64Value
- guard NSNumber(value: uint64) == number else {
- throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type)."))
- }
-
- return uint64
- }
-
- fileprivate func unbox(_ value: Any, as type: Float.Type) throws -> Float? {
- if let string = value as? String, string == _plistNull { return nil }
-
- guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
- throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
- }
-
- let float = number.floatValue
- guard NSNumber(value: float) == number else {
- throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type)."))
- }
-
- return float
- }
-
- fileprivate func unbox(_ value: Any, as type: Double.Type) throws -> Double? {
- if let string = value as? String, string == _plistNull { return nil }
-
- guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else {
- throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
- }
-
- let double = number.doubleValue
- guard NSNumber(value: double) == number else {
- throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type)."))
- }
-
- return double
- }
-
- fileprivate func unbox(_ value: Any, as type: String.Type) throws -> String? {
- guard let string = value as? String else {
- throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
- }
-
- return string == _plistNull ? nil : string
- }
-
- fileprivate func unbox(_ value: Any, as type: Date.Type) throws -> Date? {
- if let string = value as? String, string == _plistNull { return nil }
-
- guard let date = value as? Date else {
- throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
- }
-
- return date
- }
-
- fileprivate func unbox(_ value: Any, as type: Data.Type) throws -> Data? {
- if let string = value as? String, string == _plistNull { return nil }
-
- guard let data = value as? Data else {
- throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)
- }
-
- return data
- }
-
- fileprivate func unbox(_ value: Any, as type: T.Type) throws -> T? {
- if type == Date.self || type == NSDate.self {
- return try self.unbox(value, as: Date.self) as? T
- } else if type == Data.self || type == NSData.self {
- return try self.unbox(value, as: Data.self) as? T
- } else {
- self.storage.push(container: value)
- defer { self.storage.popContainer() }
- return try type.init(from: self)
- }
- }
-}
-
-//===----------------------------------------------------------------------===//
-// Shared Plist Null Representation
-//===----------------------------------------------------------------------===//
-
-// Since plists do not support null values by default, we will encode them as "$null".
-fileprivate let _plistNull = "$null"
-fileprivate let _plistNullNSString = NSString(string: _plistNull)
-
-//===----------------------------------------------------------------------===//
-// Shared Key Types
-//===----------------------------------------------------------------------===//
-
-fileprivate struct _PlistKey : CodingKey {
- public var stringValue: String
- public var intValue: Int?
-
- public init?(stringValue: String) {
- self.stringValue = stringValue
- self.intValue = nil
- }
-
- public init?(intValue: Int) {
- self.stringValue = "\(intValue)"
- self.intValue = intValue
- }
-
- fileprivate init(index: Int) {
- self.stringValue = "Index \(index)"
- self.intValue = index
- }
-
- fileprivate static let `super` = _PlistKey(stringValue: "super")!
-}
diff --git a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/String+SpecialCharacters.swift b/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/String+SpecialCharacters.swift
deleted file mode 100644
index e084323..0000000
--- a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/String+SpecialCharacters.swift
+++ /dev/null
@@ -1,57 +0,0 @@
-import Foundation
-
-extension String {
-
- /// Checks whether the string has escaped special character literals or not.
- ///
- /// This method won't detect an unescaped special character.
- /// For example, this method will return true for "\\n" or #"\n"#, but false for "\n"
- ///
- /// The following are the special character literals that this methods looks for:
- /// The escaped special characters \0 (null character), \\ (backslash),
- /// \t (horizontal tab), \n (line feed), \r (carriage return),
- /// \" (double quotation mark) and \' (single quotation mark),
- /// An arbitrary Unicode scalar value, written as \u{n},
- /// where n is a 1–8 digit hexadecimal number (Unicode is discussed in Unicode below)
- /// The character sequence "#
- ///
- /// - Returns: True if the string has any special character literals, false otherwise.
- func hasEscapedSpecialCharactersLiteral() -> Bool {
- let multilineLiteralAndNumberSign = ##"""
- """#
- """##
- let patterns = [
- // Matches \u{n} where n is a 1–8 digit hexadecimal number
- try? NSRegularExpression(pattern: #"\\u\{[a-fA-f0-9]{1,8}\}"#, options: .init()),
- try? NSRegularExpression(pattern: #"\0"#, options: .ignoreMetacharacters),
- try? NSRegularExpression(pattern: #"\\"#, options: .ignoreMetacharacters),
- try? NSRegularExpression(pattern: #"\t"#, options: .ignoreMetacharacters),
- try? NSRegularExpression(pattern: #"\n"#, options: .ignoreMetacharacters),
- try? NSRegularExpression(pattern: #"\r"#, options: .ignoreMetacharacters),
- try? NSRegularExpression(pattern: #"\""#, options: .ignoreMetacharacters),
- try? NSRegularExpression(pattern: #"\'"#, options: .ignoreMetacharacters),
- try? NSRegularExpression(pattern: multilineLiteralAndNumberSign, options: .ignoreMetacharacters),
- ]
- let matches = patterns.compactMap { $0?.firstMatch(in: self, options: .init(), range: NSRange.init(location: 0, length: self.count)) }
- return matches.count > 0
- }
-
-
- /// This method calculates how many number signs (#) we need to add around a string
- /// literal to properly escape its content.
- ///
- /// Multiple # are needed when the literal contains "#, "##, "### ...
- ///
- /// - Returns: The number of "number signs(#)" needed around a string literal.
- /// When there is no "#, ... return 1
- func numberOfNumberSignsNeeded() -> Int {
- let pattern = try! NSRegularExpression(pattern: ##""#{1,}"##, options: .init())
-
- let matches = pattern.matches(in: self, options: .init(), range: NSRange.init(location: 0, length: self.count))
-
- // If we have "## then the length of the match is 3,
- // which is also the number of "number signs (#)" we need to add
- // before and after the string literal
- return matches.map { $0.range.length }.max() ?? 1
- }
-}
diff --git a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/View.swift b/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/View.swift
deleted file mode 100644
index 053bb85..0000000
--- a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/View.swift
+++ /dev/null
@@ -1,891 +0,0 @@
-#if os(iOS) || os(macOS) || os(tvOS)
-#if os(macOS)
-import Cocoa
-#endif
-import SceneKit
-import SpriteKit
-#if os(iOS) || os(tvOS)
-import UIKit
-#endif
-#if os(iOS) || os(macOS)
-import WebKit
-#endif
-
-#if os(iOS) || os(tvOS)
-public struct ViewImageConfig {
- public enum Orientation {
- case landscape
- case portrait
- }
- public enum TabletOrientation {
- public enum PortraitSplits {
- case oneThird
- case twoThirds
- case full
- }
- public enum LandscapeSplits {
- case oneThird
- case oneHalf
- case twoThirds
- case full
- }
- case landscape(splitView: LandscapeSplits)
- case portrait(splitView: PortraitSplits)
- }
-
- public var safeArea: UIEdgeInsets
- public var size: CGSize?
- public var traits: UITraitCollection
-
- public init(
- safeArea: UIEdgeInsets = .zero,
- size: CGSize? = nil,
- traits: UITraitCollection = .init()
- ) {
- self.safeArea = safeArea
- self.size = size
- self.traits = traits
- }
-
- #if os(iOS)
- public static let iPhoneSe = ViewImageConfig.iPhoneSe(.portrait)
-
- public static func iPhoneSe(_ orientation: Orientation) -> ViewImageConfig {
- let safeArea: UIEdgeInsets
- let size: CGSize
- switch orientation {
- case .landscape:
- safeArea = .zero
- size = .init(width: 568, height: 320)
- case .portrait:
- safeArea = .init(top: 20, left: 0, bottom: 0, right: 0)
- size = .init(width: 320, height: 568)
- }
- return .init(safeArea: safeArea, size: size, traits: .iPhoneSe(orientation))
- }
-
- public static let iPhone8 = ViewImageConfig.iPhone8(.portrait)
-
- public static func iPhone8(_ orientation: Orientation) -> ViewImageConfig {
- let safeArea: UIEdgeInsets
- let size: CGSize
- switch orientation {
- case .landscape:
- safeArea = .zero
- size = .init(width: 667, height: 375)
- case .portrait:
- safeArea = .init(top: 20, left: 0, bottom: 0, right: 0)
- size = .init(width: 375, height: 667)
- }
- return .init(safeArea: safeArea, size: size, traits: .iPhone8(orientation))
- }
-
- public static let iPhone8Plus = ViewImageConfig.iPhone8Plus(.portrait)
-
- public static func iPhone8Plus(_ orientation: Orientation) -> ViewImageConfig {
- let safeArea: UIEdgeInsets
- let size: CGSize
- switch orientation {
- case .landscape:
- safeArea = .zero
- size = .init(width: 736, height: 414)
- case .portrait:
- safeArea = .init(top: 20, left: 0, bottom: 0, right: 0)
- size = .init(width: 414, height: 736)
- }
- return .init(safeArea: safeArea, size: size, traits: .iPhone8Plus(orientation))
- }
-
- public static let iPhoneX = ViewImageConfig.iPhoneX(.portrait)
-
- public static func iPhoneX(_ orientation: Orientation) -> ViewImageConfig {
- let safeArea: UIEdgeInsets
- let size: CGSize
- switch orientation {
- case .landscape:
- safeArea = .init(top: 0, left: 44, bottom: 24, right: 44)
- size = .init(width: 812, height: 375)
- case .portrait:
- safeArea = .init(top: 44, left: 0, bottom: 34, right: 0)
- size = .init(width: 375, height: 812)
- }
- return .init(safeArea: safeArea, size: size, traits: .iPhoneX(orientation))
- }
-
- public static let iPhoneXsMax = ViewImageConfig.iPhoneXsMax(.portrait)
-
- public static func iPhoneXsMax(_ orientation: Orientation) -> ViewImageConfig {
- let safeArea: UIEdgeInsets
- let size: CGSize
- switch orientation {
- case .landscape:
- safeArea = .init(top: 0, left: 44, bottom: 24, right: 44)
- size = .init(width: 896, height: 414)
- case .portrait:
- safeArea = .init(top: 44, left: 0, bottom: 34, right: 0)
- size = .init(width: 414, height: 896)
- }
- return .init(safeArea: safeArea, size: size, traits: .iPhoneXsMax(orientation))
- }
-
- @available(iOS 11.0, *)
- public static let iPhoneXr = ViewImageConfig.iPhoneXr(.portrait)
-
- @available(iOS 11.0, *)
- public static func iPhoneXr(_ orientation: Orientation) -> ViewImageConfig {
- let safeArea: UIEdgeInsets
- let size: CGSize
- switch orientation {
- case .landscape:
- safeArea = .init(top: 0, left: 44, bottom: 24, right: 44)
- size = .init(width: 896, height: 414)
- case .portrait:
- safeArea = .init(top: 44, left: 0, bottom: 34, right: 0)
- size = .init(width: 414, height: 896)
- }
- return .init(safeArea: safeArea, size: size, traits: .iPhoneXr(orientation))
- }
-
- public static let iPadMini = ViewImageConfig.iPadMini(.landscape)
-
- public static func iPadMini(_ orientation: Orientation) -> ViewImageConfig {
- switch orientation {
- case .landscape:
- return ViewImageConfig.iPadMini(.landscape(splitView: .full))
- case .portrait:
- return ViewImageConfig.iPadMini(.portrait(splitView: .full))
- }
- }
-
- public static func iPadMini(_ orientation: TabletOrientation) -> ViewImageConfig {
- let size: CGSize
- let traits: UITraitCollection
- switch orientation {
- case .landscape(let splitView):
- switch splitView {
- case .oneThird:
- size = .init(width: 320, height: 768)
- traits = .iPadMini_Compact_SplitView
- case .oneHalf:
- size = .init(width: 507, height: 768)
- traits = .iPadMini_Compact_SplitView
- case .twoThirds:
- size = .init(width: 694, height: 768)
- traits = .iPadMini
- case .full:
- size = .init(width: 1024, height: 768)
- traits = .iPadMini
- }
- case .portrait(let splitView):
- switch splitView {
- case .oneThird:
- size = .init(width: 320, height: 1024)
- traits = .iPadMini_Compact_SplitView
- case .twoThirds:
- size = .init(width: 438, height: 1024)
- traits = .iPadMini_Compact_SplitView
- case .full:
- size = .init(width: 768, height: 1024)
- traits = .iPadMini
- }
- }
- return .init(safeArea: .init(top: 20, left: 0, bottom: 0, right: 0), size: size, traits: traits)
- }
-
- public static let iPadPro10_5 = ViewImageConfig.iPadPro10_5(.landscape)
-
- public static func iPadPro10_5(_ orientation: Orientation) -> ViewImageConfig {
- switch orientation {
- case .landscape:
- return ViewImageConfig.iPadPro10_5(.landscape(splitView: .full))
- case .portrait:
- return ViewImageConfig.iPadPro10_5(.portrait(splitView: .full))
- }
- }
-
- public static func iPadPro10_5(_ orientation: TabletOrientation) -> ViewImageConfig {
- let size: CGSize
- let traits: UITraitCollection
- switch orientation {
- case .landscape(let splitView):
- switch splitView {
- case .oneThird:
- size = .init(width: 320, height: 834)
- traits = .iPadPro10_5_Compact_SplitView
- case .oneHalf:
- size = .init(width: 551, height: 834)
- traits = .iPadPro10_5_Compact_SplitView
- case .twoThirds:
- size = .init(width: 782, height: 834)
- traits = .iPadPro10_5
- case .full:
- size = .init(width: 1112, height: 834)
- traits = .iPadPro10_5
- }
- case .portrait(let splitView):
- switch splitView {
- case .oneThird:
- size = .init(width: 320, height: 1112)
- traits = .iPadPro10_5_Compact_SplitView
- case .twoThirds:
- size = .init(width: 504, height: 1112)
- traits = .iPadPro10_5_Compact_SplitView
- case .full:
- size = .init(width: 834, height: 1112)
- traits = .iPadPro10_5
- }
- }
- return .init(safeArea: .init(top: 20, left: 0, bottom: 0, right: 0), size: size, traits: traits)
- }
-
- public static let iPadPro11 = ViewImageConfig.iPadPro11(.landscape)
-
- public static func iPadPro11(_ orientation: Orientation) -> ViewImageConfig {
- switch orientation {
- case .landscape:
- return ViewImageConfig.iPadPro11(.landscape(splitView: .full))
- case .portrait:
- return ViewImageConfig.iPadPro11(.portrait(splitView: .full))
- }
- }
-
- public static func iPadPro11(_ orientation: TabletOrientation) -> ViewImageConfig {
- let size: CGSize
- let traits: UITraitCollection
- switch orientation {
- case .landscape(let splitView):
- switch splitView {
- case .oneThird:
- size = .init(width: 375, height: 834)
- traits = .iPadPro11_Compact_SplitView
- case .oneHalf:
- size = .init(width: 592, height: 834)
- traits = .iPadPro11_Compact_SplitView
- case .twoThirds:
- size = .init(width: 809, height: 834)
- traits = .iPadPro11
- case .full:
- size = .init(width: 1194, height: 834)
- traits = .iPadPro11
- }
- case .portrait(let splitView):
- switch splitView {
- case .oneThird:
- size = .init(width: 320, height: 1194)
- traits = .iPadPro11_Compact_SplitView
- case .twoThirds:
- size = .init(width: 504, height: 1194)
- traits = .iPadPro11_Compact_SplitView
- case .full:
- size = .init(width: 834, height: 1194)
- traits = .iPadPro11
- }
- }
- return .init(safeArea: .init(top: 24, left: 0, bottom: 20, right: 0), size: size, traits: traits)
- }
-
- public static let iPadPro12_9 = ViewImageConfig.iPadPro12_9(.landscape)
-
- public static func iPadPro12_9(_ orientation: Orientation) -> ViewImageConfig {
- switch orientation {
- case .landscape:
- return ViewImageConfig.iPadPro12_9(.landscape(splitView: .full))
- case .portrait:
- return ViewImageConfig.iPadPro12_9(.portrait(splitView: .full))
- }
- }
-
- public static func iPadPro12_9(_ orientation: TabletOrientation) -> ViewImageConfig {
- let size: CGSize
- let traits: UITraitCollection
- switch orientation {
- case .landscape(let splitView):
- switch splitView {
- case .oneThird:
- size = .init(width: 375, height: 1024)
- traits = .iPadPro12_9_Compact_SplitView
- case .oneHalf:
- size = .init(width: 678, height: 1024)
- traits = .iPadPro12_9
- case .twoThirds:
- size = .init(width: 981, height: 1024)
- traits = .iPadPro12_9
- case .full:
- size = .init(width: 1366, height: 1024)
- traits = .iPadPro12_9
- }
-
- case .portrait(let splitView):
- switch splitView {
- case .oneThird:
- size = .init(width: 375, height: 1366)
- traits = .iPadPro12_9_Compact_SplitView
- case .twoThirds:
- size = .init(width: 639, height: 1366)
- traits = .iPadPro12_9_Compact_SplitView
- case .full:
- size = .init(width: 1024, height: 1366)
- traits = .iPadPro12_9
- }
-
- }
- return .init(safeArea: .init(top: 20, left: 0, bottom: 0, right: 0), size: size, traits: traits)
- }
- #elseif os(tvOS)
- public static let tv = ViewImageConfig(
- safeArea: .init(top: 60, left: 90, bottom: 60, right: 90),
- size: .init(width: 1920, height: 1080),
- traits: .init()
- )
- public static let tv4K = ViewImageConfig(
- safeArea: .init(top: 120, left: 180, bottom: 120, right: 180),
- size: .init(width: 3840, height: 2160),
- traits: .init()
- )
- #endif
-}
-
-extension UITraitCollection {
- #if os(iOS)
- public static func iPhoneSe(_ orientation: ViewImageConfig.Orientation)
- -> UITraitCollection {
- let base: [UITraitCollection] = [
-// .init(displayGamut: .SRGB),
-// .init(displayScale: 2),
- .init(forceTouchCapability: .available),
- .init(layoutDirection: .leftToRight),
- .init(preferredContentSizeCategory: .medium),
- .init(userInterfaceIdiom: .phone)
- ]
- switch orientation {
- case .landscape:
- return .init(
- traitsFrom: base + [
- .init(horizontalSizeClass: .compact),
- .init(verticalSizeClass: .compact)
- ]
- )
- case .portrait:
- return .init(
- traitsFrom: base + [
- .init(horizontalSizeClass: .compact),
- .init(verticalSizeClass: .regular),
- ]
- )
- }
- }
-
- public static func iPhone8(_ orientation: ViewImageConfig.Orientation)
- -> UITraitCollection {
- let base: [UITraitCollection] = [
-// .init(displayGamut: .P3),
-// .init(displayScale: 2),
- .init(forceTouchCapability: .available),
- .init(layoutDirection: .leftToRight),
- .init(preferredContentSizeCategory: .medium),
- .init(userInterfaceIdiom: .phone)
- ]
- switch orientation {
- case .landscape:
- return .init(
- traitsFrom: base + [
- .init(horizontalSizeClass: .compact),
- .init(verticalSizeClass: .compact)
- ]
- )
- case .portrait:
- return .init(
- traitsFrom: base + [
- .init(horizontalSizeClass: .compact),
- .init(verticalSizeClass: .regular)
- ]
- )
- }
- }
-
- public static func iPhone8Plus(_ orientation: ViewImageConfig.Orientation)
- -> UITraitCollection {
- let base: [UITraitCollection] = [
-// .init(displayGamut: .P3),
-// .init(displayScale: 3),
- .init(forceTouchCapability: .available),
- .init(layoutDirection: .leftToRight),
- .init(preferredContentSizeCategory: .medium),
- .init(userInterfaceIdiom: .phone)
- ]
- switch orientation {
- case .landscape:
- return .init(
- traitsFrom: base + [
- .init(horizontalSizeClass: .regular),
- .init(verticalSizeClass: .compact)
- ]
- )
- case .portrait:
- return .init(
- traitsFrom: base + [
- .init(horizontalSizeClass: .compact),
- .init(verticalSizeClass: .regular)
- ]
- )
- }
- }
-
- public static func iPhoneX(_ orientation: ViewImageConfig.Orientation)
- -> UITraitCollection {
- let base: [UITraitCollection] = [
-// .init(displayGamut: .P3),
-// .init(displayScale: 3),
- .init(forceTouchCapability: .available),
- .init(layoutDirection: .leftToRight),
- .init(preferredContentSizeCategory: .medium),
- .init(userInterfaceIdiom: .phone)
- ]
- switch orientation {
- case .landscape:
- return .init(
- traitsFrom: base + [
- .init(horizontalSizeClass: .compact),
- .init(verticalSizeClass: .compact)
- ]
- )
- case .portrait:
- return .init(
- traitsFrom: base + [
- .init(horizontalSizeClass: .compact),
- .init(verticalSizeClass: .regular)
- ]
- )
- }
- }
-
- public static func iPhoneXr(_ orientation: ViewImageConfig.Orientation)
- -> UITraitCollection {
- let base: [UITraitCollection] = [
-// .init(displayGamut: .P3),
-// .init(displayScale: 2),
- .init(forceTouchCapability: .unavailable),
- .init(layoutDirection: .leftToRight),
- .init(preferredContentSizeCategory: .medium),
- .init(userInterfaceIdiom: .phone)
- ]
- switch orientation {
- case .landscape:
- return .init(
- traitsFrom: base + [
- .init(horizontalSizeClass: .regular),
- .init(verticalSizeClass: .compact)
- ]
- )
- case .portrait:
- return .init(
- traitsFrom: base + [
- .init(horizontalSizeClass: .compact),
- .init(verticalSizeClass: .regular)
- ]
- )
- }
- }
-
- public static func iPhoneXsMax(_ orientation: ViewImageConfig.Orientation)
- -> UITraitCollection {
- let base: [UITraitCollection] = [
-// .init(displayGamut: .P3),
-// .init(displayScale: 3),
- .init(forceTouchCapability: .available),
- .init(layoutDirection: .leftToRight),
- .init(preferredContentSizeCategory: .medium),
- .init(userInterfaceIdiom: .phone)
- ]
- switch orientation {
- case .landscape:
- return .init(
- traitsFrom: base + [
- .init(horizontalSizeClass: .regular),
- .init(verticalSizeClass: .compact)
- ]
- )
- case .portrait:
- return .init(
- traitsFrom: [
- .init(horizontalSizeClass: .compact),
- .init(verticalSizeClass: .regular)
- ]
- )
- }
- }
-
- public static let iPadMini = iPad
- public static let iPadMini_Compact_SplitView = iPadCompactSplitView
- public static let iPadPro10_5 = iPad
- public static let iPadPro10_5_Compact_SplitView = iPadCompactSplitView
- public static let iPadPro11 = iPad
- public static let iPadPro11_Compact_SplitView = iPadCompactSplitView
- public static let iPadPro12_9 = iPad
- public static let iPadPro12_9_Compact_SplitView = iPadCompactSplitView
-
- private static let iPad = UITraitCollection(
- traitsFrom: [
-// .init(displayScale: 2),
- .init(horizontalSizeClass: .regular),
- .init(verticalSizeClass: .regular),
- .init(userInterfaceIdiom: .pad)
- ]
- )
-
- private static let iPadCompactSplitView = UITraitCollection(
- traitsFrom: [
- .init(horizontalSizeClass: .compact),
- .init(verticalSizeClass: .regular),
- .init(userInterfaceIdiom: .pad)
- ]
- )
- #elseif os(tvOS)
- // TODO
- #endif
-}
-#endif
-
-func addImagesForRenderedViews(_ view: View) -> [Async] {
- return view.snapshot
- .map { async in
- [
- Async { callback in
- async.run { image in
- let imageView = ImageView()
- imageView.image = image
- imageView.frame = view.frame
- #if os(macOS)
- view.superview?.addSubview(imageView, positioned: .above, relativeTo: view)
- #elseif os(iOS) || os(tvOS)
- view.superview?.insertSubview(imageView, aboveSubview: view)
- #endif
- callback(imageView)
- }
- }
- ]
- }
- ?? view.subviews.flatMap(addImagesForRenderedViews)
-}
-
-extension View {
- var snapshot: Async? {
- func inWindow(_ perform: () -> T) -> T {
- #if os(macOS)
- let superview = self.superview
- defer { superview?.addSubview(self) }
- let window = ScaledWindow()
- window.contentView = NSView()
- window.contentView?.addSubview(self)
- window.makeKey()
- #endif
- return perform()
- }
- #if (os(iOS) && !targetEnvironment(macCatalyst)) || os(tvOS)
- if let glkView = self as? GLKView {
- return Async(value: inWindow { glkView.snapshot })
- }
- #endif
- if let scnView = self as? SCNView {
- return Async(value: inWindow { scnView.snapshot() })
- } else if let skView = self as? SKView {
- if #available(macOS 10.11, *) {
- let cgImage = inWindow { skView.texture(from: skView.scene!)!.cgImage() }
- #if os(macOS)
- let image = Image(cgImage: cgImage, size: skView.bounds.size)
- #elseif os(iOS) || os(tvOS)
- let image = Image(cgImage: cgImage)
- #endif
- return Async(value: image)
- } else {
- fatalError("Taking SKView snapshots requires macOS 10.11 or greater")
- }
- }
- #if os(iOS) || os(macOS)
- if let wkWebView = self as? WKWebView {
- return Async { callback in
- let delegate = NavigationDelegate()
- let work = {
- if #available(iOS 11.0, macOS 10.13, *) {
- inWindow {
- guard wkWebView.frame.width != 0, wkWebView.frame.height != 0 else {
- callback(Image())
- return
- }
- wkWebView.takeSnapshot(with: nil) { image, _ in
- _ = delegate
- callback(image!)
- }
- }
- } else {
- #if os(iOS)
- fatalError("Taking WKWebView snapshots requires iOS 11.0 or greater")
- #elseif os(macOS)
- fatalError("Taking WKWebView snapshots requires macOS 10.13 or greater")
- #endif
- }
- }
-
- if wkWebView.isLoading {
- delegate.didFinish = work
- wkWebView.navigationDelegate = delegate
- } else {
- work()
- }
- }
- }
- #endif
- return nil
- }
- #if os(iOS) || os(tvOS)
- func asImage() -> Image {
- let renderer = UIGraphicsImageRenderer(bounds: bounds)
- return renderer.image { rendererContext in
- layer.render(in: rendererContext.cgContext)
- }
- }
- #endif
-}
-
-#if os(iOS) || os(macOS)
-private final class NavigationDelegate: NSObject, WKNavigationDelegate {
- var didFinish: () -> Void
-
- init(didFinish: @escaping () -> Void = {}) {
- self.didFinish = didFinish
- }
-
- func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
- webView.evaluateJavaScript("document.readyState") { _, _ in
- self.didFinish()
- }
- }
-}
-#endif
-
-#if os(iOS) || os(tvOS)
-extension UIApplication {
- static var sharedIfAvailable: UIApplication? {
- let sharedSelector = NSSelectorFromString("sharedApplication")
- guard UIApplication.responds(to: sharedSelector) else {
- return nil
- }
-
- let shared = UIApplication.perform(sharedSelector)
- return shared?.takeUnretainedValue() as! UIApplication?
- }
-}
-
-func prepareView(
- config: ViewImageConfig,
- drawHierarchyInKeyWindow: Bool,
- traits: UITraitCollection,
- view: UIView,
- viewController: UIViewController
- ) -> () -> Void {
- let size = config.size ?? viewController.view.frame.size
- view.frame.size = size
- if view != viewController.view {
- viewController.view.bounds = view.bounds
- viewController.view.addSubview(view)
- }
- let traits = UITraitCollection(traitsFrom: [config.traits, traits])
- let window: UIWindow
- if drawHierarchyInKeyWindow {
- guard let keyWindow = getKeyWindow() else {
- fatalError("'drawHierarchyInKeyWindow' requires tests to be run in a host application")
- }
- window = keyWindow
- window.frame.size = size
- } else {
- window = Window(
- config: .init(safeArea: config.safeArea, size: config.size ?? size, traits: traits),
- viewController: viewController
- )
- }
- let dispose = add(traits: traits, viewController: viewController, to: window)
-
- if size.width == 0 || size.height == 0 {
- // Try to call sizeToFit() if the view still has invalid size
- view.sizeToFit()
- view.setNeedsLayout()
- view.layoutIfNeeded()
- }
-
- return dispose
-}
-
-func snapshotView(
- config: ViewImageConfig,
- drawHierarchyInKeyWindow: Bool,
- traits: UITraitCollection,
- view: UIView,
- viewController: UIViewController
- )
- -> Async {
- let initialFrame = view.frame
- let dispose = prepareView(
- config: config,
- drawHierarchyInKeyWindow: drawHierarchyInKeyWindow,
- traits: traits,
- view: view,
- viewController: viewController
- )
- // NB: Avoid safe area influence.
- if config.safeArea == .zero { view.frame.origin = .init(x: offscreen, y: offscreen) }
-
- return (view.snapshot ?? Async { callback in
- addImagesForRenderedViews(view).sequence().run { views in
- callback(
- renderer(bounds: view.bounds, for: traits).image { ctx in
- if drawHierarchyInKeyWindow {
- view.drawHierarchy(in: view.bounds, afterScreenUpdates: true)
- } else {
- view.layer.render(in: ctx.cgContext)
- }
- }
- )
- views.forEach { $0.removeFromSuperview() }
- view.frame = initialFrame
- }
- }).map { dispose(); return $0 }
-}
-
-private let offscreen: CGFloat = 10_000
-
-func renderer(bounds: CGRect, for traits: UITraitCollection) -> UIGraphicsImageRenderer {
- let renderer: UIGraphicsImageRenderer
- if #available(iOS 11.0, tvOS 11.0, *) {
- renderer = UIGraphicsImageRenderer(bounds: bounds, format: .init(for: traits))
- } else {
- renderer = UIGraphicsImageRenderer(bounds: bounds)
- }
- return renderer
-}
-
-private func add(traits: UITraitCollection, viewController: UIViewController, to window: UIWindow) -> () -> Void {
- let rootViewController: UIViewController
- if viewController != window.rootViewController {
- rootViewController = UIViewController()
- rootViewController.view.backgroundColor = .clear
- rootViewController.view.frame = window.frame
- rootViewController.view.translatesAutoresizingMaskIntoConstraints =
- viewController.view.translatesAutoresizingMaskIntoConstraints
- rootViewController.preferredContentSize = rootViewController.view.frame.size
- viewController.view.frame = rootViewController.view.frame
- rootViewController.view.addSubview(viewController.view)
- if viewController.view.translatesAutoresizingMaskIntoConstraints {
- viewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
- } else {
- NSLayoutConstraint.activate([
- viewController.view.topAnchor.constraint(equalTo: rootViewController.view.topAnchor),
- viewController.view.bottomAnchor.constraint(equalTo: rootViewController.view.bottomAnchor),
- viewController.view.leadingAnchor.constraint(equalTo: rootViewController.view.leadingAnchor),
- viewController.view.trailingAnchor.constraint(equalTo: rootViewController.view.trailingAnchor),
- ])
- }
- rootViewController.addChild(viewController)
- } else {
- rootViewController = viewController
- }
- rootViewController.setOverrideTraitCollection(traits, forChild: viewController)
- viewController.didMove(toParent: rootViewController)
-
- window.rootViewController = rootViewController
-
- rootViewController.beginAppearanceTransition(true, animated: false)
- rootViewController.endAppearanceTransition()
-
- rootViewController.view.setNeedsLayout()
- rootViewController.view.layoutIfNeeded()
-
- viewController.view.setNeedsLayout()
- viewController.view.layoutIfNeeded()
-
- return {
- rootViewController.beginAppearanceTransition(false, animated: false)
- rootViewController.endAppearanceTransition()
- window.rootViewController = nil
- }
-}
-
-private func getKeyWindow() -> UIWindow? {
- var window: UIWindow?
- if #available(iOS 13.0, *) {
- window = UIApplication.sharedIfAvailable?.windows.first { $0.isKeyWindow }
- } else {
- window = UIApplication.sharedIfAvailable?.keyWindow
- }
- return window
-}
-
-private final class Window: UIWindow {
- var config: ViewImageConfig
-
- init(config: ViewImageConfig, viewController: UIViewController) {
- let size = config.size ?? viewController.view.bounds.size
- self.config = config
- super.init(frame: .init(origin: .zero, size: size))
-
- // NB: Safe area renders inaccurately for UI{Navigation,TabBar}Controller.
- // Fixes welcome!
- if viewController is UINavigationController {
- self.frame.size.height -= self.config.safeArea.top
- self.config.safeArea.top = 0
- } else if let viewController = viewController as? UITabBarController {
- self.frame.size.height -= self.config.safeArea.bottom
- self.config.safeArea.bottom = 0
- if viewController.selectedViewController is UINavigationController {
- self.frame.size.height -= self.config.safeArea.top
- self.config.safeArea.top = 0
- }
- }
- self.isHidden = false
- }
-
- required init?(coder aDecoder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
-
- @available(iOS 11.0, *)
- override var safeAreaInsets: UIEdgeInsets {
- #if os(iOS)
- let removeTopInset = self.config.safeArea == .init(top: 20, left: 0, bottom: 0, right: 0)
- && self.rootViewController?.prefersStatusBarHidden ?? false
- if removeTopInset { return .zero }
- #endif
- return self.config.safeArea
- }
-}
-#endif
-
-#if os(macOS)
-import Cocoa
-
-private final class ScaledWindow: NSWindow {
- override var backingScaleFactor: CGFloat {
- return 2
- }
-}
-#endif
-#endif
-
-extension Array {
- func sequence() -> Async<[A]> where Element == Async {
- guard !self.isEmpty else { return Async(value: []) }
- return Async<[A]> { callback in
- var result = [A?](repeating: nil, count: self.count)
- result.reserveCapacity(self.count)
- var count = 0
- zip(self.indices, self).forEach { idx, async in
- async.run {
- result[idx] = $0
- count += 1
- if count == self.count {
- callback(result as! [A])
- }
- }
- }
- }
- }
-}
diff --git a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/XCTAttachment.swift b/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/XCTAttachment.swift
deleted file mode 100644
index 312d8bc..0000000
--- a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/XCTAttachment.swift
+++ /dev/null
@@ -1,8 +0,0 @@
-#if os(Linux)
-import Foundation
-
-public struct XCTAttachment {
- public init(data: Data) {}
- public init(data: Data, uniformTypeIdentifier: String) {}
-}
-#endif
diff --git a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Diff.swift b/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Diff.swift
deleted file mode 100644
index 20d264c..0000000
--- a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Diff.swift
+++ /dev/null
@@ -1,125 +0,0 @@
-import Foundation
-
-struct Difference {
- enum Which {
- case first
- case second
- case both
- }
-
- let elements: [A]
- let which: Which
-}
-
-func diff(_ fst: [A], _ snd: [A]) -> [Difference] {
- var idxsOf = [A: [Int]]()
- fst.enumerated().forEach { idxsOf[$1, default: []].append($0) }
-
- let sub = snd.enumerated().reduce((overlap: [Int: Int](), fst: 0, snd: 0, len: 0)) { sub, sndPair in
- (idxsOf[sndPair.element] ?? [])
- .reduce((overlap: [Int: Int](), fst: sub.fst, snd: sub.snd, len: sub.len)) { innerSub, fstIdx in
-
- var newOverlap = innerSub.overlap
- newOverlap[fstIdx] = (sub.overlap[fstIdx - 1] ?? 0) + 1
-
- if let newLen = newOverlap[fstIdx], newLen > sub.len {
- return (newOverlap, fstIdx - newLen + 1, sndPair.offset - newLen + 1, newLen)
- }
- return (newOverlap, innerSub.fst, innerSub.snd, innerSub.len)
- }
- }
- let (_, fstIdx, sndIdx, len) = sub
-
- if len == 0 {
- let fstDiff = fst.isEmpty ? [] : [Difference(elements: fst, which: .first)]
- let sndDiff = snd.isEmpty ? [] : [Difference(elements: snd, which: .second)]
- return fstDiff + sndDiff
- } else {
- let fstDiff = diff(Array(fst.prefix(upTo: fstIdx)), Array(snd.prefix(upTo: sndIdx)))
- let midDiff = [Difference(elements: Array(fst.suffix(from: fstIdx).prefix(len)), which: .both)]
- let lstDiff = diff(Array(fst.suffix(from: fstIdx + len)), Array(snd.suffix(from: sndIdx + len)))
- return fstDiff + midDiff + lstDiff
- }
-}
-
-let minus = "−"
-let plus = "+"
-private let figureSpace = "\u{2007}"
-
-struct Hunk {
- let fstIdx: Int
- let fstLen: Int
- let sndIdx: Int
- let sndLen: Int
- let lines: [String]
-
- var patchMark: String {
- let fstMark = "\(minus)\(fstIdx + 1),\(fstLen)"
- let sndMark = "\(plus)\(sndIdx + 1),\(sndLen)"
- return "@@ \(fstMark) \(sndMark) @@"
- }
-
- // Semigroup
-
- static func +(lhs: Hunk, rhs: Hunk) -> Hunk {
- return Hunk(
- fstIdx: lhs.fstIdx + rhs.fstIdx,
- fstLen: lhs.fstLen + rhs.fstLen,
- sndIdx: lhs.sndIdx + rhs.sndIdx,
- sndLen: lhs.sndLen + rhs.sndLen,
- lines: lhs.lines + rhs.lines
- )
- }
-
- // Monoid
-
- init(fstIdx: Int = 0, fstLen: Int = 0, sndIdx: Int = 0, sndLen: Int = 0, lines: [String] = []) {
- self.fstIdx = fstIdx
- self.fstLen = fstLen
- self.sndIdx = sndIdx
- self.sndLen = sndLen
- self.lines = lines
- }
-
- init(idx: Int = 0, len: Int = 0, lines: [String] = []) {
- self.init(fstIdx: idx, fstLen: len, sndIdx: idx, sndLen: len, lines: lines)
- }
-}
-
-func chunk(diff diffs: [Difference], context ctx: Int = 4) -> [Hunk] {
- func prepending(_ prefix: String) -> (String) -> String {
- return { prefix + $0 + ($0.hasSuffix(" ") ? "¬" : "") }
- }
- let changed: (Hunk) -> Bool = { $0.lines.contains(where: { $0.hasPrefix(minus) || $0.hasPrefix(plus) }) }
-
- let (hunk, hunks) = diffs
- .reduce((current: Hunk(), hunks: [Hunk]())) { cursor, diff in
- let (current, hunks) = cursor
- let len = diff.elements.count
-
- switch diff.which {
- case .both where len > ctx * 2:
- let hunk = current + Hunk(len: ctx, lines: diff.elements.prefix(ctx).map(prepending(figureSpace)))
- let next = Hunk(
- fstIdx: current.fstIdx + current.fstLen + len - ctx,
- fstLen: ctx,
- sndIdx: current.sndIdx + current.sndLen + len - ctx,
- sndLen: ctx,
- lines: (diff.elements.suffix(ctx) as ArraySlice).map(prepending(figureSpace))
- )
- return (next, changed(hunk) ? hunks + [hunk] : hunks)
- case .both where current.lines.isEmpty:
- let lines = (diff.elements.suffix(ctx) as ArraySlice).map(prepending(figureSpace))
- let count = lines.count
- return (current + Hunk(idx: len - count, len: count, lines: lines), hunks)
- case .both:
- return (current + Hunk(len: len, lines: diff.elements.map(prepending(figureSpace))), hunks)
- case .first:
- return (current + Hunk(fstLen: len, lines: diff.elements.map(prepending(minus))), hunks)
- case .second:
- return (current + Hunk(sndLen: len, lines: diff.elements.map(prepending(plus))), hunks)
- }
- }
-
- return changed(hunk) ? hunks + [hunk] : hunks
-}
diff --git a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Diffing.swift b/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Diffing.swift
deleted file mode 100644
index 663271a..0000000
--- a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Diffing.swift
+++ /dev/null
@@ -1,34 +0,0 @@
-import Foundation
-import XCTest
-
-/// The ability to compare `Value`s and convert them to and from `Data`.
-public struct Diffing {
- /// Converts a value _to_ data.
- public var toData: (Value) -> Data
-
- /// Produces a value _from_ data.
- public var fromData: (Data) -> Value
-
- /// Compares two values. If the values do not match, returns a failure message and artifacts describing the failure.
- public var diff: (Value, Value) -> (String, [XCTAttachment])?
-
- /// Creates a new `Diffing` on `Value`.
- ///
- /// - Parameters:
- /// - toData: A function used to convert a value _to_ data.
- /// - value: A value to convert into data.
- /// - fromData: A function used to produce a value _from_ data.
- /// - data: Data to convert into a value.
- /// - diff: A function used to compare two values. If the values do not match, returns a failure message and artifacts describing the failure.
- /// - lhs: A value to compare.
- /// - rhs: Another value to compare.
- public init(
- toData: @escaping (_ value: Value) -> Data,
- fromData: @escaping (_ data: Data) -> Value,
- diff: @escaping (_ lhs: Value, _ rhs: Value) -> (String, [XCTAttachment])?
- ) {
- self.toData = toData
- self.fromData = fromData
- self.diff = diff
- }
-}
diff --git a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Extensions/Wait.swift b/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Extensions/Wait.swift
deleted file mode 100644
index 71316df..0000000
--- a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Extensions/Wait.swift
+++ /dev/null
@@ -1,27 +0,0 @@
-import Foundation
-import XCTest
-
-extension Snapshotting {
- /// Transforms an existing snapshot strategy into one that waits for some amount of time before taking the snapshot. This can be useful for waiting for animations to complete or for UIKit events to finish (i.e. waiting for a UINavigationController to push a child onto the stack).
- /// - Parameters:
- /// - duration: The amount of time to wait before taking the snapshot.
- /// - strategy: The snapshot to invoke after the specified amount of time has passed.
- public static func wait(
- for duration: TimeInterval,
- on strategy: Snapshotting
- ) -> Snapshotting {
- return Snapshotting(
- pathExtension: strategy.pathExtension,
- diffing: strategy.diffing,
- asyncSnapshot: { value in
- Async { callback in
- let expectation = XCTestExpectation(description: "Wait")
- DispatchQueue.main.asyncAfter(deadline: .now() + duration) {
- expectation.fulfill()
- }
- _ = XCTWaiter.wait(for: [expectation], timeout: duration + 1)
- strategy.snapshot(value).run(callback)
- }
- })
- }
-}
diff --git a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/SnapshotTestCase.swift b/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/SnapshotTestCase.swift
deleted file mode 100644
index ba93752..0000000
--- a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/SnapshotTestCase.swift
+++ /dev/null
@@ -1,4 +0,0 @@
-import XCTest
-
-@available(swift, obsoleted: 5.0, renamed: "XCTestCase", message: "Please use XCTestCase instead")
-public typealias SnapshotTestCase = XCTestCase
diff --git a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting.swift b/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting.swift
deleted file mode 100644
index c595953..0000000
--- a/Example/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting.swift
+++ /dev/null
@@ -1,106 +0,0 @@
-import Foundation
-import XCTest
-
-/// A type representing the ability to transform a snapshottable value into a diffable format (like text or an image) for snapshot testing.
-public struct Snapshotting {
- /// The path extension applied to references saved to disk.
- public var pathExtension: String?
-
- /// How the snapshot format is diffed and converted to and from data.
- public var diffing: Diffing
-
- /// How a value is transformed into a diffable snapshot format.
- public var snapshot: (Value) -> Async
-
- /// Creates a snapshot strategy.
- ///
- /// - Parameters:
- /// - pathExtension: The path extension applied to references saved to disk.
- /// - diffing: How to diff and convert the snapshot format to and from data.
- /// - snapshot: An asynchronous transform function from a value into a diffable snapshot format.
- /// - value: A value to be converted.
- public init(
- pathExtension: String?,
- diffing: Diffing,
- asyncSnapshot: @escaping (_ value: Value) -> Async
- ) {
- self.pathExtension = pathExtension
- self.diffing = diffing
- self.snapshot = asyncSnapshot
- }
-
- /// Creates a snapshot strategy.
- ///
- /// - Parameters:
- /// - pathExtension: The path extension applied to references saved to disk.
- /// - diffing: How to diff and convert the snapshot format to and from data.
- /// - snapshot: A transform function from a value into a diffable snapshot format.
- /// - value: A snapshot value to be converted.
- public init(
- pathExtension: String?,
- diffing: Diffing,
- snapshot: @escaping (_ value: Value) -> Format
- ) {
- self.init(pathExtension: pathExtension, diffing: diffing) {
- Async(value: snapshot($0))
- }
- }
-
- /// Transforms a strategy on `Value`s into a strategy on `NewValue`s through a function `(NewValue) -> Value`.
- ///
- /// This is the most important operation for transforming existing strategies into new strategies. It allows you to transform a `Snapshotting` into a `Snapshotting` by pulling it back along a function `(NewValue) -> Value`. Notice that the function must go in the direction `(NewValue) -> Value` even though we are transforming in the other direction `(Snapshotting) -> Snapshotting`.
- ///
- /// A simple example of this is to `pullback` the snapshot strategy on `UIView`s to work on `UIViewController`s:
- ///
- /// let strategy = Snapshotting.image.pullback { (vc: UIViewController) in
- /// return vc.view
- /// }
- ///
- /// Here we took the strategy that snapshots `UIView`s as `UIImage`s and pulled it back to work on `UIViewController`s by using the function `(UIViewController) -> UIView` that simply plucks the view out of the controller.
- ///
- /// Nearly every snapshot strategy provided in this library is a pullback of some base strategy, which shows just how important this operation is.
- ///
- /// - Parameters:
- /// - transform: A transform function from `NewValue` into `Value`.
- /// - otherValue: A value to be transformed.
- public func pullback(_ transform: @escaping (_ otherValue: NewValue) -> Value) -> Snapshotting {
- return self.asyncPullback { newValue in Async(value: transform(newValue)) }
- }
-
- /// Transforms a strategy on `Value`s into a strategy on `NewValue`s through a function `(NewValue) -> Async