diff --git a/Podfile b/Podfile
index 45785b7..400e2e5 100644
--- a/Podfile
+++ b/Podfile
@@ -27,5 +27,6 @@ pod 'MJRefresh'
pod "DownloadButton"
#下载框架
pod 'Tiercel'
-
+#文本跑马灯
+pod 'MarqueeLabel'
end
diff --git a/Podfile.lock b/Podfile.lock
index ac80900..f8814e6 100644
--- a/Podfile.lock
+++ b/Podfile.lock
@@ -5,6 +5,7 @@ PODS:
- JXPagingView/Paging (2.1.3)
- JXSegmentedView (1.3.3)
- Kingfisher (7.11.0)
+ - MarqueeLabel (4.5.0)
- MJRefresh (3.7.9)
- SnapKit (5.7.1)
- SVProgressHUD (2.3.1):
@@ -20,6 +21,7 @@ DEPENDENCIES:
- JXPagingView/Paging
- JXSegmentedView
- Kingfisher
+ - MarqueeLabel
- MJRefresh
- SnapKit
- SVProgressHUD
@@ -34,6 +36,7 @@ SPEC REPOS:
- JXPagingView
- JXSegmentedView
- Kingfisher
+ - MarqueeLabel
- MJRefresh
- SnapKit
- SVProgressHUD
@@ -47,12 +50,13 @@ SPEC CHECKSUMS:
JXPagingView: afdd2e9af09c90160dd232b970d603cc6e7ddd0e
JXSegmentedView: 651b60fcf705258ba9395edd53876dbd2853fb68
Kingfisher: b9c985d864d43515f404f1ef4a8ce7d802ace3ac
+ MarqueeLabel: 4b46d196abd253448e830cbd976f9eacc3af0849
MJRefresh: ff9e531227924c84ce459338414550a05d2aea78
SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a
SVProgressHUD: 4837c74bdfe2e51e8821c397825996a8d7de6e22
SwiftDate: 72d28954e8e1c6c1c0f917ccc8005e4f83c7d4b2
Tiercel: c0a73f876a72800333b15f4e7e48791f4ad21e90
-PODFILE CHECKSUM: 436104abc66aacc2c16f90adefe5230845e81453
+PODFILE CHECKSUM: 0dbe586b5221e955924da76b16705e9638055ea1
COCOAPODS: 1.15.2
diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock
index ac80900..f8814e6 100644
--- a/Pods/Manifest.lock
+++ b/Pods/Manifest.lock
@@ -5,6 +5,7 @@ PODS:
- JXPagingView/Paging (2.1.3)
- JXSegmentedView (1.3.3)
- Kingfisher (7.11.0)
+ - MarqueeLabel (4.5.0)
- MJRefresh (3.7.9)
- SnapKit (5.7.1)
- SVProgressHUD (2.3.1):
@@ -20,6 +21,7 @@ DEPENDENCIES:
- JXPagingView/Paging
- JXSegmentedView
- Kingfisher
+ - MarqueeLabel
- MJRefresh
- SnapKit
- SVProgressHUD
@@ -34,6 +36,7 @@ SPEC REPOS:
- JXPagingView
- JXSegmentedView
- Kingfisher
+ - MarqueeLabel
- MJRefresh
- SnapKit
- SVProgressHUD
@@ -47,12 +50,13 @@ SPEC CHECKSUMS:
JXPagingView: afdd2e9af09c90160dd232b970d603cc6e7ddd0e
JXSegmentedView: 651b60fcf705258ba9395edd53876dbd2853fb68
Kingfisher: b9c985d864d43515f404f1ef4a8ce7d802ace3ac
+ MarqueeLabel: 4b46d196abd253448e830cbd976f9eacc3af0849
MJRefresh: ff9e531227924c84ce459338414550a05d2aea78
SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a
SVProgressHUD: 4837c74bdfe2e51e8821c397825996a8d7de6e22
SwiftDate: 72d28954e8e1c6c1c0f917ccc8005e4f83c7d4b2
Tiercel: c0a73f876a72800333b15f4e7e48791f4ad21e90
-PODFILE CHECKSUM: 436104abc66aacc2c16f90adefe5230845e81453
+PODFILE CHECKSUM: 0dbe586b5221e955924da76b16705e9638055ea1
COCOAPODS: 1.15.2
diff --git a/Pods/MarqueeLabel/LICENSE b/Pods/MarqueeLabel/LICENSE
new file mode 100644
index 0000000..bafb0f7
--- /dev/null
+++ b/Pods/MarqueeLabel/LICENSE
@@ -0,0 +1,14 @@
+Copyright (c) 2011-2017 Charles Powell
+
+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.
\ No newline at end of file
diff --git a/Pods/MarqueeLabel/README.mdown b/Pods/MarqueeLabel/README.mdown
new file mode 100644
index 0000000..620e7d7
--- /dev/null
+++ b/Pods/MarqueeLabel/README.mdown
@@ -0,0 +1,167 @@
+Overview
+============
+
+MarqueeLabel is a UILabel subclass adds a scrolling marquee effect when the text of the label outgrows the available width. The label scrolling direction and speed/rate can be specified as well. All standard UILabel properties (where it makes sense) are available in MarqueeLabel, with the intent of MarqueeLabel behaving just like a UILabel.
+
+**MarqueeLabel will be maintained in Swift _only_ starting with [release 4.0](https://github.com/cbpowell/MarqueeLabel/releases/tag/4.0.0)!**
+
+MarqueeLabel is compatible with both iOS and tvOS, and currently works with Swift 5.0 and the iOS 12.2 SDK! (But if you're looking for prior version Swift compatibility, [you can check the older releases](https://github.com/cbpowell/MarqueeLabel/releases/))
+
+
+
+## Check it out!
+
+
+## How To Get Started
+
+1. Clone MarqueeLabel from GitHub, and check out the demo project.
+2. Read through the documentation embedded in the [`MarqueeLabel.swift` source](https://github.com/cbpowell/MarqueeLabel/blob/master/Sources/MarqueeLabel.swift).
+3. Take a look at the [special notes](https://github.com/cbpowell/MarqueeLabel/blob/master/README.mdown#special-notes) section to be aware of any gotchas.
+4. Drop in MarqueeLabel as a replacement to your lengthy UILabels!
+5. Help out with bug fixes and new features.
+
+### Installation
+#### [CocoaPods](http://cocoapods.org)
+
+To use MarqueeLabel in a project, add the following to your project's Podfile:
+```ruby
+pod 'MarqueeLabel'
+```
+
+#### Carthage
+
+Add the following to your project's Cartfile:
+```ruby
+github "cbpowell/MarqueeLabel"
+```
+
+#### Manual Installation
+
+1. Add MarqueeLabel.swift, to your project.
+2. Add **QuartzCore.framework** to your project frameworks.
+3. Import MarqueeLabel and replace your UILabels with MarqueeLabels as needed.
+
+
+#### Using MarqueeLabel in your own Swift Framework?
+
+See the [Special Note below](https://github.com/cbpowell/MarqueeLabel/blob/master/README.mdown#swiftframeworkusage) on supporting Cocoapods and Carthage simultaneously in a Swift framework!
+
+## Usage
+
+MarqueeLabel automatically scrolls its text, at either a defined rate (points per second) or over a duration (seconds), whenever the length of the label's text exceeds the space available given the label's frame.
+
+There are several options for the Marquee type, and the default is `Continuous` (which looks just like what Apple typically uses). The animation curve of this scroll can be defined, and defaults to `UIViewAnimationOptionCurveLinear`.
+
+There are also several optional features to help with your integration of the scrolling nature of MarqueeLabel:
+- An optional edge fade at the left and right edges of the view, in order to fade the label text into the background rather than simply being clipped off
+- Leading and trailing buffers to offset the label text inside its frame, giving you better control over alignment
+- "Labelization" to make your MarqueeLabel _exactly_ like a UILabel.
+- Scroll animation "holding" and pausing
+
+See the included demo project for several use case examples!
+
+
+### Code
+These lines of code create a MarqueeLabel that will scroll across its content in 8.0 seconds, and adds 10.0 point long fade at the left and right boundaries.
+
+Replace:
+
+ var lengthyLabel = UILabel.init(frame:aFrame)
+
+With:
+
+ var lengthyLabel = MarqueeLabel.init(frame: aFrame, duration: 8.0, fadeLength: 10.0)
+
+### Storyboards
+If you're using Storyboards/Interface Builder you can create a MarqueeLabel instance by adding a normal UILabel view to your Storyboard, and then manually changing the view's class to `MarqueeLabel` in the "Custom Class" field of the Identity Inspector tab on the Utilities panel (the right-side panel).
+_Note:_ If you forget to change the Custom Class field to `MarqueeLabel` and then try to access/set MarqueeLabel-specific properties in your code, you will get crashes!
+
+
+
+You can then configure the normal UILabel properties, as well as most of the MarqueeLabel configuration properties, via the Attributes tab of the Utility panel!
+
+### Even More
+
+Check out the [MarqueeLabel documentation](http://cocoadocs.org/docsets/MarqueeLabel/) for more about all the features, including:
+- Bulk-manipulation class methods to conveniently restart, pause, and unpause all labels in a view controller
+- Scrolling direction: left->right, right->left, and continuous looping (both left and right)
+
+## Extras
+
+Also check out [the Extras folder](/Extras), a collection of subclasses, extensions, and modifications for MarqueeLabel to implement various functionality that has been requested or suggested, but not merged into the MarqueeLabel code.
+
+
+## Special Notes
+
+#### Automatic Font Size Adjustment
+
+Starting with release 4.1, MarqueeLabel allows setting the [`adjustsFontSizeToWidth`](https://developer.apple.com/documentation/uikit/uilabel/1620546-adjustsfontsizetofitwidth) to `true`. When configured this way, MarqueeLabel will check to see if the text string
+ (non-attributed or attributed) will fit within the frame when adjusted to the specified minimum scale factor, and:
+
+ - if the text will fit at the adjusted scale without requiring truncation, the label will **not scroll**. Instead, the label text will be allowed to adjust to that size and will remain static.
+ - if the text will not fit, the label will scroll and retain the unscaled font size (i.e., like all releases prior to 4.1)
+
+ Previously MarqueeLabel would override any attempts to set `adjustsFontSizetoWidth` and `minimumScaleFactor` to the default settings used by UILabel (`false`, and `0.0`, respectively). As such the default behavior remains the same: the label will not adjust it's font size to 'avoid' scrolling.
+
+#### IBDesignables
+
+MarqueeLabel includes support for IBInspectable and IBDesignable, to allow configuration of the label inside Interface Builder/Storyboards. However, if you see these warnings when building:
+
+ IB Designables: Failed to update auto layout status: Failed to load designables from path (null)
+ IB Designables: Failed to render instance of MarqueeLabel: Failed to load designables from path (null)
+
+...then you are likely using MarqueeLabel as a static library, which does not support IBInspectable/IBDesignable. Some workarounds include:
+
+- Install MarqueeLabel as a dynamic framework using CocoaPods with use_frameworks! in your Podfile
+- Install MarqueeLabel with Carthage
+- Install MarqueeLabel by manually importing the source files into your project (may be only option if you're targeting iOS 7.0)
+
+#### Automatic Scrolling
+
+MarqueeLabel tries its best to automatically begin scrolling when appropriate, but sometimes the way your view/view controller appears onscreen can trip it up.
+
+To combat this, you can try:
+- Using the `restartLabel` instance method to manually start scrolling on a MarqueeLabel
+- Try using the bulk manipulation class methods - but note that these don't currently play well with UIViewController containment. You'll need to pass them the lowest UIViewController in your hierarchy.
+
+#### Use in UITableView and UICollectionView
+
+As noted above, MarqueeLabel can sometimes have trouble detecting when the scroll animation should start when used in UITableViews and UICollectionViews - although recent reviews have improved this.
+
+Usually you'll configure the MarqueeLabel instance when building the cell in `tableView:cellForRowAtIndexPath:` (or similar for UICollectionView), but at this point the cell is not onscreen so MarqueeLabel will not begin the scrolling animation. Even when the cell is eventually placed onscreen as the user scrolls, due to timing it's possible that the animation will not fire.
+
+To make sure the scrolling animation _does_ begin as the cell scrolls onscreen, you can use the the `restartLabel` method on your MarqueeLabels inside the `tableView:willDisplayCell:forRowAtIndexPath:` delegate method (or similar for UICollectionView).
+
+**That said** - the UITableView/UICollectionView best practice is to minimize things like excessive animation, subviews, and custom drawing in your cells, in order to get glassy smooth scrolling. In general I would recommend against allowing your labels to automatically animate during user scrolling of the UITableView/UICollectionView. I suggest [holding scrolling](http://cocoadocs.org/docsets/MarqueeLabel/3.0.3/Classes/MarqueeLabel.html#//api/name/holdScrolling) or [labelizing](http://cocoadocs.org/docsets/MarqueeLabel/3.0.3/Classes/MarqueeLabel.html#//api/name/labelize) the labels while the user scrolls. See the table view example in the demo!
+
+
+#### Important Animation Note
+MarqueeLabel is based on Core Animation, which does cause some problems when views appear and disappear and the repeating animation is stopped by iOS and does not automatically restart.
+
+To address this, MarqueeLabel provides a few class methods that allow easy "restarting" of all MarqueeLabels associated with a UIViewController. Specifically, the class method `restartLabelsOfController:` should be called by your view controller (which passes in `self` for the `controller` parameter) when it is revealed or about to be revealed. Keep in mind that presenting a modal view controller can pause repeating UIView animations in the controller that is being covered!
+
+`controllerLabelsLabelize:` and `controllerLabelsAnimate:` are for convenience, allowing labelizing and re-animating all labels of a UIViewController. Labelizing can be useful for performance, such as labelizing all MarqueeLabels when a UITableView/UIScrollView starts scrolling.
+
+```swift
+ override func viewDidAppear(_ animated: Bool) {
+ super.viewDidAppear(animated)
+ MarqueeLabel.controllerViewDidAppear(self)
+ }
+```
+
+
+
+
+
+## Todo
+- Ideas?
+
+## About
+
+Charles Powell
+- [GitHub](http://github.com/cbpowell)
+- [Twitter](http://twitter.com/seventhcolumn)
+
+
+
+Give me a shout if you're using this in your project!
diff --git a/Pods/MarqueeLabel/Sources/MarqueeLabel.swift b/Pods/MarqueeLabel/Sources/MarqueeLabel.swift
new file mode 100644
index 0000000..c29065c
--- /dev/null
+++ b/Pods/MarqueeLabel/Sources/MarqueeLabel.swift
@@ -0,0 +1,2096 @@
+//
+// MarqueeLabel.swift
+//
+// Created by Charles Powell on 8/6/14.
+// Copyright (c) 2015 Charles Powell. All rights reserved.
+//
+
+import UIKit
+import QuartzCore
+
+@IBDesignable
+
+open class MarqueeLabel: UILabel, CAAnimationDelegate {
+
+ /**
+ An enum that defines the types of `MarqueeLabel` scrolling
+
+ - Left: Scrolls left after the specified delay, and does not return to the original position.
+ - LeftRight: Scrolls left first, then back right to the original position.
+ - Right: Scrolls right after the specified delay, and does not return to the original position.
+ - RightLeft: Scrolls right first, then back left to the original position.
+ - Continuous: Continuously scrolls left (with a pause at the original position if animationDelay is set).
+ - ContinuousReverse: Continuously scrolls right (with a pause at the original position if animationDelay is set).
+ */
+ public enum MarqueeType: CaseIterable {
+ case left
+ case leftRight
+ case right
+ case rightLeft
+ case continuous
+ case continuousReverse
+ }
+
+ //
+ // MARK: - Public properties
+ //
+
+ /**
+ Defines the direction and method in which the `MarqueeLabel` instance scrolls.
+ `MarqueeLabel` supports six default types of scrolling: `Left`, `LeftRight`, `Right`, `RightLeft`, `Continuous`, and `ContinuousReverse`.
+
+ Given the nature of how text direction works, the options for the `type` property require specific text alignments
+ and will set the textAlignment property accordingly.
+
+ - `LeftRight` and `Left` types are ONLY compatible with a label text alignment of `NSTextAlignment.left`.
+ - `RightLeft` and `Right` types are ONLY compatible with a label text alignment of `NSTextAlignment.right`.
+ - `Continuous` and `ContinuousReverse` allow the use of `NSTextAlignment.left`, `.right`, or `.center` alignments,
+ however the text alignment only has an effect when label text is short enough that scrolling is not required.
+ When scrolling, the labels are effectively center-aligned.
+
+ Defaults to `Continuous`.
+
+ - Note: Note that any `leadingBuffer` value will affect the text alignment location relative to the frame position,
+ including with `.center` alignment, where the center alignment location will be shifted left (for `.continuous`) or
+ right (for `.continuousReverse`) by one-half (1/2) the `.leadingBuffer` amount. Use the `.trailingBuffer` property to
+ add a buffer between text "loops" without affecting alignment location.
+
+ - SeeAlso: textAlignment
+ - SeeAlso: leadingBuffer
+ */
+ open var type: MarqueeType = .continuous {
+ didSet {
+ if type == oldValue {
+ return
+ }
+ updateAndScroll()
+ }
+ }
+
+ /**
+ An optional custom scroll "sequence", defined by an array of `ScrollStep` or `FadeStep` instances. A sequence
+ defines a single scroll/animation loop, which will continue to be automatically repeated like the default types.
+
+ A `type` value is still required when using a custom sequence. The `type` value defines the `home` and `away`
+ values used in the `ScrollStep` instances, and the `type` value determines which way the label will scroll.
+
+ When a custom sequence is not supplied, the default sequences are used per the defined `type`.
+
+ `ScrollStep` steps are the primary step types, and define the position of the label at a given time in the sequence.
+ `FadeStep` steps are secondary steps that define the edge fade state (leading, trailing, or both) around the `ScrollStep`
+ steps.
+
+ Defaults to nil.
+
+ - Attention: Use of the `scrollSequence` property requires understanding of how MarqueeLabel works for effective
+ use. As a reference, it is suggested to review the methodology used to build the sequences for the default types.
+
+ - SeeAlso: type
+ - SeeAlso: ScrollStep
+ - SeeAlso: FadeStep
+ */
+ open var scrollSequence: [MarqueeStep]?
+
+ /**
+ Specifies the animation curve used in the scrolling motion of the labels.
+ Allowable options:
+
+ - `UIViewAnimationOptionCurveEaseInOut`
+ - `UIViewAnimationOptionCurveEaseIn`
+ - `UIViewAnimationOptionCurveEaseOut`
+ - `UIViewAnimationOptionCurveLinear`
+
+ Defaults to `UIViewAnimationOptionCurveEaseInOut`.
+ */
+ open var animationCurve: UIView.AnimationCurve = .linear
+
+ /**
+ A boolean property that sets whether the `MarqueeLabel` should behave like a normal `UILabel`.
+
+ When set to `true` the `MarqueeLabel` will behave and look like a normal `UILabel`, and will not begin any scrolling animations.
+ Changes to this property take effect immediately, removing any in-flight animation as well as any edge fade. Note that `MarqueeLabel`
+ will respect the current values of the `lineBreakMode` and `textAlignment`properties while labelized.
+
+ To simply prevent automatic scrolling, use the `holdScrolling` property.
+
+ Defaults to `false`.
+
+ - SeeAlso: holdScrolling
+ - SeeAlso: lineBreakMode
+ - Note: The label will not automatically scroll when this property is set to `true`.
+ - Warning: The UILabel default setting for the `lineBreakMode` property is `NSLineBreakByTruncatingTail`, which truncates
+ the text adds an ellipsis glyph (...). Set the `lineBreakMode` property to `NSLineBreakByClipping` in order to avoid the
+ ellipsis, especially if using an edge transparency fade.
+ */
+ @IBInspectable open var labelize: Bool = false {
+ didSet {
+ if labelize != oldValue {
+ updateAndScroll()
+ }
+ }
+ }
+
+ /**
+ A boolean property that sets whether the `MarqueeLabel` should hold (prevent) automatic label scrolling.
+
+ When set to `true`, `MarqueeLabel` will not automatically scroll even its text is larger than the specified frame,
+ although the specified edge fades will remain.
+
+ To set `MarqueeLabel` to act like a normal UILabel, use the `labelize` property.
+
+ Defaults to `false`.
+
+ - Note: The label will not automatically scroll when this property is set to `true`.
+ - SeeAlso: labelize
+ */
+ @IBInspectable open var holdScrolling: Bool = false {
+ didSet {
+ if holdScrolling != oldValue {
+ if oldValue == true && !(awayFromHome || labelize ) && labelShouldScroll() {
+ updateAndScroll()
+ }
+ }
+ }
+ }
+
+ /**
+ A boolean property that sets whether the `MarqueeLabel` should scroll, even if the specificed test string
+ can be fully contained within the label frame.
+
+ If this property is set to `true`, the `MarqueeLabel` will automatically scroll regardless of text string
+ length, although this can still be overridden by the `tapToScroll` and `holdScrolling` properties.
+
+ Defaults to `false`.
+
+ - Warning: Forced scrolling may have unexpected edge cases or have unusual characteristics compared to the
+ 'normal' scrolling feature.
+
+ - SeeAlso: holdScrolling
+ - SeeAlso: tapToScroll
+ */
+ @IBInspectable public var forceScrolling: Bool = false {
+ didSet {
+ if forceScrolling != oldValue {
+ if !(awayFromHome || holdScrolling || tapToScroll ) && labelShouldScroll() {
+ updateAndScroll()
+ }
+ }
+ }
+ }
+
+ /**
+ A boolean property that sets whether the `MarqueeLabel` should only begin a scroll when tapped.
+
+ If this property is set to `true`, the `MarqueeLabel` will only begin a scroll animation cycle when tapped. The label will
+ not automatically being a scroll. This setting overrides the setting of the `holdScrolling` property.
+
+ Defaults to `false`.
+
+ - Note: The label will not automatically scroll when this property is set to `false`.
+ - SeeAlso: holdScrolling
+ */
+ @IBInspectable open var tapToScroll: Bool = false {
+ didSet {
+ if tapToScroll != oldValue {
+ if tapToScroll {
+ let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(MarqueeLabel.labelWasTapped(_:)))
+ self.addGestureRecognizer(tapRecognizer)
+ isUserInteractionEnabled = true
+ } else {
+ if let recognizer = self.gestureRecognizers!.first as UIGestureRecognizer? {
+ self.removeGestureRecognizer(recognizer)
+ }
+ isUserInteractionEnabled = false
+ }
+ }
+ }
+ }
+
+ /**
+ A read-only boolean property that indicates if the label's scroll animation has been paused.
+
+ - SeeAlso: pauseLabel
+ - SeeAlso: unpauseLabel
+ */
+ open var isPaused: Bool {
+ return (sublabel.layer.speed == 0.0)
+ }
+
+ /**
+ A boolean property that indicates if the label is currently away from the home location.
+
+ The "home" location is the traditional location of `UILabel` text. This property essentially reflects if a scroll animation is underway.
+ */
+ open var awayFromHome: Bool {
+ if let presentationLayer = sublabel.layer.presentation() {
+ return !(presentationLayer.position.x == homeLabelFrame.origin.x)
+ }
+
+ return false
+ }
+
+ /**
+ An optional CGFloat computed value that provides the current scroll animation position, as a value between
+ 0.0 and 1.0. A value of 0.0 indicates the label is "at home" (`awayFromHome` will be false). A value
+ of 1.0 indicates the label is at the "away" position (and `awayFromHome` will be true).
+
+ Will return nil when the label presentation layer is nil.
+
+ - Note: For `leftRight` and `rightLeft` type labels this value will increase and reach 1.0 when the label animation reaches the
+ maximum displacement, as the left or right edge of the label (respectively) is shown. As the scroll reverses,
+ the value will decrease back to 0.0.
+
+ - Note: For `continuous` and`continuousReverse` type labels, this value will increase from 0.0 and reach 1.0 just as the
+ label loops around and comes to a stop at the original home position. When that position is reached, the value will
+ jump from 1.0 directly to 0.0 and begin to increase from 0.0 again.
+ */
+ open var animationPosition: CGFloat? {
+ guard let presentationLayer = sublabel.layer.presentation() else {
+ return nil
+ }
+
+ // No dividing by zero!
+ if awayOffset == 0.0 {
+ return 0.0
+ }
+
+ let progressFraction = abs((presentationLayer.position.x - homeLabelFrame.origin.x) / awayOffset)
+ return progressFraction
+ }
+
+ /**
+ The `MarqueeLabel` scrolling speed may be defined by one of two ways:
+ - Rate(CGFloat): The speed is defined by a rate of motion, in units of points per second.
+ - Duration(CGFloat): The speed is defined by the time to complete a scrolling animation cycle, in units of seconds.
+
+ Each case takes an associated `CGFloat` value, which is the rate/duration desired.
+ */
+ public enum SpeedLimit {
+ case rate(CGFloat)
+ case duration(CGFloat)
+
+ var value: CGFloat {
+ switch self {
+ case .rate(let rate):
+ return rate
+ case .duration(let duration):
+ return duration
+ }
+ }
+ }
+
+ /**
+ Defines the speed of the `MarqueeLabel` scrolling animation.
+
+ The speed is set by specifying a case of the `SpeedLimit` enum along with an associated value.
+
+ - SeeAlso: SpeedLimit
+ */
+ open var speed: SpeedLimit = .duration(7.0) {
+ didSet {
+ switch (speed, oldValue) {
+ case (.rate(let a), .rate(let b)) where a == b:
+ return
+ case (.duration(let a), .duration(let b)) where a == b:
+ return
+ default:
+ updateAndScroll()
+ }
+ }
+ }
+
+ @available(*, deprecated, message: "Use speed property instead")
+ @IBInspectable open var scrollDuration: CGFloat {
+ get {
+ switch speed {
+ case .duration(let duration): return duration
+ case .rate(_): return 0.0
+ }
+ }
+ set {
+ speed = .duration(newValue)
+ }
+ }
+
+ @available(*, deprecated, message : "Use speed property instead")
+ @IBInspectable open var scrollRate: CGFloat {
+ get {
+ switch speed {
+ case .duration(_): return 0.0
+ case .rate(let rate): return rate
+ }
+ }
+ set {
+ speed = .rate(newValue)
+ }
+ }
+
+
+ /**
+ A buffer (offset) between the leading edge of the label text and the label frame.
+
+ This property adds additional space between the leading edge of the label text and the label frame. The
+ leading edge is the edge of the label text facing the direction of scroll (i.e. the edge that animates
+ offscreen first during scrolling).
+
+ Defaults to `0`.
+
+ - Note: The value set to this property affects label positioning at all times (including when `labelize` is set to `true`),
+ including when the text string length is short enough that the label does not need to scroll.
+ - Note: For Continuous-type labels, the smallest value of `leadingBuffer`, `trailingBuffer`, and `fadeLength`
+ is used as spacing between the two label instances. Zero is an allowable value for all three properties.
+
+ - SeeAlso: trailingBuffer
+ */
+ @IBInspectable open var leadingBuffer: CGFloat = 0.0 {
+ didSet {
+ if leadingBuffer != oldValue {
+ updateAndScroll()
+ }
+ }
+ }
+
+ /**
+ A buffer (offset) between the trailing edge of the label text and the label frame.
+
+ This property adds additional space (buffer) between the trailing edge of the label text and the label frame. The
+ trailing edge is the edge of the label text facing away from the direction of scroll (i.e. the edge that animates
+ offscreen last during scrolling).
+
+ Defaults to `0`.
+
+ - Note: The value set to this property has no effect when the `labelize` property is set to `true`.
+
+ - Note: For Continuous-type labels, the smallest value of `leadingBuffer`, `trailingBuffer`, and `fadeLength`
+ is used as spacing between the two label instances. Zero is an allowable value for all three properties.
+
+ - SeeAlso: leadingBuffer
+ */
+ @IBInspectable open var trailingBuffer: CGFloat = 0.0 {
+ didSet {
+ if trailingBuffer != oldValue {
+ updateAndScroll()
+ }
+ }
+ }
+
+ /**
+ The length of transparency fade at the left and right edges of the frame.
+
+ This propery sets the size (in points) of the view edge transparency fades on the left and right edges of a `MarqueeLabel`. The
+ transparency fades from an alpha of 1.0 (fully visible) to 0.0 (fully transparent) over this distance. Values set to this property
+ will be sanitized to prevent a fade length greater than 1/2 of the frame width.
+
+ Defaults to `0`.
+ */
+ @IBInspectable open var fadeLength: CGFloat = 0.0 {
+ didSet {
+ if fadeLength != oldValue {
+ applyGradientMask(fadeLength, animated: true)
+ updateAndScroll()
+ }
+ }
+ }
+
+
+ /**
+ The length of delay in seconds that the label pauses at the completion of a scroll.
+ */
+ @IBInspectable open var animationDelay: CGFloat = 1.0
+
+
+ /** The read-only/computed duration of the scroll animation (not including delay).
+
+ The value of this property is calculated from the value set to the `speed` property. If a duration-type speed is
+ used to set the label animation speed, `animationDuration` will be equivalent to that value.
+ */
+ public var animationDuration: CGFloat {
+ switch self.speed {
+ case .rate(let rate):
+ return CGFloat(abs(self.awayOffset) / rate)
+ case .duration(let duration):
+ return duration
+ }
+ }
+
+ //
+ // MARK: - Class Functions and Helpers
+ //
+
+ /**
+ Convenience method to restart all `MarqueeLabel` instances that have the specified view controller in their next responder chain.
+
+ - Parameter controller: The view controller for which to restart all `MarqueeLabel` instances.
+
+ - Warning: View controllers that appear with animation (such as from underneath a modal-style controller) can cause some `MarqueeLabel` text
+ position "jumping" when this method is used in `viewDidAppear` if scroll animations are already underway. Use this method inside `viewWillAppear:`
+ instead to avoid this problem.
+
+ - Warning: This method may not function properly if passed the parent view controller when using view controller containment.
+
+ - SeeAlso: restartLabel
+ - SeeAlso: controllerViewDidAppear:
+ - SeeAlso: controllerViewWillAppear:
+ */
+ open class func restartLabelsOfController(_ controller: UIViewController) {
+ MarqueeLabel.notifyController(controller, message: .Restart)
+ }
+
+ /**
+ Convenience method to restart all `MarqueeLabel` instances that have the specified view controller in their next responder chain.
+
+ Alternative to `restartLabelsOfController`. This method is retained for backwards compatibility and future enhancements.
+
+ - Parameter controller: The view controller that will appear.
+ - SeeAlso: restartLabel
+ - SeeAlso: controllerViewDidAppear
+ */
+ open class func controllerViewWillAppear(_ controller: UIViewController) {
+ MarqueeLabel.restartLabelsOfController(controller)
+ }
+
+ /**
+ Convenience method to restart all `MarqueeLabel` instances that have the specified view controller in their next responder chain.
+
+ Alternative to `restartLabelsOfController`. This method is retained for backwards compatibility and future enhancements.
+
+ - Parameter controller: The view controller that did appear.
+ - SeeAlso: restartLabel
+ - SeeAlso: controllerViewWillAppear
+ */
+ open class func controllerViewDidAppear(_ controller: UIViewController) {
+ MarqueeLabel.restartLabelsOfController(controller)
+ }
+
+ /**
+ Labelizes all `MarqueeLabel` instances that have the specified view controller in their next responder chain.
+
+ The `labelize` property of all recognized `MarqueeLabel` instances will be set to `true`.
+
+ - Parameter controller: The view controller for which all `MarqueeLabel` instances should be labelized.
+ - SeeAlso: labelize
+ */
+ open class func controllerLabelsLabelize(_ controller: UIViewController) {
+ MarqueeLabel.notifyController(controller, message: .Labelize)
+ }
+
+ /**
+ De-labelizes all `MarqueeLabel` instances that have the specified view controller in their next responder chain.
+
+ The `labelize` property of all recognized `MarqueeLabel` instances will be set to `false`.
+
+ - Parameter controller: The view controller for which all `MarqueeLabel` instances should be de-labelized.
+ - SeeAlso: labelize
+ */
+ open class func controllerLabelsAnimate(_ controller: UIViewController) {
+ MarqueeLabel.notifyController(controller, message: .Animate)
+ }
+
+
+ //
+ // MARK: - Initialization
+ //
+
+ /**
+ Returns a newly initialized `MarqueeLabel` instance with the specified scroll rate and edge transparency fade length.
+
+ - Parameter frame: A rectangle specifying the initial location and size of the view in its superview's coordinates. Text (for the given font, font size, etc.) that does not fit in this frame will automatically scroll.
+ - Parameter pixelsPerSec: A rate of scroll for the label scroll animation. Must be non-zero. Note that this will be the peak (mid-transition) rate for ease-type animation.
+ - Parameter fadeLength: A length of transparency fade at the left and right edges of the `MarqueeLabel` instance's frame.
+ - Returns: An initialized `MarqueeLabel` object or nil if the object couldn't be created.
+ - SeeAlso: fadeLength
+ */
+ public init(frame: CGRect, rate: CGFloat, fadeLength fade: CGFloat) {
+ speed = .rate(rate)
+ fadeLength = CGFloat(min(fade, frame.size.width/2.0))
+ super.init(frame: frame)
+ setup()
+ }
+
+ /**
+ Returns a newly initialized `MarqueeLabel` instance with the specified scroll rate and edge transparency fade length.
+
+ - Parameter frame: A rectangle specifying the initial location and size of the view in its superview's coordinates. Text (for the given font, font size, etc.) that does not fit in this frame will automatically scroll.
+ - Parameter scrollDuration: A scroll duration the label scroll animation. Must be non-zero. This will be the duration that the animation takes for one-half of the scroll cycle in the case of left-right and right-left marquee types, and for one loop of a continuous marquee type.
+ - Parameter fadeLength: A length of transparency fade at the left and right edges of the `MarqueeLabel` instance's frame.
+ - Returns: An initialized `MarqueeLabel` object or nil if the object couldn't be created.
+ - SeeAlso: fadeLength
+ */
+ public init(frame: CGRect, duration: CGFloat, fadeLength fade: CGFloat) {
+ speed = .duration(duration)
+ fadeLength = CGFloat(min(fade, frame.size.width/2.0))
+ super.init(frame: frame)
+ setup()
+ }
+
+ required public init?(coder aDecoder: NSCoder) {
+ super.init(coder: aDecoder)
+ setup()
+ }
+
+ /**
+ Returns a newly initialized `MarqueeLabel` instance.
+
+ The default scroll duration of 7.0 seconds and fade length of 0.0 are used.
+
+ - Parameter frame: A rectangle specifying the initial location and size of the view in its superview's coordinates. Text (for the given font, font size, etc.) that does not fit in this frame will automatically scroll.
+ - Returns: An initialized `MarqueeLabel` object or nil if the object couldn't be created.
+ */
+ convenience public override init(frame: CGRect) {
+ self.init(frame: frame, duration:7.0, fadeLength:0.0)
+ }
+
+ private func setup() {
+ // Create sublabel
+ sublabel = UILabel(frame: self.bounds)
+ sublabel.tag = 700
+ sublabel.layer.anchorPoint = CGPoint.zero
+
+ // Add sublabel
+ addSubview(sublabel)
+
+ // Configure self
+ super.clipsToBounds = true
+ super.numberOfLines = 1
+
+ // Add notification observers
+ // Custom class notifications
+ NotificationCenter.default.addObserver(self, selector: #selector(MarqueeLabel.restartForViewController(_:)), name: NSNotification.Name(rawValue: MarqueeKeys.Restart.rawValue), object: nil)
+ NotificationCenter.default.addObserver(self, selector: #selector(MarqueeLabel.labelizeForController(_:)), name: NSNotification.Name(rawValue: MarqueeKeys.Labelize.rawValue), object: nil)
+ NotificationCenter.default.addObserver(self, selector: #selector(MarqueeLabel.animateForController(_:)), name: NSNotification.Name(rawValue: MarqueeKeys.Animate.rawValue), object: nil)
+ // UIApplication state notifications
+ NotificationCenter.default.addObserver(self, selector: #selector(MarqueeLabel.restartLabel), name: UIApplication.didBecomeActiveNotification, object: nil)
+ NotificationCenter.default.addObserver(self, selector: #selector(MarqueeLabel.shutdownLabel), name: UIApplication.didEnterBackgroundNotification, object: nil)
+ }
+
+ // Interface Builder features deprecated in visionOS
+ #if !os(visionOS)
+ override open func awakeFromNib() {
+ super.awakeFromNib()
+ forwardPropertiesToSublabel()
+ }
+
+ @available(iOS 8.0, *)
+ override open func prepareForInterfaceBuilder() {
+ super.prepareForInterfaceBuilder()
+ forwardPropertiesToSublabel()
+ }
+ #endif
+
+ private func forwardPropertiesToSublabel() {
+ /*
+ Note that this method is currently ONLY called from awakeFromNib, i.e. when
+ text properties are set via a Storyboard. As the Storyboard/IB doesn't currently
+ support attributed strings, there's no need to "forward" the super attributedString value.
+ */
+
+ // Since we're a UILabel, we actually do implement all of UILabel's properties.
+ // We don't care about these values, we just want to forward them on to our sublabel.
+ let properties = ["baselineAdjustment", "enabled", "highlighted", "highlightedTextColor",
+ "minimumFontSize", "shadowOffset", "textAlignment",
+ "userInteractionEnabled", "adjustsFontSizeToFitWidth", "minimumScaleFactor",
+ "lineBreakMode", "numberOfLines", "contentMode"]
+
+ // Iterate through properties
+ sublabel.text = super.text
+ sublabel.font = super.font
+ sublabel.textColor = super.textColor
+ sublabel.backgroundColor = super.backgroundColor ?? UIColor.clear
+ sublabel.shadowColor = super.shadowColor
+ sublabel.shadowOffset = super.shadowOffset
+ for prop in properties {
+ let value = super.value(forKey: prop)
+ sublabel.setValue(value, forKeyPath: prop)
+ }
+ }
+
+ //
+ // MARK: - MarqueeLabel Heavy Lifting
+ //
+
+ override open func layoutSubviews() {
+ super.layoutSubviews()
+
+ updateAndScroll()
+ }
+
+ override open func willMove(toWindow newWindow: UIWindow?) {
+ if newWindow == nil {
+ shutdownLabel()
+ }
+ }
+
+ override open func didMoveToWindow() {
+ if self.window == nil {
+ shutdownLabel()
+ } else {
+ updateAndScroll()
+ }
+ }
+
+ private func updateAndScroll() {
+ // Do not automatically begin scroll if tapToScroll is true
+ updateAndScroll(overrideHold: false)
+ }
+
+ private func updateAndScroll(overrideHold: Bool) {
+ // Check if scrolling can occur
+ if !labelReadyForScroll() {
+ return
+ }
+
+ // Calculate expected size
+ let expectedLabelSize = sublabel.desiredSize()
+
+ // Invalidate intrinsic size
+ invalidateIntrinsicContentSize()
+
+ // Move label to home
+ returnLabelToHome()
+
+ // Check if label should scroll
+ // Note that the holdScrolling propery does not affect this
+ if !labelShouldScroll() {
+ // Set text alignment and break mode to act like a normal label
+ sublabel.textAlignment = super.textAlignment
+ sublabel.lineBreakMode = super.lineBreakMode
+ sublabel.adjustsFontSizeToFitWidth = super.adjustsFontSizeToFitWidth
+ sublabel.minimumScaleFactor = super.minimumScaleFactor
+
+ let labelFrame: CGRect
+ switch type {
+ case .continuousReverse, .rightLeft:
+ labelFrame = bounds.divided(atDistance: leadingBuffer, from: CGRectEdge.maxXEdge).remainder.integral
+ default:
+ labelFrame = CGRect(x: leadingBuffer, y: 0.0, width: bounds.size.width - leadingBuffer, height: bounds.size.height).integral
+ }
+
+ homeLabelFrame = labelFrame
+ awayOffset = 0.0
+
+ // Remove any additional sublabels (for continuous types)
+ repliLayer?.instanceCount = 1
+
+ // Set the sublabel frame to calculated labelFrame
+ sublabel.frame = labelFrame
+
+ // Remove fade, as by definition none is needed in this case
+ removeGradientMask()
+
+ return
+ }
+
+ // Label DOES need to scroll
+
+ // Reset font scaling to off for scrolling
+ sublabel.adjustsFontSizeToFitWidth = false
+ sublabel.minimumScaleFactor = 0.0
+
+ // Spacing between primary and second sublabel must be at least equal to leadingBuffer, and at least equal to the fadeLength
+ let minTrailing = minimumTrailingDistance
+
+ // Determine positions and generate scroll steps
+ let sequence: [MarqueeStep]
+
+ switch type {
+ case .continuous, .continuousReverse:
+ if type == .continuous {
+ homeLabelFrame = CGRect(x: leadingBuffer, y: 0.0, width: expectedLabelSize.width, height: bounds.size.height).integral
+ awayOffset = -(homeLabelFrame.size.width + minTrailing)
+ } else { // .ContinuousReverse
+ homeLabelFrame = CGRect(x: bounds.size.width - (expectedLabelSize.width + leadingBuffer), y: 0.0, width: expectedLabelSize.width, height: bounds.size.height).integral
+ awayOffset = (homeLabelFrame.size.width + minTrailing)
+ }
+
+ // Find when the lead label will be totally offscreen
+ let offsetDistance = awayOffset
+ let offscreenAmount = homeLabelFrame.size.width
+ let startFadeFraction = abs(offscreenAmount / offsetDistance)
+ // Find when the animation will hit that point
+ let startFadeTimeFraction = timingFunctionForAnimationCurve(animationCurve).durationPercentageForPositionPercentage(startFadeFraction, duration: (animationDelay + animationDuration))
+ let startFadeTime = startFadeTimeFraction * animationDuration
+
+ sequence = scrollSequence ?? [
+ ScrollStep(timeStep: 0.0, position: .home, edgeFades: .trailing), // Starting point, at home, with trailing fade
+ ScrollStep(timeStep: animationDelay, position: .home, edgeFades: .trailing), // Delay at home, maintaining fade state
+ FadeStep(timeStep: 0.2, edgeFades: [.leading, .trailing]), // 0.2 sec after scroll start, fade leading edge in as well
+ FadeStep(timeStep: (startFadeTime - animationDuration), // Maintain fade state until just before reaching end of scroll animation
+ edgeFades: [.leading, .trailing]),
+ ScrollStep(timeStep: animationDuration, timingFunction: animationCurve, // Ending point (back at home), with animationCurve transition, with trailing fade
+ position: .away, edgeFades: .trailing)
+ ]
+
+ // Set frame and text
+ sublabel.frame = homeLabelFrame
+
+ // Configure replication
+ // Determine replication count required
+ let fitFactor: CGFloat = bounds.size.width/(expectedLabelSize.width + leadingBuffer)
+ let repliCount = 1 + Int(ceil(fitFactor))
+ repliLayer?.instanceCount = repliCount
+ repliLayer?.instanceTransform = CATransform3DMakeTranslation(-awayOffset, 0.0, 0.0)
+
+ case .leftRight, .left, .rightLeft, .right:
+ if type == .leftRight || type == .left {
+ homeLabelFrame = CGRect(x: leadingBuffer, y: 0.0, width: expectedLabelSize.width, height: bounds.size.height).integral
+ awayOffset = bounds.size.width - (expectedLabelSize.width + leadingBuffer + trailingBuffer)
+ // Enforce text alignment for this type
+ sublabel.textAlignment = NSTextAlignment.left
+ } else {
+ homeLabelFrame = CGRect(x: bounds.size.width - (expectedLabelSize.width + leadingBuffer), y: 0.0, width: expectedLabelSize.width, height: bounds.size.height).integral
+ awayOffset = (expectedLabelSize.width + trailingBuffer + leadingBuffer) - bounds.size.width
+ // Enforce text alignment for this type
+ sublabel.textAlignment = NSTextAlignment.right
+ }
+ // Set frame and text
+ sublabel.frame = homeLabelFrame
+
+ // Remove any replication
+ repliLayer?.instanceCount = 1
+
+ if type == .leftRight || type == .rightLeft {
+ sequence = scrollSequence ?? [
+ ScrollStep(timeStep: 0.0, position: .home, edgeFades: .trailing), // Starting point, at home, with trailing fade
+ ScrollStep(timeStep: animationDelay, position: .home, edgeFades: .trailing), // Delay at home, maintaining fade state
+ FadeStep(timeStep: 0.2, edgeFades: [.leading, .trailing]), // 0.2 sec after delay ends, fade leading edge in as well
+ FadeStep(timeStep: -0.2, edgeFades: [.leading, .trailing]), // Maintain fade state until 0.2 sec before reaching away position
+ ScrollStep(timeStep: animationDuration, timingFunction: animationCurve, // Away position, using animationCurve transition, with only leading edge faded in
+ position: .away, edgeFades: .leading),
+ ScrollStep(timeStep: animationDelay, position: .away, edgeFades: .leading), // Delay at away, maintaining fade state (leading only)
+ FadeStep(timeStep: 0.2, edgeFades: [.leading, .trailing]), // 0.2 sec after delay ends, fade trailing edge back in as well
+ FadeStep(timeStep: -0.2, edgeFades: [.leading, .trailing]), // Maintain fade state until 0.2 sec before reaching home position
+ ScrollStep(timeStep: animationDuration, timingFunction: animationCurve, // Ending point, back at home, with only trailing fade
+ position: .home, edgeFades: .trailing)
+ ]
+ } else { // .left or .right
+ sequence = scrollSequence ?? [
+ ScrollStep(timeStep: 0.0, position: .home, edgeFades: .trailing), // Starting point, at home, with trailing fade
+ ScrollStep(timeStep: animationDelay, position: .home, edgeFades: .trailing), // Delay at home, maintaining fade state
+ FadeStep(timeStep: 0.2, edgeFades: [.leading, .trailing]), // 0.2 sec after delay ends, fade leading edge in as well
+ FadeStep(timeStep: -0.2, edgeFades: [.leading, .trailing]), // Maintain fade state until 0.2 sec before reaching away position
+ ScrollStep(timeStep: animationDuration, timingFunction: animationCurve, // Away position, using animationCurve transition, with only leading edge faded in
+ position: .away, edgeFades: .leading),
+ ScrollStep(timeStep: animationDelay, position: .away, edgeFades: .leading), // "Delay" at away, maintaining fade state
+ ]
+ }
+ }
+
+
+
+ // Configure gradient for current condition
+ applyGradientMask(fadeLength, animated: !self.labelize)
+
+ if overrideHold || (!holdScrolling && !overrideHold) {
+ beginScroll(sequence)
+ }
+ }
+
+ override open func sizeThatFits(_ size: CGSize) -> CGSize {
+ return sizeThatFits(size, withBuffers: true)
+ }
+
+ open func sizeThatFits(_ size: CGSize, withBuffers: Bool) -> CGSize {
+ var fitSize = sublabel.sizeThatFits(size)
+ if withBuffers {
+ fitSize.width += leadingBuffer
+ }
+ return fitSize
+ }
+
+ /**
+ Returns the unconstrained size of the specified label text (for a single line).
+ */
+ open func textLayoutSize() -> CGSize {
+ return sublabel.desiredSize()
+ }
+
+ //
+ // MARK: - Animation Handling
+ //
+
+ open func labelShouldScroll() -> Bool {
+ // Check for nil string
+ guard sublabel.text != nil else {
+ return false
+ }
+
+ // Check for empty string
+ guard !sublabel.text!.isEmpty else {
+ return false
+ }
+
+ var labelTooLarge = false
+ if !super.adjustsFontSizeToFitWidth {
+ // Usual logic to check if the label string fits
+ labelTooLarge = (sublabel.desiredSize().width + leadingBuffer) > self.bounds.size.width + CGFloat.ulpOfOne
+ } else {
+ // Logic with auto-scale support
+ // Create mutable attributed string to modify font sizes in-situ
+ let resizedString = NSMutableAttributedString.init(attributedString: sublabel.attributedText!)
+ resizedString.beginEditing()
+ // Enumerate all font attributes of attributed string
+ resizedString.enumerateAttribute(.font, in: NSRange(0.. 0.0
+ return (!labelize && (forceScrolling || labelTooLarge) && animationHasDuration)
+ }
+
+ private func labelReadyForScroll() -> Bool {
+ // Check if we have a superview
+ if superview == nil {
+ return false
+ }
+
+ // Check if we are attached to a window
+ if window == nil {
+ return false
+ }
+
+ // Check if our view controller is ready
+ let viewController = firstAvailableViewController()
+ if viewController != nil {
+ if !viewController!.isViewLoaded {
+ return false
+ }
+ }
+
+ return true
+ }
+
+ private func returnLabelToHome() {
+ // Store if label is away from home at time of call
+ let away = awayFromHome
+
+ // Remove any gradient animation
+ maskLayer?.removeAllAnimations()
+
+ // Remove all sublabel position animations
+ sublabel.layer.removeAllAnimations()
+
+ // Fire completion block if appropriate
+ if away {
+ // If label was away when this was called, animation did NOT finish
+ scrollCompletionBlock?(!away)
+ }
+
+ // Remove completion block
+ scrollCompletionBlock = nil
+ }
+
+ private func beginScroll(_ sequence: [MarqueeStep]) {
+ let scroller = generateScrollAnimation(sequence)
+ let fader = generateGradientAnimation(sequence, totalDuration: scroller.duration)
+
+ scroll(scroller, fader: fader)
+ }
+
+ private func scroll(_ scroller: MLAnimation, fader: MLAnimation?) {
+ // Check for conditions which would prevent scrolling
+ if !labelReadyForScroll() {
+ return
+ }
+ // Convert fader to var
+ var fader = fader
+
+ // Call pre-animation hook
+ labelWillBeginScroll()
+
+ // Start animation transactions
+ CATransaction.begin()
+ CATransaction.setAnimationDuration(TimeInterval(scroller.duration))
+
+ // Create gradient animation, if needed
+ let gradientAnimation: CAKeyframeAnimation?
+ // Check for IBDesignable
+ #if !TARGET_INTERFACE_BUILDER
+ if fadeLength > 0.0 {
+ // Remove any setup animation, but apply final values
+ if let setupAnim = maskLayer?.animation(forKey: "setupFade") as? CABasicAnimation, let finalColors = setupAnim.toValue as? [CGColor] {
+ maskLayer?.colors = finalColors
+ }
+ maskLayer?.removeAnimation(forKey: "setupFade")
+
+ // Generate animation if needed
+ if let previousAnimation = fader?.anim {
+ gradientAnimation = previousAnimation
+ } else {
+ gradientAnimation = nil
+ }
+
+ // Apply fade animation
+ maskLayer?.add(gradientAnimation!, forKey: "gradient")
+ } else {
+ // No animation needed
+ fader = nil
+ }
+ #else
+ fader = nil
+ #endif
+
+ scrollCompletionBlock = { [weak self] (finished: Bool) in
+ guard self != nil else {
+ return
+ }
+
+ // Call returned home function
+ self!.labelReturnedToHome(finished)
+
+ // Check to ensure that:
+
+ // 1) The instance is still attached to a window - this completion block is called for
+ // many reasons, including if the animation is removed due to the view being removed
+ // from the UIWindow (typically when the view controller is no longer the "top" view)
+ guard self!.window != nil else {
+ return
+ }
+ // 2) We don't double fire if an animation already exists
+ guard self!.sublabel.layer.animation(forKey: "position") == nil else {
+ return
+ }
+ // 3) We don't start automatically if the animation was unexpectedly interrupted
+ guard finished else {
+ // Do not continue into the next loop
+ return
+ }
+ // 4) A completion block still exists for the NEXT loop. A notable case here is if
+ // returnLabelToHome() was called during a subclass's labelReturnToHome() function
+ guard self!.scrollCompletionBlock != nil else {
+ return
+ }
+
+ // Begin again, if conditions met
+ if self!.labelShouldScroll() && !self!.tapToScroll && !self!.holdScrolling {
+ // Perform completion callback
+ self!.scroll(scroller, fader: fader)
+ }
+ }
+
+ // Perform scroll animation
+ scroller.anim.setValue(true, forKey: MarqueeKeys.CompletionClosure.rawValue)
+ scroller.anim.delegate = self
+ if type == .left || type == .right {
+ // Make it stay at away permanently
+ scroller.anim.isRemovedOnCompletion = false
+ scroller.anim.fillMode = .forwards
+ }
+ sublabel.layer.add(scroller.anim, forKey: "position")
+
+ CATransaction.commit()
+ }
+
+ private func generateScrollAnimation(_ sequence: [MarqueeStep]) -> MLAnimation {
+ // Create scroller, which defines the animation to perform
+ let homeOrigin = homeLabelFrame.origin
+ let awayOrigin = offsetCGPoint(homeLabelFrame.origin, offset: awayOffset)
+
+ let scrollSteps = sequence.filter({ $0 is ScrollStep }) as! [ScrollStep]
+ let totalDuration = scrollSteps.reduce(0.0) { $0 + $1.timeStep }
+
+ // Build scroll data
+ var totalTime: CGFloat = 0.0
+ var scrollKeyTimes = [NSNumber]()
+ var scrollKeyValues = [NSValue]()
+ var scrollTimingFunctions = [CAMediaTimingFunction]()
+
+ for (offset, step) in scrollSteps.enumerated() {
+ // Scroll Times
+ totalTime += step.timeStep
+ scrollKeyTimes.append(NSNumber(value:Float(totalTime/totalDuration)))
+
+ // Scroll Values
+ let scrollPosition: CGPoint
+ switch step.position {
+ case .home:
+ scrollPosition = homeOrigin
+ case .away:
+ scrollPosition = awayOrigin
+ case .partial(let frac):
+ scrollPosition = offsetCGPoint(homeOrigin, offset: awayOffset*frac)
+ }
+ scrollKeyValues.append(NSValue(cgPoint:scrollPosition))
+
+ // Scroll Timing Functions
+ // Only need n-1 timing functions, so discard the first value as it's unused
+ if offset == 0 { continue }
+ scrollTimingFunctions.append(timingFunctionForAnimationCurve(step.timingFunction))
+ }
+
+ // Create animation
+ let animation = CAKeyframeAnimation(keyPath: "position")
+ // Set values
+ animation.keyTimes = scrollKeyTimes
+ animation.values = scrollKeyValues
+ animation.timingFunctions = scrollTimingFunctions
+
+ return (anim: animation, duration: totalDuration)
+ }
+
+ private func generateGradientAnimation(_ sequence: [MarqueeStep], totalDuration: CGFloat) -> MLAnimation {
+ // Setup
+ var totalTime: CGFloat = 0.0
+ var stepTime: CGFloat = 0.0
+ var fadeKeyValues = [[CGColor]]()
+ var fadeKeyTimes = [NSNumber]()
+ var fadeTimingFunctions = [CAMediaTimingFunction]()
+ let transp = UIColor.clear.cgColor
+ let opaque = UIColor.black.cgColor
+
+ // Filter to get only scroll steps and valid precedent/subsequent fade steps
+ let fadeSteps = sequence.enumerated().filter { (arg: (offset: Int, element: MarqueeStep)) -> Bool in
+ let (offset, element) = arg
+
+ // Include all Scroll Steps
+ if element is ScrollStep { return true }
+
+ // Include all Fade Steps that have a directly preceding or subsequent Scroll Step
+ // Exception: Fade Step cannot be first step
+ if offset == 0 { return false }
+
+ // Subsequent step if 1) positive/zero time step and 2) follows a Scroll Step
+ let subsequent = element.timeStep >= 0 && (sequence[max(0, offset - 1)] is ScrollStep)
+ // Precedent step if 1) negative time step and 2) precedes a Scroll Step
+ let precedent = element.timeStep < 0 && (sequence[min(sequence.count - 1, offset + 1)] is ScrollStep)
+
+ return (precedent || subsequent)
+ }
+
+ for (offset, step) in fadeSteps {
+ // Fade times
+ if step is ScrollStep {
+ totalTime += step.timeStep
+ stepTime = totalTime
+ } else {
+ if step.timeStep >= 0 {
+ // Is a Subsequent
+ stepTime = totalTime + step.timeStep
+ } else {
+ // Is a Precedent, grab next step
+ stepTime = totalTime + fadeSteps[offset + 1].element.timeStep + step.timeStep
+ }
+ }
+ fadeKeyTimes.append(NSNumber(value:Float(stepTime/totalDuration)))
+
+ // Fade Values
+ let values: [CGColor]
+ let leading = step.edgeFades.contains(.leading) ? transp : opaque
+ let trailing = step.edgeFades.contains(.trailing) ? transp : opaque
+ switch type {
+ case .leftRight, .left, .continuous:
+ values = [leading, opaque, opaque, trailing]
+ case .rightLeft, .right, .continuousReverse:
+ values = [trailing, opaque, opaque, leading]
+ }
+ fadeKeyValues.append(values)
+
+ // Fade Timing Function
+ // Only need n-1 timing functions, so discard the first value as it's unused
+ if offset == 0 { continue }
+ fadeTimingFunctions.append(timingFunctionForAnimationCurve(step.timingFunction))
+ }
+
+ // Create new animation
+ let animation = CAKeyframeAnimation(keyPath: "colors")
+
+ animation.values = fadeKeyValues
+ animation.keyTimes = fadeKeyTimes
+ animation.timingFunctions = fadeTimingFunctions
+
+ return (anim: animation, duration: max(totalTime, totalDuration))
+ }
+
+ private func applyGradientMask(_ fadeLength: CGFloat, animated: Bool, firstStep: MarqueeStep? = nil) {
+ // Remove any in-flight animations
+ maskLayer?.removeAllAnimations()
+
+ // Check for zero-length fade
+ if fadeLength <= 0.0 {
+ removeGradientMask()
+ return
+ }
+
+ // Configure gradient mask without implicit animations
+ CATransaction.begin()
+ CATransaction.setDisableActions(true)
+
+ // Determine if gradient mask needs to be created
+ let gradientMask: CAGradientLayer
+ if let currentMask = self.maskLayer {
+ // Mask layer already configured
+ gradientMask = currentMask
+ } else {
+ // No mask exists, create new mask
+ gradientMask = CAGradientLayer()
+ gradientMask.shouldRasterize = true
+ #if os(visionOS)
+ gradientMask.rasterizationScale = UITraitCollection.current.displayScale
+ #else
+ gradientMask.rasterizationScale = UIScreen.main.scale
+ #endif
+ gradientMask.startPoint = CGPoint(x:0.0, y:0.5)
+ gradientMask.endPoint = CGPoint(x:1.0, y:0.5)
+ }
+
+ // Check if there is a mask to layer size mismatch
+ if gradientMask.bounds != self.layer.bounds {
+ // Adjust stops based on fade length
+ let leftFadeStop = fadeLength/self.bounds.size.width
+ let rightFadeStop = 1.0 - fadeLength/self.bounds.size.width
+ gradientMask.locations = [0.0, leftFadeStop, rightFadeStop, 1.0].map { NSNumber(value: Float($0)) }
+ }
+
+ gradientMask.bounds = self.layer.bounds
+ gradientMask.position = CGPoint(x:self.bounds.midX, y:self.bounds.midY)
+
+ // Set up colors
+ let transparent = UIColor.clear.cgColor
+ let opaque = UIColor.black.cgColor
+
+ // Set mask
+ self.layer.mask = gradientMask
+
+ // Determine colors for non-scrolling label (i.e. at home)
+ let adjustedColors: [CGColor]
+ let trailingFadeNeeded = self.labelShouldScroll()
+
+ switch type {
+ case .continuousReverse, .rightLeft:
+ adjustedColors = [(trailingFadeNeeded ? transparent : opaque), opaque, opaque, opaque]
+
+ // .Continuous, .LeftRight
+ default:
+ adjustedColors = [opaque, opaque, opaque, (trailingFadeNeeded ? transparent : opaque)]
+ }
+
+ // Check for IBDesignable
+ #if TARGET_INTERFACE_BUILDER
+ gradientMask.colors = adjustedColors
+ CATransaction.commit()
+ #else
+ if animated {
+ // Finish transaction
+ CATransaction.commit()
+
+ // Create animation for color change
+ let colorAnimation = GradientSetupAnimation(keyPath: "colors")
+ colorAnimation.fromValue = gradientMask.colors
+ colorAnimation.toValue = adjustedColors
+ colorAnimation.fillMode = .forwards
+ colorAnimation.isRemovedOnCompletion = false
+ colorAnimation.delegate = self
+ gradientMask.add(colorAnimation, forKey: "setupFade")
+ } else {
+ gradientMask.colors = adjustedColors
+ CATransaction.commit()
+ }
+ #endif
+ }
+
+ private func removeGradientMask() {
+ self.layer.mask = nil
+ }
+
+ private func timingFunctionForAnimationCurve(_ curve: UIView.AnimationCurve) -> CAMediaTimingFunction {
+ let timingFunction: CAMediaTimingFunctionName?
+
+ switch curve {
+ case .easeIn:
+ timingFunction = .easeIn
+ case .easeInOut:
+ timingFunction = .easeInEaseOut
+ case .easeOut:
+ timingFunction = .easeOut
+ default:
+ timingFunction = .linear
+ }
+
+ return CAMediaTimingFunction(name: timingFunction!)
+ }
+
+ private func transactionDurationType(_ labelType: MarqueeType, interval: CGFloat, delay: CGFloat) -> TimeInterval {
+ switch labelType {
+ case .leftRight, .rightLeft:
+ return TimeInterval(2.0 * (delay + interval))
+ default:
+ return TimeInterval(delay + interval)
+ }
+ }
+
+ public func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {
+ if let setupAnim = anim as? GradientSetupAnimation {
+ if let finalColors = setupAnim.toValue as? [CGColor] {
+ maskLayer?.colors = finalColors
+ }
+ // Remove regardless, since we set removeOnCompletion = false
+ maskLayer?.removeAnimation(forKey: "setupFade")
+ } else {
+ scrollCompletionBlock?(flag)
+ }
+ }
+
+
+ //
+ // MARK: - Private details
+ //
+
+ private var sublabel = UILabel()
+
+ fileprivate var homeLabelFrame = CGRect.zero
+ fileprivate var awayOffset: CGFloat = 0.0
+
+ override open class var layerClass: AnyClass {
+ return CAReplicatorLayer.self
+ }
+
+ fileprivate weak var repliLayer: CAReplicatorLayer? {
+ return self.layer as? CAReplicatorLayer
+ }
+
+ fileprivate weak var maskLayer: CAGradientLayer? {
+ return self.layer.mask as! CAGradientLayer?
+ }
+
+ fileprivate var scrollCompletionBlock: MLAnimationCompletionBlock?
+
+ override open func draw(_ layer: CALayer, in ctx: CGContext) {
+ // Do NOT call super, to prevent UILabel superclass from drawing into context
+ // Label drawing is handled by sublabel and CAReplicatorLayer layer class
+
+ // Draw only background color
+ if let bgColor = backgroundColor {
+ ctx.setFillColor(bgColor.cgColor)
+ ctx.fill(layer.bounds)
+ }
+ }
+
+ private var minimumTrailingDistance: CGFloat {
+ // Spacing between primary and second sublabel must be at least equal to leadingBuffer, and at least equal to the fadeLengt
+ return max(max(leadingBuffer, trailingBuffer), fadeLength)
+ }
+
+ fileprivate enum MarqueeKeys: String {
+ case Restart = "MLViewControllerRestart"
+ case Labelize = "MLShouldLabelize"
+ case Animate = "MLShouldAnimate"
+ case CompletionClosure = "MLAnimationCompletion"
+ }
+
+ class fileprivate func notifyController(_ controller: UIViewController, message: MarqueeKeys) {
+ NotificationCenter.default.post(name: Notification.Name(rawValue: message.rawValue), object: nil, userInfo: ["controller" : controller])
+ }
+
+ @objc public func restartForViewController(_ notification: Notification) {
+ if let controller = (notification as NSNotification).userInfo?["controller"] as? UIViewController {
+ if controller === self.firstAvailableViewController() {
+ self.restartLabel()
+ }
+ }
+ }
+
+ @objc public func labelizeForController(_ notification: Notification) {
+ if let controller = (notification as NSNotification).userInfo?["controller"] as? UIViewController {
+ if controller === self.firstAvailableViewController() {
+ self.labelize = true
+ }
+ }
+ }
+
+ @objc public func animateForController(_ notification: Notification) {
+ if let controller = (notification as NSNotification).userInfo?["controller"] as? UIViewController {
+ if controller === self.firstAvailableViewController() {
+ self.labelize = false
+ }
+ }
+ }
+
+
+ //
+ // MARK: - Label Control
+ //
+
+ /**
+ Overrides any non-size condition which is preventing the receiver from automatically scrolling, and begins a scroll animation.
+
+ Currently the only non-size conditions which can prevent a label from scrolling are the `tapToScroll` and `holdScrolling` properties. This
+ method will not force a label with a string that fits inside the label bounds (i.e. that would not automatically scroll) to begin a scroll
+ animation.
+
+ Upon the completion of the first forced scroll animation, the receiver will not automatically continue to scroll unless the conditions
+ preventing scrolling have been removed.
+
+ - Note: This method has no effect if called during an already in-flight scroll animation.
+
+ - SeeAlso: restartLabel
+ */
+ public func triggerScrollStart() {
+ if labelShouldScroll() && !awayFromHome {
+ updateAndScroll(overrideHold: true)
+ }
+ }
+
+ /**
+ Immediately resets the label to the home position, cancelling any in-flight scroll animation, and restarts the scroll animation if the appropriate conditions are met.
+
+ - SeeAlso: resetLabel
+ - SeeAlso: triggerScrollStart
+ */
+ @objc public func restartLabel() {
+ // Shutdown the label
+ shutdownLabel()
+ // Restart scrolling if appropriate
+ if labelShouldScroll() && !tapToScroll && !holdScrolling {
+ updateAndScroll()
+ }
+ }
+
+ /**
+ Resets the label text, recalculating the scroll animation.
+
+ The text is immediately returned to the home position, and the scroll animation positions are cleared. Scrolling will not resume automatically after
+ a call to this method. To re-initiate scrolling, use either a call to `restartLabel` or make a change to a UILabel property such as text, bounds/frame,
+ font, font size, etc.
+
+ - SeeAlso: restartLabel
+ */
+ @available(*, deprecated, message : "Use the shutdownLabel function instead")
+ public func resetLabel() {
+ returnLabelToHome()
+ homeLabelFrame = CGRect.null
+ awayOffset = 0.0
+ }
+
+ /**
+ Immediately resets the label to the home position, cancelling any in-flight scroll animation.
+
+ The text is immediately returned to the home position. Scrolling will not resume automatically after a call to this method.
+ To re-initiate scrolling use a call to `restartLabel` or `triggerScrollStart`, or make a change to a UILabel property such as text, bounds/frame,
+ font, font size, etc.
+
+ - SeeAlso: restartLabel
+ - SeeAlso: triggerScrollStart
+ */
+ @objc public func shutdownLabel() {
+ // Bring label to home location
+ returnLabelToHome()
+ // Apply gradient mask for home location
+ applyGradientMask(fadeLength, animated: false)
+ }
+
+ /**
+ Pauses the text scrolling animation, at any point during an in-progress animation.
+
+ - Note: This method has no effect if a scroll animation is NOT already in progress. To prevent automatic scrolling on a newly-initialized label prior to its presentation onscreen, see the `holdScrolling` property.
+
+ - SeeAlso: holdScrolling
+ - SeeAlso: unpauseLabel
+ */
+ public func pauseLabel() {
+ // Prevent pausing label while not in scrolling animation, or when already paused
+ guard !isPaused && awayFromHome else {
+ return
+ }
+
+ // Pause sublabel position animations
+ let labelPauseTime = sublabel.layer.convertTime(CACurrentMediaTime(), from: nil)
+ sublabel.layer.speed = 0.0
+ sublabel.layer.timeOffset = labelPauseTime
+
+ // Pause gradient fade animation
+ let gradientPauseTime = maskLayer?.convertTime(CACurrentMediaTime(), from:nil)
+ maskLayer?.speed = 0.0
+ maskLayer?.timeOffset = gradientPauseTime!
+ }
+
+ /**
+ Un-pauses a previously paused text scrolling animation. This method has no effect if the label was not previously paused using `pauseLabel`.
+
+ - SeeAlso: pauseLabel
+ */
+ public func unpauseLabel() {
+ // Only unpause if label was previously paused
+ guard isPaused else {
+ return
+ }
+
+ // Unpause sublabel position animations
+ let labelPausedTime = sublabel.layer.timeOffset
+ sublabel.layer.speed = 1.0
+ sublabel.layer.timeOffset = 0.0
+ sublabel.layer.beginTime = 0.0
+ sublabel.layer.beginTime = sublabel.layer.convertTime(CACurrentMediaTime(), from:nil) - labelPausedTime
+
+ // Unpause gradient fade animation
+ let gradientPauseTime = maskLayer?.timeOffset
+ maskLayer?.speed = 1.0
+ maskLayer?.timeOffset = 0.0
+ maskLayer?.beginTime = 0.0
+ maskLayer?.beginTime = maskLayer!.convertTime(CACurrentMediaTime(), from:nil) - gradientPauseTime!
+ }
+
+ @objc public func labelWasTapped(_ recognizer: UIGestureRecognizer) {
+ if labelShouldScroll() && !awayFromHome {
+ // Set shouldBeginScroll to true to begin single scroll due to tap
+ updateAndScroll(overrideHold: true)
+ }
+ }
+
+ /**
+ Function to convert a point from the label view frame coordinates to "text" coordinates, i.e. the equivalent
+ position in the (possibly) scrolling label. For example, it can be used to convert the coordinates
+ of a tap point on the MarqueeLabel view into that of the scrolling label, in order to determine the
+ word or character under the tap point.
+
+ If the specified point does not fall inside the bounds of the scrolling label, such as if on a leading
+ or trailing buffer area, the function will return nil.
+ */
+ open func textCoordinateForFramePoint(_ point:CGPoint) -> CGPoint? {
+ // Check for presentation layer, if none return input point
+ guard let presentationLayer = sublabel.layer.presentation() else { return point }
+ // Convert point from MarqueeLabel main layer to sublabel's presentationLayer
+ let presentationPoint = presentationLayer.convert(point, from: self.layer)
+ // Check if point overlaps into 2nd instance of a continuous type label
+ let textPoint: CGPoint?
+ let presentationX = presentationPoint.x
+ let labelWidth = sublabel.frame.size.width
+
+ var containers: [Range] = []
+ switch type {
+ case .continuous:
+ // First label frame range
+ let firstLabel = 0.0 ..< sublabel.frame.size.width
+ // Range from end of first label to the minimum trailining distance (i.e. the separator)
+ let minTrailing = firstLabel.rangeForExtension(minimumTrailingDistance)
+ // Range of second label instance, from end of separator to length
+ let secondLabel = minTrailing.rangeForExtension(labelWidth)
+ // Add valid ranges to array to check
+ containers += [firstLabel, secondLabel]
+ case .continuousReverse:
+ // First label frame range
+ let firstLabel = 0.0 ..< sublabel.frame.size.width
+ // Range of second label instance, from end of separator to length
+ let secondLabel = -sublabel.frame.size.width ..< -minimumTrailingDistance
+ // Add valid ranges to array to check
+ containers += [firstLabel, secondLabel]
+ case .left, .leftRight, .right, .rightLeft:
+ // Only label frame range
+ let firstLabel = 0.0 ..< sublabel.frame.size.width
+ containers.append(firstLabel)
+ }
+
+ // Determine which range contains the point, or return nil if in a buffer/margin area
+ guard let container = containers.filter({ (rng) -> Bool in
+ return rng.contains(presentationX)
+ }).first else { return nil }
+
+ textPoint = CGPoint(x: (presentationX - container.lowerBound), y: presentationPoint.y)
+ return textPoint
+ }
+
+ /**
+ Called when the label animation is about to begin.
+
+ The default implementation of this method does nothing. Subclasses may override this method in order to perform any custom actions just as
+ the label animation begins. This is only called in the event that the conditions for scrolling to begin are met.
+ */
+ open func labelWillBeginScroll() {
+ // Default implementation does nothing - override to customize
+ return
+ }
+
+ /**
+ Called when the label animation has finished, and the label is at the home position.
+
+ The default implementation of this method does nothing. Subclasses may override this method in order to perform any custom actions jas as
+ the label animation completes, and before the next animation would begin (assuming the scroll conditions are met).
+
+ - Parameter finished: A Boolean that indicates whether or not the scroll animation actually finished before the completion handler was called.
+
+ - Warning: This method will be called, and the `finished` parameter will be `NO`, when any property changes are made that would cause the label
+ scrolling to be automatically reset. This includes changes to label text and font/font size changes.
+ */
+ open func labelReturnedToHome(_ finished: Bool) {
+ // Default implementation does nothing - override to customize
+ return
+ }
+
+ //
+ // MARK: - Modified UILabel Functions/Getters/Setters
+ //
+
+ override open var text: String? {
+ get {
+ return sublabel.text
+ }
+
+ set {
+ if sublabel.text == newValue {
+ return
+ }
+ sublabel.text = newValue
+ updateAndScroll()
+ super.text = text
+ }
+ }
+
+ override open var attributedText: NSAttributedString? {
+ get {
+ return sublabel.attributedText
+ }
+
+ set {
+ if sublabel.attributedText == newValue {
+ return
+ }
+ sublabel.attributedText = newValue
+ updateAndScroll()
+ super.attributedText = attributedText
+ }
+ }
+
+ override open var font: UIFont! {
+ get {
+ return sublabel.font
+ }
+
+ set {
+ if sublabel.font == newValue {
+ return
+ }
+ sublabel.font = newValue
+ super.font = newValue
+
+ updateAndScroll()
+ }
+ }
+
+ override open var textColor: UIColor! {
+ get {
+ return sublabel.textColor
+ }
+
+ set {
+ sublabel.textColor = newValue
+ super.textColor = newValue
+ }
+ }
+
+ override open var backgroundColor: UIColor? {
+ get {
+ return sublabel.backgroundColor
+ }
+
+ set {
+ sublabel.backgroundColor = newValue
+ super.backgroundColor = newValue
+ }
+ }
+
+ override open var shadowColor: UIColor? {
+ get {
+ return sublabel.shadowColor
+ }
+
+ set {
+ sublabel.shadowColor = newValue
+ super.shadowColor = newValue
+ }
+ }
+
+ override open var shadowOffset: CGSize {
+ get {
+ return sublabel.shadowOffset
+ }
+
+ set {
+ sublabel.shadowOffset = newValue
+ super.shadowOffset = newValue
+ }
+ }
+
+ override open var highlightedTextColor: UIColor? {
+ get {
+ return sublabel.highlightedTextColor
+ }
+
+ set {
+ sublabel.highlightedTextColor = newValue
+ super.highlightedTextColor = newValue
+ }
+ }
+
+ override open var isHighlighted: Bool {
+ get {
+ return sublabel.isHighlighted
+ }
+
+ set {
+ sublabel.isHighlighted = newValue
+ super.isHighlighted = newValue
+ }
+ }
+
+ override open var isEnabled: Bool {
+ get {
+ return sublabel.isEnabled
+ }
+
+ set {
+ sublabel.isEnabled = newValue
+ super.isEnabled = newValue
+ }
+ }
+
+ override open var numberOfLines: Int {
+ get {
+ return super.numberOfLines
+ }
+
+ set {
+ // By the nature of MarqueeLabel, this is 1
+ super.numberOfLines = 1
+ }
+ }
+
+ override open var baselineAdjustment: UIBaselineAdjustment {
+ get {
+ return sublabel.baselineAdjustment
+ }
+
+ set {
+ sublabel.baselineAdjustment = newValue
+ super.baselineAdjustment = newValue
+ }
+ }
+
+ override open var intrinsicContentSize: CGSize {
+ var content = sublabel.intrinsicContentSize
+ content.width += leadingBuffer
+ return content
+ }
+
+ override open var tintColor: UIColor! {
+ get {
+ return sublabel.tintColor
+ }
+
+ set {
+ sublabel.tintColor = newValue
+ super.tintColor = newValue
+ }
+ }
+
+ override open func tintColorDidChange() {
+ super.tintColorDidChange()
+ sublabel.tintColorDidChange()
+ }
+
+ override open var contentMode: UIView.ContentMode {
+ get {
+ return sublabel.contentMode
+ }
+
+ set {
+ super.contentMode = contentMode
+ sublabel.contentMode = newValue
+ }
+ }
+
+ open override var isAccessibilityElement: Bool {
+ didSet {
+ sublabel.isAccessibilityElement = self.isAccessibilityElement
+ }
+ }
+
+ open override var adjustsFontForContentSizeCategory: Bool {
+ get {
+ return sublabel.adjustsFontForContentSizeCategory
+ }
+ set {
+ if sublabel.adjustsFontForContentSizeCategory == newValue {
+ return
+ }
+ sublabel.adjustsFontForContentSizeCategory = newValue
+ super.adjustsFontForContentSizeCategory = newValue
+
+ updateAndScroll()
+ }
+ }
+
+ //
+ // MARK: - Version Specific Properties
+ //
+ #if os(iOS)
+ override open func forBaselineLayout() -> UIView {
+ // Use subLabel view for handling baseline layouts
+ return sublabel
+ }
+
+ override open var forLastBaselineLayout: UIView {
+ // Use subLabel view for handling baseline layouts
+ return sublabel
+ }
+ #endif
+
+ @available(iOS 15.0, tvOS 15.0, *)
+ open override var minimumContentSizeCategory: UIContentSizeCategory? {
+ get {
+ return sublabel.minimumContentSizeCategory
+ }
+ set {
+ if sublabel.minimumContentSizeCategory == newValue {
+ return
+ }
+ sublabel.minimumContentSizeCategory = newValue
+ super.minimumContentSizeCategory = newValue
+
+ updateAndScroll()
+ }
+ }
+
+ @available(iOS 15.0, tvOS 15.0, *)
+ open override var appliedContentSizeCategoryLimitsDescription: String {
+ return sublabel.appliedContentSizeCategoryLimitsDescription
+ }
+
+ @available(iOS 15.0, tvOS 15.0, *)
+ open override var maximumContentSizeCategory: UIContentSizeCategory? {
+ get {
+ return sublabel.maximumContentSizeCategory
+ }
+ set {
+ if sublabel.maximumContentSizeCategory == newValue {
+ return
+ }
+ sublabel.maximumContentSizeCategory = newValue
+ super.maximumContentSizeCategory = newValue
+
+ updateAndScroll()
+ }
+ }
+
+ //
+ // MARK: - Support
+ //
+
+ fileprivate func offsetCGPoint(_ point: CGPoint, offset: CGFloat) -> CGPoint {
+ return CGPoint(x: point.x + offset, y: point.y)
+ }
+
+ //
+ // MARK: - Deinit
+ //
+
+ deinit {
+ NotificationCenter.default.removeObserver(self)
+ }
+
+}
+
+
+//
+// MARK: - Support
+//
+public protocol MarqueeStep {
+ var timeStep: CGFloat { get }
+ var timingFunction: UIView.AnimationCurve { get }
+ var edgeFades: EdgeFade { get }
+}
+
+
+/**
+ `ScrollStep` types define the label position at a specified time delta since the last `ScrollStep` step, as well as
+ the animation curve to that position and edge fade state at the position
+ */
+public struct ScrollStep: MarqueeStep {
+ /**
+ An enum that provides the possible positions defined by a ScrollStep
+ - `home`: The starting, default position of the label
+ - `away`: The calculated position that results in the entirety of the label scrolling past.
+ - `partial(CGFloat)`: A fractional value, specified by the associated CGFloat value, between the `home` and `away` positions (must be between 0.0 and 1.0).
+
+ The `away` position depends on the MarqueeLabel `type` value.
+ - For `left`, `leftRight`, `right`, and `rightLeft` types, the `away` position means the trailing edge of the label
+ is visible. For `leftRight` and `rightLeft` default types, the scroll animation reverses direction after reaching
+ this point and returns to the `home` position.
+ - For `continuous` and `continuousReverse` types, the `away` position is the location such that if the scroll is completed
+ at this point (i.e. the animation is removed), there will be no visible change in the label appearance.
+ */
+ public enum Position {
+ case home
+ case away
+ case partial(CGFloat)
+ }
+
+ /**
+ The desired time between this step and the previous `ScrollStep` in a sequence.
+ */
+ public let timeStep: CGFloat
+
+ /**
+ The animation curve to utilize between the previous `ScrollStep` in a sequence and this step.
+
+ - Note: The animation curve value for the first `ScrollStep` in a sequence has no effect.
+ */
+ public let timingFunction: UIView.AnimationCurve
+
+ /**
+ The position of the label for this scroll step.
+ - SeeAlso: Position
+ */
+ public let position: Position
+
+ /**
+ The option set defining the edge fade state for this scroll step.
+
+ Possible options include `.leading` and `.trailing`, corresponding to the leading edge of the label scrolling (i.e.
+ the direction of scroll) and trailing edge of the label.
+ */
+ public let edgeFades: EdgeFade
+
+ public init(timeStep: CGFloat, timingFunction: UIView.AnimationCurve = .linear, position: Position, edgeFades: EdgeFade) {
+ self.timeStep = timeStep
+ self.position = position
+ self.edgeFades = edgeFades
+ self.timingFunction = timingFunction
+ }
+}
+
+
+/**
+ `FadeStep` types allow additional edge fade state definitions, around the states defined by the `ScrollStep` steps of
+ a sequence. `FadeStep` steps are defined by the time delta to the preceding or subsequent `ScrollStep` step and the timing
+ function to their edge fade state.
+
+ - Note: A `FadeStep` cannot be the first step in a sequence. A `FadeStep` defined as such will be ignored.
+ */
+public struct FadeStep: MarqueeStep {
+ /**
+ The desired time between this `FadeStep` and the preceding or subsequent `ScrollStep` in a sequence.
+
+ `FadeSteps` with a negative `timeStep` value will be associated _only_ with an immediately-subsequent `ScrollStep` step
+ in the sequence.
+
+ `FadeSteps` with a positive `timeStep` value will be associated _only_ with an immediately-prior `ScrollStep` step in the
+ sequence.
+
+ - Note: A `FadeStep` with a `timeStep` value of 0.0 will have no effect, and is the same as defining the fade state with
+ a `ScrollStep`.
+ */
+ public let timeStep: CGFloat
+
+ /**
+ The animation curve to utilize between the previous fade state in a sequence and this step.
+ */
+ public let timingFunction: UIView.AnimationCurve
+
+ /**
+ The option set defining the edge fade state for this fade step.
+
+ Possible options include `.leading` and `.trailing`, corresponding to the leading edge of the label scrolling (i.e.
+ the direction of scroll) and trailing edge of the label.
+
+ As an Option Set type, both edge fade states may be defined using an array literal: `[.leading, .trailing]`.
+ */
+ public let edgeFades: EdgeFade
+
+ public init(timeStep: CGFloat, timingFunction: UIView.AnimationCurve = .linear, edgeFades: EdgeFade) {
+ self.timeStep = timeStep
+ self.timingFunction = timingFunction
+ self.edgeFades = edgeFades
+ }
+}
+
+public struct EdgeFade: OptionSet {
+ public let rawValue: Int
+ public static let leading = EdgeFade(rawValue: 1 << 0)
+ public static let trailing = EdgeFade(rawValue: 1 << 1)
+
+ public init(rawValue: Int) {
+ self.rawValue = rawValue
+ }
+}
+
+// Define helpful typealiases
+fileprivate typealias MLAnimationCompletionBlock = (_ finished: Bool) -> Void
+fileprivate typealias MLAnimation = (anim: CAKeyframeAnimation, duration: CGFloat)
+
+fileprivate class GradientSetupAnimation: CABasicAnimation {
+}
+
+fileprivate extension UILabel {
+ func desiredSize() -> CGSize {
+ // Bound the expected size
+ let maximumLabelSize = CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude)
+ // Calculate the expected size
+ var expectedLabelSize = self.sizeThatFits(maximumLabelSize)
+
+ #if os(tvOS)
+ // Sanitize width to 16384.0 (largest width a UILabel will draw on tvOS)
+ expectedLabelSize.width = min(expectedLabelSize.width, 16384.0)
+ #else
+ // Sanitize width to 5461.0 (largest width a UILabel will draw on an iPhone 6S Plus)
+ expectedLabelSize.width = min(expectedLabelSize.width, 5461.0)
+ #endif
+
+ // Adjust to own height (make text baseline match normal label)
+ expectedLabelSize.height = bounds.size.height
+ return expectedLabelSize
+ }
+}
+
+fileprivate extension Range where Bound == CGFloat {
+ func rangeForExtension(_ ext: CGFloat) -> Range {
+ return self.upperBound..<(self.upperBound + ext)
+ }
+}
+
+fileprivate extension UIResponder {
+ // Thanks to Phil M
+ // http://stackoverflow.com/questions/1340434/get-to-uiviewcontroller-from-uiview-on-iphone
+
+ func firstAvailableViewController() -> UIViewController? {
+ // convenience function for casting and to "mask" the recursive function
+ return self.traverseResponderChainForFirstViewController()
+ }
+
+ func traverseResponderChainForFirstViewController() -> UIViewController? {
+ if let nextResponder = self.next {
+ if nextResponder is UIViewController {
+ return nextResponder as? UIViewController
+ } else if nextResponder is UIView {
+ return nextResponder.traverseResponderChainForFirstViewController()
+ } else {
+ return nil
+ }
+ }
+ return nil
+ }
+}
+
+fileprivate extension CAMediaTimingFunction {
+
+ func durationPercentageForPositionPercentage(_ positionPercentage: CGFloat, duration: CGFloat) -> CGFloat {
+ // Finds the animation duration percentage that corresponds with the given animation "position" percentage.
+ // Utilizes Newton's Method to solve for the parametric Bezier curve that is used by CAMediaAnimation.
+
+ let controlPoints = self.controlPoints()
+ let epsilon: CGFloat = 1.0 / (100.0 * CGFloat(duration))
+
+ // Find the t value that gives the position percentage we want
+ let t_found = solveTforY(positionPercentage, epsilon: epsilon, controlPoints: controlPoints)
+
+ // With that t, find the corresponding animation percentage
+ let durationPercentage = XforCurveAt(t_found, controlPoints: controlPoints)
+
+ return durationPercentage
+ }
+
+ func solveTforY(_ y_0: CGFloat, epsilon: CGFloat, controlPoints: [CGPoint]) -> CGFloat {
+ // Use Newton's Method: http://en.wikipedia.org/wiki/Newton's_method
+ // For first guess, use t = y (i.e. if curve were linear)
+ var t0 = y_0
+ var t1 = y_0
+ var f0, df0: CGFloat
+
+ for _ in 0..<15 {
+ // Base this iteration of t1 calculated from last iteration
+ t0 = t1
+ // Calculate f(t0)
+ f0 = YforCurveAt(t0, controlPoints:controlPoints) - y_0
+ // Check if this is close (enough)
+ if abs(f0) < epsilon {
+ // Done!
+ return t0
+ }
+ // Else continue Newton's Method
+ df0 = derivativeCurveYValueAt(t0, controlPoints:controlPoints)
+ // Check if derivative is small or zero ( http://en.wikipedia.org/wiki/Newton's_method#Failure_analysis )
+ if abs(df0) < 1e-6 {
+ break
+ }
+ // Else recalculate t1
+ t1 = t0 - f0/df0
+ }
+
+ // Give up - shouldn't ever get here...I hope
+ print("MarqueeLabel: Failed to find t for Y input!")
+ return t0
+ }
+
+ func YforCurveAt(_ t: CGFloat, controlPoints: [CGPoint]) -> CGFloat {
+ let P0 = controlPoints[0]
+ let P1 = controlPoints[1]
+ let P2 = controlPoints[2]
+ let P3 = controlPoints[3]
+
+ // Per http://en.wikipedia.org/wiki/Bezier_curve#Cubic_B.C3.A9zier_curves
+ let y0 = (pow((1.0 - t), 3.0) * P0.y)
+ let y1 = (3.0 * pow(1.0 - t, 2.0) * t * P1.y)
+ let y2 = (3.0 * (1.0 - t) * pow(t, 2.0) * P2.y)
+ let y3 = (pow(t, 3.0) * P3.y)
+
+ return y0 + y1 + y2 + y3
+ }
+
+ func XforCurveAt(_ t: CGFloat, controlPoints: [CGPoint]) -> CGFloat {
+ let P0 = controlPoints[0]
+ let P1 = controlPoints[1]
+ let P2 = controlPoints[2]
+ let P3 = controlPoints[3]
+
+ // Per http://en.wikipedia.org/wiki/Bezier_curve#Cubic_B.C3.A9zier_curves
+
+ let x0 = (pow((1.0 - t), 3.0) * P0.x)
+ let x1 = (3.0 * pow(1.0 - t, 2.0) * t * P1.x)
+ let x2 = (3.0 * (1.0 - t) * pow(t, 2.0) * P2.x)
+ let x3 = (pow(t, 3.0) * P3.x)
+
+ return x0 + x1 + x2 + x3
+ }
+
+ func derivativeCurveYValueAt(_ t: CGFloat, controlPoints: [CGPoint]) -> CGFloat {
+ let P0 = controlPoints[0]
+ let P1 = controlPoints[1]
+ let P2 = controlPoints[2]
+ let P3 = controlPoints[3]
+
+ let dy0 = (P0.y + 3.0 * P1.y + 3.0 * P2.y - P3.y) * -3.0
+ let dy1 = t * (6.0 * P0.y + 6.0 * P2.y)
+ let dy2 = (-3.0 * P0.y + 3.0 * P1.y)
+
+ return dy0 * pow(t, 2.0) + dy1 + dy2
+ }
+
+ func controlPoints() -> [CGPoint] {
+ // Create point array to point to
+ var point: [Float] = [0.0, 0.0]
+ var pointArray = [CGPoint]()
+ for i in 0...3 {
+ self.getControlPoint(at: i, values: &point)
+ pointArray.append(CGPoint(x: CGFloat(point[0]), y: CGFloat(point[1])))
+ }
+
+ return pointArray
+ }
+}
+
diff --git a/Pods/MarqueeLabel/Sources/PrivacyInfo.xcprivacy b/Pods/MarqueeLabel/Sources/PrivacyInfo.xcprivacy
new file mode 100644
index 0000000..0c89028
--- /dev/null
+++ b/Pods/MarqueeLabel/Sources/PrivacyInfo.xcprivacy
@@ -0,0 +1,14 @@
+
+
+
+
+ NSPrivacyTracking
+
+ NSPrivacyTrackingDomains
+
+ NSPrivacyAccessedAPITypes
+
+ NSPrivacyCollectedDataTypes
+
+
+
diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj
index 2db56d0..91ab341 100644
--- a/Pods/Pods.xcodeproj/project.pbxproj
+++ b/Pods/Pods.xcodeproj/project.pbxproj
@@ -7,1045 +7,1072 @@
objects = {
/* Begin PBXBuildFile section */
- 007E4A9363B819089774B481510E7DFC /* DownloadTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = B72DA7D36E4584007B5A7E1B88B9331C /* DownloadTask.swift */; };
- 018E14B621F0A041F5109C9B4028DAA7 /* JXSegmentedIndicatorGradientView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 973352085D5416EA815F82D7171FFDF6 /* JXSegmentedIndicatorGradientView.swift */; };
- 0335018FAC1AD7BC453F8F9A68CDABC4 /* SVProgressAnimatedView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E7C909E9A64B9D749DBD181DB7AB6C7 /* SVProgressAnimatedView.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 0361F2B5CB823772710AB366D00D3F0E /* Formatter+Protocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05D53E6FE979C0A1784D61AE876E30EB /* Formatter+Protocols.swift */; };
- 0493E66044259CA8F47711626563E29C /* RelativeFormatterLanguage.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE67A08E936C10061A3F4C42C4D46A1F /* RelativeFormatterLanguage.swift */; };
- 05B82D21BB4500108A38518E64D25A6E /* CPListItem+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68A19F495B7B29FCD335C9877343A792 /* CPListItem+Kingfisher.swift */; };
+ 007E4A9363B819089774B481510E7DFC /* DownloadTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2122C6EBB21D40091E4A7024A3A84553 /* DownloadTask.swift */; };
+ 018E14B621F0A041F5109C9B4028DAA7 /* JXSegmentedIndicatorGradientView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCCBB3FF9CDB5CB4828893DDEB488674 /* JXSegmentedIndicatorGradientView.swift */; };
+ 0335018FAC1AD7BC453F8F9A68CDABC4 /* SVProgressAnimatedView.h in Headers */ = {isa = PBXBuildFile; fileRef = C723BAF098E360E89C3837C2C28AAC23 /* SVProgressAnimatedView.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 0361F2B5CB823772710AB366D00D3F0E /* Formatter+Protocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35FA650454D142550A0573C6FB619834 /* Formatter+Protocols.swift */; };
+ 0493E66044259CA8F47711626563E29C /* RelativeFormatterLanguage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 473404EA66F41CF156A5AA1663364FDC /* RelativeFormatterLanguage.swift */; };
+ 04F6A4F4967C6BDC48DD5BDA64DE07FD /* Pods-relax.offline.mp3.music-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A9791A6864A1422EB3D01824FCFDE53 /* Pods-relax.offline.mp3.music-dummy.m */; };
+ 05B82D21BB4500108A38518E64D25A6E /* CPListItem+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE89C1ABF2A598826BFD10EDDDA95AC6 /* CPListItem+Kingfisher.swift */; };
060ABD8CDFB995116BE1FEF7FA7D9EFC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B4B8063291033C95A8B2A24FA2AD7A79 /* Foundation.framework */; };
- 07F83DE63FB5CC8015F48F7B9B800B6F /* IQPreviousNextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4D898881D558C30750A0690F06774D /* IQPreviousNextView.swift */; };
- 07FD274BC01F578C7B37989F79350C1E /* IQToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B166B3810536EF00AF8735B173E648D /* IQToolbar.swift */; };
- 080B0A6E64DD22DBD5BF269AA6A556FB /* KFAnimatedImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651AA476DE421329D7481219EEF6450D /* KFAnimatedImage.swift */; };
- 081815B67871C182C0D337274DEDCE69 /* MJRefreshBackStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = E1FB999AC2FDEAC6E684D8B3FA776139 /* MJRefreshBackStateFooter.m */; };
- 08593ACC3F8955B57D3865FBE5940230 /* JXPagingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 597C0B43F3A389988BBE039F9180AF73 /* JXPagingView.swift */; };
+ 07F83DE63FB5CC8015F48F7B9B800B6F /* IQPreviousNextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23941654FE33A23CA7BF75F0C95BA24B /* IQPreviousNextView.swift */; };
+ 07FD274BC01F578C7B37989F79350C1E /* IQToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BD415DF4E0434B63CAD999FB00828B9 /* IQToolbar.swift */; };
+ 080B0A6E64DD22DBD5BF269AA6A556FB /* KFAnimatedImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FFF862E204569AABC42FFAFD56353A0 /* KFAnimatedImage.swift */; };
+ 081815B67871C182C0D337274DEDCE69 /* MJRefreshBackStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DC49AD779BCF52CF1DA54C5AE6E2B36 /* MJRefreshBackStateFooter.m */; };
+ 08593ACC3F8955B57D3865FBE5940230 /* JXPagingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D2D33F595163FDA3C1066EFF04B0A3C /* JXPagingView.swift */; };
0874E6176184E3A1C3E8AB158AE5E98B /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 828F1C480D9959D94E2868CE1084677F /* CoreGraphics.framework */; };
- 09871A1E8CE997DD91E7ACE2A0A273BF /* Zones.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7229D90EC1A65C45FB522B55022F09C6 /* Zones.swift */; };
- 0A5C290276F7453D9471E25BEA655842 /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE49FDCEF4136EFD8B8B73990A8273DA /* ConstraintLayoutGuide.swift */; };
- 0AD7A0DA8FF5880E3D8599062129AB12 /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CB71DBB690155435C7354D318B6E7BC /* ConstraintMakerEditable.swift */; };
- 0C1B443A8895027B91F721861E739920 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 9E9C802ADF9427945AB4EA05DD6D3BD0 /* PrivacyInfo.xcprivacy */; };
- 0CC41A7F3CDAAF90C1825DCF4FB71B9B /* DateRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D18AAD8C7EC5F24F1C4E62BC36A545A /* DateRepresentable.swift */; };
- 0D665B6767B345D8C70D7E029A2A48D8 /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1B1EF889925B42A1C1D10C0CDEB9439 /* ConstraintViewDSL.swift */; };
- 0DA9A9D2F8960818017E26DA480FA143 /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9679621F1FAF834E4E7A10B33E6E8FE4 /* ConstraintLayoutGuideDSL.swift */; };
- 0F1D68554CA1AC595168E8FB4E1A6E63 /* CachedResponseHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73E8978BF1F0C58A3BD5854096AEBD52 /* CachedResponseHandler.swift */; };
- 1093AAD9CB7394BDBDD0E287103515F6 /* MJRefreshNormalTrailer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C2B27EFF326D222281498D6341EC22E /* MJRefreshNormalTrailer.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 1102439674F0EB249240589D2607B9EF /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D57C1E7C83318927FF473C3874244A1 /* Result.swift */; };
- 11F2B1DF419EC68AD10D2A1D1176B082 /* SwiftDate-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A7DE7F4DC02387DEB4909EE6551BEBC /* SwiftDate-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 12EC6890A8A59536867A18E8F83C8BB7 /* JXPagingView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 05F1C2B1DEF9E95836BF3AC986652086 /* JXPagingView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 1336E9B0D82E5DE4E4DA4DAD898489BC /* DateInRegion+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87C9CDBBA73FEE85B6C6648580D2167B /* DateInRegion+Create.swift */; };
- 13CC0CFB1C56F23BBC872801F983C1A3 /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1B35519C98323C92C768E8314BB5556 /* ConstraintLayoutSupport.swift */; };
- 15CC896E2126D6A47D03C01964D74776 /* JXSegmentedIndicatorGradientLineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AC7D94E21920BD7C7205B597F701736 /* JXSegmentedIndicatorGradientLineView.swift */; };
- 15F68E09ADCDB843B938C490059485BD /* ConstraintMakerRelatable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86DF9B1826A8445C1909A118B026A333 /* ConstraintMakerRelatable+Extensions.swift */; };
- 162B358A9CC48A414D6744BAF8562D93 /* JXSegmentedTitleDynamicConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1A9174812F8930C8C9B88FFB94742A4 /* JXSegmentedTitleDynamicConfiguration.swift */; };
- 165B4E7F47A4A27EDF01B892B8E2A03B /* Array+Safe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E838A9978878D207DDD07D9A91E87A7 /* Array+Safe.swift */; };
- 16E5F9C7FE2C499D21F3E7AF1FFC2FA7 /* IQKeyboardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCE48D759A3729A1F7C0EACD9C5C2827 /* IQKeyboardManager.swift */; };
- 170E0C2556FD00466C155473B428F792 /* MJRefreshBackFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 370E0DBBCF6046B8EA0A19F16D7720C3 /* MJRefreshBackFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 09871A1E8CE997DD91E7ACE2A0A273BF /* Zones.swift in Sources */ = {isa = PBXBuildFile; fileRef = 955FB175B0F957F837E1F14A74513FF5 /* Zones.swift */; };
+ 0A5C290276F7453D9471E25BEA655842 /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93B36940516BABBD2527915100693F88 /* ConstraintLayoutGuide.swift */; };
+ 0AD7A0DA8FF5880E3D8599062129AB12 /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E17BB19CC994226AFBDBA45E90174B3A /* ConstraintMakerEditable.swift */; };
+ 0CC41A7F3CDAAF90C1825DCF4FB71B9B /* DateRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CA4F7B8603C3C6B06E3EC0DD58D9C71 /* DateRepresentable.swift */; };
+ 0D665B6767B345D8C70D7E029A2A48D8 /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = B240B0622C4AC6081D7EDFC6202A7A07 /* ConstraintViewDSL.swift */; };
+ 0DA9A9D2F8960818017E26DA480FA143 /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = B803220E5945CD79C62D45CBE3A42ABE /* ConstraintLayoutGuideDSL.swift */; };
+ 0F1D68554CA1AC595168E8FB4E1A6E63 /* CachedResponseHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D5E2396A67F7160A6BAEE91CF8DE309 /* CachedResponseHandler.swift */; };
+ 1093AAD9CB7394BDBDD0E287103515F6 /* MJRefreshNormalTrailer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FC94C6FC28C2204F52D7975F7EAD382 /* MJRefreshNormalTrailer.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1102439674F0EB249240589D2607B9EF /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = C83CA5A1A860D5596AEBFBC4F15135E1 /* Result.swift */; };
+ 11F2B1DF419EC68AD10D2A1D1176B082 /* SwiftDate-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 635635C80C4A6F844662FBC0825108B1 /* SwiftDate-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 12EC6890A8A59536867A18E8F83C8BB7 /* JXPagingView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 953FC7D1F8564B6B9DC76A37A7333FA5 /* JXPagingView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1336E9B0D82E5DE4E4DA4DAD898489BC /* DateInRegion+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = C97BEE5E450A5E886F39744CBDD8E4E3 /* DateInRegion+Create.swift */; };
+ 13CC0CFB1C56F23BBC872801F983C1A3 /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42D32A21BC6970499FB68AB45D275ACC /* ConstraintLayoutSupport.swift */; };
+ 15CC896E2126D6A47D03C01964D74776 /* JXSegmentedIndicatorGradientLineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46314C1E12962DB1E9D783BE2AB6599D /* JXSegmentedIndicatorGradientLineView.swift */; };
+ 15F68E09ADCDB843B938C490059485BD /* ConstraintMakerRelatable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA52ED1D7100B2335479F45E0BAB48BA /* ConstraintMakerRelatable+Extensions.swift */; };
+ 162B358A9CC48A414D6744BAF8562D93 /* JXSegmentedTitleDynamicConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC38E3F74F0F49291A13DB319164307F /* JXSegmentedTitleDynamicConfiguration.swift */; };
+ 165B4E7F47A4A27EDF01B892B8E2A03B /* Array+Safe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238B7566326A9971E1086B295C5ABFCB /* Array+Safe.swift */; };
+ 16E5F9C7FE2C499D21F3E7AF1FFC2FA7 /* IQKeyboardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81D940990A7A5C8F9765145438343AEB /* IQKeyboardManager.swift */; };
+ 170E0C2556FD00466C155473B428F792 /* MJRefreshBackFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B00242AEAF7DC8FA5F63CFFCD102E90 /* MJRefreshBackFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
172D6F4BDBFD921ABF3F4936747C7B5F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B4B8063291033C95A8B2A24FA2AD7A79 /* Foundation.framework */; };
- 18B137C1708A9B9DC45BBB1ECF1CE4A8 /* MJRefreshHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B448667264F601C0B45F3EED80D8646C /* MJRefreshHeader.m */; };
- 19C5CA44D4D4D5B711D33A73525D453F /* IQUIView+IQKeyboardToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC9EC0D2832CCC0BF46556C47E598340 /* IQUIView+IQKeyboardToolbar.swift */; };
- 19FE9BC7F25FF5D48B6B2B3B520D4D47 /* SVProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = 14D68A465BCDB85C5F5F10836C1E7E15 /* SVProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 1A39B80A5083C84CF22A0D9FBB27761E /* UICollectionViewLayout+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = B90745D19853BE9EDA09363759828B91 /* UICollectionViewLayout+MJRefresh.m */; };
- 1A56A2E0BE0367DDB6BE95E537D43314 /* Commons.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B57EEBF6633E0A3B3E68FA866010056 /* Commons.swift */; };
- 1AEABE21257723E2AEE836117F3A8B12 /* MJRefreshFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 70825CEBF5EE532366CB976871A97C27 /* MJRefreshFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 1B1FF7E1AFE69EA5C4816CF9426FD088 /* PKCircleView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C18631CE3A76D9E239D38D937F073AC /* PKCircleView.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 1B4B180E84924CF99663817A2AFFAA92 /* IQKeyboardManager+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C1056EA978019ADBA19B800CAEB542E /* IQKeyboardManager+Debug.swift */; };
- 1E7E37C51375285EA22294CD2ADB3159 /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 178ABE62AD082DF4E86BB4E2283BE7E5 /* Debugging.swift */; };
- 1F539427E456AC56FFDD416169240415 /* UIImage+PKDownloadButton.h in Headers */ = {isa = PBXBuildFile; fileRef = ACBBC1D95C681D2EBBB6FD5B9B42E31D /* UIImage+PKDownloadButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 1FF54BA1EA87ACD81339325012E2537B /* JXSegmentedTitleGradientCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32A400989AC36A34EEE68105929AB845 /* JXSegmentedTitleGradientCell.swift */; };
+ 18B137C1708A9B9DC45BBB1ECF1CE4A8 /* MJRefreshHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BBE9EF043CCF5A5419ECFEB06C690C1 /* MJRefreshHeader.m */; };
+ 19C5CA44D4D4D5B711D33A73525D453F /* IQUIView+IQKeyboardToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DDFC2B686C7E589416A77F3D89D8BD5 /* IQUIView+IQKeyboardToolbar.swift */; };
+ 19FE9BC7F25FF5D48B6B2B3B520D4D47 /* SVProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F83353ECC4B459BF4234E1164289644 /* SVProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1A39B80A5083C84CF22A0D9FBB27761E /* UICollectionViewLayout+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = 1449C5993FC9FD9E4C34B82F3C5CB814 /* UICollectionViewLayout+MJRefresh.m */; };
+ 1A56A2E0BE0367DDB6BE95E537D43314 /* Commons.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8516622262A452328B0B65E29AA340F /* Commons.swift */; };
+ 1A6AF38DE42C92491AFFC76527050663 /* MarqueeLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 664067D6AFAD9C1DDA40DD6EF0AEB02D /* MarqueeLabel.swift */; };
+ 1AEABE21257723E2AEE836117F3A8B12 /* MJRefreshFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A7EDE82DCCDCDE3D2E8D7244ED9788E /* MJRefreshFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1B1FF7E1AFE69EA5C4816CF9426FD088 /* PKCircleView.h in Headers */ = {isa = PBXBuildFile; fileRef = 81BA5C6700842B547C2E19A43B0551B9 /* PKCircleView.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1B2341CD952E45126D64F01292BBCB40 /* MarqueeLabel-MarqueeLabel in Resources */ = {isa = PBXBuildFile; fileRef = FD694DB3E09A81036691F823E3211D44 /* MarqueeLabel-MarqueeLabel */; };
+ 1B4B180E84924CF99663817A2AFFAA92 /* IQKeyboardManager+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33140581269593D23CABC41A35B01F83 /* IQKeyboardManager+Debug.swift */; };
+ 1BD39AF66EBE2534F3B4FBD6B3E117B3 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 6088064A3AA58B0CD11EFF40FF0662CE /* PrivacyInfo.xcprivacy */; };
+ 1E7E37C51375285EA22294CD2ADB3159 /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BE433B1433BD888BDE297FD204C49F9 /* Debugging.swift */; };
+ 1F539427E456AC56FFDD416169240415 /* UIImage+PKDownloadButton.h in Headers */ = {isa = PBXBuildFile; fileRef = A04E95A84D68E6C700795D5A112CC666 /* UIImage+PKDownloadButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1FF54BA1EA87ACD81339325012E2537B /* JXSegmentedTitleGradientCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BA92119A502CEB293041F6667E32905 /* JXSegmentedTitleGradientCell.swift */; };
20F437D81954DB9DF1BA404A1C48EE5D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B4B8063291033C95A8B2A24FA2AD7A79 /* Foundation.framework */; };
- 222B9B50C37D319BBACE8E15B8A40348 /* JXSegmentedNumberDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72BFD417A23793E7CC1AD47C610F9232 /* JXSegmentedNumberDataSource.swift */; };
- 22FAFA41450EC40132CF4B0EEE7E6788 /* ParameterEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F1AA9619B532D7267A35CBE59DF0D7F /* ParameterEncoder.swift */; };
- 23277D4B1F4E8335DDCAB69A2AD75C9F /* JXSegmentedTitleOrImageDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9C7778B4AC6393E18E528CDD07E3F8D /* JXSegmentedTitleOrImageDataSource.swift */; };
- 23B1B9EA25E2C943FCE5EC6D4EE19D6A /* MJRefreshGifHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = DEA225A9EB938392C7EF2A568E82DA32 /* MJRefreshGifHeader.m */; };
- 23EE2A5A9ADF9A6B9A3515CA85E382ED /* UIView+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 5303ABF9B0FED3C94FF2EFF9ABDA9B4D /* UIView+MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 244119912087C6ECC078CB0E740833EB /* UIScrollView+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = DF738793C80DDACF5A9214C986797E2F /* UIScrollView+MJRefresh.m */; };
- 2480B116D9A738E79212C0E0DD41872D /* GIFAnimatedImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1A055B449C92CC26C1381E59710D8C0 /* GIFAnimatedImage.swift */; };
- 25BCD06941B1CFB8F9A231960D546885 /* PKCircleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DEFC8A5EC7CC7AE8BB155B861E6EA7A /* PKCircleView.m */; };
- 26541C9BEC53081C7AD9BB9819D71B41 /* JXSegmentedNumberCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EBC40BA74A88B62E74BAB63898E1F21 /* JXSegmentedNumberCell.swift */; };
- 274E0D56AEB27C391FC58EBED912F19A /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4068045C151506E0A93EFDB8951513F5 /* Image.swift */; };
- 279E3C4211663A097FFE575249B19BC3 /* SVProgressAnimatedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2348BF8015FB0D82FB1B5448C9475F6B /* SVProgressAnimatedView.m */; };
- 287D870088725A42B4DF1FFC8772EA19 /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7247B90BE8C143C488A363432AC00FA /* Task.swift */; };
- 2927AE446998C11370D49E4A2CFD17AC /* MJRefreshNormalHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 0406807613B48C37AFBFD8A5566CECF7 /* MJRefreshNormalHeader.m */; };
- 2AE3EFDE302E34CF498E6A693ACC9D06 /* ImageDataProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 334554B9B671DEC7ADCF7D982591C642 /* ImageDataProcessor.swift */; };
- 2B1AAA73D9231A2A7BA89DD1FF01C273 /* JXSegmentedTitleImageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E59017F132D3F8BE077B285CDBC283A /* JXSegmentedTitleImageCell.swift */; };
- 2B230B24827053BA3E9DA0C78A796BC2 /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16FDF1BA9F851829FB41F61D22DF87A /* ResponseSerialization.swift */; };
- 2B42D035AFF52D62722161A7772C6C08 /* HTTPHeaders.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15C91724B4E04DC823EA8635B9991F84 /* HTTPHeaders.swift */; };
- 2C4C08BB733A2101D945E8C37256F78F /* UploadRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F71F8336A279465EDD63361D3EA48AD2 /* UploadRequest.swift */; };
- 2C94C305900E95BDB9296A7EFCF3C940 /* MJRefreshConst.h in Headers */ = {isa = PBXBuildFile; fileRef = EE56A83001E77940E55939087F6B6D50 /* MJRefreshConst.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 2DD965DE434BE3B5A0C6EC1FC47AE81D /* String+Parser.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAE1B3D9828D6B007276756B5710687E /* String+Parser.swift */; };
- 2E572B53624BB2ED444BC9747A9F1781 /* ImageDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BE848D62F0E2DD5E6B01AB8A941161A /* ImageDownloader.swift */; };
- 2E84CD435150EDA1356EE23EAB3CE5E7 /* SVRadialGradientLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = A021004CAD79AEA622FEC4542DDAA9D4 /* SVRadialGradientLayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 222B9B50C37D319BBACE8E15B8A40348 /* JXSegmentedNumberDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECC9C3685EE7FC815B55A7A258463229 /* JXSegmentedNumberDataSource.swift */; };
+ 22FAFA41450EC40132CF4B0EEE7E6788 /* ParameterEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B285B835616B56F46980ADD39A51C61 /* ParameterEncoder.swift */; };
+ 23277D4B1F4E8335DDCAB69A2AD75C9F /* JXSegmentedTitleOrImageDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB233A8A5D344EC01196A58581E8D80 /* JXSegmentedTitleOrImageDataSource.swift */; };
+ 23B1B9EA25E2C943FCE5EC6D4EE19D6A /* MJRefreshGifHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 43CCDEB493C9979C1959B9942047DA1C /* MJRefreshGifHeader.m */; };
+ 23EE2A5A9ADF9A6B9A3515CA85E382ED /* UIView+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C5997F32ACC78D0783DECD6876B8362 /* UIView+MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 244119912087C6ECC078CB0E740833EB /* UIScrollView+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C3119926A431E2B17B538C93E17A852 /* UIScrollView+MJRefresh.m */; };
+ 2480B116D9A738E79212C0E0DD41872D /* GIFAnimatedImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0131C8FEF300D7E0DCB43F23E7C66B1F /* GIFAnimatedImage.swift */; };
+ 25BCD06941B1CFB8F9A231960D546885 /* PKCircleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8791B26F243EFF6DF5A806240222E002 /* PKCircleView.m */; };
+ 26541C9BEC53081C7AD9BB9819D71B41 /* JXSegmentedNumberCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42517ADA576373B5F2B2AA56BB57260F /* JXSegmentedNumberCell.swift */; };
+ 274E0D56AEB27C391FC58EBED912F19A /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6A506A57BEBD985E5CA2ABEF70A3C8A /* Image.swift */; };
+ 279E3C4211663A097FFE575249B19BC3 /* SVProgressAnimatedView.m in Sources */ = {isa = PBXBuildFile; fileRef = D07CECE9C0A88C78E0F6FF510ED64787 /* SVProgressAnimatedView.m */; };
+ 287D870088725A42B4DF1FFC8772EA19 /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94C202F95364504949AF0B1D2FF5EA5A /* Task.swift */; };
+ 2927AE446998C11370D49E4A2CFD17AC /* MJRefreshNormalHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E9D0ECB7E0F273DE9EDC330510B8A28 /* MJRefreshNormalHeader.m */; };
+ 2AE3EFDE302E34CF498E6A693ACC9D06 /* ImageDataProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 925B3EF9170B62EB96DDA4A261C43D64 /* ImageDataProcessor.swift */; };
+ 2B1AAA73D9231A2A7BA89DD1FF01C273 /* JXSegmentedTitleImageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9751538A41C93069AC520FC8ADDD990 /* JXSegmentedTitleImageCell.swift */; };
+ 2B230B24827053BA3E9DA0C78A796BC2 /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9F1C66852BF157B00E2E839B79BE5FF /* ResponseSerialization.swift */; };
+ 2B42D035AFF52D62722161A7772C6C08 /* HTTPHeaders.swift in Sources */ = {isa = PBXBuildFile; fileRef = B18AE0202CE7B90525259BA625A527F6 /* HTTPHeaders.swift */; };
+ 2C4C08BB733A2101D945E8C37256F78F /* UploadRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9132990A6001E8384B01FF456D4DE827 /* UploadRequest.swift */; };
+ 2C94C305900E95BDB9296A7EFCF3C940 /* MJRefreshConst.h in Headers */ = {isa = PBXBuildFile; fileRef = 117201D42D64EEBD54A9824C19353C82 /* MJRefreshConst.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 2DD965DE434BE3B5A0C6EC1FC47AE81D /* String+Parser.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6D2CA71CCD091A767826F36D43522CA /* String+Parser.swift */; };
+ 2E572B53624BB2ED444BC9747A9F1781 /* ImageDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A81DA85C66E9E2FB3201D69AAD666D /* ImageDownloader.swift */; };
+ 2E84CD435150EDA1356EE23EAB3CE5E7 /* SVRadialGradientLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA3C103CC568409B715494D387CC7F4 /* SVRadialGradientLayer.h */; settings = {ATTRIBUTES = (Public, ); }; };
3013EFF5D3DB5F626FB63C96A690082A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B4B8063291033C95A8B2A24FA2AD7A79 /* Foundation.framework */; };
- 3031C92E9CB81AD378483755A4DA6F79 /* KingfisherManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBBF0A136D849C2FA87A9508A1DA8387 /* KingfisherManager.swift */; };
- 3035E05E0216ED11647680F9C2127B01 /* MJRefresh.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 5349BD74B2DD47008A231410686E263A /* MJRefresh.bundle */; };
- 30DBC87A501715FE2328B9FF011F1BB9 /* MJRefreshStateHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = E8C11317C48B50EF739DF1A04D93A1F9 /* MJRefreshStateHeader.m */; };
- 32AD6316A2024235B39F19FC97C0B6BF /* ImageDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C2F80AE1C9EE73162C077C9154EE0DB /* ImageDataProvider.swift */; };
- 3360B725B480679D59E44B812DD8D116 /* MJRefresh-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C9D8041C1E832ED61831FAE327CF2883 /* MJRefresh-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 346855A32221981DE16BBB5C1E636BA4 /* MJRefreshAutoStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F4D08727A4683802BEEB2F3662DEB2B /* MJRefreshAutoStateFooter.m */; };
- 360F2B06AC4C38F3994965AA69FF0AC7 /* Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FAB68949F3F65C3DCE726B88EEF50AC /* Kingfisher.swift */; };
- 36C78069A72BECAEB66B31FF794A09ED /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43C36A312871511CF0DD8615F079E951 /* Request.swift */; };
- 371D974865C3554FFC4B2D487D12615E /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF2A15BB017E1D7AE830361846A137F0 /* Notifications.swift */; };
- 37289CBB73D25EA3424BF2ADFBB898AC /* TimePeriodProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01CF505FB97345FF724294092F0C5058 /* TimePeriodProtocol.swift */; };
- 373502D50A1B2266D86409E19EC46DDB /* IQTitleBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7520BB516E107B80A66D15FEFEF999C1 /* IQTitleBarButtonItem.swift */; };
- 37D302D5A81F84194396C4A7C871F1DA /* langs in Resources */ = {isa = PBXBuildFile; fileRef = 7783E7042303A5E0076AB72335FF86AD /* langs */; };
- 395102C6B3D1D5F7DB48E7D762CE9152 /* DownloadButton-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9501CB63FC7106D1611964238814DE16 /* DownloadButton-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 39EAB37ED329E6CE7C691B9EAF731446 /* JXSegmentedDotDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AB4CFF133FB22B15A4544D29B88BB01 /* JXSegmentedDotDataSource.swift */; };
- 3B573F7FAA3A12BA7BF2CC874A31DEAB /* DateInRegion+Components.swift in Sources */ = {isa = PBXBuildFile; fileRef = C664257C5969700D7E1B383F33E56FEB /* DateInRegion+Components.swift */; };
+ 3031C92E9CB81AD378483755A4DA6F79 /* KingfisherManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 350BCB03327C5F2C9BECC6FFA0542AC8 /* KingfisherManager.swift */; };
+ 3035E05E0216ED11647680F9C2127B01 /* MJRefresh.bundle in Resources */ = {isa = PBXBuildFile; fileRef = BF06AC62113E5692AF1F4761A2616AC8 /* MJRefresh.bundle */; };
+ 30DBC87A501715FE2328B9FF011F1BB9 /* MJRefreshStateHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = C7316A7F04B5390E547BCE5243EAA31F /* MJRefreshStateHeader.m */; };
+ 32AD6316A2024235B39F19FC97C0B6BF /* ImageDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31C323285A3155F84D9AFE58FD78D246 /* ImageDataProvider.swift */; };
+ 3360B725B480679D59E44B812DD8D116 /* MJRefresh-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EE6328AB6C72590DE803C111C37A60A /* MJRefresh-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 346855A32221981DE16BBB5C1E636BA4 /* MJRefreshAutoStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 506242F11D90C1AEE578033478116092 /* MJRefreshAutoStateFooter.m */; };
+ 360F2B06AC4C38F3994965AA69FF0AC7 /* Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15069099C57BDA36E80037EF11AE010D /* Kingfisher.swift */; };
+ 36C78069A72BECAEB66B31FF794A09ED /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AC5A3F2AFE4DBC634FBBEEC8C8597BC /* Request.swift */; };
+ 371D974865C3554FFC4B2D487D12615E /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46F8ABAB992507C6BBCA2AAF69DAB50D /* Notifications.swift */; };
+ 37289CBB73D25EA3424BF2ADFBB898AC /* TimePeriodProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA23D6F550CE77AB601F0A0B2ED964C6 /* TimePeriodProtocol.swift */; };
+ 373502D50A1B2266D86409E19EC46DDB /* IQTitleBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CF22C8803B6805B8F73395E93D6AC83 /* IQTitleBarButtonItem.swift */; };
+ 37D302D5A81F84194396C4A7C871F1DA /* langs in Resources */ = {isa = PBXBuildFile; fileRef = BDA6861F693C9A7F89FADBFCDF8B4DC8 /* langs */; };
+ 395102C6B3D1D5F7DB48E7D762CE9152 /* DownloadButton-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CBE5626C57DF328776BD0D2C05BB609E /* DownloadButton-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 39EAB37ED329E6CE7C691B9EAF731446 /* JXSegmentedDotDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F8849479F3F19A2250A43346D9708F3 /* JXSegmentedDotDataSource.swift */; };
+ 3A55DECC322583F176EC1F2038CDE44A /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = F9ABB3A8141E40470EE54F0016A46483 /* PrivacyInfo.xcprivacy */; };
+ 3B573F7FAA3A12BA7BF2CC874A31DEAB /* DateInRegion+Components.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48E651BF46CACE566E99761D182A8313 /* DateInRegion+Components.swift */; };
3B901DF82C6576019330391D0F470B31 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A2A128F3FAE37601751167FDC47182A /* CFNetwork.framework */; };
- 3BC51136C1F65D6962C6727889AA942E /* String+MD5.swift in Sources */ = {isa = PBXBuildFile; fileRef = B65B57EA9496FB2C3B6BDA5D6B4E48EE /* String+MD5.swift */; };
- 3C425FEE22F5E6EE82500F6107EAE8F4 /* JXSegmentedIndicatorProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 921DF5C53AD7DEACF962A6ADEF7FFFAB /* JXSegmentedIndicatorProtocol.swift */; };
- 3DAFEDCDC5094007E329D71FE84FF704 /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D1CC4A34B7E2E53CDB2C9AB2B58BA516 /* SnapKit-dummy.m */; };
- 417EAFB7648F1C35B8F7ADC203A96315 /* JXSegmentedBaseItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 855DBC5C68A55479D76CAB8F762905C2 /* JXSegmentedBaseItemModel.swift */; };
- 41A536E6CE1C85116A756B710B2C660B /* IQKeyboardManagerConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0B77FF8CCF94CC371E5305E19CB4399 /* IQKeyboardManagerConstants.swift */; };
- 42B43A15ADA9F66F4E2AD66666943F26 /* SwiftDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55AD550AFD50A4AACF406AE4509884F7 /* SwiftDate.swift */; };
- 4318466387894387E637747807B70757 /* Tiercel-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CD5E96189BF77251A0A7D74615A24812 /* Tiercel-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 4337931D8B8E3F3BA03C77C1B496BEAD /* HTTPMethod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 043335998E7E91696B859F4CCD9606FC /* HTTPMethod.swift */; };
- 43E7BD44853E62096917DAF77B6C1CE3 /* Executer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 063E759192F5CD877BCE4EB80712E5A9 /* Executer.swift */; };
- 43ED71634C98518E6B0749001ED89C43 /* MJRefreshAutoNormalFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A84B1B2C2A01CADA8A4FB7002C03EC0 /* MJRefreshAutoNormalFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 440C0830E1410552E2ED0A1647CC4209 /* JXPagingListRefreshView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 882F40E244273565B4DAA774DBAE0186 /* JXPagingListRefreshView.swift */; };
- 4413F602F8263A6E3EE93517916F2EDF /* SwiftDate-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = ED6AF3E82C2703509CFCC5748F6E7604 /* SwiftDate-dummy.m */; };
- 443BAB61DC338F0C6857DF638156E5E4 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 695465D6553A7047F09DEFAC13D84D56 /* PrivacyInfo.xcprivacy */; };
- 45131830DC22C22B4A21C4A54A147947 /* MJRefreshNormalTrailer.m in Sources */ = {isa = PBXBuildFile; fileRef = FC9726A452C355E5A93BC81295F7FF11 /* MJRefreshNormalTrailer.m */; };
+ 3BC51136C1F65D6962C6727889AA942E /* String+MD5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8448673A4774CAFEBCD24BE82AF62917 /* String+MD5.swift */; };
+ 3C425FEE22F5E6EE82500F6107EAE8F4 /* JXSegmentedIndicatorProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4A0DFD919AD82038C8BF847F5F739FE /* JXSegmentedIndicatorProtocol.swift */; };
+ 3DAFEDCDC5094007E329D71FE84FF704 /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A1D22F7B21663BAD85E06A344194AF0 /* SnapKit-dummy.m */; };
+ 417EAFB7648F1C35B8F7ADC203A96315 /* JXSegmentedBaseItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E5F5A742DDBDAE2FC927882DAC7C146 /* JXSegmentedBaseItemModel.swift */; };
+ 41A536E6CE1C85116A756B710B2C660B /* IQKeyboardManagerConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = C52CB88FD984A6FB84683407A504D382 /* IQKeyboardManagerConstants.swift */; };
+ 42B43A15ADA9F66F4E2AD66666943F26 /* SwiftDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BD0AAB38CA9722D37F600FF34CC07B9 /* SwiftDate.swift */; };
+ 4318466387894387E637747807B70757 /* Tiercel-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AFDD721B961419036553BB7F816B5B9E /* Tiercel-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 4337931D8B8E3F3BA03C77C1B496BEAD /* HTTPMethod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1617A3777D8D48603550A764643637E8 /* HTTPMethod.swift */; };
+ 43E7BD44853E62096917DAF77B6C1CE3 /* Executer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33E1D0F4570630A66EC11D6550996BFD /* Executer.swift */; };
+ 43ED71634C98518E6B0749001ED89C43 /* MJRefreshAutoNormalFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AFABD0F91AAB460005E72FA49182E21 /* MJRefreshAutoNormalFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 440C0830E1410552E2ED0A1647CC4209 /* JXPagingListRefreshView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8062DA15BB499A276DDB19826D59379 /* JXPagingListRefreshView.swift */; };
+ 4413F602F8263A6E3EE93517916F2EDF /* SwiftDate-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5713B1AF8B3CD5B2368E33B8C9CE5E78 /* SwiftDate-dummy.m */; };
+ 45131830DC22C22B4A21C4A54A147947 /* MJRefreshNormalTrailer.m in Sources */ = {isa = PBXBuildFile; fileRef = 19C4B336344ECAEDD6712562E4049762 /* MJRefreshNormalTrailer.m */; };
454D70B3D5531C61FAF93EF01F6B761D /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1199E580C5F19AFD1010FE20258DADBD /* UIKit.framework */; };
- 45ABFED1A9F6C0B330BB822AC08029A5 /* TiercelError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C6EB3AFA655F18ACE9DB8543E1CEB99 /* TiercelError.swift */; };
- 45D1C5B966D0BE59EF67F8A839AED2F4 /* JXSegmentedViewTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 898243FF66AF7C337C21A8C6542D3B26 /* JXSegmentedViewTool.swift */; };
- 47B7A22D43797E42FCDCD96028823BFF /* KFImageProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1840F8AE4A9DAF86A9713F0D3A7751F4 /* KFImageProtocol.swift */; };
- 4803DFE6BE7D9A926811385567288A8C /* TimePeriodGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE62833E8E1ADEDCF1681D442012F80B /* TimePeriodGroup.swift */; };
- 488D86E76F481BF72891821AA3ABF485 /* Pods-relax.offline.mp3.music-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A9791A6864A1422EB3D01824FCFDE53 /* Pods-relax.offline.mp3.music-dummy.m */; };
- 48E83D4BC4A5C3542CB0560A1E82A2F4 /* MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 27F5B23D017DA45A994D3CAB2EC19776 /* MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 498FFEC31A02476F4F719EF645AC1562 /* MJRefreshHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3014A4FE1760FDA7885E041B8EF0853E /* MJRefreshHeader.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 49D5506D651C7F3E49D8DA20ABD46AF9 /* OperationQueue+DispatchQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = E28C20C79BDFFF977A6CACA17D6D5E68 /* OperationQueue+DispatchQueue.swift */; };
- 4AADD25AAE104D5F72CDC039E82D9BB6 /* RedirectHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507DB4670F96D43CAB20AFB3D18A622A /* RedirectHandler.swift */; };
- 4B6EA5410A2C492D91A141426FD81588 /* WKInterfaceImage+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = D60D2443E79D2ADEACF4A6F35ED91F46 /* WKInterfaceImage+Kingfisher.swift */; };
- 4C1CC731DAB49793158DB4EA0982137C /* ImageBinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D45C333FDAD021CF43F46CE22C5A099 /* ImageBinder.swift */; };
- 4D77099177C62FCD622E0BB73237386E /* CacheSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA79BA165572FB323A04D46617357847 /* CacheSerializer.swift */; };
- 4EFCD7DECB92938B822DE9FB6CABD30F /* FileManager+AvailableCapacity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4442DAD3B8B05B75C068BADB1E00B9D7 /* FileManager+AvailableCapacity.swift */; };
- 4F2F7AFD7C593DAE210F77E7F8BC2403 /* JXSegmentedIndicatorTriangleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E80022D2BF17AC34C27A3EDDD0F9189 /* JXSegmentedIndicatorTriangleView.swift */; };
+ 45ABFED1A9F6C0B330BB822AC08029A5 /* TiercelError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841611B569DBCAF114BC4865BCEAB887 /* TiercelError.swift */; };
+ 45D1C5B966D0BE59EF67F8A839AED2F4 /* JXSegmentedViewTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AC2C00A0C5A41F4D64A8E965AADD87B /* JXSegmentedViewTool.swift */; };
+ 47B7A22D43797E42FCDCD96028823BFF /* KFImageProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EB2408020A5E896E8A7E5BF1D6866D /* KFImageProtocol.swift */; };
+ 4803DFE6BE7D9A926811385567288A8C /* TimePeriodGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = C36A6C9D52AF7D31EA7F08AA56D00180 /* TimePeriodGroup.swift */; };
+ 48E83D4BC4A5C3542CB0560A1E82A2F4 /* MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = A02680B209797E014A9CB2E457201E74 /* MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 498FFEC31A02476F4F719EF645AC1562 /* MJRefreshHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = EC728CA1DF148330DE8CEE2CDC59F7A0 /* MJRefreshHeader.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 49C77BE32959EA3C1D1643AE62B6F647 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 0C57FE4092186DA3BF03087A3DDC928C /* PrivacyInfo.xcprivacy */; };
+ 49D5506D651C7F3E49D8DA20ABD46AF9 /* OperationQueue+DispatchQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AFB9BB0EF5449C725EAD24210DFD26B /* OperationQueue+DispatchQueue.swift */; };
+ 4AADD25AAE104D5F72CDC039E82D9BB6 /* RedirectHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0D6121CA98BB82C7851D193FD419502 /* RedirectHandler.swift */; };
+ 4B6EA5410A2C492D91A141426FD81588 /* WKInterfaceImage+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5569399D1EB726EB0DD2A7E1396321DC /* WKInterfaceImage+Kingfisher.swift */; };
+ 4C1CC731DAB49793158DB4EA0982137C /* ImageBinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00809342163D914F7313B357D343777A /* ImageBinder.swift */; };
+ 4D77099177C62FCD622E0BB73237386E /* CacheSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A64F5F92A75933EA79178722B51ABD8 /* CacheSerializer.swift */; };
+ 4EFCD7DECB92938B822DE9FB6CABD30F /* FileManager+AvailableCapacity.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE9A6FA2A81AC5A30859A6BB2B4FA72E /* FileManager+AvailableCapacity.swift */; };
+ 4F2F7AFD7C593DAE210F77E7F8BC2403 /* JXSegmentedIndicatorTriangleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DB6D4B8D6F44ACDD6E446998748BD0B /* JXSegmentedIndicatorTriangleView.swift */; };
4F4B9DFA352D9958C7494D7BC24631D8 /* Alamofire-Alamofire in Resources */ = {isa = PBXBuildFile; fileRef = 085DBCE7DD98588B2ED103B1C1F36026 /* Alamofire-Alamofire */; };
- 4F80144C5D33EFDAC14379838CF9720E /* MJRefreshBackFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C14D8B0475F955FF30F17288DFF9FBA /* MJRefreshBackFooter.m */; };
- 4FE35DBCEE3E9B3AE786452DCCD1B66C /* JXSegmentedBaseDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F6825F0A2F7B30C077245FB5E5692F2 /* JXSegmentedBaseDataSource.swift */; };
- 506C1EE2968687F178BB2DFA34D185CE /* IQKeyboardReturnKeyHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 680D8D30FFEA27B037B71AFB46683FED /* IQKeyboardReturnKeyHandler.swift */; };
- 5075DC82A63A9807DFC390B4CE8046CD /* Session.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4EE92687081A3EFA90A93BD1C9B49FB /* Session.swift */; };
- 50E4E24710A4C5A77BE6594A10DFE773 /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08CC0CCF224643BE2E2DBBFF55B6ABB /* ConstraintMultiplierTarget.swift */; };
- 514A19E702520E6E336D77E2615D17CF /* NSBundle+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = C5F2A9D2AE5EC1D15C9A439CA951F28B /* NSBundle+MJRefresh.m */; };
- 51D9F94E4B4D2A55B87D6CF7199B9E7C /* UIButton+PKDownloadButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 00B3B84CAF8ED73E095C919FA5C8FC89 /* UIButton+PKDownloadButton.m */; };
- 530FC2CFAAF9C09C0B75CF5CF6DF0B65 /* Storage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7522B5E1BBFFA03FB1B7F7D5349FDDA9 /* Storage.swift */; };
- 539E9EED5FBF53E3ECF2652ECFA4A2FD /* MemoryStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8020F66064F4E5C645D9BDD312552EC /* MemoryStorage.swift */; };
- 5610B3D1D3CC41790D99E354C1201DA5 /* Cache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22411E71D813DD7A4537E85BAC6A125A /* Cache.swift */; };
- 56987A745C2D39979A167EBF45B8D073 /* JXPagingSmoothView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0D5F358E3E5F37F2090D8DF5BD7BEBD /* JXPagingSmoothView.swift */; };
- 56CD198002D3D45274F6719725B983CF /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1683E97F9AE54BB1747EE29AC29C6C10 /* ConstraintOffsetTarget.swift */; };
- 56E561C1A8960D630D418FF931D36FBA /* JXSegmentedTitleItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA33079BECD4700E35095C06C7661A11 /* JXSegmentedTitleItemModel.swift */; };
- 571142A2747CD90165F631A8AE980A0A /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 01158741151664C9DF8D6AEACDA30158 /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 574450219BF9DBA9113E31EBC80BAEF2 /* JXSegmentedTitleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E380359F4745C2DC4BEE375D0EAA4700 /* JXSegmentedTitleCell.swift */; };
- 578833D3ED755D5D1F1577005AEADBAE /* TimeStructures.swift in Sources */ = {isa = PBXBuildFile; fileRef = E077AC06FAF9F81DEBC37C0D7A3F3802 /* TimeStructures.swift */; };
- 5830C6260CA2B7CD6DC74054FB29CDD1 /* DownloadRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCF42DE6BA4D1820E5ACCC22C6AE1458 /* DownloadRequest.swift */; };
- 5896E7040BD3FBD6C57C9727F706407A /* GraphicsContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA2DB24577A445C4239E287940618202 /* GraphicsContext.swift */; };
- 58E936B1E7E42C0BFC119D428B70F1D8 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E6570A71224F7DABBFE472D8370347F /* Alamofire.swift */; };
- 5AD4E5B4118A1DC7D639F611044B4159 /* DataRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FA8DD3EAF4331A957B02AF68C32D8C3 /* DataRequest.swift */; };
- 5C041C0F3BBC8ED3017D03D1A00BFEDF /* DisplayLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB5803B78D37B44F74D50F13C1FBDDD5 /* DisplayLink.swift */; };
- 5CCFD596BBF1E6D91167E6E3A977FB86 /* UIImage+PKDownloadButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B5110745B15FEEFB97E52A7E9A6E9C2 /* UIImage+PKDownloadButton.m */; };
- 5D2F784CAC2EEE09B332245A61D3687D /* AssociatedValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = E346A9AF6887E0E1AAD2178604B2FBDF /* AssociatedValues.swift */; };
- 5D90B0097BBDAB6B90F35314BBC37554 /* Date+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD1E96B9F81887409A87C11B8627CF9 /* Date+Create.swift */; };
+ 4F80144C5D33EFDAC14379838CF9720E /* MJRefreshBackFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = E51F1EF01413ADDECD6664205BCE7A93 /* MJRefreshBackFooter.m */; };
+ 4FE35DBCEE3E9B3AE786452DCCD1B66C /* JXSegmentedBaseDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48FC6499D782B6A38B55A1058728D46D /* JXSegmentedBaseDataSource.swift */; };
+ 506C1EE2968687F178BB2DFA34D185CE /* IQKeyboardReturnKeyHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53D9BBF299544DEEAD5E456AA5306990 /* IQKeyboardReturnKeyHandler.swift */; };
+ 5075DC82A63A9807DFC390B4CE8046CD /* Session.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A679FA4BEEED4176374BC386B15E12B /* Session.swift */; };
+ 50E4E24710A4C5A77BE6594A10DFE773 /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64C33D2228817B887C70B400F0DC5497 /* ConstraintMultiplierTarget.swift */; };
+ 514A19E702520E6E336D77E2615D17CF /* NSBundle+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = A22F8A41B6D2270432A011E71F734FA4 /* NSBundle+MJRefresh.m */; };
+ 51D9F94E4B4D2A55B87D6CF7199B9E7C /* UIButton+PKDownloadButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A9EC97D60C19B6EC4595E86F1D00537 /* UIButton+PKDownloadButton.m */; };
+ 530FC2CFAAF9C09C0B75CF5CF6DF0B65 /* Storage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A8550EC020A77B500DD995CEA60F882 /* Storage.swift */; };
+ 539E9EED5FBF53E3ECF2652ECFA4A2FD /* MemoryStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FC69616A1892344EB78134505A3F752 /* MemoryStorage.swift */; };
+ 5610B3D1D3CC41790D99E354C1201DA5 /* Cache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E77397A610E64B5DE29B2C6790C9B0C /* Cache.swift */; };
+ 56987A745C2D39979A167EBF45B8D073 /* JXPagingSmoothView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4676AC055A0230683AB285C9444D9EB6 /* JXPagingSmoothView.swift */; };
+ 56CD198002D3D45274F6719725B983CF /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8BB085594A33CFA1AE37B223A06BF25 /* ConstraintOffsetTarget.swift */; };
+ 56E561C1A8960D630D418FF931D36FBA /* JXSegmentedTitleItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DFF1834A88DF9FB33D90BDD9AA81691 /* JXSegmentedTitleItemModel.swift */; };
+ 571142A2747CD90165F631A8AE980A0A /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EA4C6F8B96D45ED1BBBD34CFA947EC47 /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 574450219BF9DBA9113E31EBC80BAEF2 /* JXSegmentedTitleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D8B7EF73D50EE3EC8D8AB0CD2F05FDC /* JXSegmentedTitleCell.swift */; };
+ 578833D3ED755D5D1F1577005AEADBAE /* TimeStructures.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74BF157814EA00E73F813C2C5D28312D /* TimeStructures.swift */; };
+ 57A86BF81E7C01FFE89F869654E50676 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 5C44472740A9D2F104F11556227D7B0A /* PrivacyInfo.xcprivacy */; };
+ 5830C6260CA2B7CD6DC74054FB29CDD1 /* DownloadRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1770F6E73FCAE86AC7722A319B012606 /* DownloadRequest.swift */; };
+ 5896E7040BD3FBD6C57C9727F706407A /* GraphicsContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98EDA8CF2147231BF156393E8D125FAD /* GraphicsContext.swift */; };
+ 58E936B1E7E42C0BFC119D428B70F1D8 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = F58A90C8C5934EE6AB722DB8819C1632 /* Alamofire.swift */; };
+ 5AD4E5B4118A1DC7D639F611044B4159 /* DataRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2128D882568DC494E8F1150547E3A4DB /* DataRequest.swift */; };
+ 5C041C0F3BBC8ED3017D03D1A00BFEDF /* DisplayLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEA6DFC5EDEDBA9D67A35572352AA3C4 /* DisplayLink.swift */; };
+ 5CCFD596BBF1E6D91167E6E3A977FB86 /* UIImage+PKDownloadButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 109F4B31BBCDDD9360293F5C663FC4FB /* UIImage+PKDownloadButton.m */; };
+ 5D2F784CAC2EEE09B332245A61D3687D /* AssociatedValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A585AAA4ABFEE88AF9EA38DA8480A4E /* AssociatedValues.swift */; };
+ 5D90B0097BBDAB6B90F35314BBC37554 /* Date+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2B99C0D768123D8E998850C1C856C0E /* Date+Create.swift */; };
5E858AD3F64F096EE17F34759F017DC3 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1199E580C5F19AFD1010FE20258DADBD /* UIKit.framework */; };
- 5E8E9469BF126E918EADF79EC4BB5CA2 /* IQUIView+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = B677BF4BFAA0171DA9C1D3C4AE1B43B2 /* IQUIView+Hierarchy.swift */; };
- 5E977209B51A440181A31A4CA27CA677 /* ImageContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8A5ADD5FBC68E5721C4365B19487007 /* ImageContext.swift */; };
- 5F52D18FE8736028A8FB4B4B61B49111 /* JXSegmentedView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 148B5CBC5E6471CA45F7B87E0D5D7A1F /* JXSegmentedView-dummy.m */; };
- 5FE04B779A038EBDFE268D19297F0FA5 /* RelativeFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 587F4C4B755FBF51C7CC55813ECF0DF9 /* RelativeFormatter.swift */; };
- 6084CC72921FA7260B8FA2A07F49AE96 /* JXSegmentedTitleAttributeItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B7790F3FA397ABB4B74FB220532ED6D /* JXSegmentedTitleAttributeItemModel.swift */; };
- 60CD99E8F32FD54F599DECFB768863A0 /* JXSegmentedIndicatorImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 135936C0D9ADAC1FE180DF903BE733D2 /* JXSegmentedIndicatorImageView.swift */; };
+ 5E8E9469BF126E918EADF79EC4BB5CA2 /* IQUIView+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4EE1B14402D8D0CCFC4F70B19E2A807 /* IQUIView+Hierarchy.swift */; };
+ 5E977209B51A440181A31A4CA27CA677 /* ImageContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5089A55177AC7BFF0A6C618FC9C79DF /* ImageContext.swift */; };
+ 5F52D18FE8736028A8FB4B4B61B49111 /* JXSegmentedView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8504EF1F9133A53B74DAAF48F3E48C0A /* JXSegmentedView-dummy.m */; };
+ 5FE04B779A038EBDFE268D19297F0FA5 /* RelativeFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 804AE736B53C8214AF7EE8E174CB4F9E /* RelativeFormatter.swift */; };
+ 6084CC72921FA7260B8FA2A07F49AE96 /* JXSegmentedTitleAttributeItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E00CAFDC4D99F63CED52FFAFF61E8F34 /* JXSegmentedTitleAttributeItemModel.swift */; };
+ 60CD99E8F32FD54F599DECFB768863A0 /* JXSegmentedIndicatorImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F26DA97773D658E22071F12B542CCD /* JXSegmentedIndicatorImageView.swift */; };
60CE1AC69D95F0F7C6637C601A84C069 /* MJRefresh-MJRefresh.Privacy in Resources */ = {isa = PBXBuildFile; fileRef = 7E3097CFEFDA621E9FB0E62009FF87FC /* MJRefresh-MJRefresh.Privacy */; };
- 60D62AFE59E950FFEA458C1788D05486 /* UIColor+PKDownloadButton.h in Headers */ = {isa = PBXBuildFile; fileRef = B36ED78664334F6F31ABE61907B9F48B /* UIColor+PKDownloadButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 612AE0ABB9BCD3AF0E1D29B4C063CA62 /* StringEncoding+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F08B4014D08D679437B388E1EB6249C /* StringEncoding+Alamofire.swift */; };
- 6142372CEE4D251A94EA4BE2630F27E7 /* Date+Components.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF8CCDE7D9B91A3A3BBF803B79C651AB /* Date+Components.swift */; };
- 632239BD2DF58FF13D9E4D1C4327F528 /* JXSegmentedTitleDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C12185FB2573B4C8D8B59C61313334FA /* JXSegmentedTitleDataSource.swift */; };
- 638A729C295B6267093699D505B8589D /* KFImageRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D1DD96A7064A2F1F151EB984101B42 /* KFImageRenderer.swift */; };
- 63BCE3414C785046BB317537B8120B5D /* MJRefreshAutoFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 9163D647AE97457039F7CCF80FCFEE3E /* MJRefreshAutoFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 6431218578A566C5EBF5FD166F164059 /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51471D07E76BFB34F5EDA721B4712C79 /* ConstraintMakerExtendable.swift */; };
+ 60D62AFE59E950FFEA458C1788D05486 /* UIColor+PKDownloadButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 18A583CCFD6D1DBEB9CCF90CFBD1BC6A /* UIColor+PKDownloadButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 612AE0ABB9BCD3AF0E1D29B4C063CA62 /* StringEncoding+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = F81293AC0002136C2A240AEE245EA761 /* StringEncoding+Alamofire.swift */; };
+ 6142372CEE4D251A94EA4BE2630F27E7 /* Date+Components.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14B1A3F3039D6C5E815E246D2738947D /* Date+Components.swift */; };
+ 632239BD2DF58FF13D9E4D1C4327F528 /* JXSegmentedTitleDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E5AFB42EE6B29720DA3E27B5455357A /* JXSegmentedTitleDataSource.swift */; };
+ 638A729C295B6267093699D505B8589D /* KFImageRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92477ADA09E2A3DC05DB6B89EEDFB913 /* KFImageRenderer.swift */; };
+ 63BCE3414C785046BB317537B8120B5D /* MJRefreshAutoFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 913FD792342D6E20478B1A3D754EAF95 /* MJRefreshAutoFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 6431218578A566C5EBF5FD166F164059 /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE3980766775DB21E234DC0A37D61FB5 /* ConstraintMakerExtendable.swift */; };
647D16586EBBE25158E3FD684541A1DD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B4B8063291033C95A8B2A24FA2AD7A79 /* Foundation.framework */; };
- 6584A733B2610DAFBB1CEF8E90635EC9 /* TimePeriodCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BD1314D27AF6FB58EF08E869CCB70FE /* TimePeriodCollection.swift */; };
- 65D2E717EEAEBB4658708CD9C8991C93 /* CallbackQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E913710E854A76597D94659AAC19B6B /* CallbackQueue.swift */; };
- 65EEB9B45B77C5733E6233759FE7BC76 /* Data+Hash.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E95BBEDB4B2179CF3D0186B4FE6784B /* Data+Hash.swift */; };
- 65F1A046F742E910CE0EE30BE2600DDD /* JXSegmentedDotItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B90D26735E86A9A83A2DCB2FCE42134 /* JXSegmentedDotItemModel.swift */; };
- 661036CF70C0946F0ED7BAF395598868 /* URLSession+ResumeData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D71C664DD3E66AD2C967CB2CBE873AE /* URLSession+ResumeData.swift */; };
- 6628BE82C4F27A39F94CBEA02BB498EF /* DateInRegion+Compare.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AF9BDEE553B59667C33A94E0D34992D /* DateInRegion+Compare.swift */; };
- 6654CDCA10823EA080976DF72D8729B2 /* AVAssetImageDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38BE2DF3B6F0DB0C82BDE42F993FA0AA /* AVAssetImageDataProvider.swift */; };
- 6735E4B11C64D20B4E05A92811F5A721 /* IQKeyboardManager+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ED9A4576DB28DAC731E05D9B295B722 /* IQKeyboardManager+Internal.swift */; };
- 67942FD70EE19BA957045141036FD49E /* RequestModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE39DA769589701DAC7D7E6365F82406 /* RequestModifier.swift */; };
- 68238227D42B2511FA6A26BF71E92520 /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DEEE532DDA9EFC510787A801E661F0FB /* Alamofire-dummy.m */; };
- 68241B77CB3EE81665BBB4275AC19679 /* JXSegmentedListContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60068E35B65ED0C6B610C9570BC597A9 /* JXSegmentedListContainerView.swift */; };
- 686ABAEBCE5C0EA6644AA80F9B4B3687 /* MJRefreshNormalHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = B9A87F9FE41AFEB6DCC62443F70031C7 /* MJRefreshNormalHeader.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 68995B28EE5B539CEA5A1133E4623927 /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEEF956203C250D6ED823C9BDA708B41 /* MultipartFormData.swift */; };
- 68A74F13F8FEBAA7E0EA9344DED0458B /* OperationQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBF65AB8DCACDEF080398A6B2EC0BBEC /* OperationQueue+Alamofire.swift */; };
- 68DCF4550B3B72228D5D8B4E25A341F2 /* Box.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8AB6861FB56A8A18DF4771C240FF4CD /* Box.swift */; };
- 69261B5D3B53EBF7109D5E1DA3768CAC /* AuthenticationInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D7B2E9D8BAF6E4F291B9C1CA555C991 /* AuthenticationInterceptor.swift */; };
- 6C2A8D78B7E5B02974B212599B28AD77 /* Indicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14F4F939E553EA59CBD6A7CCFE434AD3 /* Indicator.swift */; };
- 6C46E55FE1E04F5554E8771580B809A0 /* Pods-relax.offline.mp3.music-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 11F50E60BCEC8BA9DF3836EAFBABE24A /* Pods-relax.offline.mp3.music-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 6C4BCC8C2D31263360E2697776A9E80D /* JXSegmentedIndicatorBaseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0312AB47DD6E41FB3B71BEC1C6414D7F /* JXSegmentedIndicatorBaseView.swift */; };
- 6CC7E7C00730B1BF42A28B2E23CA01D6 /* URLSessionConfiguration+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68153D2EA22B93481BFAA617AB95EEEE /* URLSessionConfiguration+Alamofire.swift */; };
- 6D389E4D5F97798BE1AEEB8C317852D7 /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BC2C9781FC9F953ABBE8D0069D3562FA /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 6D4A08865846C0F0DB9A05C617C2A947 /* MJRefreshStateTrailer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BC1D09BEB4A87CCA47DB2DB8F699307 /* MJRefreshStateTrailer.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 6E23DA3D58E8C10B007C321E13508FEF /* URLConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11F394350D054B8CFF566BD784D1453A /* URLConvertible.swift */; };
- 6E2884B29CD49EE91C48C725105F295A /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9C090376B9E3BE95AAF488196F7776C /* LayoutConstraint.swift */; };
- 6E4DEB1A81739DE58C64997251DAA87C /* ISOFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E37DE5812B553F480F77912701EA0FC /* ISOFormatter.swift */; };
- 6F271B6EA85E0BDDA7DD1CC621EDC4F9 /* MJRefreshGifHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 1985F05564401FD34CF08871E1AC0475 /* MJRefreshGifHeader.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 6F2E0DC7D8598283D088A989FDB8E5F6 /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C4B5E073DEB2047089813AFB9E30CE6 /* ParameterEncoding.swift */; };
- 7052944C657F270E47777446D0E10E1C /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D0CA27E114E88A941900703AA694F2F /* ConstraintInsetTarget.swift */; };
- 70B890CA221D229ABF2346A7245654C5 /* Int+DateComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B29C561AD6A42AE05E7D4933C413593 /* Int+DateComponents.swift */; };
- 714D5F4F9165ED6BF3CFA9FEA7DB9FF5 /* Placeholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72162E132CCC3CFF37F0C06770D2ABB8 /* Placeholder.swift */; };
- 7161A8A89FB1C894F9145BF97D2EE8B1 /* PKStopDownloadButton.h in Headers */ = {isa = PBXBuildFile; fileRef = B7AB5B878CFAEDB0CFA466A32417E423 /* PKStopDownloadButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 71655F70079826C7494ABF198F9F563A /* RelativeFormatter+Style.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2B3E2B6010CFF743A48926748C6DD1D /* RelativeFormatter+Style.swift */; };
- 71B32D2CE27370DCC6032569FEE5C8DC /* Date+Math.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3938E9316C816629BB272B90B7FB72BA /* Date+Math.swift */; };
- 72C19C762FADC82517C344E9F47D7E50 /* AlamofireExtended.swift in Sources */ = {isa = PBXBuildFile; fileRef = 352002810B4B49BECC2CE992E2A783FB /* AlamofireExtended.swift */; };
- 72D0CDE3B34D718422CFD4F85ADEFB04 /* RetryStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9961DB51C617F0E3F78E26BA1B8787 /* RetryStrategy.swift */; };
- 735B99CA4190FBE5FE23DA796402D447 /* DateInRegion.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA59BA4AF9EF61DDE3267A666349D9BC /* DateInRegion.swift */; };
- 73F8AC99A58E5837924C056E89543B97 /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F4F248B187B62F47D6D2195C41FF84A /* Typealiases.swift */; };
+ 6584A733B2610DAFBB1CEF8E90635EC9 /* TimePeriodCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = F326CD136B8C209A498E147755654AFA /* TimePeriodCollection.swift */; };
+ 65D2E717EEAEBB4658708CD9C8991C93 /* CallbackQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE57191B720EDB55AFB0B738ACBE9FA2 /* CallbackQueue.swift */; };
+ 65EEB9B45B77C5733E6233759FE7BC76 /* Data+Hash.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AA7A53084CE6242FC8923CB61D69A11 /* Data+Hash.swift */; };
+ 65F1A046F742E910CE0EE30BE2600DDD /* JXSegmentedDotItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2035235CBB8446F3D2B5C3DF03DB596F /* JXSegmentedDotItemModel.swift */; };
+ 661036CF70C0946F0ED7BAF395598868 /* URLSession+ResumeData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78162222A9C1E9E834399EBEC817C51A /* URLSession+ResumeData.swift */; };
+ 6628BE82C4F27A39F94CBEA02BB498EF /* DateInRegion+Compare.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40E624220D9808FE4E6F704725D45A64 /* DateInRegion+Compare.swift */; };
+ 6654CDCA10823EA080976DF72D8729B2 /* AVAssetImageDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3999012C65D76E395381CECF9C5701C /* AVAssetImageDataProvider.swift */; };
+ 6735E4B11C64D20B4E05A92811F5A721 /* IQKeyboardManager+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2D7D8612278935E2C4A971B057FF070 /* IQKeyboardManager+Internal.swift */; };
+ 67942FD70EE19BA957045141036FD49E /* RequestModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E0C9D5FFE7B4EBECE637ACE8C31A3E8 /* RequestModifier.swift */; };
+ 68238227D42B2511FA6A26BF71E92520 /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 58763E9810DBE5D64F8BB7A2F0CC8ED8 /* Alamofire-dummy.m */; };
+ 68241B77CB3EE81665BBB4275AC19679 /* JXSegmentedListContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BA391400C88257C2944C66CBCCB7253 /* JXSegmentedListContainerView.swift */; };
+ 686ABAEBCE5C0EA6644AA80F9B4B3687 /* MJRefreshNormalHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = E20BAB91FEA315F02B58AF69507DB592 /* MJRefreshNormalHeader.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 68995B28EE5B539CEA5A1133E4623927 /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3C8574545A771D6331BDF26BD545BC1 /* MultipartFormData.swift */; };
+ 68A74F13F8FEBAA7E0EA9344DED0458B /* OperationQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2703C2DE8F79F4582B6E3096674C625 /* OperationQueue+Alamofire.swift */; };
+ 68DCF4550B3B72228D5D8B4E25A341F2 /* Box.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEA0FFC9C5524694F1BEEB79266364F1 /* Box.swift */; };
+ 69261B5D3B53EBF7109D5E1DA3768CAC /* AuthenticationInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A65DD241CD2326B542E0BE7B68D3D65 /* AuthenticationInterceptor.swift */; };
+ 6A9418B4C77EFF47E92EEA22C5BF7EC0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B4B8063291033C95A8B2A24FA2AD7A79 /* Foundation.framework */; };
+ 6C2A8D78B7E5B02974B212599B28AD77 /* Indicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51CD975673CF1F07A2A13679560350A0 /* Indicator.swift */; };
+ 6C4BCC8C2D31263360E2697776A9E80D /* JXSegmentedIndicatorBaseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3658B955BF25B61E3DB76C7549665CF /* JXSegmentedIndicatorBaseView.swift */; };
+ 6CC7E7C00730B1BF42A28B2E23CA01D6 /* URLSessionConfiguration+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39662A3DEB2406A1947116C8C84879C4 /* URLSessionConfiguration+Alamofire.swift */; };
+ 6D389E4D5F97798BE1AEEB8C317852D7 /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CAEB2326B3AA2C450941202C12210D4 /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 6D4A08865846C0F0DB9A05C617C2A947 /* MJRefreshStateTrailer.h in Headers */ = {isa = PBXBuildFile; fileRef = 602EEB89E65E882D26595BFB30A68753 /* MJRefreshStateTrailer.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 6E23DA3D58E8C10B007C321E13508FEF /* URLConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82411FCD639DFF62A404373043D0A97B /* URLConvertible.swift */; };
+ 6E2884B29CD49EE91C48C725105F295A /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34BF55272606579ED586584FC1416BCE /* LayoutConstraint.swift */; };
+ 6E4DEB1A81739DE58C64997251DAA87C /* ISOFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF98BFA0D0A06425E83174B4F21DCB21 /* ISOFormatter.swift */; };
+ 6F271B6EA85E0BDDA7DD1CC621EDC4F9 /* MJRefreshGifHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 60031D8D6F31B55CA6F941F4E74FE20A /* MJRefreshGifHeader.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 6F2E0DC7D8598283D088A989FDB8E5F6 /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2116DD2B393A810DC0A155E69BB8F7BB /* ParameterEncoding.swift */; };
+ 7052944C657F270E47777446D0E10E1C /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31FD8F5F9DCF707E18D9317B12D18BBE /* ConstraintInsetTarget.swift */; };
+ 70B890CA221D229ABF2346A7245654C5 /* Int+DateComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0534F15E81BC57C85EEEF636D7A15AD /* Int+DateComponents.swift */; };
+ 714D5F4F9165ED6BF3CFA9FEA7DB9FF5 /* Placeholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651C18F3728516BA04D822B7AF347A1D /* Placeholder.swift */; };
+ 7161A8A89FB1C894F9145BF97D2EE8B1 /* PKStopDownloadButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DB0A9A327903E1073962BAAED8DA960 /* PKStopDownloadButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 71655F70079826C7494ABF198F9F563A /* RelativeFormatter+Style.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34407EBEDB54B802330DFFF56E661207 /* RelativeFormatter+Style.swift */; };
+ 71B32D2CE27370DCC6032569FEE5C8DC /* Date+Math.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A4A8EC54C0D772248106B90417E277C /* Date+Math.swift */; };
+ 72C19C762FADC82517C344E9F47D7E50 /* AlamofireExtended.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C6E47641FE0A4E8F158FBB515918A17 /* AlamofireExtended.swift */; };
+ 72D0CDE3B34D718422CFD4F85ADEFB04 /* RetryStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1980AB08B7A9EEC85770C1233B343099 /* RetryStrategy.swift */; };
+ 735B99CA4190FBE5FE23DA796402D447 /* DateInRegion.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5EBB178A1D51C38C6D030242C68E41C /* DateInRegion.swift */; };
+ 7367DD455506C92257B75D2B810C2318 /* MarqueeLabel-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B143CD633633C08DB7AF7A0DBD6F28AC /* MarqueeLabel-dummy.m */; };
+ 73F8AC99A58E5837924C056E89543B97 /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9A3310F4C2D7FF46E05C5C085EFB8C /* Typealiases.swift */; };
74145F14ACD710C1D165C5F9B3F0D7ED /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B4B8063291033C95A8B2A24FA2AD7A79 /* Foundation.framework */; };
- 74BF3CC58474F118E0E3953ADBBD233F /* MJRefreshComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 64514619DE9886AD750BCCFA911EBCE7 /* MJRefreshComponent.m */; };
+ 74BF3CC58474F118E0E3953ADBBD233F /* MJRefreshComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = E3DD611E2B6825B2332BD02231705E84 /* MJRefreshComponent.m */; };
74DBD7BAE1B62FA323770957159589E1 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA39C6D2448DC5A9AD18DDA3C96A1A0F /* Accelerate.framework */; };
- 77A016AB014A21D60BBFAB9F7134D38B /* MJRefreshTrailer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F280E6832B7DEB6EE4B0A57BFF44C5E /* MJRefreshTrailer.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 77D782DE125D322922466676E2FFA289 /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = E43B8D2F0F02E513E51444C8074E7E76 /* ConstraintPriorityTarget.swift */; };
- 78CA17524C270C0E381677E3D4C77B6B /* ImageDownloaderDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8D8CA8FE715EF134ED3F7DAF0DBCE8C /* ImageDownloaderDelegate.swift */; };
- 78D414CF02F5ED61DAB995221C459C22 /* JXSegmentedIndicatorDoubleLineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AC6B934AA664659F00A855BE3C69DDD /* JXSegmentedIndicatorDoubleLineView.swift */; };
- 794FC38D15336AB502B73B012005E9BD /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22F9853435E731084D0A51B315E04D8F /* Validation.swift */; };
- 795681285B4E2B121B5CD420131168F8 /* MultipartUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE043EDFC8970172839768C24C85385 /* MultipartUpload.swift */; };
+ 77A016AB014A21D60BBFAB9F7134D38B /* MJRefreshTrailer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C1E12FF093098A22E423F0E1E49DDA6 /* MJRefreshTrailer.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 77D782DE125D322922466676E2FFA289 /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE70BEDA021F24905556038DC9C6EF72 /* ConstraintPriorityTarget.swift */; };
+ 78CA17524C270C0E381677E3D4C77B6B /* ImageDownloaderDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F1DD919E6FEB406815EA8275F490877 /* ImageDownloaderDelegate.swift */; };
+ 78D414CF02F5ED61DAB995221C459C22 /* JXSegmentedIndicatorDoubleLineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E3D9A705DD4B8E1CB63DF9084EAC9FF /* JXSegmentedIndicatorDoubleLineView.swift */; };
+ 794FC38D15336AB502B73B012005E9BD /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 910F21CD3337049AB8881F165BD19AE9 /* Validation.swift */; };
+ 795681285B4E2B121B5CD420131168F8 /* MultipartUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63A5658CA7BE9C8CB17CFA56505F5F3F /* MultipartUpload.swift */; };
79E4EC8E7FF2E4B1B389722EB2BEC3D0 /* DownloadButton-DownloadButton in Resources */ = {isa = PBXBuildFile; fileRef = A6A74933CD02E6DBD2AFCF807116B6CB /* DownloadButton-DownloadButton */; };
- 7A19CD0F168E8C66757012114767A36B /* UIScrollView+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C1779749FF7AF4D31E5FBFE6A84FC3 /* UIScrollView+MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7AD0E5A1A45CE95B2C7A8078B2F19073 /* TimeInterval+Formatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 214FAB9C40ED9237DD5FF6D0388B6D81 /* TimeInterval+Formatter.swift */; };
- 7AE2E0B382A14D58BE7DAA0C852DCD02 /* ServerTrustEvaluation.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFC1DD0B0E10AC895C05A433F86AFDD3 /* ServerTrustEvaluation.swift */; };
- 7BC03DCFF31FDA534EB7B100209D1718 /* Calendars.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FF2ECC0F78DECBDD03D5BC8674B5D91 /* Calendars.swift */; };
- 7C505E7C30A2E0FA68171866E82652AB /* SessionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF0C272F96942F166840ED423442D5B /* SessionManager.swift */; };
- 7CC5E76223E1EB7B09FBC03EA07E3DB3 /* JXSegmentedIndicatorBackgroundView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEFEECFBF08685D5B7EFA9372FB2EB7E /* JXSegmentedIndicatorBackgroundView.swift */; };
- 7D952C22D46295112F3FF0406FEE1F12 /* PKDownloadButton.h in Headers */ = {isa = PBXBuildFile; fileRef = E56690077DFEE647C01B79BE97B5C6EC /* PKDownloadButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7E59ABF8A1AC8F61FEFB9B8C72EFB9E5 /* IQKeyboardManager+Position.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51985907D190CC0C4BE05775C68447FE /* IQKeyboardManager+Position.swift */; };
+ 7A19CD0F168E8C66757012114767A36B /* UIScrollView+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 160D754EC35823FF85A34B79E72C40F1 /* UIScrollView+MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 7AD0E5A1A45CE95B2C7A8078B2F19073 /* TimeInterval+Formatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ED55223068A73568B36FF08EFCF9EAF /* TimeInterval+Formatter.swift */; };
+ 7AE2E0B382A14D58BE7DAA0C852DCD02 /* ServerTrustEvaluation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CDC49949B6AE24CE48C5C0261DA3A8B /* ServerTrustEvaluation.swift */; };
+ 7BC03DCFF31FDA534EB7B100209D1718 /* Calendars.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FAC5A61EF918CD2923F2347A8289EAF /* Calendars.swift */; };
+ 7C505E7C30A2E0FA68171866E82652AB /* SessionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA063E0C0841D9CBEAFF14BEAD5D3CE8 /* SessionManager.swift */; };
+ 7CC5E76223E1EB7B09FBC03EA07E3DB3 /* JXSegmentedIndicatorBackgroundView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90868F52B19BF2E08A1B70DCFF656B5C /* JXSegmentedIndicatorBackgroundView.swift */; };
+ 7D952C22D46295112F3FF0406FEE1F12 /* PKDownloadButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 96B3849B994F57B8B26611E06131CB08 /* PKDownloadButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 7E59ABF8A1AC8F61FEFB9B8C72EFB9E5 /* IQKeyboardManager+Position.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D871BE2C3416A74C644B64DBF2B5DC6 /* IQKeyboardManager+Position.swift */; };
7E7F1EE3B8C0BB721181929B686FEC17 /* Kingfisher-Kingfisher in Resources */ = {isa = PBXBuildFile; fileRef = C298ABB78D9B05529B89D8322DB2E7B0 /* Kingfisher-Kingfisher */; };
- 7F60A80731DCB0EB26C7D01DCCA932E4 /* ISOParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1211C094C5D9D37494ED83147A1E37FD /* ISOParser.swift */; };
- 80244605FFB26BF165B3C6E3CFA83A3C /* JXSegmentedTitleImageItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B4EA0727D3AEE0C524457934CACC723 /* JXSegmentedTitleImageItemModel.swift */; };
- 8072251E5FFDC1AB89E7558218C41D24 /* KingfisherError.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA3FC481B34EFB18912B61858F7C31E8 /* KingfisherError.swift */; };
- 81245F505360D8598E4A6C7D67E09F21 /* Double+TaskInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BBB8B38E7B8EFDCD9CF588E8C0F210 /* Double+TaskInfo.swift */; };
- 81DAB282980A3BB8EB7796B61934E4F4 /* KFImageOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8EAF386B6BC1994FF7856ACC69F5A5E /* KFImageOptions.swift */; };
- 82FE3B046FEA46F2BDFE7FB0E9D7CBAD /* SVProgressHUD-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 27E637850C77BC6A026E851E20E42D8D /* SVProgressHUD-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 830535E48AA507D7C15359F2A5B72DD1 /* ImageProgressive.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0584F1E05D493C986B42E3E281DA2E0 /* ImageProgressive.swift */; };
- 83DBC0F86AD7C6EFB6947E0F3616467E /* JXPagingListContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8F12D3D56AB60DF1EBA2C097D344C57 /* JXPagingListContainerView.swift */; };
- 8423D60239269F191A47A3E2D82E1EF7 /* ImageTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27D1E42712A93EE01B8A91DCEC710EAC /* ImageTransition.swift */; };
+ 7F60A80731DCB0EB26C7D01DCCA932E4 /* ISOParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC40E3618D748C02FC87EABC6B1128F5 /* ISOParser.swift */; };
+ 802108EDDE4D0E42D9A2411E75B9EB43 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 489901D1795E72219A5650D4806CFBA6 /* PrivacyInfo.xcprivacy */; };
+ 80244605FFB26BF165B3C6E3CFA83A3C /* JXSegmentedTitleImageItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B54BA2B28F4FA97B93861310BDA561C4 /* JXSegmentedTitleImageItemModel.swift */; };
+ 8072251E5FFDC1AB89E7558218C41D24 /* KingfisherError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B083BDB134F183783F9CA8EE5D001949 /* KingfisherError.swift */; };
+ 81245F505360D8598E4A6C7D67E09F21 /* Double+TaskInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = B004488D8C4C6AC1F196AE21E80BF4AC /* Double+TaskInfo.swift */; };
+ 81DAB282980A3BB8EB7796B61934E4F4 /* KFImageOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DD5A923B5AC516949CE302FF67EBB14 /* KFImageOptions.swift */; };
+ 82FE3B046FEA46F2BDFE7FB0E9D7CBAD /* SVProgressHUD-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 332F6C90B7478F0ADA35CCB36F18E139 /* SVProgressHUD-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 830535E48AA507D7C15359F2A5B72DD1 /* ImageProgressive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39CEAE4CB2B89F74AF94DC40A7FCE403 /* ImageProgressive.swift */; };
+ 83DBC0F86AD7C6EFB6947E0F3616467E /* JXPagingListContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE2C9A9D0E0B4D749B32C1E00BF7D8A7 /* JXPagingListContainerView.swift */; };
+ 8423D60239269F191A47A3E2D82E1EF7 /* ImageTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7DC336FCAEF4579E435D1CA1EAAFA09 /* ImageTransition.swift */; };
84BEB9E439780B1E0DEF56459E3D3352 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B4B8063291033C95A8B2A24FA2AD7A79 /* Foundation.framework */; };
- 8640829049AE9907FE93825E5510C33D /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6917BE14409B42BCCE066BCF77930BF /* ConstraintMaker.swift */; };
- 868D4A456CBC3255A772F7FEA2F63BE0 /* JXSegmentedIndicatorParams.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F14F2F23423A5BF0447B6AE3B6922AC /* JXSegmentedIndicatorParams.swift */; };
- 8775BC8B188C38085646E9580CE231BA /* Kingfisher-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8244D5BC1AC6EF3B749557D38982A3C5 /* Kingfisher-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 87996D11DC92EE19EAF9305DAEA4ACF2 /* ConstraintMakerPrioritizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C4F10D8D02E31CD4C8F1B2C4620F9D5 /* ConstraintMakerPrioritizable.swift */; };
- 8868BA37E3CE7C58D26123806D543F3F /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 046C6E5A5FF35C350B0158DEE3E40F28 /* ConstraintView.swift */; };
- 887DB52C63E52FBD3B88F42DD8CFB421 /* RequestCompression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0098DF8EC116CB747F0A250EEFE46277 /* RequestCompression.swift */; };
- 891D1BF14C8881C74262EE9DBE5D67A9 /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D15AA7FA496EAF28310E430A7599DC48 /* UILayoutSupport+Extensions.swift */; };
- 8A52ECA8A45C0574AB3305F39FB8CF81 /* DownloadButton-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C84028ADE6846E4323ACB15E19ADC090 /* DownloadButton-dummy.m */; };
- 8BF0E8E1AAA254D9B4D68BBADCF8DBEF /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 9792F44AE5548DB0513F46CD47F1DE21 /* PrivacyInfo.xcprivacy */; };
- 8C077A05101B84731A302657381218CB /* MJRefreshStateHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = DD79995B4A87E64E10BA3380D6198319 /* MJRefreshStateHeader.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 8CEABAE06B171EA941EB497A2F4A6917 /* Runtime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 123ABCB9EF5852B06D5E32C8D4EB9E6C /* Runtime.swift */; };
- 8D18198290C6F15504358DD49F0C505F /* JXSegmentedTitleOrImageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55FA1C2CFB36531B3B94D009E0268FD4 /* JXSegmentedTitleOrImageCell.swift */; };
- 8DD0EA5259D87AA915FC266D43CD08D6 /* JXSegmentedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89A8E01E18FF856511D6A38ABDCBC452 /* JXSegmentedView.swift */; };
- 8DD46EE7FB9503E7634E929DDE1CBA31 /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37AFBA38FAEEF7CC14CCC5E242D313BD /* Notifications.swift */; };
- 90441CBC43993A5E4E0F5CD5BECC2DDE /* MJRefreshBackNormalFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = FD193447A97E88D72DA312FFA750B7E3 /* MJRefreshBackNormalFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 906EF891E58A035281766993F82373E3 /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83210E479C7F1A42FC7C116732E885E9 /* ConstraintItem.swift */; };
- 90D847B19214926EDE5210D44A08F3C7 /* RequestTaskMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DB07D33D8DA41364ED7B1B6284C443B /* RequestTaskMap.swift */; };
- 9136355471B1C08A16DA36B0A2E536B8 /* NSButton+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E68924120FED7DCF99A872FFA9F54DC /* NSButton+Kingfisher.swift */; };
- 9189CD495B78CBC65B25DED32A881426 /* KFOptionsSetter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46BF1D9126491B49203F61335AAD8237 /* KFOptionsSetter.swift */; };
- 92138A77DFEB4F76FCB582E97633896D /* URLRequest+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7479C6B0500EB95DE80EFD7058AA33D0 /* URLRequest+Alamofire.swift */; };
- 9255A2BCECEB0006DAAF985CA00E2D15 /* JXSegmentedTitleGradientItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEE6C0A96EB48E43A87D0152AACB9E67 /* JXSegmentedTitleGradientItemModel.swift */; };
- 92A81311D8592CB3D907E9DA59023E38 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = EC8AAD29842FD172A4B17E76ADF753A7 /* PrivacyInfo.xcprivacy */; };
- 930B495B7A3197730A016E2339A4CBA7 /* IQKeyboardManagerSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 63CBF16244C36F10F225DE1BA7038647 /* IQKeyboardManagerSwift-dummy.m */; };
- 932470342D7352EEC18C00E52B37A5AE /* DotNetParserFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C69FC3F3390BF347851D0534F9D932C /* DotNetParserFormatter.swift */; };
- 9335612DA775B6D7696C46A692DF7335 /* PKDownloadButton.m in Sources */ = {isa = PBXBuildFile; fileRef = ADA5CDD301DBE830624CF36B02780913 /* PKDownloadButton.m */; };
- 9378157945D7B405C862A05B0D6B971B /* Result+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAC35232D14B3BFBE9C56633C116BB4D /* Result+Alamofire.swift */; };
- 938CFF5F6DE6E7E8CE94373E51F3E07A /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A0D7839E9B360DAC8B2436DDA7E806 /* ConstraintLayoutGuide+Extensions.swift */; };
- 94E00674FACB3ED40684E8DAA40BCC84 /* KF.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0EC01ABC8BE7809772538339A7D8A17 /* KF.swift */; };
- 950B809760A8CE4375DCE1016FB9859F /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73F56BAFBEB1659C76C3C867A42E0DB7 /* ConstraintMakerRelatable.swift */; };
- 9779D52AD8CDA703D6EEE1C6D38E019F /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22A5D84D88971E9475E1EC8AA9036D9D /* ConstraintAttributes.swift */; };
- 97D7D91FC818805D8344C373CC098C32 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3979C23227D173F64FC1CBA303A1D512 /* SessionDelegate.swift */; };
+ 8640829049AE9907FE93825E5510C33D /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = D93B88986A70049740732E9BDA2D984D /* ConstraintMaker.swift */; };
+ 868D4A456CBC3255A772F7FEA2F63BE0 /* JXSegmentedIndicatorParams.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2B2DB1CB4157320AB7B46D983F577B3 /* JXSegmentedIndicatorParams.swift */; };
+ 8775BC8B188C38085646E9580CE231BA /* Kingfisher-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E96DA98FB5788A040DD2ED9B93E36E78 /* Kingfisher-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 87996D11DC92EE19EAF9305DAEA4ACF2 /* ConstraintMakerPrioritizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF7749CC04C556874BBE546166F36A46 /* ConstraintMakerPrioritizable.swift */; };
+ 8868BA37E3CE7C58D26123806D543F3F /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7280B062A7EAD9FFA0FEC16E1936C6E /* ConstraintView.swift */; };
+ 887DB52C63E52FBD3B88F42DD8CFB421 /* RequestCompression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F8AF943C90C2F212A2E7474570424EE /* RequestCompression.swift */; };
+ 891D1BF14C8881C74262EE9DBE5D67A9 /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4E948AF2BE57221FF0FCEF5775EBBEF /* UILayoutSupport+Extensions.swift */; };
+ 8A52ECA8A45C0574AB3305F39FB8CF81 /* DownloadButton-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C1A54DC86334B340EDFF3A979BBD5779 /* DownloadButton-dummy.m */; };
+ 8C077A05101B84731A302657381218CB /* MJRefreshStateHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = C56F2770F14FFB52F18B08F7BC6A7C4C /* MJRefreshStateHeader.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 8CEABAE06B171EA941EB497A2F4A6917 /* Runtime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 187C3048087F7F1D41E679EFC368D94B /* Runtime.swift */; };
+ 8D18198290C6F15504358DD49F0C505F /* JXSegmentedTitleOrImageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DA082E3A75E13CD0C8795CB3957F572 /* JXSegmentedTitleOrImageCell.swift */; };
+ 8DD0EA5259D87AA915FC266D43CD08D6 /* JXSegmentedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6F26EC43199BA3CE04A9C318AACB128 /* JXSegmentedView.swift */; };
+ 8DD46EE7FB9503E7634E929DDE1CBA31 /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0085AF2C56752715FC005A6762AE8307 /* Notifications.swift */; };
+ 90441CBC43993A5E4E0F5CD5BECC2DDE /* MJRefreshBackNormalFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = D006F0064B1980AC5E693A4C09DA3F4D /* MJRefreshBackNormalFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 906EF891E58A035281766993F82373E3 /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BB1B70D50E125F5116226218AD83F85 /* ConstraintItem.swift */; };
+ 90D847B19214926EDE5210D44A08F3C7 /* RequestTaskMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 203DBA9560500D53E8DDCED4335E7CFE /* RequestTaskMap.swift */; };
+ 9136355471B1C08A16DA36B0A2E536B8 /* NSButton+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0175C3BDDE4AF2390BE74E4410720475 /* NSButton+Kingfisher.swift */; };
+ 9189CD495B78CBC65B25DED32A881426 /* KFOptionsSetter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6376967BC13A929AB938E8FDFE0093B /* KFOptionsSetter.swift */; };
+ 92138A77DFEB4F76FCB582E97633896D /* URLRequest+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5D2335C862D6E9C8606261324B9FD98 /* URLRequest+Alamofire.swift */; };
+ 9255A2BCECEB0006DAAF985CA00E2D15 /* JXSegmentedTitleGradientItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED2440BB8CE79C3D96A62D6671311E7B /* JXSegmentedTitleGradientItemModel.swift */; };
+ 92A81311D8592CB3D907E9DA59023E38 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = BFD7D664E057D7E5D8262EA574E4238E /* PrivacyInfo.xcprivacy */; };
+ 930B495B7A3197730A016E2339A4CBA7 /* IQKeyboardManagerSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F06F0BFC065D8251E7724344E40E245 /* IQKeyboardManagerSwift-dummy.m */; };
+ 932470342D7352EEC18C00E52B37A5AE /* DotNetParserFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFB2C31AAAD3CD21FEFE7182CC04951F /* DotNetParserFormatter.swift */; };
+ 9335612DA775B6D7696C46A692DF7335 /* PKDownloadButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F365A87A2F56AA21E9F9300604BF5AC /* PKDownloadButton.m */; };
+ 9378157945D7B405C862A05B0D6B971B /* Result+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDF31659C5CFC027B5F60F47F8B324B /* Result+Alamofire.swift */; };
+ 938CFF5F6DE6E7E8CE94373E51F3E07A /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB883732E46A5484BBD2DBC929A9BDE2 /* ConstraintLayoutGuide+Extensions.swift */; };
+ 94E00674FACB3ED40684E8DAA40BCC84 /* KF.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED9E039902D3928D76325A9F22981AD4 /* KF.swift */; };
+ 950B809760A8CE4375DCE1016FB9859F /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DD63E7F57872EECA1B11850AC15C93E /* ConstraintMakerRelatable.swift */; };
+ 9779D52AD8CDA703D6EEE1C6D38E019F /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6C4B2FB359BAF9C49695E7D50FFC4D2 /* ConstraintAttributes.swift */; };
+ 97D7D91FC818805D8344C373CC098C32 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1576C1A75CD83CC0126786D2F38A300E /* SessionDelegate.swift */; };
97EA46DA072EC4FD4D831606095B92C1 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1199E580C5F19AFD1010FE20258DADBD /* UIKit.framework */; };
98455F4176C861F9E33D36892A932684 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B4B8063291033C95A8B2A24FA2AD7A79 /* Foundation.framework */; };
- 98AEAA041DE971906C7EEBC1182A4470 /* UIButton+PKDownloadButton.h in Headers */ = {isa = PBXBuildFile; fileRef = DB13ACA4C41663A234C2E3FF898FBCC9 /* UIButton+PKDownloadButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 99F2413E51A57A17AF0B52EE43D448D3 /* Resource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BDFFD6764814A9B06BAC507955B8CE7 /* Resource.swift */; };
- 99FB2910921988A9BCC5533A1EA70E59 /* Region.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B9D360CDBAD5D8DA6901ADB37463388 /* Region.swift */; };
- 9A07F0B734748735A80119550AC32104 /* SVIndefiniteAnimatedView.m in Sources */ = {isa = PBXBuildFile; fileRef = FC76F03E2E143529554E5CD2B9172452 /* SVIndefiniteAnimatedView.m */; };
- 9AF14E4B1C52E5AD4C38021C4EC17974 /* UIScrollView+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = C481FA53A11A89DFFE144CC2281C24EF /* UIScrollView+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 9AF53260DACD3DE030C97AA110DAD22E /* MJRefreshComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 5792E5F49EE8878288039DD00DDC2023 /* MJRefreshComponent.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 9B93846DEFDF34EC2E881F65938B3F17 /* JXSegmentedTitleOrImageItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 204288E27AE87499D959FE982CA4A588 /* JXSegmentedTitleOrImageItemModel.swift */; };
- 9C2584A9CCF8CA6C9DF2AD79DB831E70 /* IQKeyboardManager+UIKeyboardNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF84581B386F0C2CCC6C90D635B943B3 /* IQKeyboardManager+UIKeyboardNotification.swift */; };
- 9C292E2C761CB97ACD00F95FA4D60E85 /* IQKeyboardManager+OrientationNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC4AE7F3244DF9F0CEC3FD87684C7ED5 /* IQKeyboardManager+OrientationNotification.swift */; };
- 9C7D314BE45AB79E96B260656C36BAEC /* RedirectHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7942B81EEA6AECA2482B4930A88C2F74 /* RedirectHandler.swift */; };
- 9D8BED7F3F86BB39E7C0923D92E73F8B /* Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95976A54E15E258957362E209ED32279 /* Combine.swift */; };
- 9DE54A6FA3EA23631ADD6DEC4D190EC9 /* String+Hash.swift in Sources */ = {isa = PBXBuildFile; fileRef = 898C0D155683823269D327A674162353 /* String+Hash.swift */; };
- 9E4E278A3C1543798E1912699886023E /* IQKeyboardManager+UITextFieldViewNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C35F2387E5B65A2A9E492997862418F /* IQKeyboardManager+UITextFieldViewNotification.swift */; };
- 9F15AD066C4130E1C6E3ADA35EC8264E /* NSLayoutConstraint+PKDownloadButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 54338C42DA7239A1FA97E43C3AFF5455 /* NSLayoutConstraint+PKDownloadButton.m */; };
- 9F6257E692DB9F9130A3618CCCC5FA70 /* PKCircleProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A5415EF1FD45FF941A7307C0161A9CF /* PKCircleProgressView.m */; };
- 9F8F5BCE4DAD6C16F3A8AA2A2F783D01 /* FormatIndicatedCacheSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC1D505E6DC2A1CF3359546A71AE8A0E /* FormatIndicatedCacheSerializer.swift */; };
- A0371DF7D93D9B86BD50474D4B9294FD /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EDFEDB333D1C4D657642BDD0CBBD837 /* ConstraintInsets.swift */; };
- A051999781E1280746F7743BDEEA6C49 /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77F4148514C92AEF48B7ACD34E7488EB /* ConstraintDescription.swift */; };
- A1506893FF52AA466B130E8B05FBE868 /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E67E72BA64A8C64C789594ABFF25B4 /* NetworkReachabilityManager.swift */; };
- A1A93726CD533C8ACD4755250E46E48D /* Delegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8885E02AC5ED5CCD9A4BA63AC631EE3B /* Delegate.swift */; };
- A22A2ACF53FDC243AAAFB009005A710F /* Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = B92C64DC7D87ACAD9C31FE09D0D6DB09 /* Concurrency.swift */; };
- A35877DE0C3D6B4CF2A10E666EF5F490 /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85413A6EC0866E9242FCEA1AF84C593 /* LayoutConstraintItem.swift */; };
- A393340CB069126B0A3D781C174E6E49 /* JXSegmentedNumberItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67FA5F041BEEE97146209378825B5C6C /* JXSegmentedNumberItemModel.swift */; };
- A3FD52DF5584364FFD56965394C36CF2 /* URLConvertible+URLRequestConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F40E10D55EC1044BB7FD2CD777678D4 /* URLConvertible+URLRequestConvertible.swift */; };
- A50A72FCD270217D99ECA1D2700CFAD4 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = F4FC25EC1C00814464CC040EF1ED112E /* PrivacyInfo.xcprivacy */; };
- A70C6EBC13661A0FC4023236B350AEA1 /* AuthenticationChallengeResponsable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219212DECF63C705E7EF8E6D103F7190 /* AuthenticationChallengeResponsable.swift */; };
- A7AE58053194FA1CEA420D995AF17B85 /* MJRefreshAutoStateFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 49D847B127554DD4DB9891C33CA6CCF8 /* MJRefreshAutoStateFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
- A86A28FC358F0AFE453C2EBD1D035751 /* JXSegmentedTitleGradientDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCEE92F3B1D5446A37F76652177283D2 /* JXSegmentedTitleGradientDataSource.swift */; };
+ 98AEAA041DE971906C7EEBC1182A4470 /* UIButton+PKDownloadButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D4E696F75CA79EF5DB1493DBFBD4E73 /* UIButton+PKDownloadButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 99F2413E51A57A17AF0B52EE43D448D3 /* Resource.swift in Sources */ = {isa = PBXBuildFile; fileRef = A54156DD4825B5F1C49FFDE72E5CA3D2 /* Resource.swift */; };
+ 99FB2910921988A9BCC5533A1EA70E59 /* Region.swift in Sources */ = {isa = PBXBuildFile; fileRef = E76218A6A0AC4A58A10DAA88E00C21FE /* Region.swift */; };
+ 9A07F0B734748735A80119550AC32104 /* SVIndefiniteAnimatedView.m in Sources */ = {isa = PBXBuildFile; fileRef = CDB23F11BFD150D06EB1E55D63A5809E /* SVIndefiniteAnimatedView.m */; };
+ 9AF14E4B1C52E5AD4C38021C4EC17974 /* UIScrollView+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 499F69400989C98B94A8F8B97F588969 /* UIScrollView+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 9AF53260DACD3DE030C97AA110DAD22E /* MJRefreshComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 89F35204C15E154529FCD3A47194B781 /* MJRefreshComponent.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 9B93846DEFDF34EC2E881F65938B3F17 /* JXSegmentedTitleOrImageItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 602AADF40849A45983953E264A9BC93F /* JXSegmentedTitleOrImageItemModel.swift */; };
+ 9C2584A9CCF8CA6C9DF2AD79DB831E70 /* IQKeyboardManager+UIKeyboardNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15312F9E030D2895F28379E5E7AC2F61 /* IQKeyboardManager+UIKeyboardNotification.swift */; };
+ 9C292E2C761CB97ACD00F95FA4D60E85 /* IQKeyboardManager+OrientationNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1676881842A119CAFB75D031A09B9F8A /* IQKeyboardManager+OrientationNotification.swift */; };
+ 9C7D314BE45AB79E96B260656C36BAEC /* RedirectHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE3E5C271FCF47C09129826CD1607D5 /* RedirectHandler.swift */; };
+ 9D8BED7F3F86BB39E7C0923D92E73F8B /* Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 578211F81ABFCC933FC2FCAD98E8D47E /* Combine.swift */; };
+ 9DACAF384DD9C46FB76E2D3DF5D41084 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1199E580C5F19AFD1010FE20258DADBD /* UIKit.framework */; };
+ 9DE54A6FA3EA23631ADD6DEC4D190EC9 /* String+Hash.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01CFEA1169540CE8BA1331ACE15B00A8 /* String+Hash.swift */; };
+ 9E4E278A3C1543798E1912699886023E /* IQKeyboardManager+UITextFieldViewNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = A96639B1598DB44935B4470271613AFB /* IQKeyboardManager+UITextFieldViewNotification.swift */; };
+ 9F15AD066C4130E1C6E3ADA35EC8264E /* NSLayoutConstraint+PKDownloadButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 72B7DE9C38B4CCAA35EC94EC02E6D329 /* NSLayoutConstraint+PKDownloadButton.m */; };
+ 9F6257E692DB9F9130A3618CCCC5FA70 /* PKCircleProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5188492DCEB003519D4B536CDD1F7B5A /* PKCircleProgressView.m */; };
+ 9F8F5BCE4DAD6C16F3A8AA2A2F783D01 /* FormatIndicatedCacheSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0524D8BA55EB77A9786839D001228E5 /* FormatIndicatedCacheSerializer.swift */; };
+ A0371DF7D93D9B86BD50474D4B9294FD /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F7F5E6F94879FAB29D921DC9FAF8CD9 /* ConstraintInsets.swift */; };
+ A051999781E1280746F7743BDEEA6C49 /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFC2163D8BC1DC94596E6612D1851079 /* ConstraintDescription.swift */; };
+ A1506893FF52AA466B130E8B05FBE868 /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E25067B4F422F31021D401E81CDA3A38 /* NetworkReachabilityManager.swift */; };
+ A1A93726CD533C8ACD4755250E46E48D /* Delegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D5F1A2FF1FB1DD42568FD79BC4800F0 /* Delegate.swift */; };
+ A22A2ACF53FDC243AAAFB009005A710F /* Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26D8FAAD7E324D1696484B36A27617E1 /* Concurrency.swift */; };
+ A35877DE0C3D6B4CF2A10E666EF5F490 /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB21BE53AD315A53D3028EB684445858 /* LayoutConstraintItem.swift */; };
+ A393340CB069126B0A3D781C174E6E49 /* JXSegmentedNumberItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651AF86B19A0753E59D925A358A62C7E /* JXSegmentedNumberItemModel.swift */; };
+ A3FD52DF5584364FFD56965394C36CF2 /* URLConvertible+URLRequestConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D8C5FDD4C842D708A0A3A727D77B58F /* URLConvertible+URLRequestConvertible.swift */; };
+ A50A72FCD270217D99ECA1D2700CFAD4 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = E5AE85B549A0F1ADBF86C827D96A2547 /* PrivacyInfo.xcprivacy */; };
+ A70C6EBC13661A0FC4023236B350AEA1 /* AuthenticationChallengeResponsable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51BC721DE951672AC86725904BF54E3F /* AuthenticationChallengeResponsable.swift */; };
+ A7AE58053194FA1CEA420D995AF17B85 /* MJRefreshAutoStateFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 49670BEF07B759207432F9BAC3232A37 /* MJRefreshAutoStateFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A86A28FC358F0AFE453C2EBD1D035751 /* JXSegmentedTitleGradientDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76B9E41F33DAD89794D0675AA79CA8A6 /* JXSegmentedTitleGradientDataSource.swift */; };
A8C0CBBC63C39A8C10083CBCA172F7CF /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C07BEF0CE5DECC5BDCAC8625BF2FFA4B /* QuartzCore.framework */; };
- A8DD3F39B4D1F0C7B11866484A03336E /* IQInvocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C011E467CC22ED6D7E27C641D1F56BF /* IQInvocation.swift */; };
- AA602A49B1DC7FDED565CAD8BB89EAC1 /* AFError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 943B4AB929902A7B25629F26D84D5417 /* AFError.swift */; };
- AA99A5B65FF84BABBAADA73755A1128E /* TimePeriodChain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CF57EB0CB57726D4D40CAAE90CD936E /* TimePeriodChain.swift */; };
- AAC2529A1B4F4832A052B348C5093018 /* IQUIScrollView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16BB28FA8B7896E7AF0AC7FC937F19A7 /* IQUIScrollView+Additions.swift */; };
- AB651DB3A97A623234B6544AD030406A /* IQNSArray+Sort.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFAB6B5532F3B8E3FF410827371ED49E /* IQNSArray+Sort.swift */; };
- ACDFC76B3486D1E62FD11EFAA88678ED /* SVProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 62FA49071BDC919DA23009B2ED6DC501 /* SVProgressHUD.m */; };
- AD6FD7F28D8F2517C7A2646D8836C386 /* PKMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = E311156F3C3961E5F4EFD556E8BBF33F /* PKMacros.h */; settings = {ATTRIBUTES = (Public, ); }; };
- ADAE563BC8C5D1339B8C742D973D72EA /* NSLayoutConstraint+PKDownloadButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 394EA0EF4EA1BA1568C02AE6FDBDB640 /* NSLayoutConstraint+PKDownloadButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
- ADC6E301DBD802373B3B2E73EF4FD436 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B4B8063291033C95A8B2A24FA2AD7A79 /* Foundation.framework */; };
- AE80F0488D3A0780F143DF2AA0698212 /* UIColor+PKDownloadButton.m in Sources */ = {isa = PBXBuildFile; fileRef = CE1B1EF4353BA9FDF0D8F6E2CD68A1DA /* UIColor+PKDownloadButton.m */; };
- B0CB5FB63262E1A67317045B8960F363 /* IQBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = A83CB2EE68C6DADEBF0AE3E48F9A005F /* IQBarButtonItem.swift */; };
- B133BB9C9B03481C7F1D221F35A617F2 /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8391D695EAE060EFF3874D9E27A9FCF3 /* Constraint.swift */; };
- B14FAF976D4BFA1065F209FC49DB722E /* Tiercel-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3195118FB0FE0A5A0CDE12C350EC0BFE /* Tiercel-dummy.m */; };
- B155E9B44BDC68C87FCC13B10F1D5532 /* ImageFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = B13BD50E4EC6A725E6E81F3572320A45 /* ImageFormat.swift */; };
- B1E4796F3830DE510675DEE45E7FB648 /* JXSegmentedTitleImageDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 318C19E7D6C6A32542051557783C1EF3 /* JXSegmentedTitleImageDataSource.swift */; };
- B2E03E67465612F21A685BC97EE7F947 /* KFImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EBF6A0C927D0BEC2B5DB9868AA49A13 /* KFImage.swift */; };
- B3048DDF53B358B345D8FC23A4D7D1AB /* JXSegmentedIndicatorRainbowLineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39B9EC3B0961258427F81EA9988783C2 /* JXSegmentedIndicatorRainbowLineView.swift */; };
- B3F75D115D5150C258F5E68404751010 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A44021BFDB893E44EAA9D5FDA7A3FF9 /* ConstraintConstantTarget.swift */; };
- B46A36CA19ED6C09341D8E4031F66D5C /* IQUIViewController+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC52C9616BD7796CAECA262CFB89146F /* IQUIViewController+Additions.swift */; };
- B4F5A298E60CC038619FC7685C3D50C3 /* Date+Compare.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2321C03D8076FF5C1197BA30FB637105 /* Date+Compare.swift */; };
- B4F9C9EC1B3F1689AE56BB719AE5439C /* ConstraintDirectionalInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1B2318A36D67B80AB9A36574D48B9F /* ConstraintDirectionalInsetTarget.swift */; };
- B5C66B48EB624FEC4D2F64A50F143716 /* DataStreamRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 444DDECFD8D1EE63B4337DEA07CDBA41 /* DataStreamRequest.swift */; };
- B6E953695C48D2FDCE8D86321DE7D474 /* ImageCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89F5DB079478EA56BE88941393677920 /* ImageCache.swift */; };
- B784C1E8FB583A4AA328D89038D2DC5B /* TimePeriod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 203889A6D004FA63E5B60B05C420B983 /* TimePeriod.swift */; };
- B85354283CB89C658911748A7C5AF891 /* JXSegmentedAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0E58492DC1522D088B61A013EC830D1 /* JXSegmentedAnimator.swift */; };
- B962ED35C37063794B7D8468FB007AD5 /* MJRefresh-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A6D32E291293B13F725561460AD6A55C /* MJRefresh-dummy.m */; };
- B97D95F7C0C87105C015BCCAE634B8DC /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0E89285C61C5207A9708CC303A59A3D /* Filter.swift */; };
- B99F90601D5EED64587743374BBC44F6 /* MJRefreshStateTrailer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BA22F174045FFB7A48A75A7F4D9EB96 /* MJRefreshStateTrailer.m */; };
- B9A56C1C079CE609AD4404964A95A170 /* MJRefreshTrailer.m in Sources */ = {isa = PBXBuildFile; fileRef = D7A6149AFCACF07DCC6875C9ECECC7A3 /* MJRefreshTrailer.m */; };
- B9DCCFD9F7800B172476EE7F2D90354B /* JXSegmentedTitleAttributeDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD36969B19B33F782A8731FD12DE04F2 /* JXSegmentedTitleAttributeDataSource.swift */; };
- B9EA745EBAAB9FFCFDD98E9D593C0EB3 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 4C81E489B48B567E974A27AE3C38D336 /* PrivacyInfo.xcprivacy */; };
- BAF334D6167CAED8479849147C7F6858 /* TVMonogramView+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AD4BD75CC969A381CA33489A1380AF2 /* TVMonogramView+Kingfisher.swift */; };
- BB84B6AC5338AF7AD3B82B1C012386F8 /* JXSegmentedDotCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D4F9A47778935536C815EE8A43C62CE /* JXSegmentedDotCell.swift */; };
- BBC9585C538DD5B68FF7E7E32F714023 /* JXSegmentedCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DB9DF7E0785B32759BE7D10F30291CB /* JXSegmentedCollectionView.swift */; };
- BC0A0C473B63B817926F4D58611281BB /* URLEncodedFormEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0399B88BB7703B5750208873531B6CFD /* URLEncodedFormEncoder.swift */; };
- BD092797639DC408DC38DC00F63CAFE5 /* PKPendingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 89AB6504876D9F3A7808F0012486934B /* PKPendingView.m */; };
- BDAD667B60A9D9981738646851C825A0 /* IQKeyboardManager+Toolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40645897DA10D6315EE10B5CF09F9F83 /* IQKeyboardManager+Toolbar.swift */; };
- BDEF755484EB2BA591FBF48752FBAEEC /* NSTextAttachment+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = E61B541BAA0D342983094AC77D1433AB /* NSTextAttachment+Kingfisher.swift */; };
- BE355F69F84788D334FDAC7D1CD9B8C4 /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21F837F2050BCDC7CB46A7661A696F07 /* ConstraintDirectionalInsets.swift */; };
- BE60EC19FCBB8F301081E9C31BB85F3E /* IQUITextFieldView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F60A6E2C18C53A1DCD59710DAE3325F0 /* IQUITextFieldView+Additions.swift */; };
- BF567AEFDD52DC43AC75122734D571E2 /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FDE66FA3E63D652F470310D1A8E5121 /* ConstraintMakerFinalizable.swift */; };
- C04DBE6AE13FC5CFD01D363A351EF76A /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4E04173C3016FD3365BEAF7FE2945DE /* ConstraintView+Extensions.swift */; };
- C09A286120D64335EA18D7689720B773 /* NSBundle+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = D5B48DED1E452069861B8DDE4A02CF99 /* NSBundle+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; };
- C4522EAA36074B975252AAFED57FA952 /* PKCircleProgressView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0328F3AA7B25B4CE0C3E8A068E58181A /* PKCircleProgressView.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A8DD3F39B4D1F0C7B11866484A03336E /* IQInvocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75CCB704A2F8C5FD5D51A39623EC97EF /* IQInvocation.swift */; };
+ AA602A49B1DC7FDED565CAD8BB89EAC1 /* AFError.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC4168D55A1803CD9FF8E4EE13C46B71 /* AFError.swift */; };
+ AA99A5B65FF84BABBAADA73755A1128E /* TimePeriodChain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 363041D7DAC28D7907D5E0EC0CEE54B6 /* TimePeriodChain.swift */; };
+ AAC2529A1B4F4832A052B348C5093018 /* IQUIScrollView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30619E70159FE994D5F9B876739CF48E /* IQUIScrollView+Additions.swift */; };
+ AB651DB3A97A623234B6544AD030406A /* IQNSArray+Sort.swift in Sources */ = {isa = PBXBuildFile; fileRef = C20FA9B8AFEC263D98FDA510EF5428F4 /* IQNSArray+Sort.swift */; };
+ ACDFC76B3486D1E62FD11EFAA88678ED /* SVProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 468FDABC3307F80DBEFA314352D1EABA /* SVProgressHUD.m */; };
+ AD6FD7F28D8F2517C7A2646D8836C386 /* PKMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 6673D2623B38B531794BA957717FE418 /* PKMacros.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ ADAE563BC8C5D1339B8C742D973D72EA /* NSLayoutConstraint+PKDownloadButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 74594CC121111A6BE5D36A1345621641 /* NSLayoutConstraint+PKDownloadButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ AE80F0488D3A0780F143DF2AA0698212 /* UIColor+PKDownloadButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 545EBFECE53F67DCEBC38048C429627C /* UIColor+PKDownloadButton.m */; };
+ B0CB5FB63262E1A67317045B8960F363 /* IQBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C84551F146725C38A8BF32264CB9D233 /* IQBarButtonItem.swift */; };
+ B133BB9C9B03481C7F1D221F35A617F2 /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D9415D9D582CA7A0D82036D18FAA265 /* Constraint.swift */; };
+ B14FAF976D4BFA1065F209FC49DB722E /* Tiercel-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C0BE2DDD0E10875AE143D7839F201491 /* Tiercel-dummy.m */; };
+ B155E9B44BDC68C87FCC13B10F1D5532 /* ImageFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = A05D76B3DC19D0B92299EEAC15498891 /* ImageFormat.swift */; };
+ B1E4796F3830DE510675DEE45E7FB648 /* JXSegmentedTitleImageDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8AEFC03D74F434693AD37863156695D /* JXSegmentedTitleImageDataSource.swift */; };
+ B2E03E67465612F21A685BC97EE7F947 /* KFImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52B39B8C94D1DBDCA76CF5D74C8C6EF5 /* KFImage.swift */; };
+ B3048DDF53B358B345D8FC23A4D7D1AB /* JXSegmentedIndicatorRainbowLineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5C5FBF667B1635D66E7702443A795A4 /* JXSegmentedIndicatorRainbowLineView.swift */; };
+ B3DE1E5AC8DA2DFB20BBF40F392BCDB4 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 21CB16C0EE3EC122700610CC88559E66 /* PrivacyInfo.xcprivacy */; };
+ B3F75D115D5150C258F5E68404751010 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 003E0189738A9240CB460BA31D90274C /* ConstraintConstantTarget.swift */; };
+ B46A36CA19ED6C09341D8E4031F66D5C /* IQUIViewController+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47CB3125EBE82E815B80A545A72A5737 /* IQUIViewController+Additions.swift */; };
+ B4F5A298E60CC038619FC7685C3D50C3 /* Date+Compare.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53BA0397D66EE761B2AD30DA65D57FC1 /* Date+Compare.swift */; };
+ B4F9C9EC1B3F1689AE56BB719AE5439C /* ConstraintDirectionalInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = A479C4969D1F508A7852E903C140798E /* ConstraintDirectionalInsetTarget.swift */; };
+ B5C66B48EB624FEC4D2F64A50F143716 /* DataStreamRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10833C90D303AA34D096538644A80BF9 /* DataStreamRequest.swift */; };
+ B6E953695C48D2FDCE8D86321DE7D474 /* ImageCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97C0B0DDE6518C31B73D58FD7DB4BC00 /* ImageCache.swift */; };
+ B784C1E8FB583A4AA328D89038D2DC5B /* TimePeriod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B940D34CA176A20AE3392A5DF877602 /* TimePeriod.swift */; };
+ B85354283CB89C658911748A7C5AF891 /* JXSegmentedAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8672153590C5F65593C96F8B75DE91F9 /* JXSegmentedAnimator.swift */; };
+ B962ED35C37063794B7D8468FB007AD5 /* MJRefresh-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F808C875835D01EA4B267F0276991C8B /* MJRefresh-dummy.m */; };
+ B97D95F7C0C87105C015BCCAE634B8DC /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE341138A72B8913BD879A77F75CBD06 /* Filter.swift */; };
+ B99F90601D5EED64587743374BBC44F6 /* MJRefreshStateTrailer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4069EDB34E4007F32A728D2FED8B7504 /* MJRefreshStateTrailer.m */; };
+ B9A56C1C079CE609AD4404964A95A170 /* MJRefreshTrailer.m in Sources */ = {isa = PBXBuildFile; fileRef = 21518245391611F2B49EF91E63B4083E /* MJRefreshTrailer.m */; };
+ B9DCCFD9F7800B172476EE7F2D90354B /* JXSegmentedTitleAttributeDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46AE8E58DA72546DEDC39DEA7F914C3A /* JXSegmentedTitleAttributeDataSource.swift */; };
+ BAF334D6167CAED8479849147C7F6858 /* TVMonogramView+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA93223DB4EFA6447ADE2A496727EF42 /* TVMonogramView+Kingfisher.swift */; };
+ BB84B6AC5338AF7AD3B82B1C012386F8 /* JXSegmentedDotCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A804BAF6EBDD252765A7DD178EA318 /* JXSegmentedDotCell.swift */; };
+ BBC9585C538DD5B68FF7E7E32F714023 /* JXSegmentedCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23225B4E8514DBFF46A9F508E8CB19A4 /* JXSegmentedCollectionView.swift */; };
+ BC0A0C473B63B817926F4D58611281BB /* URLEncodedFormEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CF9AE62D9C4C2E8CA013313CEDAA381 /* URLEncodedFormEncoder.swift */; };
+ BD092797639DC408DC38DC00F63CAFE5 /* PKPendingView.m in Sources */ = {isa = PBXBuildFile; fileRef = DAD9DD293A168FD3266BB05A5E822BF1 /* PKPendingView.m */; };
+ BDAD667B60A9D9981738646851C825A0 /* IQKeyboardManager+Toolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9669FA7175A0ECDE0583DD8E9C33F14 /* IQKeyboardManager+Toolbar.swift */; };
+ BDEF755484EB2BA591FBF48752FBAEEC /* NSTextAttachment+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93A1AF74FF3777E85CA96AB1136C31D3 /* NSTextAttachment+Kingfisher.swift */; };
+ BE355F69F84788D334FDAC7D1CD9B8C4 /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB74D4B0A0E85EFD5BED4E414FF4EFBF /* ConstraintDirectionalInsets.swift */; };
+ BE60EC19FCBB8F301081E9C31BB85F3E /* IQUITextFieldView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0767EB67AF8AB44D30657126FC473E60 /* IQUITextFieldView+Additions.swift */; };
+ BF567AEFDD52DC43AC75122734D571E2 /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 480B5DAE25DDAB0483A10B4A65214BB2 /* ConstraintMakerFinalizable.swift */; };
+ BF580AC7D363639FB27CF60E136902C3 /* Pods-relax.offline.mp3.music-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 11F50E60BCEC8BA9DF3836EAFBABE24A /* Pods-relax.offline.mp3.music-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ C04DBE6AE13FC5CFD01D363A351EF76A /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C0DB9DC40B79D952AF8493966908936 /* ConstraintView+Extensions.swift */; };
+ C09A286120D64335EA18D7689720B773 /* NSBundle+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = CCD4525C09817A4E7F1DBF72D225A3C4 /* NSBundle+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ C4522EAA36074B975252AAFED57FA952 /* PKCircleProgressView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2846700660840F9BEB3E18B26DD04EB0 /* PKCircleProgressView.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ C50A637F18FADC506FC35B99C726E216 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C07BEF0CE5DECC5BDCAC8625BF2FFA4B /* QuartzCore.framework */; };
C5C4137EA46E97E717E83EF0ACEBC695 /* JXSegmentedView-JXSegmentedView in Resources */ = {isa = PBXBuildFile; fileRef = 92B0EC788EDA1B0CFA48DFFCB3DDAECD /* JXSegmentedView-JXSegmentedView */; };
- C6675F7517783A748EEF6AF441B187EB /* DiskStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D828CDDF1A55F5AB5A1C46C8E9B5212B /* DiskStorage.swift */; };
- C7D7569C45A2C8851B9BF700897AFDA0 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 8099F9525C25E641D6DE6C728EE3F880 /* PrivacyInfo.xcprivacy */; };
+ C6675F7517783A748EEF6AF441B187EB /* DiskStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C51A4E89875641A52F30561B602453E5 /* DiskStorage.swift */; };
C7E343559158D03F717C616F79FAA006 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B4B8063291033C95A8B2A24FA2AD7A79 /* Foundation.framework */; };
- C7E374D1D8E50EAFE9ED2AF576280DA6 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 925D837B2199663A20844A9D7989BCF7 /* PrivacyInfo.xcprivacy */; };
- C97C4259FD08F4E7519F858AA06B1A3B /* JXSegmentedRTLLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = DABAAD9946FE635998EDD957CBD9C562 /* JXSegmentedRTLLayout.swift */; };
- C9D65759B4F36BDD6F29F0D4EA18AEFF /* SVProgressHUD.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 1A0D92ED5164D726538A59D7F3BE7FE1 /* SVProgressHUD.bundle */; };
- C9E547298C46CBE02D64B938B330FC9C /* PKStopDownloadButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE0C62C7FB9997C20B8E1824B5812F /* PKStopDownloadButton.m */; };
- CA2820BE946964DCBC8E68604B34FD10 /* SizeExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9D3123CA4DB0F7B9B4E0A0F76ADE2B7 /* SizeExtensions.swift */; };
+ C97C4259FD08F4E7519F858AA06B1A3B /* JXSegmentedRTLLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = D20F0C5A0D9F06EAD0F1386F0F85B218 /* JXSegmentedRTLLayout.swift */; };
+ C9D65759B4F36BDD6F29F0D4EA18AEFF /* SVProgressHUD.bundle in Resources */ = {isa = PBXBuildFile; fileRef = A713E330CC0DEBC3A761CED11A4795D4 /* SVProgressHUD.bundle */; };
+ C9E547298C46CBE02D64B938B330FC9C /* PKStopDownloadButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 1615CF451757A9DDFB934B03559641D4 /* PKStopDownloadButton.m */; };
+ CA2820BE946964DCBC8E68604B34FD10 /* SizeExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8746755854783E52DEFB00615699F5D /* SizeExtensions.swift */; };
CCD6784611A32AE82D759F673AD23B47 /* JXPagingView-JXPagingView in Resources */ = {isa = PBXBuildFile; fileRef = 7EB20B4E68CCB69F85E7D08B7F8463D6 /* JXPagingView-JXPagingView */; };
- CDCA01B605A086576DBB75F8C3A24337 /* RetryPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 486B16286080A1C04A4D1C6D3E6025B3 /* RetryPolicy.swift */; };
- CDD01A2CBF13747972C51B1AE7A10B31 /* DispatchQueue+Safe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57DDDE5819A3D9FFB54140F6BAE81830 /* DispatchQueue+Safe.swift */; };
- CE453C62D0DA474AEE306AF3DF6DDAF1 /* MJRefreshConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = BAB2C96206F96650F4283CA3DF48FF32 /* MJRefreshConfig.m */; };
- CFDC85864B426F19A908AD3E8F795D53 /* Protected.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28EC603025181C76A66BAE90715D908C /* Protected.swift */; };
- D06D49E07A6416A2A6E41B7B7B0D66F2 /* ImagePrefetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66B6177A943E1AACC863187B10034268 /* ImagePrefetcher.swift */; };
+ CDCA01B605A086576DBB75F8C3A24337 /* RetryPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B05B30F83602E9BAE9D6BFAA15D754E /* RetryPolicy.swift */; };
+ CDD01A2CBF13747972C51B1AE7A10B31 /* DispatchQueue+Safe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53F49612AAEE91DAD32EE172085A934A /* DispatchQueue+Safe.swift */; };
+ CE453C62D0DA474AEE306AF3DF6DDAF1 /* MJRefreshConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D5C687385BE696DCC857DAFE966CAAD /* MJRefreshConfig.m */; };
+ CFDC85864B426F19A908AD3E8F795D53 /* Protected.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07BEA997FD9DBCEECF9DDD4849E2427B /* Protected.swift */; };
+ D06D49E07A6416A2A6E41B7B7B0D66F2 /* ImagePrefetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF9D748AB9232ECD519C2A7219DEDA3 /* ImagePrefetcher.swift */; };
D091D9EA20CEB92609BF1E622E8CA348 /* SnapKit-SnapKit_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */; };
- D0DF994786BCEC54939BC8216B42FBC4 /* IQTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 771E3D4F19CA986D8B1AA6410516D930 /* IQTextView.swift */; };
- D191F3F5F0841B63F1F54A430608830E /* MJRefreshFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = D18503D5513378AAA749EB4885A66EAA /* MJRefreshFooter.m */; };
- D219C90C04F199356B9E9356693A3D59 /* Date.swift in Sources */ = {isa = PBXBuildFile; fileRef = A56B327BFF93535BA9BFA03A6E2AB1C9 /* Date.swift */; };
- D21E59C63A36A71A0B639350BA49E1A5 /* JXSegmentedView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A1229D3D5E49A73412E7928353BDF391 /* JXSegmentedView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- D313FF15F05623E5026892D032C08A30 /* JXSegmentedIndicatorLineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7BD2268271963463BE2EE4764623A5D /* JXSegmentedIndicatorLineView.swift */; };
- D32F246A21567182179C39B12D534191 /* MJRefreshBackGifFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D4BF92463A6226AB1E7AC8D7C90D3AF /* MJRefreshBackGifFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
- D468E9A0E49D654CDA69712404298D1C /* CALayer+PKDownloadButtonAnimations.h in Headers */ = {isa = PBXBuildFile; fileRef = 4000ED24F540FFC9C63FD4DBC6AA4AEF /* CALayer+PKDownloadButtonAnimations.h */; settings = {ATTRIBUTES = (Public, ); }; };
- D46A095C95DE691323E1D470F9DA1A39 /* KingfisherOptionsInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5831937C2675DEC9D3967CA8C1C4DE4A /* KingfisherOptionsInfo.swift */; };
- D496B7637BE491EE925D965EC64A46E8 /* MJRefreshBackStateFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = BD1251C43198DD226402B31E21D75161 /* MJRefreshBackStateFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
- D4A9338A969C1416E3C79CECCB97D514 /* SVIndefiniteAnimatedView.h in Headers */ = {isa = PBXBuildFile; fileRef = EABE5923720744A0D5FE825748A330F5 /* SVIndefiniteAnimatedView.h */; settings = {ATTRIBUTES = (Public, ); }; };
- D4C21761CC592857F35B99ACDD62ADAB /* MJRefreshAutoNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = EB007609961A6209560053C76559CE7C /* MJRefreshAutoNormalFooter.m */; };
- D4E2EAD773A30B252B6AD6B99A7490F4 /* IQKeyboardManagerSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CAC18A227755897168F8ACF4C5BDC5A /* IQKeyboardManagerSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- D5CDB942C402656138596C179E5A64EB /* ImageModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED54119B6A54FF4ADC1A500313A39E5B /* ImageModifier.swift */; };
- D6A1AB77D9F4C84779521FAF5E469343 /* MJRefreshAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 63A2D978923680CBC3B31F209036FEE1 /* MJRefreshAutoFooter.m */; };
- D6C6BF7DF334ECB734DF0F1AC176184B /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DF0CE5C30A5DCCC8B6DB7B3EF262A12 /* SessionDelegate.swift */; };
- D6D4AB4590700B3706919889BF614D26 /* SVRadialGradientLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 41EA5DD20C3E30CEE9AE29D7D08FA979 /* SVRadialGradientLayer.m */; };
- D786D7CA6B8CE037FE8376A1DD390506 /* JXSegmentedBaseCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5847A62D213D4F4C1672653653C21997 /* JXSegmentedBaseCell.swift */; };
- D92AEF78B87F929D88D5C876ABBAD79A /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04299820AD649702024B0237353A46DD /* ConstraintLayoutSupportDSL.swift */; };
- DAA39F07C362D3F2DB232609D93CDF6B /* ImageDrawing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DA69B15763E7B151A7EEA0B2B4CFBEC /* ImageDrawing.swift */; };
- DE896085DFDD686BDBDEFB776F0D683A /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40A8CAAD858518E279F90477318343BC /* DispatchQueue+Alamofire.swift */; };
- DE8F5B68839128A005EE3549A1149B09 /* RequestInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3519A1DE1070D14BA21F4BEBE3C5D2ED /* RequestInterceptor.swift */; };
- E06C5FBFE7D88C3630BA1FD51F7AF1E7 /* SVProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C7DF955B9345F7577E38FDD9FF5C91F /* SVProgressHUD-dummy.m */; };
- E1C7B6DB080AC2293002CC3C12B136AD /* UIButton+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39BC3B9D2613342C5CAF994270E1E089 /* UIButton+Kingfisher.swift */; };
- E2112B22B6B162AE91C23934B3F5C481 /* Source.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63A098082295E231AEDD8791D3AA4A49 /* Source.swift */; };
- E2BB8FD3C0A59A4D81911A2A70CC74C7 /* CodingUserInfoKey+Cache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F8826CA94A370457A01E12C56972CB3 /* CodingUserInfoKey+Cache.swift */; };
- E55E592D62CAE3D0B2960146E3D15CC6 /* UIView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EEB4F8D0734EDD1E7483E37F784DFB4 /* UIView+MJExtension.m */; };
- E598C1E3C7A57F92401D607E5675ADD3 /* JXSegmentedIndicatorDotLineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FB4A4A3FCE2E90247D5D8CE8F078E0A /* JXSegmentedIndicatorDotLineView.swift */; };
- E5BF005C09FAD7A3AC5E4FFFCE16F758 /* PKPendingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CB56AAB4562D355FF301EDA2AB8094A /* PKPendingView.h */; settings = {ATTRIBUTES = (Public, ); }; };
- E6ED06AC318A34F7744B32CEC759CDA9 /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A5E481E3DDCA3A4F1BB60E195B03E9A /* Response.swift */; };
- E702D99CA55B52C306544C4DDF9083DA /* MJRefreshBackGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B4BF2692B75E2E78EB3901D29CF2F20 /* MJRefreshBackGifFooter.m */; };
- E718E500074E8D6B011D53571B27BC0D /* Kingfisher-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6ACED6F5365BD329D3BE6C449312D271 /* Kingfisher-dummy.m */; };
+ D0DF994786BCEC54939BC8216B42FBC4 /* IQTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06A55350BF66D9CE17E086D6174A2A51 /* IQTextView.swift */; };
+ D191F3F5F0841B63F1F54A430608830E /* MJRefreshFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = D42235E7352D41F807EE27C6444FF06B /* MJRefreshFooter.m */; };
+ D219C90C04F199356B9E9356693A3D59 /* Date.swift in Sources */ = {isa = PBXBuildFile; fileRef = F98A5DF514D9F74D447722831FBA5807 /* Date.swift */; };
+ D21E59C63A36A71A0B639350BA49E1A5 /* JXSegmentedView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CEEC154FF2778A9A73035DE01D39991A /* JXSegmentedView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ D313FF15F05623E5026892D032C08A30 /* JXSegmentedIndicatorLineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBB3B662BEA23309AB382EFC97F9BDDA /* JXSegmentedIndicatorLineView.swift */; };
+ D32F246A21567182179C39B12D534191 /* MJRefreshBackGifFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 13A6A7404AEFB590D7FBE61826442632 /* MJRefreshBackGifFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ D468E9A0E49D654CDA69712404298D1C /* CALayer+PKDownloadButtonAnimations.h in Headers */ = {isa = PBXBuildFile; fileRef = 1745505B9FA5A35E72BC0FBEC9669138 /* CALayer+PKDownloadButtonAnimations.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ D46A095C95DE691323E1D470F9DA1A39 /* KingfisherOptionsInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26A8543F8061C4A8532F17AB9763A423 /* KingfisherOptionsInfo.swift */; };
+ D496B7637BE491EE925D965EC64A46E8 /* MJRefreshBackStateFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = FC486EF7D98345630D4FEB14D1DF50D8 /* MJRefreshBackStateFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ D4A9338A969C1416E3C79CECCB97D514 /* SVIndefiniteAnimatedView.h in Headers */ = {isa = PBXBuildFile; fileRef = A5C3A22AED22F776F49519A0F9086543 /* SVIndefiniteAnimatedView.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ D4C21761CC592857F35B99ACDD62ADAB /* MJRefreshAutoNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C91685D18502488D4C0C9C949E4166C /* MJRefreshAutoNormalFooter.m */; };
+ D4E2EAD773A30B252B6AD6B99A7490F4 /* IQKeyboardManagerSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E8582A8D4529359E27C0462E791183E5 /* IQKeyboardManagerSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ D5CDB942C402656138596C179E5A64EB /* ImageModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 547C395DDFFDD27A8A8FEE800C4BA045 /* ImageModifier.swift */; };
+ D6A1AB77D9F4C84779521FAF5E469343 /* MJRefreshAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D44F73F60EAA2C6700435B40B54AA74 /* MJRefreshAutoFooter.m */; };
+ D6C6BF7DF334ECB734DF0F1AC176184B /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7772DA4BDA381D5C4F75BCDD92362F9 /* SessionDelegate.swift */; };
+ D6D4AB4590700B3706919889BF614D26 /* SVRadialGradientLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F56CF64E0AA628156FD417070CA92E2 /* SVRadialGradientLayer.m */; };
+ D786D7CA6B8CE037FE8376A1DD390506 /* JXSegmentedBaseCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF603AAB8E1A44C4F5701C81A01D1DBE /* JXSegmentedBaseCell.swift */; };
+ D92AEF78B87F929D88D5C876ABBAD79A /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BD6E357D41791AA4FB7890AED14C527 /* ConstraintLayoutSupportDSL.swift */; };
+ DAA39F07C362D3F2DB232609D93CDF6B /* ImageDrawing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6636254FFB6DE11FD7A8AFA55F06D1C4 /* ImageDrawing.swift */; };
+ DE896085DFDD686BDBDEFB776F0D683A /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3B4936C04FD05F923650CD1AFD33840 /* DispatchQueue+Alamofire.swift */; };
+ DE8F5B68839128A005EE3549A1149B09 /* RequestInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DE267000E0CF855728DAD2FA6B0D9D8 /* RequestInterceptor.swift */; };
+ E06C5FBFE7D88C3630BA1FD51F7AF1E7 /* SVProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F6BBD8BAC38D8F22BFD8D815B81443B /* SVProgressHUD-dummy.m */; };
+ E1C7B6DB080AC2293002CC3C12B136AD /* UIButton+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 208D6F9BA69B30FB0264D0CE23153F7E /* UIButton+Kingfisher.swift */; };
+ E2112B22B6B162AE91C23934B3F5C481 /* Source.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EBDD43A7B38065D789EAEA7E3A99DC6 /* Source.swift */; };
+ E2BB8FD3C0A59A4D81911A2A70CC74C7 /* CodingUserInfoKey+Cache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32B909B928CC41053D7CF406408D2DA8 /* CodingUserInfoKey+Cache.swift */; };
+ E55E592D62CAE3D0B2960146E3D15CC6 /* UIView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A973CF3ED699EA4E9515A9F191A256F /* UIView+MJExtension.m */; };
+ E598C1E3C7A57F92401D607E5675ADD3 /* JXSegmentedIndicatorDotLineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDA6DE9F9E4B35314E50FE0F47F29F84 /* JXSegmentedIndicatorDotLineView.swift */; };
+ E5BF005C09FAD7A3AC5E4FFFCE16F758 /* PKPendingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A6ECD49E457E72D5012323706377C03 /* PKPendingView.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ E6ED06AC318A34F7744B32CEC759CDA9 /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 215886B2A76F059FE5D4A687D74535C3 /* Response.swift */; };
+ E702D99CA55B52C306544C4DDF9083DA /* MJRefreshBackGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = CA2334A7F161A92437E85AAEFF3C3F57 /* MJRefreshBackGifFooter.m */; };
+ E718E500074E8D6B011D53571B27BC0D /* Kingfisher-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F0DE2A1E22A9F0F6E1720611015699A8 /* Kingfisher-dummy.m */; };
E818AF38E910251104A9A8AFC9227C3C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B4B8063291033C95A8B2A24FA2AD7A79 /* Foundation.framework */; };
- E8A077D1FE8B40F1D67F5B3FB0613628 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87C5FCFE657C20543573C3718CB98314 /* SessionDelegate.swift */; };
- E8AD52B68BDE7B679B358601CCAB3F2D /* UICollectionViewLayout+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = D92DA17CEE50A9F5DB6B28966EB463F7 /* UICollectionViewLayout+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; };
- E94B31DCAF75D93405D3BAE188604EB2 /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8E7EA8D9C5A64029EF6EFB7F209B083 /* ConstraintConfig.swift */; };
- EB126B698D642942058D9B676EC1E32B /* MJRefreshConst.m in Sources */ = {isa = PBXBuildFile; fileRef = 39C8DA51B12B0841241D88B8559D10DF /* MJRefreshConst.m */; };
- ECAA15FA3C4560E3287F2226EC8C1ECF /* IQKeyboardManagerConstantsInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6AF07FDF68286DCE8D2D3129ABE86E8 /* IQKeyboardManagerConstantsInternal.swift */; };
- ED3AF010A8D34BC50D7C0D7BE3D2E890 /* JXPagingView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 09D77A764D82971CF4ED47842C9A4B6C /* JXPagingView-dummy.m */; };
- ED6D55B3F974F15896B01371C7FE20F3 /* Common.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDB1A9EA05B4B28BA973FD120AB7B58C /* Common.swift */; };
- EF9B92EF4A0412D775FA55E4D1CB7A45 /* MJRefreshConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = C5442AB6A892B9A10912AD30DA233E1F /* MJRefreshConfig.h */; settings = {ATTRIBUTES = (Public, ); }; };
- EFC90283F9AB43BB6FF377812BD3673F /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6E6534DDCD659B76C219B8202688BCF /* ConstraintPriority.swift */; };
- F00E48AB2D923607D9B91DC61DBDEB8F /* MJRefreshAutoGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C5371C6033F9B22897412748D004E09 /* MJRefreshAutoGifFooter.m */; };
- F04A9832815B9EF600EF7387C6882D3D /* DateInRegion+Math.swift in Sources */ = {isa = PBXBuildFile; fileRef = 537E15307D7D72026BB4C0FC30CFED93 /* DateInRegion+Math.swift */; };
- F060261A5C0842947977A3CAAD96566B /* Int64+TaskInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = F25DA22A16432FA72B62254F001DC276 /* Int64+TaskInfo.swift */; };
- F0AB498412A415474D6105F398614F74 /* JXSegmentedComponetGradientView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F955DAC7F3D103A817231F95E23F9717 /* JXSegmentedComponetGradientView.swift */; };
- F0DF27608B184B348B3127233761F4BA /* ExtensionHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B3DFBD060AD8EEB4A0CFD9D41F08DA5 /* ExtensionHelpers.swift */; };
- F2E9C9068E8434E9FC9B60755A354FA8 /* MJRefreshBackNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8727F5EF7ECCBEBD46E6C8E7B6A0DF97 /* MJRefreshBackNormalFooter.m */; };
- F366D04DEA0EBBCA9CA4F1F4E29695E8 /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6E704CA7A1DD04296CBF9ED26B91EA0 /* ConstraintDSL.swift */; };
- F3B5353C1CDE6C2DD2E80F32D3637750 /* SessionDataTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23DE5A547FC5127A25009E99AD6C3EB6 /* SessionDataTask.swift */; };
- F3EC0ED4BED8DD2C3222C7DCAC2452D2 /* JXSegmentedTitleAttributeCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEA2B648448F88ABEF1C029A929CBD5F /* JXSegmentedTitleAttributeCell.swift */; };
- F403D62A7C82B41016A4AADD34D08263 /* FileChecksumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAA7604C1393503F47A4EEB1F6A2999B /* FileChecksumHelper.swift */; };
- F404BFA0E5F2CFF051688C90B319AC85 /* AnimatedImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9980FB822658A810BC4A3B92CAC564F9 /* AnimatedImageView.swift */; };
- F47587932A67D8E3820DAFD9A0E1995E /* IQPlaceholderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5106D1769D56C09A2757D25D783D320F /* IQPlaceholderable.swift */; };
- F4DD0AD58DDD5641BDEAEA6CF44FF0ED /* Protected.swift in Sources */ = {isa = PBXBuildFile; fileRef = 383778566947B3850ADAA36FE68A6580 /* Protected.swift */; };
- F69925E3D8812AAFC099940721D12AEC /* Locales.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BC750A9DB67924552C996D09B392511 /* Locales.swift */; };
- F6CF73614B01B233058CEDDB54309E60 /* SessionConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 163E780819CFF7B3FE94AF595E36150E /* SessionConfiguration.swift */; };
- F7E576E007A81E0EFD2E0849CB17878D /* WebSocketRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57D83805F5B2CF74579D77E015EE205A /* WebSocketRequest.swift */; };
- F879F5C9ADEB2CF1F832CB17B276B62A /* CALayer+PKDownloadButtonAnimations.m in Sources */ = {isa = PBXBuildFile; fileRef = 242E31512B529C3DABB2ECBF9687B9A7 /* CALayer+PKDownloadButtonAnimations.m */; };
- F94703ED86C58DDBE5A2503D148CD040 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76F60DC87BCAFC3DAB096326630BAB7A /* ConstraintRelation.swift */; };
+ E8A077D1FE8B40F1D67F5B3FB0613628 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE9AF037CDAFAB9620BE013E2C3635C1 /* SessionDelegate.swift */; };
+ E8AD52B68BDE7B679B358601CCAB3F2D /* UICollectionViewLayout+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E09F6B76B94BAB19AD42233BAB48DC8 /* UICollectionViewLayout+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ E94B31DCAF75D93405D3BAE188604EB2 /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30AE3CC8312E4132A9A995297F2523C6 /* ConstraintConfig.swift */; };
+ EB126B698D642942058D9B676EC1E32B /* MJRefreshConst.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C6CC3A8E70B816FE8E2E96EF7A27E41 /* MJRefreshConst.m */; };
+ ECAA15FA3C4560E3287F2226EC8C1ECF /* IQKeyboardManagerConstantsInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = E779182A5BEF30E1BDDE84D00FEC1678 /* IQKeyboardManagerConstantsInternal.swift */; };
+ ED3AF010A8D34BC50D7C0D7BE3D2E890 /* JXPagingView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C3C485FF66388D1EB16387D1E50F9941 /* JXPagingView-dummy.m */; };
+ ED6D55B3F974F15896B01371C7FE20F3 /* Common.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D817B76097E8F240E24A0DC3A3FDF0D /* Common.swift */; };
+ EF9B92EF4A0412D775FA55E4D1CB7A45 /* MJRefreshConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F17C5948EBC1D81137E55F79E79794C /* MJRefreshConfig.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ EFC90283F9AB43BB6FF377812BD3673F /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66A707A1F00997A05FF4D07781452021 /* ConstraintPriority.swift */; };
+ F00E48AB2D923607D9B91DC61DBDEB8F /* MJRefreshAutoGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 68E5845A0F056ED6F021BCF06CE7E1B2 /* MJRefreshAutoGifFooter.m */; };
+ F04A9832815B9EF600EF7387C6882D3D /* DateInRegion+Math.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8E1A99F23F81AD71CD4CE65BBCEBF0D /* DateInRegion+Math.swift */; };
+ F060261A5C0842947977A3CAAD96566B /* Int64+TaskInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = C78904CEF7B984BB219400B0132C5750 /* Int64+TaskInfo.swift */; };
+ F0AB498412A415474D6105F398614F74 /* JXSegmentedComponetGradientView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E6F64B9633F52177A952982CD9438CD /* JXSegmentedComponetGradientView.swift */; };
+ F0DF27608B184B348B3127233761F4BA /* ExtensionHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20AC444F5427C3749605C0383D160FEB /* ExtensionHelpers.swift */; };
+ F2E9C9068E8434E9FC9B60755A354FA8 /* MJRefreshBackNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = C1CA9AD43CC89D078D46C132C44AB4A4 /* MJRefreshBackNormalFooter.m */; };
+ F366D04DEA0EBBCA9CA4F1F4E29695E8 /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A4AEBFDF713BDED395F4612202D7871 /* ConstraintDSL.swift */; };
+ F3B5353C1CDE6C2DD2E80F32D3637750 /* SessionDataTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A2F1293C202DA8EED09FA536FC3026D /* SessionDataTask.swift */; };
+ F3EC0ED4BED8DD2C3222C7DCAC2452D2 /* JXSegmentedTitleAttributeCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD8A222583C51A0B76B606A5D28C3AC9 /* JXSegmentedTitleAttributeCell.swift */; };
+ F403D62A7C82B41016A4AADD34D08263 /* FileChecksumHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC90EB3E707F329ECED58BF078742EBA /* FileChecksumHelper.swift */; };
+ F404BFA0E5F2CFF051688C90B319AC85 /* AnimatedImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6792A4125127E2185D9E31BE55214F0B /* AnimatedImageView.swift */; };
+ F42A33C2E837A959AB86B8E9B3752ECD /* MarqueeLabel-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5008A7DABE33777CC0A485DD1BD55C41 /* MarqueeLabel-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ F47587932A67D8E3820DAFD9A0E1995E /* IQPlaceholderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58565BBC4BB002FF81582767242BFC67 /* IQPlaceholderable.swift */; };
+ F4DD0AD58DDD5641BDEAEA6CF44FF0ED /* Protected.swift in Sources */ = {isa = PBXBuildFile; fileRef = D395F3F3EB1DDC68123B77CC6C8F0E0B /* Protected.swift */; };
+ F69925E3D8812AAFC099940721D12AEC /* Locales.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A9302AD87823AB239A8DE5448ED7EA8 /* Locales.swift */; };
+ F6CF73614B01B233058CEDDB54309E60 /* SessionConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9D5D3B28B85FDD2F58AC6C511AFF54B /* SessionConfiguration.swift */; };
+ F7E576E007A81E0EFD2E0849CB17878D /* WebSocketRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA67D87E3B84EB4733A22C6E50F276B4 /* WebSocketRequest.swift */; };
+ F879F5C9ADEB2CF1F832CB17B276B62A /* CALayer+PKDownloadButtonAnimations.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B1D8FD42382BC246408336EEE182B52 /* CALayer+PKDownloadButtonAnimations.m */; };
+ F94703ED86C58DDBE5A2503D148CD040 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22EAD7AA2887FF42492CB6AC6700A744 /* ConstraintRelation.swift */; };
FA1E35E6DE6EC8A9E5E2B12A414E1B70 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A2A128F3FAE37601751167FDC47182A /* CFNetwork.framework */; };
- FA50CBB47B030D9475376E2D6ED3FF04 /* ResumeDataHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92C1BE318995C75AF0E7E0D850A82AC6 /* ResumeDataHelper.swift */; };
- FB2EEA5AF5278F76CD7366B23CC66815 /* ImageView+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C97D8752B07D5E7CF2EC8C6816232B1 /* ImageView+Kingfisher.swift */; };
- FC524E181A75784881A12562BDB00CC6 /* MJRefreshAutoGifFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E10A3685A161AEE58149D0E9C6C80AE /* MJRefreshAutoGifFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
- FC745954D9A2704BCACCB3A03336976E /* UIScrollView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 77B9D75E24F7E6064B6A070251CD91F2 /* UIScrollView+MJExtension.m */; };
- FCE62086E1AB54A4F61EBCDBA15C1510 /* EventMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF13C0A52DFD4C08141E85D5BB948997 /* EventMonitor.swift */; };
- FCEB3C1A7FCD1518AF8985822E2E14AA /* ImageProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36AC1C319C4549047F2F2AA747E1AE0B /* ImageProcessor.swift */; };
- FDEB8D2D369F9FEBF8FC3D822E5C96C6 /* JXPagingMainTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E32C30A6532383449FAE228D54F6477 /* JXPagingMainTableView.swift */; };
+ FA50CBB47B030D9475376E2D6ED3FF04 /* ResumeDataHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FC60181C38DFC5BD6460CCD3C0E2E79 /* ResumeDataHelper.swift */; };
+ FAAEE11A8980A75C0C498B73D8EEBFB8 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = F9D5768A8F3F026A26F10BBAE52783B3 /* PrivacyInfo.xcprivacy */; };
+ FB2EEA5AF5278F76CD7366B23CC66815 /* ImageView+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA4F799B3FC61A81E6D33FEAB0B1267E /* ImageView+Kingfisher.swift */; };
+ FC524E181A75784881A12562BDB00CC6 /* MJRefreshAutoGifFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = A75CD4D4DC0FF7F566716FFDB363ADA2 /* MJRefreshAutoGifFooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ FC745954D9A2704BCACCB3A03336976E /* UIScrollView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 42DAEB0034C273A0993E66931DF30BA3 /* UIScrollView+MJExtension.m */; };
+ FCE62086E1AB54A4F61EBCDBA15C1510 /* EventMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16A00E05D0BD454FBE3C6BE4817B1CC2 /* EventMonitor.swift */; };
+ FCEB3C1A7FCD1518AF8985822E2E14AA /* ImageProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55A0A23CDD2D41CCEFF65E26C4A08F83 /* ImageProcessor.swift */; };
+ FDEB8D2D369F9FEBF8FC3D822E5C96C6 /* JXPagingMainTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B76ADE3C6D04E0B956F25B04B67B5DC /* JXPagingMainTableView.swift */; };
+ FE2AC8DB019A3B729B6EA5CBBACFA61B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B4B8063291033C95A8B2A24FA2AD7A79 /* Foundation.framework */; };
FE8F4A5C40BA40C835CA301C92AED5E0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B4B8063291033C95A8B2A24FA2AD7A79 /* Foundation.framework */; };
- FEC85148AFF458241FDD707C5BA8CD40 /* TimePeriod+Support.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EEAAA4D8CC5122E9E7A878BDFA385D /* TimePeriod+Support.swift */; };
- FEDB5503231B230FDA7C7A25EAB38318 /* DateComponents+Extras.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B4FEF35151874DEFF408DF21564915F /* DateComponents+Extras.swift */; };
+ FEC85148AFF458241FDD707C5BA8CD40 /* TimePeriod+Support.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4FB2F0378651B15C91908EFC5DC27CB /* TimePeriod+Support.swift */; };
+ FEDB5503231B230FDA7C7A25EAB38318 /* DateComponents+Extras.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49EA64A868AD5A848F2723A28A022C20 /* DateComponents+Extras.swift */; };
FF886124915FEF2A6FBB663CA621B4FC /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C07BEF0CE5DECC5BDCAC8625BF2FFA4B /* QuartzCore.framework */; };
- FFD7E1B8FA0F3960BE24DA2D20647332 /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2A860AD8157623726249D825FCF2497 /* ConstraintRelatableTarget.swift */; };
+ FFD7E1B8FA0F3960BE24DA2D20647332 /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = C56759DC72BE3E295255912D3346F86F /* ConstraintRelatableTarget.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
- 0BA865DDFF21AB28E706C1CAF2DD5E20 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = E863A9A96F52A35F47491E7B41ECEF9A;
- remoteInfo = JXSegmentedView;
- };
- 142AC367F48B6467B5E28446DC954898 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = B26054DF1DEA11585A231AF6D1D80D5E;
- remoteInfo = "MJRefresh-MJRefresh.Privacy";
- };
- 26E74EC373DC82A69C9839B208B0996D /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = B490E7485944099E16C9CBD79119D1D4;
- remoteInfo = IQKeyboardManagerSwift;
- };
- 270FE51967CD9FFA5343A46CF8D1D663 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 976126A1CE06DC6E162563800E1BDF14;
- remoteInfo = "Alamofire-Alamofire";
- };
- 37E5C2EDBD3BCD1D0B44FAE1248DB31D /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = C4E1020AF425614337737213AA26DBD5;
- remoteInfo = JXPagingView;
- };
- 46F19EACDBED5E91D77415715B9AC155 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 6868056D761E163D10FDAF8CF1C4D9B8;
- remoteInfo = MJRefresh;
- };
- 65714318071557028A759FC551A56641 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = E8022D22FAA6690B5E1C379C1BCE1491;
- remoteInfo = Kingfisher;
- };
- 6592B950806908EF4277AEA979157097 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 9828BBC09E9FB1238624113D7456E59E;
- remoteInfo = "Kingfisher-Kingfisher";
- };
- 6B8AFF5AFB61293958BD6458D5C2FFD4 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8A8DB685241263AFDF5E6B20FE67B93A;
- remoteInfo = "SnapKit-SnapKit_Privacy";
- };
- 7CEBF3063D24E7707896B79129081954 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4;
- remoteInfo = SnapKit;
- };
- 8EC8A55D8F7D46FC342FC31A9B8C263D /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D;
- remoteInfo = Alamofire;
- };
- 998B0E246B006E5E0BE840EAB7690B7D /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 52F43AC38D9FF80196C69FB03AEEFDDA;
- remoteInfo = "JXSegmentedView-JXSegmentedView";
- };
- A02D6F6D8DD0080715E73AFA0DC63EC9 /* PBXContainerItemProxy */ = {
+ 0965920B2C03B6ECDD27F9FDA68E5B2F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
proxyType = 1;
remoteGlobalIDString = EF6413888FBA82A60EBB6F0A0EA14AD8;
remoteInfo = Tiercel;
};
- A7D51E115FB85338655FCBA66AFD8977 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = B2B2AD5303610D8EBEA025B2660C8EC5;
- remoteInfo = "JXPagingView-JXPagingView";
- };
- BBDFCD507C89C4A997B1AC5AB9DCBAD4 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 052F337D75D74480BB3BE904E7F2B1DF;
- remoteInfo = "DownloadButton-DownloadButton";
- };
- CE85927BC7C9AEA59C1650D06956F0B8 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = BC51A1CD10A25C78C1CF64315930A6A3;
- remoteInfo = DownloadButton;
- };
- D9209C2D517C37F51123C12C5FC39276 /* PBXContainerItemProxy */ = {
+ 0F838A1E0D21BE8314387B19F444BF72 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 1C8D67D8B72D6BA42CCEDB648537A340;
remoteInfo = SVProgressHUD;
};
- E5B4B3A190922E71852B0EA63403D03A /* PBXContainerItemProxy */ = {
+ 2A50980AC7BCE46CAB3FF96CB00A499C /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = BC51A1CD10A25C78C1CF64315930A6A3;
+ remoteInfo = DownloadButton;
+ };
+ 300CCB3FCF4860082B536BE1B1B5EB4B /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 6868056D761E163D10FDAF8CF1C4D9B8;
+ remoteInfo = MJRefresh;
+ };
+ 340587A3C7500EF1FD4EEBA748512D6E /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = E863A9A96F52A35F47491E7B41ECEF9A;
+ remoteInfo = JXSegmentedView;
+ };
+ 49F820E5EA81257683ABAF4F50AAECF6 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = E8022D22FAA6690B5E1C379C1BCE1491;
+ remoteInfo = Kingfisher;
+ };
+ 4D9FA995ECE7665E4722E5DB04208A8C /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 9828BBC09E9FB1238624113D7456E59E;
+ remoteInfo = "Kingfisher-Kingfisher";
+ };
+ 4F3760765A5A980CDAF0CBEED94EED25 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B2B2AD5303610D8EBEA025B2660C8EC5;
+ remoteInfo = "JXPagingView-JXPagingView";
+ };
+ 5795E672243C657EE42B3638D13129EE /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B26054DF1DEA11585A231AF6D1D80D5E;
+ remoteInfo = "MJRefresh-MJRefresh.Privacy";
+ };
+ 5E95CF5C48D02289517615D76E1EEE75 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = CBFB5A372F4DE9D4BC6B9ADA98B80BFE;
+ remoteInfo = "MarqueeLabel-MarqueeLabel";
+ };
+ 62E0C83F2175CECA1D1FE1633CBC6AAA /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = C23DB88E45B0ED14F0C8827BE9C46C95;
+ remoteInfo = MarqueeLabel;
+ };
+ 717D58C54671A62B4B9DE36E792C6C8D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4;
+ remoteInfo = SnapKit;
+ };
+ A1359F993BF5F20C458649872D2DBC3F /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 52F43AC38D9FF80196C69FB03AEEFDDA;
+ remoteInfo = "JXSegmentedView-JXSegmentedView";
+ };
+ A5A501CBC2F25A6B0ED93EF910540274 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D;
+ remoteInfo = Alamofire;
+ };
+ B73062B890FCA36EBDC3A7EA7196A939 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 052F337D75D74480BB3BE904E7F2B1DF;
+ remoteInfo = "DownloadButton-DownloadButton";
+ };
+ E1D1E2392B71F4431C0DF26B1F0B8355 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B490E7485944099E16C9CBD79119D1D4;
+ remoteInfo = IQKeyboardManagerSwift;
+ };
+ EA3CE36C556CAE127D1BEB5F119B0387 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 8A8DB685241263AFDF5E6B20FE67B93A;
+ remoteInfo = "SnapKit-SnapKit_Privacy";
+ };
+ EABE74D428D2DC73C6A037A30FA6E9E3 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = C4E1020AF425614337737213AA26DBD5;
+ remoteInfo = JXPagingView;
+ };
+ F757A1EC10AB8AE304EDF4E391BBD01D /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 6038CE6006EFBE9D905454CF01909C42;
remoteInfo = SwiftDate;
};
+ FFA5052469D64C22F8D1AEBCD2D55C17 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 976126A1CE06DC6E162563800E1BDF14;
+ remoteInfo = "Alamofire-Alamofire";
+ };
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
- 0098DF8EC116CB747F0A250EEFE46277 /* RequestCompression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestCompression.swift; path = Source/Features/RequestCompression.swift; sourceTree = ""; };
- 00B3B84CAF8ED73E095C919FA5C8FC89 /* UIButton+PKDownloadButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+PKDownloadButton.m"; path = "Pod/Classes/UIButton+PKDownloadButton.m"; sourceTree = ""; };
- 011583C69E3EDF78E003045AE1B9C73C /* SwiftDate.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftDate.modulemap; sourceTree = ""; };
- 01158741151664C9DF8D6AEACDA30158 /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = ""; };
- 01CF505FB97345FF724294092F0C5058 /* TimePeriodProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TimePeriodProtocol.swift; path = Sources/SwiftDate/TimePeriod/TimePeriodProtocol.swift; sourceTree = ""; };
- 01D1DD96A7064A2F1F151EB984101B42 /* KFImageRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KFImageRenderer.swift; path = Sources/SwiftUI/KFImageRenderer.swift; sourceTree = ""; };
- 0312AB47DD6E41FB3B71BEC1C6414D7F /* JXSegmentedIndicatorBaseView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JXSegmentedIndicatorBaseView.swift; path = Sources/Indicator/JXSegmentedIndicatorBaseView.swift; sourceTree = ""; };
- 0328F3AA7B25B4CE0C3E8A068E58181A /* PKCircleProgressView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PKCircleProgressView.h; path = Pod/Classes/PKCircleProgressView.h; sourceTree = ""; };
- 0399B88BB7703B5750208873531B6CFD /* URLEncodedFormEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLEncodedFormEncoder.swift; path = Source/Features/URLEncodedFormEncoder.swift; sourceTree = ""; };
+ 003E0189738A9240CB460BA31D90274C /* ConstraintConstantTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConstantTarget.swift; path = Sources/ConstraintConstantTarget.swift; sourceTree = ""; };
+ 00809342163D914F7313B357D343777A /* ImageBinder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageBinder.swift; path = Sources/SwiftUI/ImageBinder.swift; sourceTree = ""; };
+ 0085AF2C56752715FC005A6762AE8307 /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Core/Notifications.swift; sourceTree = ""; };
+ 0131C8FEF300D7E0DCB43F23E7C66B1F /* GIFAnimatedImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GIFAnimatedImage.swift; path = Sources/Image/GIFAnimatedImage.swift; sourceTree = ""; };
+ 0175C3BDDE4AF2390BE74E4410720475 /* NSButton+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSButton+Kingfisher.swift"; path = "Sources/Extensions/NSButton+Kingfisher.swift"; sourceTree = ""; };
+ 01CFEA1169540CE8BA1331ACE15B00A8 /* String+Hash.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+Hash.swift"; path = "Sources/Extensions/String+Hash.swift"; sourceTree = ""; };
+ 039652F74DE37B5B89EC981B2BAB2CC2 /* Kingfisher.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Kingfisher.debug.xcconfig; sourceTree = ""; };
03F0C9EED97F4680E4D4278FA23670C7 /* Pods-relax.offline.mp3.music-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-relax.offline.mp3.music-acknowledgements.plist"; sourceTree = ""; };
- 0406807613B48C37AFBFD8A5566CECF7 /* MJRefreshNormalHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshNormalHeader.m; path = MJRefresh/Custom/Header/MJRefreshNormalHeader.m; sourceTree = ""; };
- 04299820AD649702024B0237353A46DD /* ConstraintLayoutSupportDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupportDSL.swift; path = Sources/ConstraintLayoutSupportDSL.swift; sourceTree = ""; };
- 043335998E7E91696B859F4CCD9606FC /* HTTPMethod.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPMethod.swift; path = Source/Core/HTTPMethod.swift; sourceTree = ""; };
- 046C6E5A5FF35C350B0158DEE3E40F28 /* ConstraintView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintView.swift; path = Sources/ConstraintView.swift; sourceTree = ""; };
- 05D53E6FE979C0A1784D61AE876E30EB /* Formatter+Protocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Formatter+Protocols.swift"; path = "Sources/SwiftDate/Formatters/Formatter+Protocols.swift"; sourceTree = ""; };
- 05F1C2B1DEF9E95836BF3AC986652086 /* JXPagingView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JXPagingView-umbrella.h"; sourceTree = ""; };
- 063E759192F5CD877BCE4EB80712E5A9 /* Executer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Executer.swift; path = Sources/General/Executer.swift; sourceTree = ""; };
- 0753975CECF9BBF7A60B065338B2C8EA /* SnapKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.debug.xcconfig; sourceTree = ""; };
+ 06A55350BF66D9CE17E086D6174A2A51 /* IQTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextView.swift; path = IQKeyboardManagerSwift/IQTextView/IQTextView.swift; sourceTree = ""; };
+ 0767EB67AF8AB44D30657126FC473E60 /* IQUITextFieldView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUITextFieldView+Additions.swift"; path = "IQKeyboardManagerSwift/Categories/IQUITextFieldView+Additions.swift"; sourceTree = ""; };
07928762D9A8551470DAAD7C1E1F53A5 /* JXSegmentedView */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = JXSegmentedView; path = JXSegmentedView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 07BEA997FD9DBCEECF9DDD4849E2427B /* Protected.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Protected.swift; path = Sources/General/Protected.swift; sourceTree = ""; };
+ 07E8C7FB8E7C661BECCBC076BEFF05C9 /* MJRefresh-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJRefresh-prefix.pch"; sourceTree = ""; };
085DBCE7DD98588B2ED103B1C1F36026 /* Alamofire-Alamofire */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "Alamofire-Alamofire"; path = Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
- 08BBB8B38E7B8EFDCD9CF588E8C0F210 /* Double+TaskInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Double+TaskInfo.swift"; path = "Sources/Extensions/Double+TaskInfo.swift"; sourceTree = ""; };
09CDA94CB3BF2E37AFD7A0FC04B56A35 /* Pods-relax.offline.mp3.music-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-relax.offline.mp3.music-acknowledgements.markdown"; sourceTree = ""; };
- 09D77A764D82971CF4ED47842C9A4B6C /* JXPagingView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "JXPagingView-dummy.m"; sourceTree = ""; };
- 0A44021BFDB893E44EAA9D5FDA7A3FF9 /* ConstraintConstantTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConstantTarget.swift; path = Sources/ConstraintConstantTarget.swift; sourceTree = ""; };
- 0A7DE7F4DC02387DEB4909EE6551BEBC /* SwiftDate-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftDate-umbrella.h"; sourceTree = ""; };
- 0AC7D94E21920BD7C7205B597F701736 /* JXSegmentedIndicatorGradientLineView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JXSegmentedIndicatorGradientLineView.swift; path = Sources/Indicator/JXSegmentedIndicatorGradientLineView.swift; sourceTree = ""; };
- 0B5110745B15FEEFB97E52A7E9A6E9C2 /* UIImage+PKDownloadButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+PKDownloadButton.m"; path = "Pod/Classes/UIImage+PKDownloadButton.m"; sourceTree = ""; };
+ 0A585AAA4ABFEE88AF9EA38DA8480A4E /* AssociatedValues.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssociatedValues.swift; path = Sources/SwiftDate/Supports/AssociatedValues.swift; sourceTree = ""; };
+ 0A64F5F92A75933EA79178722B51ABD8 /* CacheSerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CacheSerializer.swift; path = Sources/Cache/CacheSerializer.swift; sourceTree = ""; };
+ 0A679FA4BEEED4176374BC386B15E12B /* Session.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Session.swift; path = Source/Core/Session.swift; sourceTree = ""; };
0B834912E389FFAE58A478F718D86C19 /* Pods-relax.offline.mp3.music.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-relax.offline.mp3.music.release.xcconfig"; sourceTree = ""; };
- 0C6EB3AFA655F18ACE9DB8543E1CEB99 /* TiercelError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TiercelError.swift; path = Sources/General/TiercelError.swift; sourceTree = ""; };
- 0CF57EB0CB57726D4D40CAAE90CD936E /* TimePeriodChain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TimePeriodChain.swift; path = Sources/SwiftDate/TimePeriod/Groups/TimePeriodChain.swift; sourceTree = ""; };
- 0D0CA27E114E88A941900703AA694F2F /* ConstraintInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsetTarget.swift; path = Sources/ConstraintInsetTarget.swift; sourceTree = ""; };
- 0EBC40BA74A88B62E74BAB63898E1F21 /* JXSegmentedNumberCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JXSegmentedNumberCell.swift; path = Sources/Number/JXSegmentedNumberCell.swift; sourceTree = ""; };
- 0ED9A4576DB28DAC731E05D9B295B722 /* IQKeyboardManager+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Internal.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+Internal.swift"; sourceTree = ""; };
- 0F4D08727A4683802BEEB2F3662DEB2B /* MJRefreshAutoStateFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoStateFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m; sourceTree = ""; };
+ 0BBE9EF043CCF5A5419ECFEB06C690C1 /* MJRefreshHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshHeader.m; path = MJRefresh/Base/MJRefreshHeader.m; sourceTree = ""; };
+ 0BD6E357D41791AA4FB7890AED14C527 /* ConstraintLayoutSupportDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupportDSL.swift; path = Sources/ConstraintLayoutSupportDSL.swift; sourceTree = ""; };
+ 0C3119926A431E2B17B538C93E17A852 /* UIScrollView+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+MJRefresh.m"; path = "MJRefresh/UIScrollView+MJRefresh.m"; sourceTree = ""; };
+ 0C57FE4092186DA3BF03087A3DDC928C /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = MJRefresh/PrivacyInfo.xcprivacy; sourceTree = ""; };
+ 0D4E696F75CA79EF5DB1493DBFBD4E73 /* UIButton+PKDownloadButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+PKDownloadButton.h"; path = "Pod/Classes/UIButton+PKDownloadButton.h"; sourceTree = ""; };
+ 0DA082E3A75E13CD0C8795CB3957F572 /* JXSegmentedTitleOrImageCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JXSegmentedTitleOrImageCell.swift; path = Sources/TitleOrImage/JXSegmentedTitleOrImageCell.swift; sourceTree = ""; };
+ 0DFF1834A88DF9FB33D90BDD9AA81691 /* JXSegmentedTitleItemModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JXSegmentedTitleItemModel.swift; path = Sources/Title/JXSegmentedTitleItemModel.swift; sourceTree = ""; };
+ 0E6F64B9633F52177A952982CD9438CD /* JXSegmentedComponetGradientView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JXSegmentedComponetGradientView.swift; path = Sources/Indicator/JXSegmentedComponetGradientView.swift; sourceTree = ""; };
+ 0EBDD43A7B38065D789EAEA7E3A99DC6 /* Source.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Source.swift; path = Sources/General/ImageSource/Source.swift; sourceTree = ""; };
+ 0ED55223068A73568B36FF08EFCF9EAF /* TimeInterval+Formatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "TimeInterval+Formatter.swift"; path = "Sources/SwiftDate/Foundation+Extras/TimeInterval+Formatter.swift"; sourceTree = ""; };
+ 0F8AF943C90C2F212A2E7474570424EE /* RequestCompression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestCompression.swift; path = Source/Features/RequestCompression.swift; sourceTree = ""; };
+ 10833C90D303AA34D096538644A80BF9 /* DataStreamRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataStreamRequest.swift; path = Source/Core/DataStreamRequest.swift; sourceTree = ""; };
+ 109F4B31BBCDDD9360293F5C663FC4FB /* UIImage+PKDownloadButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+PKDownloadButton.m"; path = "Pod/Classes/UIImage+PKDownloadButton.m"; sourceTree = ""; };
+ 117201D42D64EEBD54A9824C19353C82 /* MJRefreshConst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshConst.h; path = MJRefresh/MJRefreshConst.h; sourceTree = ""; };
1199E580C5F19AFD1010FE20258DADBD /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
- 11C932A77CC9EF5471A84D4627873A6F /* Tiercel.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Tiercel.modulemap; sourceTree = ""; };
- 11F394350D054B8CFF566BD784D1453A /* URLConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLConvertible.swift; path = Sources/General/URLConvertible.swift; sourceTree = ""; };
11F50E60BCEC8BA9DF3836EAFBABE24A /* Pods-relax.offline.mp3.music-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-relax.offline.mp3.music-umbrella.h"; sourceTree = ""; };
- 1211C094C5D9D37494ED83147A1E37FD /* ISOParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ISOParser.swift; path = Sources/SwiftDate/Formatters/ISOParser.swift; sourceTree = ""; };
- 123ABCB9EF5852B06D5E32C8D4EB9E6C /* Runtime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Runtime.swift; path = Sources/Utility/Runtime.swift; sourceTree = ""; };
- 135936C0D9ADAC1FE180DF903BE733D2 /* JXSegmentedIndicatorImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JXSegmentedIndicatorImageView.swift; path = Sources/Indicator/JXSegmentedIndicatorImageView.swift; sourceTree = ""; };
- 148B5CBC5E6471CA45F7B87E0D5D7A1F /* JXSegmentedView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "JXSegmentedView-dummy.m"; sourceTree = ""; };
- 14D68A465BCDB85C5F5F10836C1E7E15 /* SVProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVProgressHUD.h; path = SVProgressHUD/SVProgressHUD.h; sourceTree = ""; };
- 14F4F939E553EA59CBD6A7CCFE434AD3 /* Indicator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Indicator.swift; path = Sources/Views/Indicator.swift; sourceTree = ""; };
- 153A710FE69516F61C85510B6BD74E4B /* SwiftDate-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SwiftDate-Info.plist"; sourceTree = ""; };
- 158C7BFA1B82120B554D6548EB9F3715 /* SwiftDate.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftDate.debug.xcconfig; sourceTree = ""; };
- 159E2A4DAA8F5B4713B65544D40E96E2 /* SwiftDate.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftDate.release.xcconfig; sourceTree = ""; };
- 15C91724B4E04DC823EA8635B9991F84 /* HTTPHeaders.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPHeaders.swift; path = Source/Core/HTTPHeaders.swift; sourceTree = ""; };
- 163E780819CFF7B3FE94AF595E36150E /* SessionConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionConfiguration.swift; path = Sources/General/SessionConfiguration.swift; sourceTree = ""; };
- 1683E97F9AE54BB1747EE29AC29C6C10 /* ConstraintOffsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintOffsetTarget.swift; path = Sources/ConstraintOffsetTarget.swift; sourceTree = ""; };
- 16BB28FA8B7896E7AF0AC7FC937F19A7 /* IQUIScrollView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIScrollView+Additions.swift"; path = "IQKeyboardManagerSwift/Categories/IQUIScrollView+Additions.swift"; sourceTree = ""; };
- 178ABE62AD082DF4E86BB4E2283BE7E5 /* Debugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debugging.swift; path = Sources/Debugging.swift; sourceTree = ""; };
- 1840F8AE4A9DAF86A9713F0D3A7751F4 /* KFImageProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KFImageProtocol.swift; path = Sources/SwiftUI/KFImageProtocol.swift; sourceTree = ""; };
- 1985F05564401FD34CF08871E1AC0475 /* MJRefreshGifHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshGifHeader.h; path = MJRefresh/Custom/Header/MJRefreshGifHeader.h; sourceTree = ""; };
- 1A0D92ED5164D726538A59D7F3BE7FE1 /* SVProgressHUD.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = SVProgressHUD.bundle; path = SVProgressHUD/SVProgressHUD.bundle; sourceTree = ""; };
- 1AB4CFF133FB22B15A4544D29B88BB01 /* JXSegmentedDotDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JXSegmentedDotDataSource.swift; path = Sources/Dot/JXSegmentedDotDataSource.swift; sourceTree = ""; };
- 1ADFC6377B35790CE5A8D12BC8BF374A /* Tiercel.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Tiercel.release.xcconfig; sourceTree = ""; };
- 1D71C664DD3E66AD2C967CB2CBE873AE /* URLSession+ResumeData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLSession+ResumeData.swift"; path = "Sources/Extensions/URLSession+ResumeData.swift"; sourceTree = ""; };
- 1E24B480E3F5D88DE5613CA25EFEE58B /* ResourceBundle-Alamofire-Alamofire-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Alamofire-Alamofire-Info.plist"; sourceTree = ""; };
- 1E45471EC7A619F828593BD726ED5426 /* Tiercel-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Tiercel-prefix.pch"; sourceTree = ""; };
- 1E6570A71224F7DABBFE472D8370347F /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = ""; };
- 1F6825F0A2F7B30C077245FB5E5692F2 /* JXSegmentedBaseDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JXSegmentedBaseDataSource.swift; path = Sources/Core/JXSegmentedBaseDataSource.swift; sourceTree = ""; };
- 1FF2ECC0F78DECBDD03D5BC8674B5D91 /* Calendars.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Calendars.swift; path = Sources/SwiftDate/Supports/Calendars.swift; sourceTree = ""; };
- 203889A6D004FA63E5B60B05C420B983 /* TimePeriod.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TimePeriod.swift; path = Sources/SwiftDate/TimePeriod/TimePeriod.swift; sourceTree = ""; };
- 204288E27AE87499D959FE982CA4A588 /* JXSegmentedTitleOrImageItemModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JXSegmentedTitleOrImageItemModel.swift; path = Sources/TitleOrImage/JXSegmentedTitleOrImageItemModel.swift; sourceTree = ""; };
- 214FAB9C40ED9237DD5FF6D0388B6D81 /* TimeInterval+Formatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "TimeInterval+Formatter.swift"; path = "Sources/SwiftDate/Foundation+Extras/TimeInterval+Formatter.swift"; sourceTree = ""; };
- 219212DECF63C705E7EF8E6D103F7190 /* AuthenticationChallengeResponsable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthenticationChallengeResponsable.swift; path = Sources/Networking/AuthenticationChallengeResponsable.swift; sourceTree = ""; };
- 21F837F2050BCDC7CB46A7661A696F07 /* ConstraintDirectionalInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsets.swift; path = Sources/ConstraintDirectionalInsets.swift; sourceTree = ""; };
- 22411E71D813DD7A4537E85BAC6A125A /* Cache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cache.swift; path = Sources/General/Cache.swift; sourceTree = ""; };
- 22A5D84D88971E9475E1EC8AA9036D9D /* ConstraintAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintAttributes.swift; path = Sources/ConstraintAttributes.swift; sourceTree = ""; };
- 22F9853435E731084D0A51B315E04D8F /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Features/Validation.swift; sourceTree = ""; };
- 2321C03D8076FF5C1197BA30FB637105 /* Date+Compare.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+Compare.swift"; path = "Sources/SwiftDate/Date/Date+Compare.swift"; sourceTree = ""; };
- 2348BF8015FB0D82FB1B5448C9475F6B /* SVProgressAnimatedView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVProgressAnimatedView.m; path = SVProgressHUD/SVProgressAnimatedView.m; sourceTree = ""; };
- 23D68C3912AFBECB8F09E5EE0C41D596 /* MJRefresh.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MJRefresh.modulemap; sourceTree = ""; };
- 23DE5A547FC5127A25009E99AD6C3EB6 /* SessionDataTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDataTask.swift; path = Sources/Networking/SessionDataTask.swift; sourceTree = ""; };
- 242E31512B529C3DABB2ECBF9687B9A7 /* CALayer+PKDownloadButtonAnimations.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CALayer+PKDownloadButtonAnimations.m"; path = "Pod/Classes/CALayer+PKDownloadButtonAnimations.m"; sourceTree = ""; };
- 27D1E42712A93EE01B8A91DCEC710EAC /* ImageTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageTransition.swift; path = Sources/Image/ImageTransition.swift; sourceTree = ""; };
- 27E637850C77BC6A026E851E20E42D8D /* SVProgressHUD-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SVProgressHUD-umbrella.h"; sourceTree = ""; };
- 27F5B23D017DA45A994D3CAB2EC19776 /* MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefresh.h; path = MJRefresh/MJRefresh.h; sourceTree = ""; };
- 28EC603025181C76A66BAE90715D908C /* Protected.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Protected.swift; path = Sources/General/Protected.swift; sourceTree = ""; };
- 29B60A91EEC97F2653D0DD4FBBA9726B /* ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; sourceTree = ""; };
- 2D4BF92463A6226AB1E7AC8D7C90D3AF /* MJRefreshBackGifFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackGifFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h; sourceTree = ""; };
- 2DB07D33D8DA41364ED7B1B6284C443B /* RequestTaskMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestTaskMap.swift; path = Source/Core/RequestTaskMap.swift; sourceTree = ""; };
+ 13A6A7404AEFB590D7FBE61826442632 /* MJRefreshBackGifFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackGifFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h; sourceTree = ""; };
+ 1449C5993FC9FD9E4C34B82F3C5CB814 /* UICollectionViewLayout+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UICollectionViewLayout+MJRefresh.m"; path = "MJRefresh/UICollectionViewLayout+MJRefresh.m"; sourceTree = ""; };
+ 14B1A3F3039D6C5E815E246D2738947D /* Date+Components.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+Components.swift"; path = "Sources/SwiftDate/Date/Date+Components.swift"; sourceTree = ""; };
+ 15069099C57BDA36E80037EF11AE010D /* Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Kingfisher.swift; path = Sources/General/Kingfisher.swift; sourceTree = ""; };
+ 151EDB1C5044CF30A4CB9D9D05FC7B87 /* MarqueeLabel.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MarqueeLabel.release.xcconfig; sourceTree = ""; };
+ 15312F9E030D2895F28379E5E7AC2F61 /* IQKeyboardManager+UIKeyboardNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+UIKeyboardNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+UIKeyboardNotification.swift"; sourceTree = ""; };
+ 1576C1A75CD83CC0126786D2F38A300E /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Source/Core/SessionDelegate.swift; sourceTree = ""; };
+ 160D754EC35823FF85A34B79E72C40F1 /* UIScrollView+MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+MJExtension.h"; path = "MJRefresh/UIScrollView+MJExtension.h"; sourceTree = ""; };
+ 1615CF451757A9DDFB934B03559641D4 /* PKStopDownloadButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PKStopDownloadButton.m; path = Pod/Classes/PKStopDownloadButton.m; sourceTree = ""; };
+ 1617A3777D8D48603550A764643637E8 /* HTTPMethod.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPMethod.swift; path = Source/Core/HTTPMethod.swift; sourceTree = ""; };
+ 1676881842A119CAFB75D031A09B9F8A /* IQKeyboardManager+OrientationNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+OrientationNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+OrientationNotification.swift"; sourceTree = ""; };
+ 16A00E05D0BD454FBE3C6BE4817B1CC2 /* EventMonitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EventMonitor.swift; path = Source/Features/EventMonitor.swift; sourceTree = ""; };
+ 1745505B9FA5A35E72BC0FBEC9669138 /* CALayer+PKDownloadButtonAnimations.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CALayer+PKDownloadButtonAnimations.h"; path = "Pod/Classes/CALayer+PKDownloadButtonAnimations.h"; sourceTree = ""; };
+ 1770F6E73FCAE86AC7722A319B012606 /* DownloadRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DownloadRequest.swift; path = Source/Core/DownloadRequest.swift; sourceTree = ""; };
+ 187C3048087F7F1D41E679EFC368D94B /* Runtime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Runtime.swift; path = Sources/Utility/Runtime.swift; sourceTree = ""; };
+ 18A583CCFD6D1DBEB9CCF90CFBD1BC6A /* UIColor+PKDownloadButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+PKDownloadButton.h"; path = "Pod/Classes/UIColor+PKDownloadButton.h"; sourceTree = ""; };
+ 19356736BF8163AB50220623743701DC /* SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapKit-Info.plist"; sourceTree = ""; };
+ 1980AB08B7A9EEC85770C1233B343099 /* RetryStrategy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryStrategy.swift; path = Sources/Networking/RetryStrategy.swift; sourceTree = ""; };
+ 19C4B336344ECAEDD6712562E4049762 /* MJRefreshNormalTrailer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshNormalTrailer.m; path = MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.m; sourceTree = ""; };
+ 1A4AEBFDF713BDED395F4612202D7871 /* ConstraintDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDSL.swift; path = Sources/ConstraintDSL.swift; sourceTree = ""; };
+ 1A7EDE82DCCDCDE3D2E8D7244ED9788E /* MJRefreshFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshFooter.h; path = MJRefresh/Base/MJRefreshFooter.h; sourceTree = ""; };
+ 1B1D8FD42382BC246408336EEE182B52 /* CALayer+PKDownloadButtonAnimations.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CALayer+PKDownloadButtonAnimations.m"; path = "Pod/Classes/CALayer+PKDownloadButtonAnimations.m"; sourceTree = ""; };
+ 1B5D2F0523E192F1C435C1D98E1484DC /* JXSegmentedView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = JXSegmentedView.modulemap; sourceTree = ""; };
+ 1BD0AAB38CA9722D37F600FF34CC07B9 /* SwiftDate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftDate.swift; path = Sources/SwiftDate/SwiftDate.swift; sourceTree = ""; };
+ 1CDC49949B6AE24CE48C5C0261DA3A8B /* ServerTrustEvaluation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustEvaluation.swift; path = Source/Features/ServerTrustEvaluation.swift; sourceTree = ""; };
+ 1D817B76097E8F240E24A0DC3A3FDF0D /* Common.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Common.swift; path = Sources/General/Common.swift; sourceTree = ""; };
+ 1D9415D9D582CA7A0D82036D18FAA265 /* Constraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constraint.swift; path = Sources/Constraint.swift; sourceTree = ""; };
+ 1DB0A9A327903E1073962BAAED8DA960 /* PKStopDownloadButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PKStopDownloadButton.h; path = Pod/Classes/PKStopDownloadButton.h; sourceTree = ""; };
+ 1E0C9D5FFE7B4EBECE637ACE8C31A3E8 /* RequestModifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestModifier.swift; path = Sources/Networking/RequestModifier.swift; sourceTree = ""; };
+ 1E3D9A705DD4B8E1CB63DF9084EAC9FF /* JXSegmentedIndicatorDoubleLineView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JXSegmentedIndicatorDoubleLineView.swift; path = Sources/Indicator/JXSegmentedIndicatorDoubleLineView.swift; sourceTree = ""; };
+ 1E5AFB42EE6B29720DA3E27B5455357A /* JXSegmentedTitleDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JXSegmentedTitleDataSource.swift; path = Sources/Title/JXSegmentedTitleDataSource.swift; sourceTree = ""; };
+ 1F06F0BFC065D8251E7724344E40E245 /* IQKeyboardManagerSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardManagerSwift-dummy.m"; sourceTree = ""; };
+ 1F365A87A2F56AA21E9F9300604BF5AC /* PKDownloadButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PKDownloadButton.m; path = Pod/Classes/PKDownloadButton.m; sourceTree = ""; };
+ 1F56CF64E0AA628156FD417070CA92E2 /* SVRadialGradientLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVRadialGradientLayer.m; path = SVProgressHUD/SVRadialGradientLayer.m; sourceTree = ""; };
+ 1F83353ECC4B459BF4234E1164289644 /* SVProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVProgressHUD.h; path = SVProgressHUD/SVProgressHUD.h; sourceTree = ""; };
+ 2035235CBB8446F3D2B5C3DF03DB596F /* JXSegmentedDotItemModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JXSegmentedDotItemModel.swift; path = Sources/Dot/JXSegmentedDotItemModel.swift; sourceTree = ""; };
+ 203DBA9560500D53E8DDCED4335E7CFE /* RequestTaskMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestTaskMap.swift; path = Source/Core/RequestTaskMap.swift; sourceTree = ""; };
+ 208D6F9BA69B30FB0264D0CE23153F7E /* UIButton+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIButton+Kingfisher.swift"; path = "Sources/Extensions/UIButton+Kingfisher.swift"; sourceTree = ""; };
+ 20AC444F5427C3749605C0383D160FEB /* ExtensionHelpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExtensionHelpers.swift; path = Sources/Utility/ExtensionHelpers.swift; sourceTree = ""; };
+ 2116DD2B393A810DC0A155E69BB8F7BB /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/Core/ParameterEncoding.swift; sourceTree = ""; };
+ 2122C6EBB21D40091E4A7024A3A84553 /* DownloadTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DownloadTask.swift; path = Sources/General/DownloadTask.swift; sourceTree = ""; };
+ 2128D882568DC494E8F1150547E3A4DB /* DataRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataRequest.swift; path = Source/Core/DataRequest.swift; sourceTree = ""; };
+ 21518245391611F2B49EF91E63B4083E /* MJRefreshTrailer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshTrailer.m; path = MJRefresh/Base/MJRefreshTrailer.m; sourceTree = ""; };
+ 215886B2A76F059FE5D4A687D74535C3 /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Source/Core/Response.swift; sourceTree = ""; };
+ 21CB16C0EE3EC122700610CC88559E66 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/PrivacyInfo.xcprivacy; sourceTree = ""; };
+ 22E5D234C7281D45564E2715E0F37C73 /* MJRefresh.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJRefresh.debug.xcconfig; sourceTree = ""; };
+ 22EAD7AA2887FF42492CB6AC6700A744 /* ConstraintRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelation.swift; path = Sources/ConstraintRelation.swift; sourceTree = ""; };
+ 23225B4E8514DBFF46A9F508E8CB19A4 /* JXSegmentedCollectionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JXSegmentedCollectionView.swift; path = Sources/Core/JXSegmentedCollectionView.swift; sourceTree = ""; };
+ 238B7566326A9971E1086B295C5ABFCB /* Array+Safe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Array+Safe.swift"; path = "Sources/Extensions/Array+Safe.swift"; sourceTree = ""; };
+ 23941654FE33A23CA7BF75F0C95BA24B /* IQPreviousNextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQPreviousNextView.swift; path = IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift; sourceTree = ""; };
+ 242C09118E5EDE159E70808EBDDA00E9 /* Tiercel-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Tiercel-Info.plist"; sourceTree = ""; };
+ 2605453BAB1B4DD45080E1A38785226E /* MarqueeLabel.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MarqueeLabel.modulemap; sourceTree = ""; };
+ 26A8543F8061C4A8532F17AB9763A423 /* KingfisherOptionsInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KingfisherOptionsInfo.swift; path = Sources/General/KingfisherOptionsInfo.swift; sourceTree = ""; };
+ 26D8FAAD7E324D1696484B36A27617E1 /* Concurrency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Concurrency.swift; path = Source/Features/Concurrency.swift; sourceTree = ""; };
+ 2846700660840F9BEB3E18B26DD04EB0 /* PKCircleProgressView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PKCircleProgressView.h; path = Pod/Classes/PKCircleProgressView.h; sourceTree = ""; };
+ 286D36F1216FB22EFA1FA2B0BF33D8E4 /* DownloadButton.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DownloadButton.debug.xcconfig; sourceTree = ""; };
+ 29349230CDFAD84CC21CEE89781B4F38 /* SVProgressHUD-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SVProgressHUD-Info.plist"; sourceTree = ""; };
+ 2A1D22F7B21663BAD85E06A344194AF0 /* SnapKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapKit-dummy.m"; sourceTree = ""; };
+ 2A4A8EC54C0D772248106B90417E277C /* Date+Math.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+Math.swift"; path = "Sources/SwiftDate/Date/Date+Math.swift"; sourceTree = ""; };
+ 2A8550EC020A77B500DD995CEA60F882 /* Storage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Storage.swift; path = Sources/Cache/Storage.swift; sourceTree = ""; };
+ 2A973CF3ED699EA4E9515A9F191A256F /* UIView+MJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+MJExtension.m"; path = "MJRefresh/UIView+MJExtension.m"; sourceTree = ""; };
+ 2C40ADB610A320A37BD45C4B202CBBE0 /* Tiercel.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Tiercel.modulemap; sourceTree = ""; };
+ 2EF8C06157DE2D2EDC158F46A61C30F6 /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; };
2F4A1CCB21DB7EA5A2ACEB11E374FBCA /* JXPagingView */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = JXPagingView; path = JXPagingView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 3014A4FE1760FDA7885E041B8EF0853E /* MJRefreshHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshHeader.h; path = MJRefresh/Base/MJRefreshHeader.h; sourceTree = ""; };
- 30A36C3E1877B45E9EA931A400465DB9 /* DownloadButton.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DownloadButton.modulemap; sourceTree = ""; };
- 315BF2CB3391E812B1AEA545E71FE0E3 /* Alamofire.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.debug.xcconfig; sourceTree = ""; };
- 318C19E7D6C6A32542051557783C1EF3 /* JXSegmentedTitleImageDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JXSegmentedTitleImageDataSource.swift; path = Sources/TitleImage/JXSegmentedTitleImageDataSource.swift; sourceTree = ""; };
- 3195118FB0FE0A5A0CDE12C350EC0BFE /* Tiercel-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Tiercel-dummy.m"; sourceTree = ""; };
- 32A400989AC36A34EEE68105929AB845 /* JXSegmentedTitleGradientCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JXSegmentedTitleGradientCell.swift; path = Sources/TitleGradient/JXSegmentedTitleGradientCell.swift; sourceTree = ""; };
- 334554B9B671DEC7ADCF7D982591C642 /* ImageDataProcessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDataProcessor.swift; path = Sources/Networking/ImageDataProcessor.swift; sourceTree = ""; };
- 3519A1DE1070D14BA21F4BEBE3C5D2ED /* RequestInterceptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestInterceptor.swift; path = Source/Features/RequestInterceptor.swift; sourceTree = ""; };
- 352002810B4B49BECC2CE992E2A783FB /* AlamofireExtended.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlamofireExtended.swift; path = Source/Features/AlamofireExtended.swift; sourceTree = ""; };
- 35614DDD77E7F500FF36C6A4A9C1FBE1 /* MJRefresh.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJRefresh.release.xcconfig; sourceTree = ""; };
- 3693944CBFD5FFB3A20DE089331A7372 /* JXSegmentedView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JXSegmentedView-prefix.pch"; sourceTree = ""; };
- 36AC1C319C4549047F2F2AA747E1AE0B /* ImageProcessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageProcessor.swift; path = Sources/Image/ImageProcessor.swift; sourceTree = ""; };
- 370E0DBBCF6046B8EA0A19F16D7720C3 /* MJRefreshBackFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackFooter.h; path = MJRefresh/Base/MJRefreshBackFooter.h; sourceTree = ""; };
- 37AFBA38FAEEF7CC14CCC5E242D313BD /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Core/Notifications.swift; sourceTree = ""; };
- 383778566947B3850ADAA36FE68A6580 /* Protected.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Protected.swift; path = Source/Core/Protected.swift; sourceTree = ""; };
- 38BE2DF3B6F0DB0C82BDE42F993FA0AA /* AVAssetImageDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AVAssetImageDataProvider.swift; path = Sources/General/ImageSource/AVAssetImageDataProvider.swift; sourceTree = ""; };
- 3938E9316C816629BB272B90B7FB72BA /* Date+Math.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+Math.swift"; path = "Sources/SwiftDate/Date/Date+Math.swift"; sourceTree = ""; };
- 394EA0EF4EA1BA1568C02AE6FDBDB640 /* NSLayoutConstraint+PKDownloadButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSLayoutConstraint+PKDownloadButton.h"; path = "Pod/Classes/NSLayoutConstraint+PKDownloadButton.h"; sourceTree = ""; };
- 3979C23227D173F64FC1CBA303A1D512 /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Source/Core/SessionDelegate.swift; sourceTree = ""; };
- 39B9EC3B0961258427F81EA9988783C2 /* JXSegmentedIndicatorRainbowLineView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JXSegmentedIndicatorRainbowLineView.swift; path = Sources/Indicator/JXSegmentedIndicatorRainbowLineView.swift; sourceTree = ""; };
- 39BC3B9D2613342C5CAF994270E1E089 /* UIButton+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIButton+Kingfisher.swift"; path = "Sources/Extensions/UIButton+Kingfisher.swift"; sourceTree = ""; };
- 39C8DA51B12B0841241D88B8559D10DF /* MJRefreshConst.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshConst.m; path = MJRefresh/MJRefreshConst.m; sourceTree = ""; };
- 3B4BF2692B75E2E78EB3901D29CF2F20 /* MJRefreshBackGifFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackGifFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m; sourceTree = ""; };
- 3C18631CE3A76D9E239D38D937F073AC /* PKCircleView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PKCircleView.h; path = Pod/Classes/PKCircleView.h; sourceTree = ""; };
- 3C2F80AE1C9EE73162C077C9154EE0DB /* ImageDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDataProvider.swift; path = Sources/General/ImageSource/ImageDataProvider.swift; sourceTree = ""; };
- 3C5371C6033F9B22897412748D004E09 /* MJRefreshAutoGifFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoGifFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m; sourceTree = ""; };
- 3C69FC3F3390BF347851D0534F9D932C /* DotNetParserFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DotNetParserFormatter.swift; path = Sources/SwiftDate/Formatters/DotNetParserFormatter.swift; sourceTree = ""; };
- 3D86F413A39C2ED7EBED385F18D75825 /* Kingfisher.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Kingfisher.release.xcconfig; sourceTree = ""; };
- 3DF0CE5C30A5DCCC8B6DB7B3EF262A12 /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Sources/Networking/SessionDelegate.swift; sourceTree = ""; };
+ 30619E70159FE994D5F9B876739CF48E /* IQUIScrollView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIScrollView+Additions.swift"; path = "IQKeyboardManagerSwift/Categories/IQUIScrollView+Additions.swift"; sourceTree = ""; };
+ 30AE3CC8312E4132A9A995297F2523C6 /* ConstraintConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConfig.swift; path = Sources/ConstraintConfig.swift; sourceTree = ""; };
+ 31C323285A3155F84D9AFE58FD78D246 /* ImageDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDataProvider.swift; path = Sources/General/ImageSource/ImageDataProvider.swift; sourceTree = ""; };
+ 31FD8F5F9DCF707E18D9317B12D18BBE /* ConstraintInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsetTarget.swift; path = Sources/ConstraintInsetTarget.swift; sourceTree = ""; };
+ 32B909B928CC41053D7CF406408D2DA8 /* CodingUserInfoKey+Cache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CodingUserInfoKey+Cache.swift"; path = "Sources/Extensions/CodingUserInfoKey+Cache.swift"; sourceTree = ""; };
+ 33140581269593D23CABC41A35B01F83 /* IQKeyboardManager+Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Debug.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+Debug.swift"; sourceTree = ""; };
+ 332F6C90B7478F0ADA35CCB36F18E139 /* SVProgressHUD-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SVProgressHUD-umbrella.h"; sourceTree = ""; };
+ 33E1D0F4570630A66EC11D6550996BFD /* Executer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Executer.swift; path = Sources/General/Executer.swift; sourceTree = ""; };
+ 34407EBEDB54B802330DFFF56E661207 /* RelativeFormatter+Style.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "RelativeFormatter+Style.swift"; path = "Sources/SwiftDate/Formatters/RelativeFormatter/RelativeFormatter+Style.swift"; sourceTree = ""; };
+ 34BF55272606579ED586584FC1416BCE /* LayoutConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraint.swift; path = Sources/LayoutConstraint.swift; sourceTree = ""; };
+ 34F26DA97773D658E22071F12B542CCD /* JXSegmentedIndicatorImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JXSegmentedIndicatorImageView.swift; path = Sources/Indicator/JXSegmentedIndicatorImageView.swift; sourceTree = ""; };
+ 350BCB03327C5F2C9BECC6FFA0542AC8 /* KingfisherManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KingfisherManager.swift; path = Sources/General/KingfisherManager.swift; sourceTree = ""; };
+ 355900B5F79AA20082E754752E197105 /* JXPagingView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JXPagingView.release.xcconfig; sourceTree = ""; };
+ 35FA650454D142550A0573C6FB619834 /* Formatter+Protocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Formatter+Protocols.swift"; path = "Sources/SwiftDate/Formatters/Formatter+Protocols.swift"; sourceTree = ""; };
+ 363041D7DAC28D7907D5E0EC0CEE54B6 /* TimePeriodChain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TimePeriodChain.swift; path = Sources/SwiftDate/TimePeriod/Groups/TimePeriodChain.swift; sourceTree = ""; };
+ 38934FCF51125F064A4F97B6DD3FE690 /* DownloadButton-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DownloadButton-prefix.pch"; sourceTree = ""; };
+ 39662A3DEB2406A1947116C8C84879C4 /* URLSessionConfiguration+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLSessionConfiguration+Alamofire.swift"; path = "Source/Extensions/URLSessionConfiguration+Alamofire.swift"; sourceTree = ""; };
+ 39CEAE4CB2B89F74AF94DC40A7FCE403 /* ImageProgressive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageProgressive.swift; path = Sources/Image/ImageProgressive.swift; sourceTree = ""; };
+ 3A9302AD87823AB239A8DE5448ED7EA8 /* Locales.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Locales.swift; path = Sources/SwiftDate/Supports/Locales.swift; sourceTree = ""; };
+ 3B05B30F83602E9BAE9D6BFAA15D754E /* RetryPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryPolicy.swift; path = Source/Features/RetryPolicy.swift; sourceTree = ""; };
+ 3B234E4A6AC4FDDA785A69D6B9C0CC0E /* JXPagingView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = JXPagingView.modulemap; sourceTree = ""; };
+ 3B76ADE3C6D04E0B956F25B04B67B5DC /* JXPagingMainTableView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JXPagingMainTableView.swift; path = Sources/JXPagingView/JXPagingMainTableView.swift; sourceTree = ""; };
+ 3BD745A1B0F3015C609CB24A9BFDF524 /* ResourceBundle-JXPagingView-JXPagingView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-JXPagingView-JXPagingView-Info.plist"; sourceTree = ""; };
+ 3C1E12FF093098A22E423F0E1E49DDA6 /* MJRefreshTrailer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshTrailer.h; path = MJRefresh/Base/MJRefreshTrailer.h; sourceTree = ""; };
+ 3D5F1A2FF1FB1DD42568FD79BC4800F0 /* Delegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Delegate.swift; path = Sources/Utility/Delegate.swift; sourceTree = ""; };
3E98AA50CDCEBC05193C3D87CDDDF700 /* Pods-relax.offline.mp3.music.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-relax.offline.mp3.music.modulemap"; sourceTree = ""; };
- 3F40E10D55EC1044BB7FD2CD777678D4 /* URLConvertible+URLRequestConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLConvertible+URLRequestConvertible.swift"; path = "Source/Core/URLConvertible+URLRequestConvertible.swift"; sourceTree = ""; };
- 4000ED24F540FFC9C63FD4DBC6AA4AEF /* CALayer+PKDownloadButtonAnimations.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CALayer+PKDownloadButtonAnimations.h"; path = "Pod/Classes/CALayer+PKDownloadButtonAnimations.h"; sourceTree = ""; };
- 40645897DA10D6315EE10B5CF09F9F83 /* IQKeyboardManager+Toolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Toolbar.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+Toolbar.swift"; sourceTree = ""; };
- 4068045C151506E0A93EFDB8951513F5 /* Image.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Image.swift; path = Sources/Image/Image.swift; sourceTree = ""; };
- 40A8CAAD858518E279F90477318343BC /* DispatchQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Alamofire.swift"; path = "Source/Extensions/DispatchQueue+Alamofire.swift"; sourceTree = ""; };
- 4172AE07F2D6045FFAC7B6CE79D5CC32 /* IQKeyboardManagerSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardManagerSwift.modulemap; sourceTree = ""; };
- 41EA5DD20C3E30CEE9AE29D7D08FA979 /* SVRadialGradientLayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SVRadialGradientLayer.m; path = SVProgressHUD/SVRadialGradientLayer.m; sourceTree = ""; };
- 43C36A312871511CF0DD8615F079E951 /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Core/Request.swift; sourceTree = ""; };
- 4442DAD3B8B05B75C068BADB1E00B9D7 /* FileManager+AvailableCapacity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FileManager+AvailableCapacity.swift"; path = "Sources/Extensions/FileManager+AvailableCapacity.swift"; sourceTree = ""; };
- 444DDECFD8D1EE63B4337DEA07CDBA41 /* DataStreamRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataStreamRequest.swift; path = Source/Core/DataStreamRequest.swift; sourceTree = ""; };
- 46BF1D9126491B49203F61335AAD8237 /* KFOptionsSetter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KFOptionsSetter.swift; path = Sources/General/KFOptionsSetter.swift; sourceTree = ""; };
- 486B16286080A1C04A4D1C6D3E6025B3 /* RetryPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryPolicy.swift; path = Source/Features/RetryPolicy.swift; sourceTree = ""; };
- 49D847B127554DD4DB9891C33CA6CCF8 /* MJRefreshAutoStateFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoStateFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h; sourceTree = ""; };
- 4BA645CD0C9220432BBA4BF52D119E3B /* ResourceBundle-Kingfisher-Kingfisher-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Kingfisher-Kingfisher-Info.plist"; sourceTree = ""; };
- 4BC1D09BEB4A87CCA47DB2DB8F699307 /* MJRefreshStateTrailer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshStateTrailer.h; path = MJRefresh/Custom/Trailer/MJRefreshStateTrailer.h; sourceTree = ""; };
- 4BD1E96B9F81887409A87C11B8627CF9 /* Date+Create.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+Create.swift"; path = "Sources/SwiftDate/Date/Date+Create.swift"; sourceTree = ""; };
- 4C2B27EFF326D222281498D6341EC22E /* MJRefreshNormalTrailer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshNormalTrailer.h; path = MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.h; sourceTree = ""; };
- 4C81E489B48B567E974A27AE3C38D336 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/PrivacyInfo.xcprivacy; sourceTree = ""; };
- 4C9961DB51C617F0E3F78E26BA1B8787 /* RetryStrategy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryStrategy.swift; path = Sources/Networking/RetryStrategy.swift; sourceTree = ""; };
- 4CEE0C62C7FB9997C20B8E1824B5812F /* PKStopDownloadButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PKStopDownloadButton.m; path = Pod/Classes/PKStopDownloadButton.m; sourceTree = ""; };
- 4D7B2E9D8BAF6E4F291B9C1CA555C991 /* AuthenticationInterceptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthenticationInterceptor.swift; path = Source/Features/AuthenticationInterceptor.swift; sourceTree = ""; };
- 4DB9DF7E0785B32759BE7D10F30291CB /* JXSegmentedCollectionView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JXSegmentedCollectionView.swift; path = Sources/Core/JXSegmentedCollectionView.swift; sourceTree = ""; };
- 4E32C30A6532383449FAE228D54F6477 /* JXPagingMainTableView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JXPagingMainTableView.swift; path = Sources/JXPagingView/JXPagingMainTableView.swift; sourceTree = ""; };
- 4E7C909E9A64B9D749DBD181DB7AB6C7 /* SVProgressAnimatedView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SVProgressAnimatedView.h; path = SVProgressHUD/SVProgressAnimatedView.h; sourceTree = ""; };
- 4E80022D2BF17AC34C27A3EDDD0F9189 /* JXSegmentedIndicatorTriangleView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JXSegmentedIndicatorTriangleView.swift; path = Sources/Indicator/JXSegmentedIndicatorTriangleView.swift; sourceTree = ""; };
- 4E913710E854A76597D94659AAC19B6B /* CallbackQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CallbackQueue.swift; path = Sources/Utility/CallbackQueue.swift; sourceTree = ""; };
- 4FAB68949F3F65C3DCE726B88EEF50AC /* Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Kingfisher.swift; path = Sources/General/Kingfisher.swift; sourceTree = "