diff --git a/.travis.yml b/.travis.yml
index e25caf1e..4ed84530 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,4 +1,7 @@
osx_image: xcode7.3
language: objective-c
xcode_sdk: iphonesimulator
+
+before_install:
+ - gem install xcpretty
script: 'sh travisci.sh'
diff --git a/iOS/AppValues.swift b/iOS/AppValues.swift
index 910dbb21..cef54ae0 100755
--- a/iOS/AppValues.swift
+++ b/iOS/AppValues.swift
@@ -8,8 +8,7 @@
import UIKit
import ChameleonFramework
-import Log
-import SwiftTweaks
+import SwiftyBeaver
struct AppValues {
static var stops: [String:Stop] = [:]
@@ -18,35 +17,19 @@ struct AppValues {
static var favoritesRoutes: [[Stop]]! = []
static var stopCodeToStopItem: [String: String] = [:]
static var primaryColor: UIColor! = UIColor.flatOrangeColor()
- static var secondaryColor: UIColor! = UIColor.flatOrangeColorDark()
static var textColor: UIColor! = UIColor.whiteColor()
- static var premium: Bool! = false
- static var logger = Logger()
static var stopsKeys: [String] = []
static var linesBackgroundColor = [String:UIColor]()
static var linesColor = [String:UIColor]()
+ static var logger = SwiftyBeaver.self
+
static func testTimeExecution(title: String!, block: () -> ()) {
- // Thanks to @kristopherjohnson (GitHub)
+ // Thanks to @kristopherjohnson GitHub user.
+
let start = CACurrentMediaTime()
- block();
+ block()
let end = CACurrentMediaTime()
logger.info("Execution time of \(title) : \(end - start)s")
}
-}
-
-public struct TpgOfflineTweaks: TweakLibraryType {
-
- public static let defaultStore: TweakStore = {
- let allTweaks: [TweakClusterType] = []
-
- // Since SwiftTweaks is a dynamic library, you'll need to determine whether tweaks are enabled.
- // Try using the DEBUG flag (add "-D DEBUG" to "Other Swift Flags" in your project's Build Settings).
- let tweaksEnabled: Bool = false
-
- return TweakStore(
- tweaks: allTweaks,
- enabled: tweaksEnabled
- )
- }()
}
\ No newline at end of file
diff --git a/iOS/Podfile b/iOS/Podfile
index 691247a3..c81f705f 100755
--- a/iOS/Podfile
+++ b/iOS/Podfile
@@ -13,16 +13,20 @@ target 'tpg offline' do
pod 'DGElasticPullToRefresh', git:'https://github.com/gontovnik/DGElasticPullToRefresh.git'
pod 'MRProgress', git:'https://github.com/RemyDCF/MRProgress.git'
pod 'INTULocationManager', git:'https://github.com/intuit/LocationManager.git'
- pod 'SwiftInAppPurchase', git: 'https://github.com/rpzzzzzz/SwiftInAppPurchase.git'
pod 'Localize-Swift', git: 'https://github.com/marmelroy/Localize-Swift.git'
pod 'Onboard', git: 'https://github.com/mamaral/Onboard.git', :tag => "v2.1.9"
- pod 'Alamofire'
+ pod 'Alamofire', git: 'https://github.com/Alamofire/Alamofire.git'
pod 'SwiftDate', git: 'https://github.com/malcommac/SwiftDate.git'
- pod 'Log', git: 'https://github.com/delba/Log.git'
+ pod 'SwiftyBeaver', git: 'https://github.com/SwiftyBeaver/SwiftyBeaver.git'
pod 'NVActivityIndicatorView', git: 'https://github.com/ninjaprox/NVActivityIndicatorView.git'
pod 'AsyncSwift', git: 'https://github.com/duemunk/Async.git'
pod 'AKPickerView-Swift', git: 'https://github.com/Akkyie/AKPickerView-Swift.git'
pod 'Fabric'
pod 'Crashlytics'
- pod 'SwiftTweaks', git: 'https://github.com/Khan/SwiftTweaks.git'
-end
\ No newline at end of file
+end
+
+target 'tpg offline Watch Extension' do
+ platform :watchos, '2.0'
+ pod 'SwiftyJSON', git: 'https://github.com/SwiftyJSON/SwiftyJSON.git'
+ pod 'Alamofire', git: 'https://github.com/Alamofire/Alamofire.git'
+end
diff --git a/iOS/Podfile.lock b/iOS/Podfile.lock
old mode 100755
new mode 100644
index bf25c8f1..112da2ac
--- a/iOS/Podfile.lock
+++ b/iOS/Podfile.lock
@@ -1,11 +1,11 @@
PODS:
- AKPickerView-Swift (1.0.1)
- - Alamofire (3.4.0)
+ - Alamofire (3.4.1)
- AsyncSwift (1.7.2)
- ChameleonFramework/Default (2.1.0)
- ChameleonFramework/Swift (2.1.0):
- ChameleonFramework/Default
- - Crashlytics (3.7.0):
+ - Crashlytics (3.7.2):
- Fabric (~> 1.6.3)
- DGElasticPullToRefresh (1.0.3)
- DGRunkeeperSwitch (1.1.1)
@@ -32,10 +32,9 @@ PODS:
- FontAwesomeKit/Core
- FontAwesomeKit/Zocial (2.2.1):
- FontAwesomeKit/Core
- - FSCalendar (2.1.1)
+ - FSCalendar (2.2.0)
- INTULocationManager (4.2.0)
- - Localize-Swift (1.1.2)
- - Log (0.5)
+ - Localize-Swift (1.5)
- MRProgress (0.8.3):
- MRProgress/ActivityIndicator (= 0.8.3)
- MRProgress/Blur (= 0.8.3)
@@ -64,18 +63,17 @@ PODS:
- MRProgress/ProgressBaseClass (0.8.3)
- MRProgress/Stopable (0.8.3):
- MRProgress/Helper
- - NVActivityIndicatorView (2.6)
+ - NVActivityIndicatorView (2.9)
- Onboard (2.1.9)
- PermissionScope (1.0.2)
- - SCLAlertView (0.5.8)
+ - SCLAlertView (0.5.9)
- SwiftDate (3.0.9)
- - SwiftInAppPurchase (1.0.0)
- - SwiftTweaks (1.0)
+ - SwiftyBeaver (0.6.3)
- SwiftyJSON (2.3.2)
DEPENDENCIES:
- AKPickerView-Swift (from `https://github.com/Akkyie/AKPickerView-Swift.git`)
- - Alamofire
+ - Alamofire (from `https://github.com/Alamofire/Alamofire.git`)
- AsyncSwift (from `https://github.com/duemunk/Async.git`)
- ChameleonFramework/Swift (from `https://github.com/ViccAlexander/Chameleon.git`)
- Crashlytics
@@ -87,20 +85,20 @@ DEPENDENCIES:
- FSCalendar
- INTULocationManager (from `https://github.com/intuit/LocationManager.git`)
- Localize-Swift (from `https://github.com/marmelroy/Localize-Swift.git`)
- - Log (from `https://github.com/delba/Log.git`)
- MRProgress (from `https://github.com/RemyDCF/MRProgress.git`)
- NVActivityIndicatorView (from `https://github.com/ninjaprox/NVActivityIndicatorView.git`)
- Onboard (from `https://github.com/mamaral/Onboard.git`, tag `v2.1.9`)
- PermissionScope (from `https://github.com/nickoneill/PermissionScope.git`)
- SCLAlertView (from `https://github.com/vikmeup/SCLAlertView-Swift.git`)
- SwiftDate (from `https://github.com/malcommac/SwiftDate.git`)
- - SwiftInAppPurchase (from `https://github.com/rpzzzzzz/SwiftInAppPurchase.git`)
- - SwiftTweaks (from `https://github.com/Khan/SwiftTweaks.git`)
+ - SwiftyBeaver (from `https://github.com/SwiftyBeaver/SwiftyBeaver.git`)
- SwiftyJSON (from `https://github.com/SwiftyJSON/SwiftyJSON.git`)
EXTERNAL SOURCES:
AKPickerView-Swift:
:git: https://github.com/Akkyie/AKPickerView-Swift.git
+ Alamofire:
+ :git: https://github.com/Alamofire/Alamofire.git
AsyncSwift:
:git: https://github.com/duemunk/Async.git
ChameleonFramework:
@@ -117,8 +115,6 @@ EXTERNAL SOURCES:
:git: https://github.com/intuit/LocationManager.git
Localize-Swift:
:git: https://github.com/marmelroy/Localize-Swift.git
- Log:
- :git: https://github.com/delba/Log.git
MRProgress:
:git: https://github.com/RemyDCF/MRProgress.git
NVActivityIndicatorView:
@@ -132,10 +128,8 @@ EXTERNAL SOURCES:
:git: https://github.com/vikmeup/SCLAlertView-Swift.git
SwiftDate:
:git: https://github.com/malcommac/SwiftDate.git
- SwiftInAppPurchase:
- :git: https://github.com/rpzzzzzz/SwiftInAppPurchase.git
- SwiftTweaks:
- :git: https://github.com/Khan/SwiftTweaks.git
+ SwiftyBeaver:
+ :git: https://github.com/SwiftyBeaver/SwiftyBeaver.git
SwiftyJSON:
:git: https://github.com/SwiftyJSON/SwiftyJSON.git
@@ -143,17 +137,20 @@ CHECKOUT OPTIONS:
AKPickerView-Swift:
:commit: 07c03dca3878fb3adaaa1087c40e5e4dc592fe0d
:git: https://github.com/Akkyie/AKPickerView-Swift.git
+ Alamofire:
+ :commit: 0f506b1c455e5ce4312d27daeb98c10a608107d3
+ :git: https://github.com/Alamofire/Alamofire.git
AsyncSwift:
:commit: e8e53f0fd39fabc226f4609d1c910c8af27a17cc
:git: https://github.com/duemunk/Async.git
ChameleonFramework:
- :commit: 3f87b407bb84ad5e23a0ee8a2ef4023ebb62b00a
+ :commit: 5b51a317485339c3e6762cd7d2adb2b4c7481ca2
:git: https://github.com/ViccAlexander/Chameleon.git
DGElasticPullToRefresh:
:commit: 188a2ff3c498c81aa3a5fe1916c1f8ed15c85dda
:git: https://github.com/gontovnik/DGElasticPullToRefresh.git
DGRunkeeperSwitch:
- :commit: 75829583f41c6eee1b86c66a0b2d947df70cc734
+ :commit: aa5c3986905e7d5b320bf5c4499f9aef60201618
:git: https://github.com/gontovnik/DGRunkeeperSwitch.git
EFCircularSlider:
:commit: 6366f39721c33d0d457f17cc7f225d7795cea2da
@@ -162,19 +159,16 @@ CHECKOUT OPTIONS:
:commit: eac30313fee77f6db1b6832b1d4b7d8f2007b381
:git: https://github.com/PrideChung/FontAwesomeKit.git
INTULocationManager:
- :commit: 8e8402e8b4486e4a59581ed77efc928a2f727481
+ :commit: 7741779256eae4fe727b027a046d6dcc7900566a
:git: https://github.com/intuit/LocationManager.git
Localize-Swift:
- :commit: 9a2bc3a3749390bb92c40694a4da4829a9b602c4
+ :commit: e3ce4b72c184dce8261a1cf35cb0875e55549e20
:git: https://github.com/marmelroy/Localize-Swift.git
- Log:
- :commit: 153e9c3d68031726f575bb255e3dc62267f4d1a1
- :git: https://github.com/delba/Log.git
MRProgress:
:commit: 0a9a8e9299c35f1ed1be0648910505fbd156e952
:git: https://github.com/RemyDCF/MRProgress.git
NVActivityIndicatorView:
- :commit: dfc0ea8b99e2be84548590f7786902c32c02098a
+ :commit: 49a0beb6a33eebc6cec322f05448516881615bf6
:git: https://github.com/ninjaprox/NVActivityIndicatorView.git
Onboard:
:git: https://github.com/mamaral/Onboard.git
@@ -183,46 +177,41 @@ CHECKOUT OPTIONS:
:commit: 8e7df5b5b676363b680a9fc0578ff232bcf8be5d
:git: https://github.com/nickoneill/PermissionScope.git
SCLAlertView:
- :commit: 5824520fd0978c0ff5864639b6340d0d0abd8d5f
+ :commit: 58090eb84843bb4cea3a554eefbd8217e6a2ec13
:git: https://github.com/vikmeup/SCLAlertView-Swift.git
SwiftDate:
:commit: 0dd3a3c610f2147a92c834cb4bdb5d983dd5f37b
:git: https://github.com/malcommac/SwiftDate.git
- SwiftInAppPurchase:
- :commit: 1080c4821443c5b71dff445a8c6c5b79f4bed2e4
- :git: https://github.com/rpzzzzzz/SwiftInAppPurchase.git
- SwiftTweaks:
- :commit: 88f8edd00c309afdd4490ce54c23bcc237802c8e
- :git: https://github.com/Khan/SwiftTweaks.git
+ SwiftyBeaver:
+ :commit: 572c71899c772f22a7706e83ae92213237ef9940
+ :git: https://github.com/SwiftyBeaver/SwiftyBeaver.git
SwiftyJSON:
- :commit: 2a5b70f06001316d4fb54501edc70b4084705da0
+ :commit: 73670b94292b8d8496c398a973f56ac67789ba9f
:git: https://github.com/SwiftyJSON/SwiftyJSON.git
SPEC CHECKSUMS:
AKPickerView-Swift: 8509d472bb257649383c276506334a7373d3cb33
- Alamofire: c19a627cefd6a95f840401c49ab1f124e07f54ee
+ Alamofire: 01a82e2f6c0f860ade35534c8dd88be61bdef40c
AsyncSwift: 15c496983f752a3ab8d1be17e64dd4c6f2a31239
ChameleonFramework: d21a3cc247abfe5e37609a283a8238b03575cf64
- Crashlytics: c3a2333dea9e2733d2777f730910321fc9e25c0d
+ Crashlytics: 130ab943f8c78cda7a814b434f270b2e2c8a3cba
DGElasticPullToRefresh: 3129c558cd59d68f9c2472d79abcd68a49bcd345
DGRunkeeperSwitch: da12f199532a99958a1e87ec0a5af61efdba11ec
EFCircularSlider: 8c9e901891fb813e89c4158508eefa8e35903454
Fabric: caf7580c725e64db144f610ac65cd60956911dc7
FontAwesomeKit: 3614979b3dbb0ec3f7fac1bd760b91f66c31db67
- FSCalendar: 04dc531f06fbde8a8e5b7394e9d4edebd45a591f
+ FSCalendar: 766367b91bcf2829c492c5ac50a58652c6df4ee8
INTULocationManager: 73f8254b3d05c897c56bb13c190e5b7c648c0998
- Localize-Swift: 584bcde9c6b13fcccb1333f398a46a0e60735e7a
- Log: 5972312cb85cffbc56407b612936b610eb4af8a5
+ Localize-Swift: 288aa763db72b0628d2cb111fbf5babc90529d0c
MRProgress: b0c2bcff94ee700ac2aea810e1f51720c059cbd3
- NVActivityIndicatorView: b8207b369c012af32da0916a8346a56d16a5fbbe
+ NVActivityIndicatorView: 0084f6be71bdf4735b5424ebfb530b1e3db3276c
Onboard: 4d92c763ed15f939071dec12e87ed9e8dc036746
PermissionScope: 860828c5516d349b6f49e5491799cfef33c5ccc7
- SCLAlertView: 653e84d1f9fd95333bc54671fbadb7d0c47fce49
+ SCLAlertView: d7c6a48c7d340e60206d4ed0e8ebcbff3b9d2a44
SwiftDate: fa487d9b7d8c3070ea2553486902494f4915465d
- SwiftInAppPurchase: e6d19c8a9d102635cb62fd9de7291eb6f3f0669e
- SwiftTweaks: ac08b7565d90776a6668e37e60224a9daa1e9ba6
+ SwiftyBeaver: c182c001d532111becf2285b8878abf54c7b5621
SwiftyJSON: 04ccea08915aa0109039157c7974cf0298da292a
-PODFILE CHECKSUM: a7106aefefacad5bbb4bc23c5be7c778bb25884d
+PODFILE CHECKSUM: ef83cc600101fd8f5e6957cfa365b330a4325a07
-COCOAPODS: 1.0.0.rc.1
+COCOAPODS: 1.0.1
diff --git a/iOS/Pods/Alamofire/README.md b/iOS/Pods/Alamofire/README.md
index 68e54e95..56a67716 100644
--- a/iOS/Pods/Alamofire/README.md
+++ b/iOS/Pods/Alamofire/README.md
@@ -70,7 +70,9 @@ source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
use_frameworks!
-pod 'Alamofire', '~> 3.4'
+target '' do
+ pod 'Alamofire', '~> 3.4'
+end
```
Then, run the following command:
@@ -711,6 +713,20 @@ Requests can be suspended, resumed, and cancelled:
### Response Serialization
+#### Handling Errors
+
+Before implementing custom response serializers or object serialization methods, it's important to be prepared to handle any errors that may occur. Alamofire recommends handling these through the use of either your own `NSError` creation methods, or a simple `enum` that conforms to `ErrorType`. For example, this `BackendError` type, which will be used in later examples:
+
+```swift
+enum BackendError: ErrorType {
+ case Network(error: NSError)
+ case DataSerialization(reason: String)
+ case JSONSerialization(error: NSError)
+ case ObjectSerialization(reason: String)
+ case XMLSerialization(error: NSError)
+}
+```
+
#### Creating a Custom Response Serializer
Alamofire provides built-in response serialization for strings, JSON, and property lists, but others can be added in extensions on `Alamofire.Request`.
@@ -719,26 +735,24 @@ For example, here's how a response handler using [Ono](https://github.com/mattt/
```swift
extension Request {
- public static func XMLResponseSerializer() -> ResponseSerializer {
+ public static func XMLResponseSerializer() -> ResponseSerializer {
return ResponseSerializer { request, response, data, error in
- guard error == nil else { return .Failure(error!) }
+ guard error == nil else { return .Failure(.Network(error: error!)) }
guard let validData = data else {
- let failureReason = "Data could not be serialized. Input data was nil."
- let error = Error.errorWithCode(.DataSerializationFailed, failureReason: failureReason)
- return .Failure(error)
+ return .Failure(.DataSerialization(reason: "Data could not be serialized. Input data was nil."))
}
do {
let XML = try ONOXMLDocument(data: validData)
return .Success(XML)
} catch {
- return .Failure(error as NSError)
+ return .Failure(.XMLSerialization(error: error as NSError))
}
}
}
- public func responseXMLDocument(completionHandler: Response -> Void) -> Self {
+ public func responseXMLDocument(completionHandler: Response -> Void) -> Self {
return response(responseSerializer: Request.XMLResponseSerializer(), completionHandler: completionHandler)
}
}
@@ -754,9 +768,9 @@ public protocol ResponseObjectSerializable {
}
extension Request {
- public func responseObject(completionHandler: Response -> Void) -> Self {
- let responseSerializer = ResponseSerializer { request, response, data, error in
- guard error == nil else { return .Failure(error!) }
+ public func responseObject(completionHandler: Response -> Void) -> Self {
+ let responseSerializer = ResponseSerializer { request, response, data, error in
+ guard error == nil else { return .Failure(.Network(error: error!)) }
let JSONResponseSerializer = Request.JSONResponseSerializer(options: .AllowFragments)
let result = JSONResponseSerializer.serializeResponse(request, response, data, error)
@@ -769,12 +783,10 @@ extension Request {
{
return .Success(responseObject)
} else {
- let failureReason = "JSON could not be serialized into response object: \(value)"
- let error = Error.errorWithCode(.JSONSerializationFailed, failureReason: failureReason)
- return .Failure(error)
+ return .Failure(.ObjectSerialization(reason: "JSON could not be serialized into response object: \(value)"))
}
case .Failure(let error):
- return .Failure(error)
+ return .Failure(.JSONSerialization(error: error))
}
}
@@ -797,7 +809,7 @@ final class User: ResponseObjectSerializable {
```swift
Alamofire.request(.GET, "https://example.com/users/mattt")
- .responseObject { (response: Response) in
+ .responseObject { (response: Response) in
debugPrint(response)
}
```
@@ -809,10 +821,26 @@ public protocol ResponseCollectionSerializable {
static func collection(response response: NSHTTPURLResponse, representation: AnyObject) -> [Self]
}
+extension ResponseCollectionSerializable where Self: ResponseObjectSerializable {
+ static func collection(response response: NSHTTPURLResponse, representation: AnyObject) -> [Self] {
+ var collection = [Self]()
+
+ if let representation = representation as? [[String: AnyObject]] {
+ for itemRepresentation in representation {
+ if let item = Self(response: response, representation: itemRepresentation) {
+ collection.append(item)
+ }
+ }
+ }
+
+ return collection
+ }
+}
+
extension Alamofire.Request {
- public func responseCollection(completionHandler: Response<[T], NSError> -> Void) -> Self {
- let responseSerializer = ResponseSerializer<[T], NSError> { request, response, data, error in
- guard error == nil else { return .Failure(error!) }
+ public func responseCollection(completionHandler: Response<[T], BackendError> -> Void) -> Self {
+ let responseSerializer = ResponseSerializer<[T], BackendError> { request, response, data, error in
+ guard error == nil else { return .Failure(.Network(error: error!)) }
let JSONSerializer = Request.JSONResponseSerializer(options: .AllowFragments)
let result = JSONSerializer.serializeResponse(request, response, data, error)
@@ -822,12 +850,10 @@ extension Alamofire.Request {
if let response = response {
return .Success(T.collection(response: response, representation: value))
} else {
- let failureReason = "Response collection could not be serialized due to nil response"
- let error = Error.errorWithCode(.JSONSerializationFailed, failureReason: failureReason)
- return .Failure(error)
+ return .Failure(. ObjectSerialization(reason: "Response collection could not be serialized due to nil response"))
}
case .Failure(let error):
- return .Failure(error)
+ return .Failure(.JSONSerialization(error: error))
}
}
@@ -845,26 +871,12 @@ final class User: ResponseObjectSerializable, ResponseCollectionSerializable {
self.username = response.URL!.lastPathComponent!
self.name = representation.valueForKeyPath("name") as! String
}
-
- static func collection(response response: NSHTTPURLResponse, representation: AnyObject) -> [User] {
- var users: [User] = []
-
- if let representation = representation as? [[String: AnyObject]] {
- for userRepresentation in representation {
- if let user = User(response: response, representation: userRepresentation) {
- users.append(user)
- }
- }
- }
-
- return users
- }
}
```
```swift
Alamofire.request(.GET, "http://example.com/users")
- .responseCollection { (response: Response<[User], NSError>) in
+ .responseCollection { (response: Response<[User], BackendError>) in
debugPrint(response)
}
```
@@ -944,7 +956,7 @@ enum Router: URLRequestConvertible {
var URLRequest: NSMutableURLRequest {
let result: (path: String, parameters: [String: AnyObject]) = {
switch self {
- case .Search(let query, let page) where page > 1:
+ case .Search(let query, let page) where page > 0:
return ("/search", ["q": query, "offset": Router.perPage * page])
case .Search(let query, _):
return ("/search", ["q": query])
@@ -1248,6 +1260,7 @@ There are some important things to remember when using network reachability to d
The following rdars have some affect on the current implementation of Alamofire.
* [rdar://21349340](http://www.openradar.me/radar?id=5517037090635776) - Compiler throwing warning due to toll-free bridging issue in test case
+* [rdar://26761490](http://www.openradar.me/radar?id=5010235949318144) - Swift string interpolation causing memory leak with common usage
## FAQ
@@ -1265,6 +1278,20 @@ Alamofire is owned and maintained by the [Alamofire Software Foundation](http://
If you believe you have identified a security vulnerability with Alamofire, you should report it as soon as possible via email to security@alamofire.org. Please do not post it to a public issue tracker.
+## Donations
+
+The [ASF](https://github.com/Alamofire/Foundation#members) is looking to raise money to officially register as a federal non-profit organization. Registering will allow us members to gain some legal protections and also allow us to put donations to use, tax free. Donating to the ASF will enable us to:
+
+* Pay our legal fees to register as a federal non-profit organization
+* Pay our yearly legal fees to keep the non-profit in good status
+* Pay for our mail servers to help us stay on top of all questions and security issues
+* Potentially fund test servers to make it easier for us to test the edge cases
+* Potentially fund developers to work on one of our projects full-time
+
+The community adoption of the ASF libraries has been amazing. We are greatly humbled by your enthusiam around the projects, and want to continue to do everything we can to move the needle forward. With your continued support, the ASF will be able to improve its reach and also provide better legal safety for the core members. If you use any of our libraries for work, see if your employers would be interested in donating. Our initial goal is to raise $1000 to get all our legal ducks in a row and kickstart this campaign. Any amount you can donate today to help us reach our goal would be greatly appreciated.
+
+
+
## License
Alamofire is released under the MIT license. See LICENSE for details.
diff --git a/iOS/Pods/Alamofire/Source/Manager.swift b/iOS/Pods/Alamofire/Source/Manager.swift
index 7b5f888b..691d31f6 100644
--- a/iOS/Pods/Alamofire/Source/Manager.swift
+++ b/iOS/Pods/Alamofire/Source/Manager.swift
@@ -61,14 +61,37 @@ public class Manager {
let executable = info[kCFBundleExecutableKey as String] as? String ?? "Unknown"
let bundle = info[kCFBundleIdentifierKey as String] as? String ?? "Unknown"
let version = info[kCFBundleVersionKey as String] as? String ?? "Unknown"
- let os = NSProcessInfo.processInfo().operatingSystemVersionString
- var mutableUserAgent = NSMutableString(string: "\(executable)/\(bundle) (\(version); OS \(os))") as CFMutableString
- let transform = NSString(string: "Any-Latin; Latin-ASCII; [:^ASCII:] Remove") as CFString
+ let osNameVersion: String = {
+ let versionString: String
- if CFStringTransform(mutableUserAgent, UnsafeMutablePointer(nil), transform, false) {
- return mutableUserAgent as String
- }
+ if #available(OSX 10.10, *) {
+ let version = NSProcessInfo.processInfo().operatingSystemVersion
+ versionString = "\(version.majorVersion).\(version.minorVersion).\(version.patchVersion)"
+ } else {
+ versionString = "10.9"
+ }
+
+ let osName: String = {
+ #if os(iOS)
+ return "iOS"
+ #elseif os(watchOS)
+ return "watchOS"
+ #elseif os(tvOS)
+ return "tvOS"
+ #elseif os(OSX)
+ return "OS X"
+ #elseif os(Linux)
+ return "Linux"
+ #else
+ return "Unknown"
+ #endif
+ }()
+
+ return "\(osName) \(versionString)"
+ }()
+
+ return "\(executable)/\(bundle) (\(version); \(osNameVersion))"
}
return "Alamofire"
diff --git a/iOS/Pods/Alamofire/Source/NetworkReachabilityManager.swift b/iOS/Pods/Alamofire/Source/NetworkReachabilityManager.swift
index 949ed28b..1e5c7b03 100644
--- a/iOS/Pods/Alamofire/Source/NetworkReachabilityManager.swift
+++ b/iOS/Pods/Alamofire/Source/NetworkReachabilityManager.swift
@@ -116,32 +116,23 @@ public class NetworkReachabilityManager {
}
/**
- Creates a `NetworkReachabilityManager` instance with the default socket IPv4 or IPv6 address.
+ Creates a `NetworkReachabilityManager` instance that monitors the address 0.0.0.0.
+
+ Reachability treats the 0.0.0.0 address as a special token that causes it to monitor the general routing
+ status of the device, both IPv4 and IPv6.
- returns: The new `NetworkReachabilityManager` instance.
- */
+ */
public convenience init?() {
- if #available(iOS 9.0, OSX 10.10, *) {
- var address = sockaddr_in6()
- address.sin6_len = UInt8(sizeofValue(address))
- address.sin6_family = sa_family_t(AF_INET6)
-
- guard let reachability = withUnsafePointer(&address, {
- SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
- }) else { return nil }
-
- self.init(reachability: reachability)
- } else {
- var address = sockaddr_in()
- address.sin_len = UInt8(sizeofValue(address))
- address.sin_family = sa_family_t(AF_INET)
-
- guard let reachability = withUnsafePointer(&address, {
- SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
- }) else { return nil }
-
- self.init(reachability: reachability)
- }
+ var address = sockaddr_in()
+ address.sin_len = UInt8(sizeofValue(address))
+ address.sin_family = sa_family_t(AF_INET)
+
+ guard let reachability = withUnsafePointer(&address, {
+ SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
+ }) else { return nil }
+
+ self.init(reachability: reachability)
}
private init(reachability: SCNetworkReachability) {
diff --git a/iOS/Pods/Alamofire/Source/ParameterEncoding.swift b/iOS/Pods/Alamofire/Source/ParameterEncoding.swift
index bfa4d12a..32e63d9b 100644
--- a/iOS/Pods/Alamofire/Source/ParameterEncoding.swift
+++ b/iOS/Pods/Alamofire/Source/ParameterEncoding.swift
@@ -229,7 +229,7 @@ public enum ParameterEncoding {
//==========================================================================================================
//
// Batching is required for escaping due to an internal bug in iOS 8.1 and 8.2. Encoding more than a few
- // hundred Chinense characters causes various malloc error crashes. To avoid this issue until iOS 8 is no
+ // hundred Chinese characters causes various malloc error crashes. To avoid this issue until iOS 8 is no
// longer supported, batching MUST be used for encoding. This introduces roughly a 20% overhead. For more
// info, please refer to:
//
diff --git a/iOS/Pods/Alamofire/Source/Timeline.swift b/iOS/Pods/Alamofire/Source/Timeline.swift
index 3610f15e..95936827 100644
--- a/iOS/Pods/Alamofire/Source/Timeline.swift
+++ b/iOS/Pods/Alamofire/Source/Timeline.swift
@@ -91,14 +91,16 @@ extension Timeline: CustomStringConvertible {
let serializationDuration = String(format: "%.3f", self.serializationDuration)
let totalDuration = String(format: "%.3f", self.totalDuration)
+ // NOTE: Had to move to string concatenation due to memory leak filed as rdar://26761490. Once memory leak is
+ // fixed, we should move back to string interpolation by reverting commit 7d4a43b1.
let timings = [
- "\"Latency\": \(latency) secs",
- "\"Request Duration\": \(requestDuration) secs",
- "\"Serialization Duration\": \(serializationDuration) secs",
- "\"Total Duration\": \(totalDuration) secs"
+ "\"Latency\": " + latency + " secs",
+ "\"Request Duration\": " + requestDuration + " secs",
+ "\"Serialization Duration\": " + serializationDuration + " secs",
+ "\"Total Duration\": " + totalDuration + " secs"
]
- return "Timeline: { \(timings.joinWithSeparator(", ")) }"
+ return "Timeline: { " + timings.joinWithSeparator(", ") + " }"
}
}
@@ -109,17 +111,28 @@ extension Timeline: CustomDebugStringConvertible {
/// initial response time, the request completed time, the serialization completed time, the latency, the request
/// duration and the total duration.
public var debugDescription: String {
+ let requestStartTime = String(format: "%.3f", self.requestStartTime)
+ let initialResponseTime = String(format: "%.3f", self.initialResponseTime)
+ let requestCompletedTime = String(format: "%.3f", self.requestCompletedTime)
+ let serializationCompletedTime = String(format: "%.3f", self.serializationCompletedTime)
+ let latency = String(format: "%.3f", self.latency)
+ let requestDuration = String(format: "%.3f", self.requestDuration)
+ let serializationDuration = String(format: "%.3f", self.serializationDuration)
+ let totalDuration = String(format: "%.3f", self.totalDuration)
+
+ // NOTE: Had to move to string concatenation due to memory leak filed as rdar://26761490. Once memory leak is
+ // fixed, we should move back to string interpolation by reverting commit 7d4a43b1.
let timings = [
- "\"Request Start Time\": \(requestStartTime)",
- "\"Initial Response Time\": \(initialResponseTime)",
- "\"Request Completed Time\": \(requestCompletedTime)",
- "\"Serialization Completed Time\": \(serializationCompletedTime)",
- "\"Latency\": \(latency) secs",
- "\"Request Duration\": \(requestDuration) secs",
- "\"Serialization Duration\": \(serializationDuration) secs",
- "\"Total Duration\": \(totalDuration) secs"
+ "\"Request Start Time\": " + requestStartTime,
+ "\"Initial Response Time\": " + initialResponseTime,
+ "\"Request Completed Time\": " + requestCompletedTime,
+ "\"Serialization Completed Time\": " + serializationCompletedTime,
+ "\"Latency\": " + latency + " secs",
+ "\"Request Duration\": " + requestDuration + " secs",
+ "\"Serialization Duration\": " + serializationDuration + " secs",
+ "\"Total Duration\": " + totalDuration + " secs"
]
- return "Timeline: { \(timings.joinWithSeparator(", ")) }"
+ return "Timeline: { " + timings.joinWithSeparator(", ") + " }"
}
}
diff --git a/iOS/Pods/ChameleonFramework/README.md b/iOS/Pods/ChameleonFramework/README.md
index fe79d407..0925bbcf 100644
--- a/iOS/Pods/ChameleonFramework/README.md
+++ b/iOS/Pods/ChameleonFramework/README.md
@@ -3,9 +3,9 @@
-
+
-
+
@@ -158,6 +158,9 @@ All methods, properties, and types available in Chameleon are documented below.
[● Theme Methods](https://github.com/ViccAlexander/Chameleon#theme-methods)
###Installation
+
+Swift 3 version maintained in a separate branch until it's release.
+
####CocoaPods Installation
Chameleon is now available on [CocoaPods](http://cocoapods.org). Simply add the following to your project Podfile, and you'll be good to go.
diff --git a/iOS/Pods/Crashlytics/README.md b/iOS/Pods/Crashlytics/README.md
index 226377d7..db7883d9 100644
--- a/iOS/Pods/Crashlytics/README.md
+++ b/iOS/Pods/Crashlytics/README.md
@@ -4,7 +4,7 @@ Part of [Twitter Fabric](https://www.fabric.io), [Crashlytics](http://try.crashl
## Setup
-1. Visit https://fabric.io/sign_up to create your Fabric account and to download Fabric.app
+1. Visit [https://fabric.io/sign_up](https://fabric.io/sign_up) to create your Fabric account and to download Fabric.app.
1. Open Fabric.app, login and select the Crashlytics SDK.
@@ -16,8 +16,10 @@ Part of [Twitter Fabric](https://www.fabric.io), [Crashlytics](http://try.crashl
1. Select the Podfile option and follow the installation instructions to update your Podfile. **Note:** the Crashlytics Pod includes Answers. If you have Answers included as a separate Pod it should be removed from your Podfile to avoid duplicate symbol errors.
- `pod 'Fabric'`
- `pod 'Crashlytics'`
+ ```
+ pod 'Fabric'
+ pod 'Crashlytics'
+ ```
1. Run `pod install`
diff --git a/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics b/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics
index 5cd0a33a..3079d388 100755
Binary files a/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics and b/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics differ
diff --git a/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSStackFrame.h b/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSStackFrame.h
index a9c0f296..cdb5596c 100644
--- a/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSStackFrame.h
+++ b/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSStackFrame.h
@@ -26,6 +26,7 @@ NS_ASSUME_NONNULL_BEGIN
+ (instancetype)stackFrameWithSymbol:(NSString *)symbol;
@property (nonatomic, copy, nullable) NSString *symbol;
+@property (nonatomic, copy, nullable) NSString *rawSymbol;
@property (nonatomic, copy, nullable) NSString *library;
@property (nonatomic, copy, nullable) NSString *fileName;
@property (nonatomic, assign) uint32_t lineNumber;
diff --git a/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Crashlytics.h b/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Crashlytics.h
index 6f2e3f63..34288f1b 100644
--- a/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Crashlytics.h
+++ b/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Crashlytics.h
@@ -18,7 +18,10 @@ NS_ASSUME_NONNULL_BEGIN
@protocol CrashlyticsDelegate;
/**
- * Crashlytics. Handles configuration and initialization of Crashlytics.
+ * Crashlytics. Handles configuration and initialization of Crashlytics.
+ *
+ * Note: The Crashlytics class cannot be subclassed. If this is causing you pain for
+ * testing, we suggest using either a wrapper class or a protocol extension.
*/
@interface Crashlytics : NSObject
diff --git a/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/Info.plist b/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/Info.plist
index add4126a..aa0f04fa 100644
Binary files a/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/Info.plist and b/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/Info.plist differ
diff --git a/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/submit b/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/submit
index e487d4db..1432b06e 100755
Binary files a/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/submit and b/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/submit differ
diff --git a/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/uploadDSYM b/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/uploadDSYM
index c459eb08..31b45b68 100755
Binary files a/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/uploadDSYM and b/iOS/Pods/Crashlytics/iOS/Crashlytics.framework/uploadDSYM differ
diff --git a/iOS/Pods/Crashlytics/submit b/iOS/Pods/Crashlytics/submit
index 96208a27..1432b06e 100755
Binary files a/iOS/Pods/Crashlytics/submit and b/iOS/Pods/Crashlytics/submit differ
diff --git a/iOS/Pods/DGRunkeeperSwitch/DGRunkeeperSwitch/DGRunkeeperSwitch.swift b/iOS/Pods/DGRunkeeperSwitch/DGRunkeeperSwitch/DGRunkeeperSwitch.swift
index b24c171d..096762fc 100644
--- a/iOS/Pods/DGRunkeeperSwitch/DGRunkeeperSwitch/DGRunkeeperSwitch.swift
+++ b/iOS/Pods/DGRunkeeperSwitch/DGRunkeeperSwitch/DGRunkeeperSwitch.swift
@@ -117,6 +117,7 @@ public class DGRunkeeperSwitch: UIControl {
super.init(frame: frame)
finishInit()
+ backgroundColor = .blackColor() // don't set background color in finishInit(), otherwise IB settings which are applied in init?(coder:) are overwritten
}
private func finishInit() {
@@ -141,7 +142,6 @@ public class DGRunkeeperSwitch: UIControl {
selectedTitleLabelsContentView.layer.mask = titleMaskView.layer
// Setup defaul colors
- backgroundColor = .blackColor()
selectedBackgroundColor = .whiteColor()
titleColor = .whiteColor()
selectedTitleColor = .blackColor()
@@ -275,4 +275,4 @@ extension DGRunkeeperSwitch: UIGestureRecognizerDelegate {
return super.gestureRecognizerShouldBegin(gestureRecognizer)
}
-}
\ No newline at end of file
+}
diff --git a/iOS/Pods/FSCalendar/FSCalendar/FSCalendar+DateTools.m b/iOS/Pods/FSCalendar/FSCalendar/FSCalendar+DateTools.m
new file mode 100644
index 00000000..ee4171b1
--- /dev/null
+++ b/iOS/Pods/FSCalendar/FSCalendar/FSCalendar+DateTools.m
@@ -0,0 +1,295 @@
+//
+// FSCalendar+DateTools.m
+// FSCalendar
+//
+// Created by dingwenchao on 4/29/16.
+// Copyright © 2016 wenchaoios. All rights reserved.
+//
+
+#import "FSCalendar.h"
+#import "FSCalendarDynamicHeader.h"
+
+@implementation FSCalendar (DateTools)
+
+#pragma mark - Public methods
+
+- (NSInteger)yearOfDate:(NSDate *)date
+{
+ NSDateComponents *component = [self.calendar components:NSCalendarUnitYear fromDate:date];
+ return component.year;
+}
+
+- (NSInteger)monthOfDate:(NSDate *)date
+{
+ NSDateComponents *component = [self.calendar components:NSCalendarUnitMonth
+ fromDate:date];
+ return component.month;
+}
+
+- (NSInteger)dayOfDate:(NSDate *)date
+{
+ NSDateComponents *component = [self.calendar components:NSCalendarUnitDay
+ fromDate:date];
+ return component.day;
+}
+
+- (NSInteger)weekdayOfDate:(NSDate *)date
+{
+ NSDateComponents *component = [self.calendar components:NSCalendarUnitWeekday fromDate:date];
+ return component.weekday;
+}
+
+- (NSInteger)weekOfDate:(NSDate *)date
+{
+ NSDateComponents *component = [self.calendar components:NSCalendarUnitWeekOfYear fromDate:date];
+ return component.weekOfYear;
+}
+
+- (NSInteger)hourOfDate:(NSDate *)date
+{
+ NSDateComponents *component = [self.calendar components:NSCalendarUnitHour
+ fromDate:date];
+ return component.hour;
+}
+
+- (NSInteger)miniuteOfDate:(NSDate *)date
+{
+ NSDateComponents *component = [self.calendar components:NSCalendarUnitMinute
+ fromDate:date];
+ return component.minute;
+}
+
+- (NSInteger)secondOfDate:(NSDate *)date
+{
+ NSDateComponents *component = [self.calendar components:NSCalendarUnitSecond
+ fromDate:date];
+ return component.second;
+}
+
+- (NSInteger)numberOfRowsInMonth:(NSDate *)month
+{
+ if (!month) return 0;
+ if (self.showsPlaceholders) return 6;
+ NSDate *firstDayOfMonth = [self beginingOfMonthOfDate:month];
+ NSInteger weekdayOfFirstDay = [self weekdayOfDate:firstDayOfMonth];
+ NSInteger numberOfDaysInMonth = [self numberOfDatesInMonthOfDate:month];
+ NSInteger numberOfPlaceholdersForPrev = ((weekdayOfFirstDay - self.firstWeekday) + 7) % 7;
+ NSInteger headDayCount = numberOfDaysInMonth + numberOfPlaceholdersForPrev;
+ NSInteger numberOfRows = (headDayCount/7) + (headDayCount%7>0);
+ return numberOfRows;
+}
+
+- (NSDate *)dateByIgnoringTimeComponentsOfDate:(NSDate *)date
+{
+ NSDateComponents *components = [self.calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour fromDate:date];
+ components.hour = FSCalendarDefaultHourComponent;
+ return [self.calendar dateFromComponents:components];
+}
+
+- (NSDate *)beginingOfMonthOfDate:(NSDate *)date
+{
+ NSDateComponents *components = [self.calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour fromDate:date];
+ components.day = 1;
+ return [self.calendar dateFromComponents:components];
+}
+
+- (NSDate *)endOfMonthOfDate:(NSDate *)date
+{
+ NSDateComponents *components = [self.calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour fromDate:date];
+ components.month++;
+ components.day = 0;
+ return [self.calendar dateFromComponents:components];
+}
+
+- (NSDate *)beginingOfWeekOfDate:(NSDate *)date
+{
+ NSDateComponents *weekdayComponents = [self.calendar components:NSCalendarUnitWeekday fromDate:date];
+ NSDateComponents *componentsToSubtract = self.components;
+ componentsToSubtract.day = - (weekdayComponents.weekday - self.calendar.firstWeekday);
+ componentsToSubtract.day = (componentsToSubtract.day-7) % 7;
+ NSDate *beginningOfWeek = [self.calendar dateByAddingComponents:componentsToSubtract toDate:date options:0];
+ NSDateComponents *components = [self.calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour fromDate:beginningOfWeek];
+ beginningOfWeek = [self.calendar dateFromComponents:components];
+ componentsToSubtract.day = NSIntegerMax;
+ return beginningOfWeek;
+}
+
+- (NSDate *)middleOfWeekFromDate:(NSDate *)date
+{
+ NSDateComponents *weekdayComponents = [self.calendar components:NSCalendarUnitWeekday fromDate:date];
+ NSDateComponents *componentsToSubtract = self.components;
+ componentsToSubtract.day = - (weekdayComponents.weekday - self.calendar.firstWeekday) + 3;
+ NSDate *middleOfWeek = [self.calendar dateByAddingComponents:componentsToSubtract toDate:date options:0];
+ NSDateComponents *components = [self.calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour fromDate:middleOfWeek];
+ middleOfWeek = [self.calendar dateFromComponents:components];
+ componentsToSubtract.day = NSIntegerMax;
+ return middleOfWeek;
+}
+
+- (NSDate *)tomorrowOfDate:(NSDate *)date
+{
+ NSDateComponents *components = [self.calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour fromDate:date];
+ components.day++;
+ components.hour = FSCalendarDefaultHourComponent;
+ return [self.calendar dateFromComponents:components];
+}
+
+- (NSDate *)yesterdayOfDate:(NSDate *)date
+{
+ NSDateComponents *components = [self.calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour fromDate:date];
+ components.day--;
+ components.hour = FSCalendarDefaultHourComponent;
+ return [self.calendar dateFromComponents:components];
+}
+
+- (NSInteger)numberOfDatesInMonthOfDate:(NSDate *)date
+{
+ NSRange days = [self.calendar rangeOfUnit:NSCalendarUnitDay
+ inUnit:NSCalendarUnitMonth
+ forDate:date];
+ return days.length;
+}
+
+- (NSDate *)dateFromString:(NSString *)string format:(NSString *)format
+{
+ self.formatter.dateFormat = format;
+ return [self.formatter dateFromString:string];
+}
+
+- (NSDate *)dateWithYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day
+{
+ NSDateComponents *components = self.components;
+ components.year = year;
+ components.month = month;
+ components.day = day;
+ components.hour = FSCalendarDefaultHourComponent;
+ NSDate *date = [self.calendar dateFromComponents:components];
+ components.year = NSIntegerMax;
+ components.month = NSIntegerMax;
+ components.day = NSIntegerMax;
+ components.hour = NSIntegerMax;
+ return date;
+}
+
+- (NSDate *)dateByAddingYears:(NSInteger)years toDate:(NSDate *)date
+{
+ NSDateComponents *components = self.components;
+ components.year = years;
+ NSDate *d = [self.calendar dateByAddingComponents:components toDate:date options:0];
+ components.year = NSIntegerMax;
+ return d;
+}
+
+- (NSDate *)dateBySubstractingYears:(NSInteger)years fromDate:(NSDate *)date
+{
+ return [self dateByAddingYears:-years toDate:date];
+}
+
+- (NSDate *)dateByAddingMonths:(NSInteger)months toDate:(NSDate *)date
+{
+ NSDateComponents *components = self.components;
+ components.month = months;
+ NSDate *d = [self.calendar dateByAddingComponents:components toDate:date options:0];
+ components.month = NSIntegerMax;
+ return d;
+}
+
+- (NSDate *)dateBySubstractingMonths:(NSInteger)months fromDate:(NSDate *)date
+{
+ return [self dateByAddingMonths:-months toDate:date];
+}
+
+- (NSDate *)dateByAddingWeeks:(NSInteger)weeks toDate:(NSDate *)date
+{
+ NSDateComponents *components = self.components;
+ components.weekOfYear = weeks;
+ NSDate *d = [self.calendar dateByAddingComponents:components toDate:date options:0];
+ components.weekOfYear = NSIntegerMax;
+ return d;
+}
+
+- (NSDate *)dateBySubstractingWeeks:(NSInteger)weeks fromDate:(NSDate *)date
+{
+ return [self dateByAddingWeeks:-weeks toDate:date];
+}
+
+- (NSDate *)dateByAddingDays:(NSInteger)days toDate:(NSDate *)date
+{
+ NSDateComponents *components = self.components;
+ components.day = days;
+ NSDate *d = [self.calendar dateByAddingComponents:components toDate:date options:0];
+ components.day = NSIntegerMax;
+ return d;
+}
+
+- (NSDate *)dateBySubstractingDays:(NSInteger)days fromDate:(NSDate *)date
+{
+ return [self dateByAddingDays:-days toDate:date];
+}
+
+- (NSInteger)yearsFromDate:(NSDate *)fromDate toDate:(NSDate *)toDate
+{
+ NSDateComponents *components = [self.calendar components:NSCalendarUnitYear
+ fromDate:fromDate
+ toDate:toDate
+ options:0];
+ return components.year;
+}
+
+- (NSInteger)monthsFromDate:(NSDate *)fromDate toDate:(NSDate *)toDate
+{
+ NSDateComponents *components = [self.calendar components:NSCalendarUnitMonth
+ fromDate:fromDate
+ toDate:toDate
+ options:0];
+ return components.month;
+}
+
+- (NSInteger)weeksFromDate:(NSDate *)fromDate toDate:(NSDate *)toDate
+{
+ NSDateComponents *components = [self.calendar components:NSCalendarUnitWeekOfYear
+ fromDate:fromDate
+ toDate:toDate
+ options:0];
+ return components.weekOfYear;
+}
+
+- (NSInteger)daysFromDate:(NSDate *)fromDate toDate:(NSDate *)toDate
+{
+ NSDateComponents *components = [self.calendar components:NSCalendarUnitDay
+ fromDate:fromDate
+ toDate:toDate
+ options:0];
+ return components.day;
+}
+
+- (BOOL)isDate:(NSDate *)date1 equalToDate:(NSDate *)date2 toCalendarUnit:(FSCalendarUnit)unit
+{
+ switch (unit) {
+ case FSCalendarUnitMonth:
+ return [self yearOfDate:date1] == [self yearOfDate:date2] && [self monthOfDate:date1] == [self monthOfDate:date2];
+ case FSCalendarUnitWeekOfYear:
+ return [self yearOfDate:date1] == [self yearOfDate:date2] && [self weekOfDate:date1] == [self weekOfDate:date2];
+ case FSCalendarUnitDay:
+ return [self yearOfDate:date1] == [self yearOfDate:date2] && [self monthOfDate:date1] == [self monthOfDate:date2] && [self dayOfDate:date1] == [self dayOfDate:date2];
+ }
+ return NO;
+}
+
+- (BOOL)isDateInToday:(NSDate *)date
+{
+ return [self isDate:date equalToDate:self.today toCalendarUnit:FSCalendarUnitDay];
+}
+
+- (NSString *)stringFromDate:(NSDate *)date format:(NSString *)format
+{
+ self.formatter.dateFormat = format;
+ return [self.formatter stringFromDate:date];
+}
+
+- (NSString *)stringFromDate:(NSDate *)date
+{
+ return [self stringFromDate:date format:@"yyyy-MM-dd"];
+}
+
+@end
diff --git a/iOS/Pods/FSCalendar/FSCalendar/FSCalendar+Deprecated.m b/iOS/Pods/FSCalendar/FSCalendar/FSCalendar+Deprecated.m
new file mode 100644
index 00000000..c13c913a
--- /dev/null
+++ b/iOS/Pods/FSCalendar/FSCalendar/FSCalendar+Deprecated.m
@@ -0,0 +1,61 @@
+//
+// FSCalendar+Deprecated.m
+// FSCalendar
+//
+// Created by dingwenchao on 4/29/16.
+// Copyright © 2016 wenchaoios. All rights reserved.
+//
+
+#import "FSCalendar.h"
+#import "FSCalendarDynamicHeader.h"
+
+#pragma mark - Deprecate
+
+@implementation FSCalendar (Deprecated)
+
+- (void)setCurrentMonth:(NSDate *)currentMonth
+{
+ self.currentPage = currentMonth;
+}
+
+- (NSDate *)currentMonth
+{
+ return self.currentPage;
+}
+
+- (void)setFlow:(FSCalendarFlow)flow
+{
+ self.scrollDirection = (FSCalendarScrollDirection)flow;
+}
+
+- (FSCalendarFlow)flow
+{
+ return (FSCalendarFlow)self.scrollDirection;
+}
+
+- (void)setSelectedDate:(NSDate *)selectedDate
+{
+ [self selectDate:selectedDate];
+}
+
+- (void)setSelectedDate:(NSDate *)selectedDate animate:(BOOL)animate
+{
+ [self selectDate:selectedDate scrollToDate:animate];
+}
+
+- (BOOL)date:(NSDate *)date sharesSameMonthWithDate:(NSDate *)anotherDate
+{
+ return [self yearOfDate:date] == [self yearOfDate:anotherDate] && [self monthOfDate:date] == [self monthOfDate:anotherDate];
+}
+
+- (BOOL)date:(NSDate *)date sharesSameWeekWithDate:(NSDate *)anotherDate
+{
+ return [self yearOfDate:date] == [self yearOfDate:anotherDate] && [self weekOfDate:date] == [self weekOfDate:anotherDate];
+}
+
+- (BOOL)date:(NSDate *)date sharesSameDayWithDate:(NSDate *)anotherDate
+{
+ return [self yearOfDate:date] == [self yearOfDate:anotherDate] && [self monthOfDate:date] == [self monthOfDate:anotherDate] && [self dayOfDate:date] == [self dayOfDate:anotherDate];
+}
+
+@end
diff --git a/iOS/Pods/FSCalendar/FSCalendar/FSCalendar.h b/iOS/Pods/FSCalendar/FSCalendar/FSCalendar.h
index 71e2e501..ba6c61f2 100644
--- a/iOS/Pods/FSCalendar/FSCalendar/FSCalendar.h
+++ b/iOS/Pods/FSCalendar/FSCalendar/FSCalendar.h
@@ -7,23 +7,22 @@
//
// https://github.com/WenchaoD
//
+//
+// FSCalendar is a superior awesome calendar control with high performance, high customizablility and very simple usage.
+//
+// @warning All NSDate instances used in the calendar should be managed by the DateTools category. See FSCalendar+DateTools.
+//
+// @see FSCalendarDataSource
+// @see FSCalendarDelegate
+// @see FSCalendarDelegateAppearance
+// @see FSCalendarAppearance
+// @see FSCalendar+DateTools
+//
#import
#import "FSCalendarAppearance.h"
#import "FSCalendarConstance.h"
-/**
- * FSCalendar is a superior awesome calendar control with high performance, high customizablility and very simple usage.
- *
- * @warning All NSDate instances used in the calendar should be managed by the DateTools category. See FSCalendar+DateTools.
- *
- * @see FSCalendarDataSource
- * @see FSCalendarDelegate
- * @see FSCalendarDelegateAppearance
- * @see FSCalendarAppearance
- * @see FSCalendar+DateTools
- */
-
//! Project version number for FSCalendar.
FOUNDATION_EXPORT double FSCalendarVersionNumber;
@@ -57,6 +56,11 @@ NS_ASSUME_NONNULL_BEGIN
@optional
+/**
+ * Asks the dataSource for a title for the specific date as a replacement of the day text
+ */
+- (nullable NSString *)calendar:(FSCalendar *)calendar titleForDate:(NSDate *)date;
+
/**
* Asks the dataSource for a subtitle for the specific date under the day text.
*/
@@ -319,6 +323,17 @@ IB_DESIGNABLE
*/
@property (assign, nonatomic) IBInspectable BOOL showsPlaceholders;
+/**
+ * A Boolean value that determines whether the calendar should show a handle for control the scope. Default is NO;
+ */
+@property (assign, nonatomic) IBInspectable BOOL showsScopeHandle;
+
+
+/**
+ * The multiplier of line height while paging enabled is NO. Default is 1.0;
+ */
+@property (assign, nonatomic) IBInspectable CGFloat lineHeightMultiplier;
+
/**
* The calendar appearance used to control the global fonts、colors .etc
*/
diff --git a/iOS/Pods/FSCalendar/FSCalendar/FSCalendar.m b/iOS/Pods/FSCalendar/FSCalendar/FSCalendar.m
index 7505e4c3..1d0730c7 100644
--- a/iOS/Pods/FSCalendar/FSCalendar/FSCalendar.m
+++ b/iOS/Pods/FSCalendar/FSCalendar/FSCalendar.m
@@ -12,9 +12,9 @@
#import "FSCalendarCell.h"
#import "FSCalendarFlowLayout.h"
#import "FSCalendarAnimator.h"
+#import "FSCalendarScopeHandle.h"
#import "UIView+FSExtension.h"
-#import "NSString+FSExtension.h"
#import "FSCalendarDynamicHeader.h"
#import "FSCalendarCollectionView.h"
@@ -26,6 +26,7 @@ typedef NS_ENUM(NSUInteger, FSCalendarOrientation) {
@interface FSCalendar (DataSourceAndDelegate)
- (NSInteger)numberOfEventsForDate:(NSDate *)date;
+- (NSString *)titleForDate:(NSDate *)date;
- (NSString *)subtitleForDate:(NSDate *)date;
- (UIImage *)imageForDate:(NSDate *)date;
- (NSDate *)minimumDateForCalendar;
@@ -50,11 +51,9 @@ - (BOOL)boundingRectWillChange:(BOOL)animated;
@end
-@interface FSCalendar ()
+@interface FSCalendar ()
{
NSMutableArray *_selectedDates;
- NSDate *_minimumDate;
- NSDate *_maximumDate;
}
@property (strong, nonatomic) NSMutableArray *weekdays;
@property (strong, nonatomic) NSMapTable *stickyHeaderMapTable;
@@ -69,6 +68,7 @@ @interface FSCalendar ()
@property (weak , nonatomic) CAShapeLayer *maskLayer;
@property (weak , nonatomic) UIView *topBorder;
@property (weak , nonatomic) UIView *bottomBorder;
+@property (weak , nonatomic) FSCalendarScopeHandle *scopeHandle;
@property (weak , nonatomic) FSCalendarCollectionView *collectionView;
@property (weak , nonatomic) FSCalendarFlowLayout *collectionViewLayout;
@property (strong, nonatomic) FSCalendarAnimator *animator;
@@ -171,6 +171,7 @@ - (void)initialize
_firstWeekday = 1;
[self invalidateDateTools];
+
#if TARGET_INTERFACE_BUILDER
_minimumDate = [self beginingOfMonthOfDate:[NSDate date]];
_maximumDate = [self dateByAddingMonths:4 toDate:_minimumDate];
@@ -186,6 +187,7 @@ - (void)initialize
_preferredHeaderHeight = FSCalendarAutomaticDimension;
_preferredWeekdayHeight = FSCalendarAutomaticDimension;
_preferredRowHeight = FSCalendarAutomaticDimension;
+ _lineHeightMultiplier = 1.0;
_scrollDirection = FSCalendarScrollDirectionHorizontal;
_scope = FSCalendarScopeMonth;
@@ -215,6 +217,7 @@ - (void)initialize
UIView *daysContainer = [[UIView alloc] initWithFrame:CGRectZero];
daysContainer.backgroundColor = [UIColor clearColor];
+ daysContainer.clipsToBounds = YES;
[contentView addSubview:daysContainer];
self.daysContainer = daysContainer;
@@ -241,12 +244,12 @@ - (void)initialize
self.collectionViewLayout = collectionViewLayout;
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
- view.backgroundColor = [[UIColor lightGrayColor] colorWithAlphaComponent:0.25];
+ view.backgroundColor = FSCalendarStandardSeparatorColor;
[self addSubview:view];
self.topBorder = view;
view = [[UIView alloc] initWithFrame:CGRectZero];
- view.backgroundColor = _topBorder.backgroundColor;
+ view.backgroundColor = FSCalendarStandardSeparatorColor;
[self addSubview:view];
self.bottomBorder = view;
@@ -290,20 +293,31 @@ - (void)setFrame:(CGRect)frame
- (void)layoutSubviews
{
[super layoutSubviews];
+
_supressEvent = YES;
if (_needsAdjustingViewFrame) {
+ if (CGSizeEqualToSize(_animator.cachedMonthSize, CGSizeZero)) {
+ _animator.cachedMonthSize = self.frame.size;
+ }
+
BOOL needsAdjustingBoundingRect = self.scope == FSCalendarScopeMonth && !_showsPlaceholders && !self.hasValidateVisibleLayout;
- _contentView.frame = self.bounds;
+ if (_scopeHandle) {
+ CGFloat scopeHandleHeight = self.animator.cachedMonthSize.height*0.08;
+ _contentView.frame = CGRectMake(0, 0, self.fs_width, self.fs_height-scopeHandleHeight);
+ _scopeHandle.frame = CGRectMake(0, _contentView.fs_bottom, self.fs_width, scopeHandleHeight);
+ } else {
+ _contentView.frame = self.bounds;
+ }
if (_needsLayoutForWeekMode) _scope = FSCalendarScopeMonth;
CGFloat headerHeight = self.preferredHeaderHeight;
CGFloat weekdayHeight = self.preferredWeekdayHeight;
CGFloat rowHeight = self.preferredRowHeight;
- CGFloat weekdayWidth = self.contentView.fs_width/_weekdays.count;
+ CGFloat weekdayWidth = self.fs_width/_weekdays.count;
CGFloat padding = weekdayHeight*0.1;
if (self.scrollDirection == UICollectionViewScrollDirectionHorizontal) {
padding = FSCalendarFloor(padding);
@@ -326,8 +340,9 @@ - (void)layoutSubviews
switch (_scope) {
case FSCalendarScopeMonth: {
CGFloat contentHeight = rowHeight*6 + padding*2;
- _daysContainer.frame = CGRectMake(0, headerHeight+weekdayHeight, self.fs_width, contentHeight);
- _collectionView.frame = _daysContainer.bounds;
+ CGFloat currentHeight = rowHeight*[self numberOfRowsInMonth:self.currentPage] + padding*2;
+ _daysContainer.frame = CGRectMake(0, headerHeight+weekdayHeight, self.fs_width, currentHeight);
+ _collectionView.frame = CGRectMake(0, 0, _daysContainer.fs_width, contentHeight);
if (needsAdjustingBoundingRect) {
self.animator.state = FSCalendarTransitionStateInProgress;
[self boundingRectWillChange:NO];
@@ -338,7 +353,7 @@ - (void)layoutSubviews
case FSCalendarScopeWeek: {
CGFloat contentHeight = rowHeight + padding*2;
_daysContainer.frame = CGRectMake(0, headerHeight+weekdayHeight, self.fs_width, contentHeight);
- _collectionView.frame = _daysContainer.bounds;
+ _collectionView.frame = CGRectMake(0, 0, _daysContainer.fs_width, contentHeight);
break;
}
}
@@ -351,6 +366,7 @@ - (void)layoutSubviews
}
_topBorder.frame = CGRectMake(0, -1, self.fs_width, 1);
_bottomBorder.frame = CGRectMake(0, self.fs_height, self.fs_width, 1);
+ _scopeHandle.fs_bottom = _bottomBorder.fs_top;
}
if (_needsAdjustingTextSize) {
@@ -366,10 +382,10 @@ - (void)layoutSubviews
if (_needsAdjustingMonthPosition) {
_needsAdjustingMonthPosition = NO;
_supressEvent = NO;
- BOOL oldValue = [CATransaction disableActions];
+ [CATransaction begin];
[CATransaction setDisableActions:YES];
[self scrollToPageForDate:_pagingEnabled?_currentPage:(_currentPage?:self.selectedDate) animated:NO];
- [CATransaction setDisableActions:oldValue];
+ [CATransaction commit];
}
}
@@ -382,12 +398,12 @@ - (void)layoutSublayersOfLayer:(CALayer *)layer
[super layoutSublayersOfLayer:layer];
if (layer == self.layer) {
if (_needsAdjustingViewFrame) {
- _needsAdjustingViewFrame = NO;
-
CGSize size = [self sizeThatFits:self.frame.size];
_maskLayer.frame = self.bounds;
_maskLayer.path = [UIBezierPath bezierPathWithRect:(CGRect){CGPointZero,size}].CGPath;
-
+ dispatch_async(dispatch_get_main_queue(), ^{
+ _needsAdjustingViewFrame = NO;
+ });
}
}
}
@@ -426,10 +442,12 @@ - (CGSize)sizeThatFits:(CGSize)size scope:(FSCalendarScope)scope
switch (scope) {
case FSCalendarScopeMonth: {
CGFloat height = weekdayHeight + headerHeight + [self numberOfRowsInMonth:_currentPage]*rowHeight + paddings;
+ height += _scopeHandle.fs_height;
return CGSizeMake(size.width, height);
}
case FSCalendarScopeWeek: {
CGFloat height = weekdayHeight + headerHeight + rowHeight + paddings;
+ height += _scopeHandle.fs_height;
return CGSizeMake(size.width, height);
}
}
@@ -493,8 +511,8 @@ - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView
[stickyHeader setNeedsLayout];
NSArray *allKeys = [_stickyHeaderMapTable.dictionaryRepresentation allKeysForObject:stickyHeader];
if (allKeys.count) {
- [allKeys enumerateObjectsUsingBlock:^(NSIndexPath *indexPath, NSUInteger idx, BOOL *stop) {
- [_stickyHeaderMapTable removeObjectForKey:indexPath];
+ [allKeys enumerateObjectsUsingBlock:^(NSIndexPath *itemIndexPath, NSUInteger idx, BOOL *stop) {
+ [_stickyHeaderMapTable removeObjectForKey:itemIndexPath];
}];
}
[_stickyHeaderMapTable setObject:stickyHeader forKey:indexPath];
@@ -671,29 +689,49 @@ - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoi
break;
}
}
- BOOL shouldTriggerPageChange = ((pannedOffset < 0 && targetOffset > currentOffset) ||
- (pannedOffset > 0 && targetOffset < currentOffset)) && _minimumDate;
+
+ NSDate *targetPage = nil;
+ switch (_scope) {
+ case FSCalendarScopeMonth: {
+ NSDate *minimumPage = [self beginingOfMonthOfDate:_minimumDate];
+ targetPage = [self dateByAddingMonths:targetOffset/contentSize toDate:minimumPage];
+ break;
+ }
+ case FSCalendarScopeWeek: {
+ NSDate *minimumPage = [self beginingOfWeekOfDate:_minimumDate];
+ targetPage = [self dateByAddingWeeks:targetOffset/contentSize toDate:minimumPage];
+ break;
+ }
+ }
+ BOOL shouldTriggerPageChange = [self isDateInDifferentPage:targetPage];
if (shouldTriggerPageChange) {
NSDate *lastPage = _currentPage;
[self willChangeValueForKey:@"currentPage"];
- switch (_scope) {
- case FSCalendarScopeMonth: {
- NSDate *minimumPage = [self beginingOfMonthOfDate:_minimumDate];
- _currentPage = [self dateByAddingMonths:targetOffset/contentSize toDate:minimumPage];
- break;
- }
- case FSCalendarScopeWeek: {
- NSDate *minimumPage = [self beginingOfWeekOfDate:_minimumDate];
- _currentPage = [self dateByAddingWeeks:targetOffset/contentSize toDate:minimumPage];
- break;
- }
- }
+ _currentPage = targetPage;
[self currentPageDidChange];
- if (!_showsPlaceholders && self.animator.state == FSCalendarTransitionStateIdle) {
+ if (!_showsPlaceholders) {
[self.animator performBoudingRectTransitionFromMonth:lastPage toMonth:_currentPage duration:0.25];
}
[self didChangeValueForKey:@"currentPage"];
}
+
+ // Disable all inner gestures to avoid missing event
+ [scrollView.gestureRecognizers enumerateObjectsUsingBlock:^(__kindof UIGestureRecognizer * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
+ if (obj != scrollView.panGestureRecognizer) {
+ obj.enabled = NO;
+ }
+ }];
+
+}
+
+- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
+{
+ // Recover all disabled gestures
+ [scrollView.gestureRecognizers enumerateObjectsUsingBlock:^(__kindof UIGestureRecognizer * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
+ if (obj != scrollView.panGestureRecognizer) {
+ obj.enabled = YES;
+ }
+ }];
}
#pragma mark - Notification
@@ -705,18 +743,6 @@ - (void)orientationDidChange:(NSNotification *)notification
#pragma mark - Properties
-- (void)setAppearance:(FSCalendarAppearance *)appearance
-{
- if (_appearance != appearance) {
- _appearance = appearance;
- }
-}
-
-- (FSCalendarAppearance *)appearance
-{
- return _appearance;
-}
-
- (void)setScrollDirection:(FSCalendarScrollDirection)scrollDirection
{
if (_scrollDirection != scrollDirection) {
@@ -968,11 +994,12 @@ - (CGFloat)preferredHeaderHeight
if (_headerHeight == FSCalendarAutomaticDimension) {
if (_preferredWeekdayHeight == FSCalendarAutomaticDimension) {
if (!self.floatingMode) {
- CGFloat divider = _scope == FSCalendarScopeMonth ? FSCalendarStandardMonthlyPageHeight : FSCalendarStandardWeeklyPageHeight;
- _preferredHeaderHeight = (FSCalendarStandardHeaderHeight/divider)*self.fs_height;
+ CGFloat divider = FSCalendarStandardMonthlyPageHeight;
+ CGFloat contentHeight = self.animator.cachedMonthSize.height*(1-_showsScopeHandle*0.08);
+ _preferredHeaderHeight = (FSCalendarStandardHeaderHeight/divider)*contentHeight;
_preferredHeaderHeight -= (_preferredHeaderHeight-FSCalendarStandardHeaderHeight)*0.5;
} else {
- _preferredHeaderHeight = FSCalendarStandardHeaderHeight*MAX(1, FSCalendarDeviceIsIPad*1.5);
+ _preferredHeaderHeight = FSCalendarStandardHeaderHeight*MAX(1, FSCalendarDeviceIsIPad*1.5)*_lineHeightMultiplier;
}
}
return _preferredHeaderHeight;
@@ -985,10 +1012,11 @@ - (CGFloat)preferredWeekdayHeight
if (_weekdayHeight == FSCalendarAutomaticDimension) {
if (_preferredWeekdayHeight == FSCalendarAutomaticDimension) {
if (!self.floatingMode) {
- CGFloat divider = _scope == FSCalendarScopeMonth ? FSCalendarStandardMonthlyPageHeight : FSCalendarStandardWeeklyPageHeight;
- _preferredWeekdayHeight = (FSCalendarStandardWeekdayHeight/divider)*self.fs_height;
+ CGFloat divider = FSCalendarStandardMonthlyPageHeight;
+ CGFloat contentHeight = self.animator.cachedMonthSize.height*(1-_showsScopeHandle*0.08);
+ _preferredWeekdayHeight = (FSCalendarStandardWeekdayHeight/divider)*contentHeight;
} else {
- _preferredWeekdayHeight = FSCalendarStandardWeekdayHeight*MAX(1, FSCalendarDeviceIsIPad*1.5);
+ _preferredWeekdayHeight = FSCalendarStandardWeekdayHeight*MAX(1, FSCalendarDeviceIsIPad*1.5)*_lineHeightMultiplier;
}
}
return _preferredWeekdayHeight;
@@ -1001,24 +1029,15 @@ - (CGFloat)preferredRowHeight
if (_preferredRowHeight == FSCalendarAutomaticDimension) {
CGFloat headerHeight = self.preferredHeaderHeight;
CGFloat weekdayHeight = self.preferredWeekdayHeight;
- CGFloat contentHeight = self.fs_height-headerHeight-weekdayHeight;
+ CGFloat contentHeight = self.animator.cachedMonthSize.height-headerHeight-weekdayHeight-_scopeHandle.fs_height;
CGFloat padding = weekdayHeight*0.1;
if (self.collectionViewLayout.scrollDirection == UICollectionViewScrollDirectionHorizontal) {
padding = FSCalendarFloor(padding);
}
if (!self.floatingMode) {
- switch (_scope) {
- case FSCalendarScopeMonth: {
- _preferredRowHeight = _showsPlaceholders ? (contentHeight-padding*2)/6.0 : FSCalendarStandardRowHeight;
- break;
- }
- case FSCalendarScopeWeek: {
- _preferredRowHeight = _showsPlaceholders ? contentHeight-padding*2 : FSCalendarStandardRowHeight;
- break;
- }
- }
+ _preferredRowHeight = _showsPlaceholders ? (contentHeight-padding*2)/6.0 : FSCalendarStandardRowHeight;
} else {
- _preferredRowHeight = FSCalendarStandardRowHeight*MAX(1, FSCalendarDeviceIsIPad*1.5);
+ _preferredRowHeight = FSCalendarStandardRowHeight*MAX(1, FSCalendarDeviceIsIPad*1.5)*_lineHeightMultiplier;
}
}
return _preferredRowHeight;
@@ -1037,7 +1056,15 @@ - (BOOL)floatingMode
return _scrollEnabled && !_pagingEnabled;
}
-#pragma mark - Public
+- (void)setShowsScopeHandle:(BOOL)showsScopeHandle
+{
+ if (_showsScopeHandle != showsScopeHandle) {
+ _showsScopeHandle = showsScopeHandle;
+ [self invalidateLayout];
+ }
+}
+
+#pragma mark - Public methods
- (void)reloadData
{
@@ -1102,6 +1129,11 @@ - (void)setShowsPlaceholders:(BOOL)showsPlaceholders
}
}
+- (void)setLineHeightMultiplier:(CGFloat)lineHeightMultiplier
+{
+ _lineHeightMultiplier = MAX(0, lineHeightMultiplier);
+}
+
- (void)selectDate:(NSDate *)date
{
[self selectDate:date scrollToDate:YES];
@@ -1469,6 +1501,23 @@ - (void)invalidateLayout
}
}
+ if (self.showsScopeHandle) {
+ if (!_scopeHandle) {
+ FSCalendarScopeHandle *handle = [[FSCalendarScopeHandle alloc] initWithFrame:CGRectZero];
+ handle.delegate = self.animator;
+ [self addSubview:handle];
+ self.scopeHandle = handle;
+ _needsAdjustingViewFrame = YES;
+ [self setNeedsLayout];
+ }
+ } else {
+ if (_scopeHandle) {
+ [self.scopeHandle removeFromSuperview];
+ _needsAdjustingViewFrame = YES;
+ [self setNeedsLayout];
+ }
+ }
+
_collectionView.pagingEnabled = YES;
_collectionViewLayout.scrollDirection = (UICollectionViewScrollDirection)self.scrollDirection;
@@ -1482,6 +1531,10 @@ - (void)invalidateLayout
[_weekdays removeAllObjects];
}
+ if (_scopeHandle) {
+ [_scopeHandle removeFromSuperview];
+ }
+
_collectionView.pagingEnabled = NO;
_collectionViewLayout.scrollDirection = UICollectionViewScrollDirectionVertical;
@@ -1542,6 +1595,7 @@ - (void)reloadDataForCell:(FSCalendarCell *)cell atIndexPath:(NSIndexPath *)inde
cell.date = [self dateForIndexPath:indexPath];
cell.image = [self imageForDate:cell.date];
cell.numberOfEvents = [self numberOfEventsForDate:cell.date];
+ cell.title = [self titleForDate:cell.date];
cell.subtitle = [self subtitleForDate:cell.date];
cell.dateIsSelected = [_selectedDates containsObject:cell.date];
cell.dateIsToday = [self isDateInToday:cell.date];
@@ -1583,6 +1637,7 @@ - (void)reloadVisibleCells
- (void)selectCounterpartDate:(NSDate *)date
{
+ if (!_showsPlaceholders) return;
if (!self.floatingMode) {
[_collectionView.visibleCells enumerateObjectsUsingBlock:^(FSCalendarCell *cell, NSUInteger idx, BOOL *stop) {
if (cell.dateIsPlaceholder && [self isDate:cell.date equalToDate:date toCalendarUnit:FSCalendarUnitDay] && !cell.dateIsSelected) {
@@ -1596,6 +1651,7 @@ - (void)selectCounterpartDate:(NSDate *)date
- (void)deselectCounterpartDate:(NSDate *)date
{
+ if (!_showsPlaceholders) return;
if (self.floatingMode) {
[_collectionView.visibleCells enumerateObjectsUsingBlock:^(FSCalendarCell *cell, NSUInteger index, BOOL *stop) {
if (cell.dateIsPlaceholder && cell.dateIsSelected) {
@@ -1656,6 +1712,8 @@ - (void)invalidateViewFrames
[self.collectionView.visibleCells setValue:@YES forKey:@"needsAdjustingViewFrame"];
self.header.needsAdjustingViewFrame = YES;
[self.appearance invalidateFonts];
+ [self.collectionViewLayout invalidateLayout];
+ [self setNeedsLayout];
}
// The best way to detect orientation
@@ -1857,6 +1915,14 @@ - (BOOL)boundingRectWillChange:(BOOL)animated
#pragma mark - DataSource
+- (NSString *)titleForDate:(NSDate *)date
+{
+ if (_dataSource && [_dataSource respondsToSelector:@selector(calendar:titleForDate:)]) {
+ return [_dataSource calendar:self titleForDate:date];
+ }
+ return nil;
+}
+
- (NSString *)subtitleForDate:(NSDate *)date
{
#if !TARGET_INTERFACE_BUILDER
@@ -1938,342 +2004,3 @@ - (NSDate *)maximumDateForCalendar
@end
-#pragma mark - DateTools
-
-
-@implementation FSCalendar (DateTools)
-
-#pragma mark - Public methods
-
-- (NSInteger)yearOfDate:(NSDate *)date
-{
- NSDateComponents *component = [self.calendar components:NSCalendarUnitYear fromDate:date];
- return component.year;
-}
-
-- (NSInteger)monthOfDate:(NSDate *)date
-{
- NSDateComponents *component = [self.calendar components:NSCalendarUnitMonth
- fromDate:date];
- return component.month;
-}
-
-- (NSInteger)dayOfDate:(NSDate *)date
-{
- NSDateComponents *component = [self.calendar components:NSCalendarUnitDay
- fromDate:date];
- return component.day;
-}
-
-- (NSInteger)weekdayOfDate:(NSDate *)date
-{
- NSDateComponents *component = [self.calendar components:NSCalendarUnitWeekday fromDate:date];
- return component.weekday;
-}
-
-- (NSInteger)weekOfDate:(NSDate *)date
-{
- NSDateComponents *component = [self.calendar components:NSCalendarUnitWeekOfYear fromDate:date];
- return component.weekOfYear;
-}
-
-- (NSInteger)hourOfDate:(NSDate *)date
-{
- NSDateComponents *component = [self.calendar components:NSCalendarUnitHour
- fromDate:date];
- return component.hour;
-}
-
-- (NSInteger)miniuteOfDate:(NSDate *)date
-{
- NSDateComponents *component = [self.calendar components:NSCalendarUnitMinute
- fromDate:date];
- return component.minute;
-}
-
-- (NSInteger)secondOfDate:(NSDate *)date
-{
- NSDateComponents *component = [self.calendar components:NSCalendarUnitSecond
- fromDate:date];
- return component.second;
-}
-
-- (NSInteger)numberOfRowsInMonth:(NSDate *)month
-{
- if (!month) return 0;
- if (self.showsPlaceholders) return 6;
- NSDate *firstDayOfMonth = [self beginingOfMonthOfDate:month];
- NSInteger weekdayOfFirstDay = [self weekdayOfDate:firstDayOfMonth];
- NSInteger numberOfDaysInMonth = [self numberOfDatesInMonthOfDate:month];
- NSInteger numberOfPlaceholdersForPrev = ((weekdayOfFirstDay - _firstWeekday) + 7) % 7;
- NSInteger headDayCount = numberOfDaysInMonth + numberOfPlaceholdersForPrev;
- NSInteger numberOfRows = (headDayCount/7) + (headDayCount%7>0);
- return numberOfRows;
-}
-
-- (NSDate *)dateByIgnoringTimeComponentsOfDate:(NSDate *)date
-{
- NSDateComponents *components = [self.calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour fromDate:date];
- components.hour = FSCalendarDefaultHourComponent;
- return [self.calendar dateFromComponents:components];
-}
-
-- (NSDate *)beginingOfMonthOfDate:(NSDate *)date
-{
- NSDateComponents *components = [self.calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour fromDate:date];
- components.day = 1;
- return [self.calendar dateFromComponents:components];
-}
-
-- (NSDate *)endOfMonthOfDate:(NSDate *)date
-{
- NSDateComponents *components = [self.calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour fromDate:date];
- components.month++;
- components.day = 0;
- return [self.calendar dateFromComponents:components];
-}
-
-- (NSDate *)beginingOfWeekOfDate:(NSDate *)date
-{
- NSDateComponents *weekdayComponents = [self.calendar components:NSCalendarUnitWeekday fromDate:date];
- NSDateComponents *componentsToSubtract = self.components;
- componentsToSubtract.day = - (weekdayComponents.weekday - self.calendar.firstWeekday);
- componentsToSubtract.day = (componentsToSubtract.day-7) % 7;
- NSDate *beginningOfWeek = [self.calendar dateByAddingComponents:componentsToSubtract toDate:date options:0];
- NSDateComponents *components = [self.calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour fromDate:beginningOfWeek];
- beginningOfWeek = [self.calendar dateFromComponents:components];
- componentsToSubtract.day = NSIntegerMax;
- return beginningOfWeek;
-}
-
-- (NSDate *)middleOfWeekFromDate:(NSDate *)date
-{
- NSDateComponents *weekdayComponents = [self.calendar components:NSCalendarUnitWeekday fromDate:date];
- NSDateComponents *componentsToSubtract = self.components;
- componentsToSubtract.day = - (weekdayComponents.weekday - self.calendar.firstWeekday) + 3;
- NSDate *middleOfWeek = [self.calendar dateByAddingComponents:componentsToSubtract toDate:date options:0];
- NSDateComponents *components = [self.calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour fromDate:middleOfWeek];
- middleOfWeek = [self.calendar dateFromComponents:components];
- componentsToSubtract.day = NSIntegerMax;
- return middleOfWeek;
-}
-
-- (NSDate *)tomorrowOfDate:(NSDate *)date
-{
- NSDateComponents *components = [self.calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour fromDate:date];
- components.day++;
- components.hour = FSCalendarDefaultHourComponent;
- return [self.calendar dateFromComponents:components];
-}
-
-- (NSDate *)yesterdayOfDate:(NSDate *)date
-{
- NSDateComponents *components = [self.calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour fromDate:date];
- components.day--;
- components.hour = FSCalendarDefaultHourComponent;
- return [self.calendar dateFromComponents:components];
-}
-
-- (NSInteger)numberOfDatesInMonthOfDate:(NSDate *)date
-{
- NSRange days = [self.calendar rangeOfUnit:NSCalendarUnitDay
- inUnit:NSCalendarUnitMonth
- forDate:date];
- return days.length;
-}
-
-- (NSDate *)dateFromString:(NSString *)string format:(NSString *)format
-{
- self.formatter.dateFormat = format;
- return [self.formatter dateFromString:string];
-}
-
-- (NSDate *)dateWithYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day
-{
- NSDateComponents *components = self.components;
- components.year = year;
- components.month = month;
- components.day = day;
- components.hour = FSCalendarDefaultHourComponent;
- NSDate *date = [self.calendar dateFromComponents:components];
- components.year = NSIntegerMax;
- components.month = NSIntegerMax;
- components.day = NSIntegerMax;
- components.hour = NSIntegerMax;
- return date;
-}
-
-- (NSDate *)dateByAddingYears:(NSInteger)years toDate:(NSDate *)date
-{
- NSDateComponents *components = self.components;
- components.year = years;
- NSDate *d = [self.calendar dateByAddingComponents:components toDate:date options:0];
- components.year = NSIntegerMax;
- return d;
-}
-
-- (NSDate *)dateBySubstractingYears:(NSInteger)years fromDate:(NSDate *)date
-{
- return [self dateByAddingYears:-years toDate:date];
-}
-
-- (NSDate *)dateByAddingMonths:(NSInteger)months toDate:(NSDate *)date
-{
- NSDateComponents *components = self.components;
- components.month = months;
- NSDate *d = [self.calendar dateByAddingComponents:components toDate:date options:0];
- components.month = NSIntegerMax;
- return d;
-}
-
-- (NSDate *)dateBySubstractingMonths:(NSInteger)months fromDate:(NSDate *)date
-{
- return [self dateByAddingMonths:-months toDate:date];
-}
-
-- (NSDate *)dateByAddingWeeks:(NSInteger)weeks toDate:(NSDate *)date
-{
- NSDateComponents *components = self.components;
- components.weekOfYear = weeks;
- NSDate *d = [self.calendar dateByAddingComponents:components toDate:date options:0];
- components.weekOfYear = NSIntegerMax;
- return d;
-}
-
-- (NSDate *)dateBySubstractingWeeks:(NSInteger)weeks fromDate:(NSDate *)date
-{
- return [self dateByAddingWeeks:-weeks toDate:date];
-}
-
-- (NSDate *)dateByAddingDays:(NSInteger)days toDate:(NSDate *)date
-{
- NSDateComponents *components = self.components;
- components.day = days;
- NSDate *d = [self.calendar dateByAddingComponents:components toDate:date options:0];
- components.day = NSIntegerMax;
- return d;
-}
-
-- (NSDate *)dateBySubstractingDays:(NSInteger)days fromDate:(NSDate *)date
-{
- return [self dateByAddingDays:-days toDate:date];
-}
-
-- (NSInteger)yearsFromDate:(NSDate *)fromDate toDate:(NSDate *)toDate
-{
- NSDateComponents *components = [self.calendar components:NSCalendarUnitYear
- fromDate:fromDate
- toDate:toDate
- options:0];
- return components.year;
-}
-
-- (NSInteger)monthsFromDate:(NSDate *)fromDate toDate:(NSDate *)toDate
-{
- NSDateComponents *components = [self.calendar components:NSCalendarUnitMonth
- fromDate:fromDate
- toDate:toDate
- options:0];
- return components.month;
-}
-
-- (NSInteger)weeksFromDate:(NSDate *)fromDate toDate:(NSDate *)toDate
-{
- NSDateComponents *components = [self.calendar components:NSCalendarUnitWeekOfYear
- fromDate:fromDate
- toDate:toDate
- options:0];
- return components.weekOfYear;
-}
-
-- (NSInteger)daysFromDate:(NSDate *)fromDate toDate:(NSDate *)toDate
-{
- NSDateComponents *components = [self.calendar components:NSCalendarUnitDay
- fromDate:fromDate
- toDate:toDate
- options:0];
- return components.day;
-}
-
-- (BOOL)isDate:(NSDate *)date1 equalToDate:(NSDate *)date2 toCalendarUnit:(FSCalendarUnit)unit
-{
- switch (unit) {
- case FSCalendarUnitMonth:
- return [self yearOfDate:date1] == [self yearOfDate:date2] && [self monthOfDate:date1] == [self monthOfDate:date2];
- case FSCalendarUnitWeekOfYear:
- return [self yearOfDate:date1] == [self yearOfDate:date2] && [self weekOfDate:date1] == [self weekOfDate:date2];
- case FSCalendarUnitDay:
- return [self yearOfDate:date1] == [self yearOfDate:date2] && [self monthOfDate:date1] == [self monthOfDate:date2] && [self dayOfDate:date1] == [self dayOfDate:date2];
- }
- return NO;
-}
-
-- (BOOL)isDateInToday:(NSDate *)date
-{
- return [self isDate:date equalToDate:_today toCalendarUnit:FSCalendarUnitDay];
-}
-
-- (NSString *)stringFromDate:(NSDate *)date format:(NSString *)format
-{
- self.formatter.dateFormat = format;
- return [self.formatter stringFromDate:date];
-}
-
-- (NSString *)stringFromDate:(NSDate *)date
-{
- return [self stringFromDate:date format:@"yyyy-MM-dd"];
-}
-
-@end
-
-#pragma mark - Deprecate
-
-@implementation FSCalendar (Deprecated)
-
-- (void)setCurrentMonth:(NSDate *)currentMonth
-{
- self.currentPage = currentMonth;
-}
-
-- (NSDate *)currentMonth
-{
- return self.currentPage;
-}
-
-- (void)setFlow:(FSCalendarFlow)flow
-{
- self.scrollDirection = (FSCalendarScrollDirection)flow;
-}
-
-- (FSCalendarFlow)flow
-{
- return (FSCalendarFlow)self.scrollDirection;
-}
-
-- (void)setSelectedDate:(NSDate *)selectedDate
-{
- [self selectDate:selectedDate];
-}
-
-- (void)setSelectedDate:(NSDate *)selectedDate animate:(BOOL)animate
-{
- [self selectDate:selectedDate scrollToDate:animate];
-}
-
-- (BOOL)date:(NSDate *)date sharesSameMonthWithDate:(NSDate *)anotherDate
-{
- return [self yearOfDate:date] == [self yearOfDate:anotherDate] && [self monthOfDate:date] == [self monthOfDate:anotherDate];
-}
-
-- (BOOL)date:(NSDate *)date sharesSameWeekWithDate:(NSDate *)anotherDate
-{
- return [self yearOfDate:date] == [self yearOfDate:anotherDate] && [self weekOfDate:date] == [self weekOfDate:anotherDate];
-}
-
-- (BOOL)date:(NSDate *)date sharesSameDayWithDate:(NSDate *)anotherDate
-{
- return [self yearOfDate:date] == [self yearOfDate:anotherDate] && [self monthOfDate:date] == [self monthOfDate:anotherDate] && [self dayOfDate:date] == [self dayOfDate:anotherDate];
-}
-
-@end
-
diff --git a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarAnimator.h b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarAnimator.h
index 10165e15..d0cfa079 100644
--- a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarAnimator.h
+++ b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarAnimator.h
@@ -6,11 +6,11 @@
// Copyright © 2016 wenchaoios. All rights reserved.
//
-#import
#import "FSCalendar.h"
#import "FSCalendarCollectionView.h"
#import "FSCalendarFlowLayout.h"
#import "FSCalendarDynamicHeader.h"
+#import "FSCalendarScopeHandle.h"
typedef NS_ENUM(NSUInteger, FSCalendarTransition) {
FSCalendarTransitionNone,
@@ -22,7 +22,7 @@ typedef NS_ENUM(NSUInteger, FSCalendarTransitionState) {
FSCalendarTransitionStateInProgress
};
-@interface FSCalendarAnimator : NSObject
+@interface FSCalendarAnimator : NSObject
@property (weak, nonatomic) FSCalendar *calendar;
@property (weak, nonatomic) FSCalendarCollectionView *collectionView;
@@ -31,7 +31,25 @@ typedef NS_ENUM(NSUInteger, FSCalendarTransitionState) {
@property (assign, nonatomic) FSCalendarTransition transition;
@property (assign, nonatomic) FSCalendarTransitionState state;
+@property (assign, nonatomic) CGSize cachedMonthSize;
+
- (void)performScopeTransitionFromScope:(FSCalendarScope)fromScope toScope:(FSCalendarScope)toScope animated:(BOOL)animated;
- (void)performBoudingRectTransitionFromMonth:(NSDate *)fromMonth toMonth:(NSDate *)toMonth duration:(CGFloat)duration;
@end
+
+
+@interface FSCalendarTransitionAttributes : NSObject
+
+@property (assign, nonatomic) CGRect sourceBounds;
+@property (assign, nonatomic) CGRect targetBounds;
+@property (strong, nonatomic) UIBezierPath *sourceMask;
+@property (strong, nonatomic) UIBezierPath *targetMask;
+@property (strong, nonatomic) NSDate *sourcePage;
+@property (strong, nonatomic) NSDate *targetPage;
+@property (assign, nonatomic) NSInteger focusedRowNumber;
+@property (assign, nonatomic) NSDate *focusedDate;
+@property (strong, nonatomic) NSDate *firstDayOfMonth;
+
+@end
+
diff --git a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarAnimator.m b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarAnimator.m
index 04fe1171..79cd4497 100644
--- a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarAnimator.m
+++ b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarAnimator.m
@@ -7,8 +7,33 @@
//
#import "FSCalendarAnimator.h"
-#import
#import "UIView+FSExtension.h"
+#import
+
+@interface FSCalendarAnimator ()
+
+@property (readonly, nonatomic) FSCalendarTransitionAttributes *transitionAttributes;
+@property (strong , nonatomic) FSCalendarTransitionAttributes *pendingAttributes;
+@property (assign , nonatomic) CGFloat lastTranslation;
+
+@property (assign , nonatomic) FSCalendarScope calendarScope;
+@property (strong , nonatomic) NSDate *calendarCurrentPage;
+
+- (void)performTransitionCompletionAnimated:(BOOL)animated;
+- (void)performTransitionCompletion:(FSCalendarTransition)transition animated:(BOOL)animated;
+
+- (void)performAlphaAnimationFrom:(CGFloat)fromAlpha to:(CGFloat)toAlpha duration:(CGFloat)duration exception:(NSInteger)exception;
+- (void)performPathAnimationFrom:(CGPathRef)fromPath to:(CGPathRef)toPath duration:(CGFloat)duration completion:(void(^)())completion;
+- (void)performForwardTransition:(FSCalendarTransition)transition fromProgress:(CGFloat)progress;
+- (void)performBackwardTransition:(FSCalendarTransition)transition fromProgress:(CGFloat)progress;
+- (void)performAlphaAnimationWithProgress:(CGFloat)progress;
+- (void)performPathAnimationWithProgress:(CGFloat)progress;
+
+- (CGRect)boundingRectForScope:(FSCalendarScope)scope;
+
+- (void)boundingRectWillChange:(CGRect)targetBounds animated:(BOOL)animated;
+
+@end
@implementation FSCalendarAnimator
@@ -28,170 +53,38 @@ - (void)performScopeTransitionFromScope:(FSCalendarScope)fromScope toScope:(FSCa
// Start transition
self.state = FSCalendarTransitionStateInProgress;
+ FSCalendarTransitionAttributes *attr = self.transitionAttributes;
+ self.pendingAttributes = attr;
switch (self.transition) {
case FSCalendarTransitionMonthToWeek: {
- CGSize contentSize = [self.calendar sizeThatFits:self.calendar.frame.size scope:FSCalendarScopeWeek];
- CGRect targetBounds = (CGRect){CGPointZero,contentSize};
-
- NSInteger focusedRowNumber = 0;
- if (self.calendar.focusOnSingleSelectedDate) {
- NSDate *focusedDate = self.calendar.selectedDate;
- if (focusedDate) {
- UICollectionViewLayoutAttributes *attributes = [self.collectionViewLayout layoutAttributesForItemAtIndexPath:[self.calendar indexPathForDate:focusedDate scope:FSCalendarScopeMonth]];
- CGPoint focuedCenter = attributes.center;
- if (CGRectContainsPoint(self.collectionView.bounds, focuedCenter)) {
- switch (self.collectionViewLayout.scrollDirection) {
- case UICollectionViewScrollDirectionHorizontal: {
- focusedRowNumber = attributes.indexPath.item%6;
- break;
- }
- case UICollectionViewScrollDirectionVertical: {
- focusedRowNumber = attributes.indexPath.item/7;
- break;
- }
- }
- } else {
- focusedDate = nil;
- }
- }
- if (!focusedDate) {
- focusedDate = self.calendar.today;
- if (focusedDate) {
- UICollectionViewLayoutAttributes *attributes = [self.collectionViewLayout layoutAttributesForItemAtIndexPath:[self.calendar indexPathForDate:focusedDate scope:FSCalendarScopeMonth]];
- CGPoint focuedCenter = attributes.center;
- if (CGRectContainsPoint(self.collectionView.bounds, focuedCenter)) {
- switch (self.collectionViewLayout.scrollDirection) {
- case UICollectionViewScrollDirectionHorizontal: {
- focusedRowNumber = attributes.indexPath.item%6;
- break;
- }
- case UICollectionViewScrollDirectionVertical: {
- focusedRowNumber = attributes.indexPath.item/7;
- break;
- }
- }
- }
- }
- }
- }
-
- NSDate *currentPage = self.calendar.currentPage;
- NSDate *minimumPage = [self.calendar beginingOfMonthOfDate:self.calendar.minimumDate];
- NSInteger visibleSection = [self.calendar monthsFromDate:minimumPage toDate:currentPage];
- NSIndexPath *firstIndexPath = [NSIndexPath indexPathForItem:0 inSection:visibleSection];
- NSDate *firstDate = [self.calendar dateForIndexPath:firstIndexPath scope:FSCalendarScopeMonth];
- currentPage = [self.calendar dateByAddingDays:focusedRowNumber*7 toDate:firstDate];
-
- Ivar currentPageIvar = class_getInstanceVariable(FSCalendar.class, "_currentPage");
- object_setIvar(self.calendar, currentPageIvar, currentPage);
-
+ self.calendarCurrentPage = attr.targetPage;
self.calendar.contentView.clipsToBounds = YES;
- self.calendar.daysContainer.clipsToBounds = YES;
+
if (animated) {
CGFloat duration = 0.3;
- // Perform alpha animation
- CABasicAnimation *opacity = [CABasicAnimation animationWithKeyPath:@"opacity"];
- opacity.duration = duration*0.6;
- opacity.removedOnCompletion = NO;
- opacity.fillMode = kCAFillModeForwards;
- opacity.toValue = @0;
- [self.collectionView.visibleCells enumerateObjectsUsingBlock:^(FSCalendarCell *cell, NSUInteger idx, BOOL *stop) {
- if (CGRectContainsPoint(self.collectionView.bounds, cell.center)) {
- BOOL shouldPerformAlpha = NO;
- NSIndexPath *indexPath = [self.collectionView indexPathForCell:cell];
- switch (self.collectionViewLayout.scrollDirection) {
- case UICollectionViewScrollDirectionHorizontal: {
- shouldPerformAlpha = indexPath.item%6 != focusedRowNumber;
- break;
- }
- case UICollectionViewScrollDirectionVertical: {
- shouldPerformAlpha = indexPath.item/7 != focusedRowNumber;
- break;
- }
- }
- if (shouldPerformAlpha) {
- [cell.contentView.layer addAnimation:opacity forKey:@"opacity"];
- }
- }
- }];
- // Perform path and frame animation
- CABasicAnimation *path = [CABasicAnimation animationWithKeyPath:@"path"];
- path.fromValue = (id)self.calendar.maskLayer.path;
- path.toValue = (id)[UIBezierPath bezierPathWithRect:targetBounds].CGPath;
- path.duration = duration;
- path.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
- [CATransaction begin];
- [CATransaction setCompletionBlock:^{
- self.state = FSCalendarTransitionStateIdle;
- self.transition = FSCalendarTransitionNone;
- self.collectionViewLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
- self.calendar.header.scrollDirection = self.collectionViewLayout.scrollDirection;
- self.calendar.maskLayer.path = [UIBezierPath bezierPathWithRect:targetBounds].CGPath;
- [self.collectionView reloadData];
- [self.collectionView layoutIfNeeded];
- [self.calendar.header reloadData];
- [self.calendar.header layoutIfNeeded];
- self.calendar.needsAdjustingMonthPosition = YES;
- self.calendar.needsAdjustingViewFrame = YES;
- [self.calendar setNeedsLayout];
- self.calendar.contentView.clipsToBounds = NO;
- self.calendar.daysContainer.clipsToBounds = NO;
+ [self performAlphaAnimationFrom:1 to:0 duration:0.22 exception:attr.focusedRowNumber];
+ [self performPathAnimationFrom:self.calendar.maskLayer.path to:attr.targetMask.CGPath duration:duration completion:^{
+ [self performTransitionCompletionAnimated:animated];
}];
- [CATransaction setAnimationDuration:duration];
- [self.calendar.maskLayer addAnimation:path forKey:@"path"];
- [CATransaction commit];
-
+
if (self.calendar.delegate && ([self.calendar.delegate respondsToSelector:@selector(calendar:boundingRectWillChange:animated:)] || [self.calendar.delegate respondsToSelector:@selector(calendarCurrentScopeWillChange:animated:)])) {
-
- [UIView beginAnimations:@"delegateTranslation" context:"translation"];
+ [UIView beginAnimations:nil context:nil];
+ [UIView setAnimationsEnabled:YES];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:duration];
- self.collectionView.fs_top = -focusedRowNumber*self.calendar.preferredRowHeight;
- self.calendar.bottomBorder.fs_top = CGRectGetMaxY(targetBounds);
- if ([self.calendar.delegate respondsToSelector:@selector(calendar:boundingRectWillChange:animated:)]) {
- [self.calendar.delegate calendar:self.calendar boundingRectWillChange:targetBounds animated:animated];
- } else {
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
- [self.calendar.delegate calendarCurrentScopeWillChange:self.calendar animated:animated];
-#pragma GCC diagnostic pop
- }
+ self.collectionView.fs_top = -attr.focusedRowNumber*self.calendar.preferredRowHeight;
+ [self boundingRectWillChange:attr.targetBounds animated:animated];
[UIView commitAnimations];
}
} else {
- self.state = FSCalendarTransitionStateIdle;
- self.transition = FSCalendarTransitionNone;
- self.collectionViewLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
- self.calendar.header.scrollDirection = self.collectionViewLayout.scrollDirection;
- self.calendar.needsAdjustingViewFrame = YES;
- self.calendar.bottomBorder.frame = CGRectMake(0, contentSize.height, self.calendar.fs_width, 1);
- self.calendar.maskLayer.path = [UIBezierPath bezierPathWithRect:targetBounds].CGPath;
- self.calendar.bottomBorder.fs_top = CGRectGetMaxY(targetBounds);
- [self.collectionView reloadData];
- [self.collectionView layoutIfNeeded];
- [self.calendar.header reloadData];
- [self.calendar.header layoutIfNeeded];
- self.calendar.needsAdjustingMonthPosition = YES;
- self.calendar.needsAdjustingViewFrame = YES;
- [self.calendar setNeedsLayout];
-
- self.calendar.contentView.clipsToBounds = NO;
- self.calendar.daysContainer.clipsToBounds = NO;
-
- if (self.calendar.delegate && [self.calendar.delegate respondsToSelector:@selector(calendar:boundingRectWillChange:animated:)]) {
- [self.calendar.delegate calendar:self.calendar boundingRectWillChange:targetBounds animated:animated];
- } else if (self.calendar.delegate && [self.calendar.delegate respondsToSelector:@selector(calendarCurrentScopeWillChange:animated:)]) {
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
- [self.calendar.delegate calendarCurrentScopeWillChange:self.calendar animated:animated];
-#pragma GCC diagnostic pop
- }
+ [self performTransitionCompletionAnimated:animated];
+ [self boundingRectWillChange:attr.targetBounds animated:animated];
}
@@ -200,49 +93,7 @@ - (void)performScopeTransitionFromScope:(FSCalendarScope)fromScope toScope:(FSCa
case FSCalendarTransitionWeekToMonth: {
- CGSize contentSize = [self.calendar sizeThatFits:self.calendar.frame.size scope:FSCalendarScopeMonth];
- CGRect targetBounds = (CGRect){CGPointZero,contentSize};
-
- NSInteger focusedRowNumber = 0;
- NSDate *currentPage = self.calendar.currentPage;
- NSDate *firstDayOfMonth = nil;
- if (self.calendar.focusOnSingleSelectedDate) {
- NSDate *focusedDate = self.calendar.selectedDate;
- if (focusedDate) {
- UICollectionViewLayoutAttributes *attributes = [self.collectionViewLayout layoutAttributesForItemAtIndexPath:[self.calendar indexPathForDate:focusedDate scope:FSCalendarScopeWeek]];
- CGPoint focuedCenter = attributes.center;
- if (CGRectContainsPoint(self.collectionView.bounds, focuedCenter)) {
- firstDayOfMonth = [self.calendar beginingOfMonthOfDate:focusedDate];
- } else {
- focusedDate = nil;
- }
- }
- if (!focusedDate) {
- focusedDate = self.calendar.today;
- if (focusedDate) {
- UICollectionViewLayoutAttributes *attributes = [self.collectionViewLayout layoutAttributesForItemAtIndexPath:[self.calendar indexPathForDate:focusedDate scope:FSCalendarScopeWeek]];
- CGPoint focuedCenter = attributes.center;
- if (CGRectContainsPoint(self.collectionView.bounds, focuedCenter)) {
- firstDayOfMonth = [self.calendar beginingOfMonthOfDate:focusedDate];
- }
- }
- };
- }
- firstDayOfMonth = firstDayOfMonth ?: [self.calendar beginingOfMonthOfDate:currentPage];
- NSInteger numberOfPlaceholdersForPrev = [self.calendar numberOfHeadPlaceholdersForMonth:firstDayOfMonth];
- NSDate *firstDateOfPage = [self.calendar dateBySubstractingDays:numberOfPlaceholdersForPrev fromDate:firstDayOfMonth];
- for (int i = 0; i < 6; i++) {
- NSDate *currentRow = [self.calendar dateByAddingWeeks:i toDate:firstDateOfPage];
- if ([self.calendar isDate:currentRow equalToDate:currentPage toCalendarUnit:FSCalendarUnitDay]) {
- focusedRowNumber = i;
- currentPage = firstDayOfMonth;
- break;
- }
- }
-
- Ivar currentPageIvar = class_getInstanceVariable(FSCalendar.class, "_currentPage");
- object_setIvar(self.calendar, currentPageIvar, currentPage);
-
+ self.calendarCurrentPage = attr.targetPage;
self.collectionViewLayout.scrollDirection = (UICollectionViewScrollDirection)self.calendar.scrollDirection;
self.calendar.header.scrollDirection = self.collectionViewLayout.scrollDirection;
@@ -255,98 +106,36 @@ - (void)performScopeTransitionFromScope:(FSCalendarScope)fromScope toScope:(FSCa
[self.calendar.header layoutIfNeeded];
self.calendar.contentView.clipsToBounds = YES;
- self.calendar.daysContainer.clipsToBounds = YES;
if (animated) {
- // Perform alpha animation
- CGFloat duration = 0.3;
- CABasicAnimation *opacity = [CABasicAnimation animationWithKeyPath:@"opacity"];
- opacity.duration = duration;
- opacity.fromValue = @0;
- opacity.toValue = @1;
- opacity.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
- [self.collectionView.visibleCells enumerateObjectsUsingBlock:^(FSCalendarCell *cell, NSUInteger idx, BOOL *stop) {
- if (CGRectContainsPoint(self.collectionView.bounds, cell.center)) {
- BOOL shouldPerformAlpha = NO;
- NSIndexPath *indexPath = [self.collectionView indexPathForCell:cell];
- switch (self.collectionViewLayout.scrollDirection) {
- case UICollectionViewScrollDirectionHorizontal: {
- shouldPerformAlpha = indexPath.item%6 != focusedRowNumber;
- break;
- }
- case UICollectionViewScrollDirectionVertical: {
- shouldPerformAlpha = indexPath.item/7 != focusedRowNumber;
- break;
- }
- }
- if (shouldPerformAlpha) {
- [cell.contentView.layer addAnimation:opacity forKey:@"opacity"];
- }
- }
- }];
- // Perform path and frame animation
- BOOL oldDisableActions = [CATransaction disableActions];
- [CATransaction setDisableActions:NO];
+ [self performAlphaAnimationFrom:0 to:1 duration:0.4 exception:attr.focusedRowNumber];
- CABasicAnimation *path = [CABasicAnimation animationWithKeyPath:@"path"];
- path.fromValue = (id)self.calendar.maskLayer.path;
- path.toValue = (id)[UIBezierPath bezierPathWithRect:targetBounds].CGPath;
- path.duration = duration;
- path.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
- [CATransaction begin];
- [CATransaction setCompletionBlock:^{
- self.state = FSCalendarTransitionStateIdle;
- self.transition = FSCalendarTransitionNone;
- self.calendar.maskLayer.path = [UIBezierPath bezierPathWithRect:targetBounds].CGPath;
- self.calendar.contentView.clipsToBounds = NO;
- self.calendar.daysContainer.clipsToBounds = NO;
- }];
- [CATransaction setAnimationDuration:duration];
-
- self.calendar.needsAdjustingViewFrame = YES;
- [self.calendar.maskLayer addAnimation:path forKey:@"path"];
+ CGFloat duration = 0.3;
- [CATransaction commit];
+ [self performPathAnimationFrom:self.calendar.maskLayer.path to:attr.targetMask.CGPath duration:duration completion:^{
+ [self performTransitionCompletionAnimated:animated];
+ }];
+ [CATransaction begin];
+ [CATransaction setDisableActions:NO];
if (self.calendar.delegate && ([self.calendar.delegate respondsToSelector:@selector(calendar:boundingRectWillChange:animated:)] || [self.calendar.delegate respondsToSelector:@selector(calendarCurrentScopeWillChange:animated:)])) {
- self.collectionView.fs_top = -focusedRowNumber*self.calendar.preferredRowHeight;
+ self.collectionView.fs_top = -attr.focusedRowNumber*self.calendar.preferredRowHeight;
+ [UIView beginAnimations:nil context:nil];
[UIView setAnimationsEnabled:YES];
- [UIView beginAnimations:@"delegateTranslation" context:"translation"];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:duration];
self.collectionView.fs_top = 0;
- self.self.calendar.bottomBorder.frame = CGRectMake(0, contentSize.height, self.calendar.fs_width, 1);
- if ([self.calendar.delegate respondsToSelector:@selector(calendar:boundingRectWillChange:animated:)]) {
- [self.calendar.delegate calendar:self.calendar boundingRectWillChange:targetBounds animated:animated];
- } else {
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
- [self.calendar.delegate calendarCurrentScopeWillChange:self.calendar animated:animated];
-#pragma GCC diagnostic pop
- }
+ [self boundingRectWillChange:attr.targetBounds animated:animated];
[UIView commitAnimations];
}
- [CATransaction setDisableActions:oldDisableActions];
+ [CATransaction commit];
} else {
- self.state = FSCalendarTransitionStateIdle;
- self.transition = FSCalendarTransitionNone;
- self.calendar.needsAdjustingViewFrame = YES;
- self.calendar.bottomBorder.frame = CGRectMake(0, contentSize.height, self.calendar.fs_width, 1);
- self.calendar.maskLayer.path = [UIBezierPath bezierPathWithRect:targetBounds].CGPath;
- self.calendar.contentView.clipsToBounds = NO;
- self.calendar.daysContainer.clipsToBounds = NO;
+ [self performTransitionCompletionAnimated:animated];
+ [self boundingRectWillChange:attr.targetBounds animated:animated];
- if (self.calendar.delegate && [self.calendar.delegate respondsToSelector:@selector(calendar:boundingRectWillChange:animated:)]) {
- [self.calendar.delegate calendar:self.calendar boundingRectWillChange:targetBounds animated:animated];
- } else if (self.calendar.delegate && [self.calendar.delegate respondsToSelector:@selector(calendarCurrentScopeWillChange:animated:)]) {
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
- [self.calendar.delegate calendarCurrentScopeWillChange:self.calendar animated:animated];
-#pragma GCC diagnostic pop
- }
}
break;
}
@@ -365,12 +154,7 @@ - (void)performBoudingRectTransitionFromMonth:(NSDate *)fromMonth toMonth:(NSDat
CGRect bounds = (CGRect){CGPointZero,[self.calendar sizeThatFits:self.calendar.frame.size]};
self.state = FSCalendarTransitionStateInProgress;
[UIView animateWithDuration:animationDuration delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
- if (self.calendar.delegate && [self.calendar.delegate respondsToSelector:@selector(calendar:boundingRectWillChange:animated:)]) {
- if (!CGRectEqualToRect((CGRect){CGPointZero,self.calendar.frame.size}, bounds)) {
- [self.calendar.delegate calendar:self.calendar boundingRectWillChange:bounds animated:YES];
- }
- }
- self.calendar.bottomBorder.fs_top = CGRectGetMaxY(bounds);
+ [self boundingRectWillChange:bounds animated:YES];
} completion:^(BOOL finished) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(MAX(0, duration-animationDuration) * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
self.calendar.needsAdjustingViewFrame = YES;
@@ -390,5 +174,563 @@ - (void)performBoudingRectTransitionFromMonth:(NSDate *)fromMonth toMonth:(NSDat
}
}
+#pragma mark -
+
+- (BOOL)scopeHandleShouldBegin:(FSCalendarScopeHandle *)scopeHandle
+{
+ return self.state == FSCalendarTransitionStateIdle;
+}
+
+- (void)scopeHandleDidBegin:(FSCalendarScopeHandle *)scopeHandle
+{
+ self.state = FSCalendarTransitionStateInProgress;
+ self.transition = self.calendar.scope == FSCalendarScopeMonth ? FSCalendarTransitionMonthToWeek : FSCalendarTransitionWeekToMonth;
+ self.pendingAttributes = self.transitionAttributes;
+ self.lastTranslation = [scopeHandle.panGesture translationInView:scopeHandle].y;
+
+ if (self.transition == FSCalendarTransitionWeekToMonth) {
+
+ self.calendarScope = FSCalendarScopeMonth;
+ self.calendarCurrentPage = self.pendingAttributes.targetPage;
+ self.calendar.contentView.clipsToBounds = YES;
+
+ self.calendar.contentView.fs_height = CGRectGetHeight(self.pendingAttributes.targetBounds)-self.calendar.scopeHandle.fs_height;
+ self.collectionViewLayout.scrollDirection = (UICollectionViewScrollDirection)self.calendar.scrollDirection;
+ self.calendar.header.scrollDirection = self.collectionViewLayout.scrollDirection;
+ self.calendar.needsAdjustingMonthPosition = YES;
+ self.calendar.needsAdjustingViewFrame = YES;
+ [self.calendar setNeedsLayout];
+ [self.collectionView reloadData];
+ [self.calendar.header reloadData];
+ [self.calendar layoutIfNeeded];
+
+ self.collectionView.fs_top = -self.pendingAttributes.focusedRowNumber*self.calendar.preferredRowHeight;
+
+ }
+}
+
+- (void)scopeHandleDidUpdate:(FSCalendarScopeHandle *)scopeHandle
+{
+ CGFloat translation = [scopeHandle.panGesture translationInView:scopeHandle].y;
+ switch (self.transition) {
+ case FSCalendarTransitionMonthToWeek: {
+ CGFloat minTranslation = CGRectGetHeight(self.pendingAttributes.targetBounds) - CGRectGetHeight(self.pendingAttributes.sourceBounds);
+ translation = MAX(minTranslation, translation);
+ translation = MIN(0, translation);
+ CGFloat progress = translation/minTranslation;
+ [CATransaction begin];
+ [CATransaction setDisableActions:YES];
+ [self performAlphaAnimationWithProgress:progress];
+ [self performPathAnimationWithProgress:progress];
+ [CATransaction commit];
+ break;
+ }
+ case FSCalendarTransitionWeekToMonth: {
+ CGFloat maxTranslation = CGRectGetHeight(self.pendingAttributes.targetBounds) - CGRectGetHeight(self.pendingAttributes.sourceBounds);
+ translation = MIN(maxTranslation, translation);
+ translation = MAX(0, translation);
+ CGFloat progress = translation/maxTranslation;
+ [CATransaction begin];
+ [CATransaction setDisableActions:YES];
+ [self performAlphaAnimationWithProgress:progress];
+ [self performPathAnimationWithProgress:progress];
+ [CATransaction commit];
+ break;
+ }
+ default:
+ break;
+ }
+ self.lastTranslation = translation;
+}
+
+- (void)scopeHandleDidEnd:(FSCalendarScopeHandle *)scopeHandle
+{
+ CGFloat translation = [scopeHandle.panGesture translationInView:scopeHandle].y;
+ CGFloat velocity = [scopeHandle.panGesture velocityInView:scopeHandle].y;
+ switch (self.transition) {
+ case FSCalendarTransitionMonthToWeek: {
+
+ CGFloat minTranslation = CGRectGetHeight(self.pendingAttributes.targetBounds) - CGRectGetHeight(self.pendingAttributes.sourceBounds);
+ translation = MAX(minTranslation, translation);
+ translation = MIN(0, translation);
+ CGFloat progress = translation/minTranslation;
+
+ if (velocity >= 0) {
+
+ [self performBackwardTransition:self.transition fromProgress:progress];
+
+ } else {
+
+ [self performForwardTransition:self.transition fromProgress:progress];
+
+ }
+ break;
+ }
+ case FSCalendarTransitionWeekToMonth: {
+ CGFloat maxTranslation = CGRectGetHeight(self.pendingAttributes.targetBounds) - CGRectGetHeight(self.pendingAttributes.sourceBounds);
+ translation = MAX(0, translation);
+ translation = MIN(maxTranslation, translation);
+ CGFloat progress = translation/maxTranslation;
+
+ if (velocity >= 0) {
+
+ [self performForwardTransition:self.transition fromProgress:progress];
+
+ } else {
+
+ [self performBackwardTransition:self.transition fromProgress:progress];
+
+ }
+
+ }
+ default:
+ break;
+ }
+
+}
+
+
+#pragma mark - Private properties
+
+- (void)performTransitionCompletionAnimated:(BOOL)animated
+{
+ [self performTransitionCompletion:self.transition animated:animated];
+}
+
+- (void)performTransitionCompletion:(FSCalendarTransition)transition animated:(BOOL)animated
+{
+ switch (transition) {
+ case FSCalendarTransitionMonthToWeek: {
+ [self.collectionView.visibleCells enumerateObjectsUsingBlock:^(UICollectionViewCell *obj, NSUInteger idx, BOOL * stop) {
+ obj.contentView.layer.opacity = 1;
+ }];
+ self.collectionViewLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+ self.calendar.header.scrollDirection = self.collectionViewLayout.scrollDirection;
+ self.calendar.needsAdjustingViewFrame = YES;
+ self.calendar.needsAdjustingMonthPosition = YES;
+ [self.collectionView reloadData];
+ [self.calendar.header reloadData];
+ break;
+ }
+ case FSCalendarTransitionWeekToMonth: {
+ self.calendar.needsAdjustingViewFrame = YES;
+ [self.calendar.collectionView.visibleCells enumerateObjectsUsingBlock:^(UICollectionViewCell *obj, NSUInteger idx, BOOL * stop) {
+ [CATransaction begin];
+ [CATransaction setDisableActions:YES];
+ obj.contentView.layer.opacity = 1;
+ [CATransaction commit];
+ [obj.contentView.layer removeAnimationForKey:@"opacity"];
+ }];
+ break;
+ }
+ default:
+ break;
+ }
+ self.state = FSCalendarTransitionStateIdle;
+ self.transition = FSCalendarTransitionNone;
+ self.calendar.contentView.clipsToBounds = NO;
+ self.pendingAttributes = nil;
+ [self.calendar.maskLayer removeAnimationForKey:@"path"];
+ [self.calendar setNeedsLayout];
+ [self.calendar layoutIfNeeded];
+}
+
+- (FSCalendarTransitionAttributes *)transitionAttributes
+{
+ FSCalendarTransitionAttributes *attributes = [[FSCalendarTransitionAttributes alloc] init];
+ attributes.sourceBounds = self.calendar.bounds;
+ attributes.sourceMask = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, self.calendar.fs_width, CGRectGetHeight(attributes.sourceBounds)-self.calendar.scopeHandle.fs_height)];
+ attributes.sourcePage = self.calendarCurrentPage;
+ switch (self.transition) {
+
+ case FSCalendarTransitionMonthToWeek: {
+
+ attributes.targetBounds = [self boundingRectForScope:FSCalendarScopeWeek];
+ attributes.targetMask = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, self.calendar.fs_width, CGRectGetHeight(attributes.targetBounds)-self.calendar.scopeHandle.fs_height)];
+
+ if (self.calendar.focusOnSingleSelectedDate) {
+
+ NSInteger focusedRowNumber = 0;
+ NSDate *focusedDate = self.calendar.selectedDate;
+
+ if (focusedDate) {
+ UICollectionViewLayoutAttributes *itemAttributes = [self.collectionViewLayout layoutAttributesForItemAtIndexPath:[self.calendar indexPathForDate:focusedDate scope:FSCalendarScopeMonth]];
+ CGPoint focuedCenter = itemAttributes.center;
+ if (CGRectContainsPoint(self.collectionView.bounds, focuedCenter)) {
+ switch (self.collectionViewLayout.scrollDirection) {
+ case UICollectionViewScrollDirectionHorizontal: {
+ focusedRowNumber = itemAttributes.indexPath.item%6;
+ break;
+ }
+ case UICollectionViewScrollDirectionVertical: {
+ focusedRowNumber = itemAttributes.indexPath.item/7;
+ break;
+ }
+ }
+ } else {
+ focusedDate = nil;
+ }
+ }
+ if (!focusedDate) {
+ focusedDate = self.calendar.today;
+ if (focusedDate) {
+ UICollectionViewLayoutAttributes *itemAttributes = [self.collectionViewLayout layoutAttributesForItemAtIndexPath:[self.calendar indexPathForDate:focusedDate scope:FSCalendarScopeMonth]];
+ CGPoint focuedCenter = itemAttributes.center;
+ if (CGRectContainsPoint(self.collectionView.bounds, focuedCenter)) {
+ switch (self.collectionViewLayout.scrollDirection) {
+ case UICollectionViewScrollDirectionHorizontal: {
+ focusedRowNumber = itemAttributes.indexPath.item%6;
+ break;
+ }
+ case UICollectionViewScrollDirectionVertical: {
+ focusedRowNumber = itemAttributes.indexPath.item/7;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ NSDate *currentPage = self.calendar.currentPage;
+ NSDate *minimumPage = [self.calendar beginingOfMonthOfDate:self.calendar.minimumDate];
+ NSInteger visibleSection = [self.calendar monthsFromDate:minimumPage toDate:currentPage];
+ NSIndexPath *firstIndexPath = [NSIndexPath indexPathForItem:0 inSection:visibleSection];
+ NSDate *firstDate = [self.calendar dateForIndexPath:firstIndexPath scope:FSCalendarScopeMonth];
+ currentPage = [self.calendar dateByAddingDays:focusedRowNumber*7 toDate:firstDate];
+
+ attributes.focusedRowNumber = focusedRowNumber;
+ attributes.focusedDate = focusedDate;
+ attributes.targetPage = currentPage;
+
+ }
+ break;
+ }
+ case FSCalendarTransitionWeekToMonth: {
+
+ attributes.targetBounds = [self boundingRectForScope:FSCalendarScopeMonth];
+ attributes.targetMask = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, self.calendar.fs_width, CGRectGetHeight(attributes.targetBounds)-self.calendar.scopeHandle.fs_height)];
+
+ if (self.calendar.focusOnSingleSelectedDate) {
+
+ NSInteger focusedRowNumber = 0;
+ NSDate *currentPage = self.calendar.currentPage;
+ NSDate *firstDayOfMonth = nil;
+ if (self.calendar.focusOnSingleSelectedDate) {
+ NSDate *focusedDate = self.calendar.selectedDate;
+ if (focusedDate) {
+ UICollectionViewLayoutAttributes *itemAttributes = [self.collectionViewLayout layoutAttributesForItemAtIndexPath:[self.calendar indexPathForDate:focusedDate scope:FSCalendarScopeWeek]];
+ CGPoint focuedCenter = itemAttributes.center;
+ if (CGRectContainsPoint(self.collectionView.bounds, focuedCenter)) {
+ firstDayOfMonth = [self.calendar beginingOfMonthOfDate:focusedDate];
+ } else {
+ focusedDate = nil;
+ }
+ }
+ if (!focusedDate) {
+ focusedDate = self.calendar.today;
+ if (focusedDate) {
+ UICollectionViewLayoutAttributes *itemAttributes = [self.collectionViewLayout layoutAttributesForItemAtIndexPath:[self.calendar indexPathForDate:focusedDate scope:FSCalendarScopeWeek]];
+ CGPoint focuedCenter = itemAttributes.center;
+ if (CGRectContainsPoint(self.collectionView.bounds, focuedCenter)) {
+ firstDayOfMonth = [self.calendar beginingOfMonthOfDate:focusedDate];
+ }
+ }
+ };
+ attributes.focusedDate = focusedDate;
+ }
+ firstDayOfMonth = firstDayOfMonth ?: [self.calendar beginingOfMonthOfDate:currentPage];
+ NSInteger numberOfPlaceholdersForPrev = [self.calendar numberOfHeadPlaceholdersForMonth:firstDayOfMonth];
+ NSDate *firstDateOfPage = [self.calendar dateBySubstractingDays:numberOfPlaceholdersForPrev fromDate:firstDayOfMonth];
+ for (int i = 0; i < 6; i++) {
+ NSDate *currentRow = [self.calendar dateByAddingWeeks:i toDate:firstDateOfPage];
+ if ([self.calendar isDate:currentRow equalToDate:currentPage toCalendarUnit:FSCalendarUnitDay]) {
+ focusedRowNumber = i;
+ currentPage = firstDayOfMonth;
+ break;
+ }
+ }
+ attributes.focusedRowNumber = focusedRowNumber;
+ attributes.targetPage = currentPage;
+ attributes.firstDayOfMonth = firstDayOfMonth;
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ return attributes;
+}
+
+#pragma mark - Private properties
+
+- (void)setCalendarScope:(FSCalendarScope)calendarScope
+{
+ [self.calendar willChangeValueForKey:@"scope"];
+ Ivar scopeIvar = class_getInstanceVariable(FSCalendar.class, "_scope");
+ void (*setScope)(id, Ivar, FSCalendarScope) = (void (*)(id, Ivar, FSCalendarScope))object_setIvar;
+ setScope(self.calendar, scopeIvar, calendarScope);
+ [self.calendar didChangeValueForKey:@"scope"];
+}
+
+- (FSCalendarScope)calendarScope
+{
+ return self.calendar.scope;
+}
+
+- (void)setCalendarCurrentPage:(NSDate *)calendarCurrentPage
+{
+ Ivar currentPageIvar = class_getInstanceVariable(FSCalendar.class, "_currentPage");
+ object_setIvar(self.calendar, currentPageIvar, calendarCurrentPage);
+}
+
+- (NSDate *)calendarCurrentPage
+{
+ return self.calendar.currentPage;
+}
+
+#pragma mark - Private methods
+
+- (CGRect)boundingRectForScope:(FSCalendarScope)scope
+{
+ CGSize contentSize;
+ switch (scope) {
+ case FSCalendarScopeMonth: {
+ if (self.calendar.showsPlaceholders) {
+ contentSize = self.cachedMonthSize;
+ } else {
+ contentSize = [self.calendar sizeThatFits:self.calendar.frame.size scope:scope];
+ }
+ break;
+ }
+ case FSCalendarScopeWeek: {
+ contentSize = [self.calendar sizeThatFits:self.calendar.frame.size scope:scope];
+ break;
+ }
+ }
+ return (CGRect){CGPointZero,contentSize};
+}
+
+- (void)boundingRectWillChange:(CGRect)targetBounds animated:(BOOL)animated
+{
+ if (self.calendar.delegate && [self.calendar.delegate respondsToSelector:@selector(calendar:boundingRectWillChange:animated:)]) {
+ self.calendar.scopeHandle.fs_bottom = CGRectGetMaxY(targetBounds);
+ self.calendar.bottomBorder.fs_top = CGRectGetMaxY(targetBounds);
+ self.calendar.daysContainer.fs_height = CGRectGetHeight(targetBounds)-self.calendar.preferredHeaderHeight-self.calendar.preferredWeekdayHeight-self.calendar.scopeHandle.fs_height;
+ [self.calendar.delegate calendar:self.calendar boundingRectWillChange:targetBounds animated:animated];
+ } else if (self.calendar.delegate && [self.calendar.delegate respondsToSelector:@selector(calendarCurrentScopeWillChange:animated:)]) {
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+ self.calendar.scopeHandle.fs_bottom = CGRectGetMaxY(targetBounds);
+ self.calendar.bottomBorder.fs_top = CGRectGetMaxY(targetBounds);
+ self.calendar.daysContainer.fs_height = CGRectGetHeight(targetBounds)-self.calendar.preferredHeaderHeight-self.calendar.preferredWeekdayHeight-self.calendar.scopeHandle.fs_height;
+ [self.calendar.delegate calendarCurrentScopeWillChange:self.calendar animated:animated];
+#pragma GCC diagnostic pop
+ }
+}
+
+- (void)performForwardTransition:(FSCalendarTransition)transition fromProgress:(CGFloat)progress
+{
+ FSCalendarTransitionAttributes *attr = self.pendingAttributes;
+ switch (transition) {
+ case FSCalendarTransitionMonthToWeek: {
+
+ self.calendarScope = FSCalendarScopeWeek;
+ self.calendarCurrentPage = attr.targetPage;
+
+ self.calendar.contentView.clipsToBounds = YES;
+
+ CGFloat currentAlpha = 1 - progress;
+ CGFloat duration = 0.3;
+ [self performAlphaAnimationFrom:currentAlpha to:0 duration:0.22 exception:attr.focusedRowNumber];
+ [self performPathAnimationFrom:self.calendar.maskLayer.path to:[UIBezierPath bezierPathWithRect:attr.targetBounds].CGPath duration:duration completion:^{
+ [self performTransitionCompletionAnimated:YES];
+ }];
+
+ if (self.calendar.delegate && ([self.calendar.delegate respondsToSelector:@selector(calendar:boundingRectWillChange:animated:)] || [self.calendar.delegate respondsToSelector:@selector(calendarCurrentScopeWillChange:animated:)])) {
+ [UIView beginAnimations:@"delegateTranslation" context:"translation"];
+ [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
+ [UIView setAnimationDuration:duration];
+ self.collectionView.fs_top = -attr.focusedRowNumber*self.calendar.preferredRowHeight;
+ [self boundingRectWillChange:attr.targetBounds animated:YES];
+ [UIView commitAnimations];
+ }
+
+ break;
+ }
+ case FSCalendarTransitionWeekToMonth: {
+
+ self.calendarScope = FSCalendarScopeMonth;
+
+ [self performAlphaAnimationFrom:progress to:1 duration:0.4 exception:attr.focusedRowNumber];
+
+ CGFloat duration = 0.3;
+ [CATransaction begin];
+ [CATransaction setDisableActions:NO];
+
+ [self performPathAnimationFrom:self.calendar.maskLayer.path to:[UIBezierPath bezierPathWithRect:attr.targetBounds].CGPath duration:duration completion:^{
+ [self performTransitionCompletionAnimated:YES];
+ }];
+
+ if (self.calendar.delegate && ([self.calendar.delegate respondsToSelector:@selector(calendar:boundingRectWillChange:animated:)] || [self.calendar.delegate respondsToSelector:@selector(calendarCurrentScopeWillChange:animated:)])) {
+ [UIView beginAnimations:@"delegateTranslation" context:"translation"];
+ [UIView setAnimationsEnabled:YES];
+ [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
+ [UIView setAnimationDuration:duration];
+ self.collectionView.fs_top = 0;
+ [self boundingRectWillChange:attr.targetBounds animated:YES];
+ [UIView commitAnimations];
+ }
+ [CATransaction commit];
+ break;
+ }
+ default:
+ break;
+ }
+}
+
+- (void)performBackwardTransition:(FSCalendarTransition)transition fromProgress:(CGFloat)progress
+{
+ switch (transition) {
+ case FSCalendarTransitionMonthToWeek: {
+ [self performAlphaAnimationFrom:1-progress to:1 duration:0.3 exception:self.pendingAttributes.focusedRowNumber];
+ [self performPathAnimationFrom:self.calendar.maskLayer.path to:self.pendingAttributes.sourceMask.CGPath duration:0.3 completion:^{
+ [self.calendar.maskLayer removeAnimationForKey:@"path"];
+ self.calendar.maskLayer.path = self.pendingAttributes.sourceMask.CGPath;
+ [self.calendar.collectionView.visibleCells enumerateObjectsUsingBlock:^(__kindof UICollectionViewCell * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
+ obj.contentView.layer.opacity = 1;
+ [obj.contentView.layer removeAnimationForKey:@"opacity"];
+ }];
+ self.pendingAttributes = nil;
+ self.state = FSCalendarTransitionStateIdle;
+ }];
+
+ if (self.calendar.delegate && ([self.calendar.delegate respondsToSelector:@selector(calendar:boundingRectWillChange:animated:)] || [self.calendar.delegate respondsToSelector:@selector(calendarCurrentScopeWillChange:animated:)])) {
+ [UIView beginAnimations:@"delegateTranslation" context:"translation"];
+ [UIView setAnimationsEnabled:YES];
+ [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
+ [UIView setAnimationDuration:0.3];
+ self.collectionView.fs_top = 0;
+ [self boundingRectWillChange:self.pendingAttributes.sourceBounds animated:YES];
+ [UIView commitAnimations];
+ }
+ break;
+ }
+ case FSCalendarTransitionWeekToMonth: {
+ [self performAlphaAnimationFrom:progress to:0 duration:0.3 exception:self.pendingAttributes.focusedRowNumber];
+ [self performPathAnimationFrom:self.calendar.maskLayer.path to:self.pendingAttributes.sourceMask.CGPath duration:0.3 completion:^{
+
+ self.calendarScope = FSCalendarScopeWeek;
+ self.calendarCurrentPage = self.pendingAttributes.sourcePage;
+
+ [self performTransitionCompletion:FSCalendarTransitionMonthToWeek animated:YES];
+ }];
+
+ if (self.calendar.delegate && ([self.calendar.delegate respondsToSelector:@selector(calendar:boundingRectWillChange:animated:)] || [self.calendar.delegate respondsToSelector:@selector(calendarCurrentScopeWillChange:animated:)])) {
+ [UIView beginAnimations:@"delegateTranslation" context:"translation"];
+ [UIView setAnimationsEnabled:YES];
+ [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
+ [UIView setAnimationDuration:0.3];
+ self.collectionView.fs_top = (-self.pendingAttributes.focusedRowNumber*self.calendar.preferredRowHeight);
+ [self boundingRectWillChange:self.pendingAttributes.sourceBounds animated:YES];
+ [UIView commitAnimations];
+ }
+ break;
+ }
+ default:
+ break;
+ }
+}
+
+- (void)performAlphaAnimationFrom:(CGFloat)fromAlpha to:(CGFloat)toAlpha duration:(CGFloat)duration exception:(NSInteger)exception
+{
+ [self.collectionView.visibleCells enumerateObjectsUsingBlock:^(FSCalendarCell *cell, NSUInteger idx, BOOL *stop) {
+ if (CGRectContainsPoint(self.collectionView.bounds, cell.center)) {
+ BOOL shouldPerformAlpha = NO;
+ NSIndexPath *indexPath = [self.collectionView indexPathForCell:cell];
+ switch (self.collectionViewLayout.scrollDirection) {
+ case UICollectionViewScrollDirectionHorizontal: {
+ shouldPerformAlpha = indexPath.item%6 != exception;
+ break;
+ }
+ case UICollectionViewScrollDirectionVertical: {
+ shouldPerformAlpha = indexPath.item/7 != exception;
+ break;
+ }
+ }
+ if (shouldPerformAlpha) {
+ CABasicAnimation *opacity = [CABasicAnimation animationWithKeyPath:@"opacity"];
+ opacity.duration = duration;
+ opacity.fromValue = @(fromAlpha);
+ opacity.toValue = @(toAlpha);
+ opacity.removedOnCompletion = NO;
+ opacity.fillMode = kCAFillModeForwards;
+ [cell.contentView.layer addAnimation:opacity forKey:@"opacity"];
+ }
+ }
+ }];
+}
+
+- (void)performPathAnimationFrom:(CGPathRef)fromPath to:(CGPathRef)toPath duration:(CGFloat)duration completion:(void (^)())completion
+{
+ CABasicAnimation *path = [CABasicAnimation animationWithKeyPath:@"path"];
+ path.fromValue = (__bridge id)fromPath;
+ path.toValue = (__bridge id)toPath;
+ path.duration = duration;
+ path.fillMode = kCAFillModeForwards;
+ path.removedOnCompletion = NO;
+ path.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
+ [CATransaction begin];
+ [CATransaction setCompletionBlock:completion];
+ [CATransaction setAnimationDuration:duration];
+ [self.calendar.maskLayer addAnimation:path forKey:@"path"];
+ [CATransaction commit];
+}
+
+- (void)performAlphaAnimationWithProgress:(CGFloat)progress
+{
+ CGFloat opacity = self.transition == FSCalendarTransitionMonthToWeek ? 1-progress: progress;
+ [self.collectionView.visibleCells enumerateObjectsUsingBlock:^(FSCalendarCell *cell, NSUInteger idx, BOOL *stop) {
+ if (CGRectContainsPoint(self.collectionView.bounds, cell.center)) {
+ BOOL shouldPerformAlpha = NO;
+ NSIndexPath *indexPath = [self.collectionView indexPathForCell:cell];
+ switch (self.collectionViewLayout.scrollDirection) {
+ case UICollectionViewScrollDirectionHorizontal: {
+ shouldPerformAlpha = indexPath.item%6 != self.pendingAttributes.focusedRowNumber;
+ break;
+ }
+ case UICollectionViewScrollDirectionVertical: {
+ shouldPerformAlpha = indexPath.item/7 != self.pendingAttributes.focusedRowNumber;
+ break;
+ }
+ }
+ if (shouldPerformAlpha) {
+ cell.contentView.layer.opacity = opacity;
+ }
+ }
+ }];
+}
+
+- (void)performPathAnimationWithProgress:(CGFloat)progress
+{
+ CGFloat targetHeight = CGRectGetHeight(self.pendingAttributes.targetBounds);
+ CGFloat sourceHeight = CGRectGetHeight(self.pendingAttributes.sourceBounds);
+ CGFloat currentHeight = sourceHeight - (sourceHeight-targetHeight)*progress - self.calendar.scopeHandle.fs_height;
+ CGRect currentPathRect = CGRectMake(0, 0, CGRectGetWidth(self.pendingAttributes.targetBounds), currentHeight);
+ CGRect currentBounds = CGRectMake(0, 0, CGRectGetWidth(self.pendingAttributes.targetBounds), currentHeight+self.calendar.scopeHandle.fs_height);
+ CGPathRef currentPath = [UIBezierPath bezierPathWithRect:currentPathRect].CGPath;
+ self.calendar.maskLayer.path = currentPath;
+ self.collectionView.fs_top = (-self.pendingAttributes.focusedRowNumber*self.calendar.preferredRowHeight)*(self.transition == FSCalendarTransitionMonthToWeek?progress:(1-progress));
+ [self boundingRectWillChange:currentBounds animated:NO];
+ if (self.transition == FSCalendarTransitionWeekToMonth) {
+ self.calendar.contentView.fs_height = targetHeight;
+ }
+}
@end
+
+
+@implementation FSCalendarTransitionAttributes
+
+
+@end
+
diff --git a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarAppearance.m b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarAppearance.m
index c9e9d066..cb9396b4 100644
--- a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarAppearance.m
+++ b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarAppearance.m
@@ -544,6 +544,11 @@ - (void)adjustTitleIfNecessary
_preferredSubtitleFontSize = FSCalendarStandardSubtitleTextSize * 1.15;
_preferredWeekdayFontSize = _preferredTitleFontSize;
}
+ CGFloat multiplier = 1+(_calendar.lineHeightMultiplier-1)/4;
+ _preferredHeaderTitleFontSize *= multiplier;
+ _preferredTitleFontSize *= multiplier;
+ _preferredSubtitleFontSize *= multiplier;
+ _preferredSubtitleFontSize *= multiplier;
}
// reload appearance
@@ -565,13 +570,6 @@ - (void)invalidateAppearance
[self invalidateTextColors];
[self invalidateBorderColors];
[self invalidateFillColors];
- /*
- [_calendar.collectionView.visibleCells enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
- [_calendar invalidateAppearanceForCell:obj];
- }];
- [_calendar.header.collectionView.visibleCells makeObjectsPerformSelector:@selector(setNeedsLayout)];
- [_calendar.visibleStickyHeaders makeObjectsPerformSelector:@selector(setNeedsLayout)];
- */
}
- (void)invalidateFonts
diff --git a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarCell.h b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarCell.h
index 01d303ef..3a8a2cc4 100644
--- a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarCell.h
+++ b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarCell.h
@@ -23,6 +23,7 @@
@property (weak, nonatomic) FSCalendarEventIndicator *eventIndicator;
@property (strong, nonatomic) NSDate *date;
+@property (strong, nonatomic) NSString *title;
@property (strong, nonatomic) NSString *subtitle;
@property (strong, nonatomic) UIImage *image;
diff --git a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarCell.m b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarCell.m
index 402f6402..59da1163 100644
--- a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarCell.m
+++ b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarCell.m
@@ -141,7 +141,7 @@ - (void)configureCell
if (self.contentView.hidden) {
return;
}
- _titleLabel.text = [NSString stringWithFormat:@"%@",@([_calendar dayOfDate:_date])];
+ _titleLabel.text = self.title ?: [NSString stringWithFormat:@"%@",@([_calendar dayOfDate:_date])];
if (_subtitle) {
_subtitleLabel.text = _subtitle;
if (_subtitleLabel.hidden) {
@@ -173,6 +173,8 @@ - (void)configureCell
_titleLabel.frame = CGRectMake(0, _appearance.titleVerticalOffset, self.contentView.fs_width, floor(self.contentView.fs_height*5.0/6.0));
}
+ _imageView.center = CGPointMake(self.contentView.fs_width/2.0, _imageView.center.y);
+
}
UIColor *textColor = self.colorForTitleLabel;
@@ -203,14 +205,14 @@ - (void)configureCell
_shapeLayer.path = path;
}
- CGColorRef fillColor = self.colorForCellFill.CGColor;
- if (!CGColorEqualToColor(_shapeLayer.fillColor, fillColor)) {
- _shapeLayer.fillColor = fillColor;
+ CGColorRef cellFillColor = self.colorForCellFill.CGColor;
+ if (!CGColorEqualToColor(_shapeLayer.fillColor, cellFillColor)) {
+ _shapeLayer.fillColor = cellFillColor;
}
- CGColorRef borderColor = self.colorForCellBorder.CGColor;
- if (!CGColorEqualToColor(_shapeLayer.strokeColor, borderColor)) {
- _shapeLayer.strokeColor = borderColor;
+ CGColorRef cellBorderColor = self.colorForCellBorder.CGColor;
+ if (!CGColorEqualToColor(_shapeLayer.strokeColor, cellBorderColor)) {
+ _shapeLayer.strokeColor = cellBorderColor;
}
}
diff --git a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarCollectionView.m b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarCollectionView.m
index 1b450fdc..3abbde2a 100644
--- a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarCollectionView.m
+++ b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarCollectionView.m
@@ -7,7 +7,6 @@
//
#import "FSCalendarCollectionView.h"
-#import "FSCalendarCell.h"
@interface FSCalendarCollectionView ()
diff --git a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarConstance.h b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarConstance.h
index 3d50cc3e..5c938281 100644
--- a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarConstance.h
+++ b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarConstance.h
@@ -26,6 +26,7 @@ UIKIT_EXTERN CGFloat const FSCalendarStandardSubtitleTextSize;
UIKIT_EXTERN CGFloat const FSCalendarStandardWeekdayTextSize;
UIKIT_EXTERN CGFloat const FSCalendarStandardHeaderTextSize;
UIKIT_EXTERN CGFloat const FSCalendarMaximumEventDotDiameter;
+UIKIT_EXTERN CGFloat const FSCalendarStandardScopeHandleHeight;
UIKIT_EXTERN NSInteger const FSCalendarDefaultHourComponent;
@@ -35,10 +36,13 @@ UIKIT_EXTERN NSInteger const FSCalendarDefaultHourComponent;
#define FSCalendarDeviceIsIPad [[UIDevice currentDevice].model hasPrefix:@"iPad"]
#endif
-#define FSCalendarStandardSelectionColor FSColorRGBA(31,119,219,1.0)
-#define FSCalendarStandardTodayColor FSColorRGBA(198,51,42 ,1.0)
-#define FSCalendarStandardTitleTextColor FSColorRGBA(14,69,221 ,1.0)
-#define FSCalendarStandardEventDotColor FSColorRGBA(31,119,219,0.75)
+#define FSCalendarStandardSelectionColor FSColorRGBA(31,119,219,1.0)
+#define FSCalendarStandardTodayColor FSColorRGBA(198,51,42 ,1.0)
+#define FSCalendarStandardTitleTextColor FSColorRGBA(14,69,221 ,1.0)
+#define FSCalendarStandardEventDotColor FSColorRGBA(31,119,219,0.75)
+
+#define FSCalendarStandardSeparatorColor [[UIColor lightGrayColor] colorWithAlphaComponent:0.25]
+#define FSCalendarStandardScopeHandleColor [[UIColor lightGrayColor] colorWithAlphaComponent:0.50]
#define FSColorRGBA(r,g,b,a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]
diff --git a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarConstance.m b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarConstance.m
index 3059465d..3e2dfae6 100644
--- a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarConstance.m
+++ b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarConstance.m
@@ -23,5 +23,6 @@
CGFloat const FSCalendarStandardWeekdayTextSize = 14;
CGFloat const FSCalendarStandardHeaderTextSize = 16.5;
CGFloat const FSCalendarMaximumEventDotDiameter = 4.8;
+CGFloat const FSCalendarStandardScopeHandleHeight = 26;
NSInteger const FSCalendarDefaultHourComponent = 0;
\ No newline at end of file
diff --git a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarDynamicHeader.h b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarDynamicHeader.h
index f0caad0b..67c1c036 100644
--- a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarDynamicHeader.h
+++ b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarDynamicHeader.h
@@ -15,13 +15,17 @@
#import "FSCalendarCell.h"
#import "FSCalendarHeader.h"
#import "FSCalendarStickyHeader.h"
+#import "FSCalendarCollectionView.h"
+#import "FSCalendarFlowLayout.h"
+#import "FSCalendarScopeHandle.h"
@interface FSCalendar (Dynamic)
-@property (readonly, nonatomic) CAShapeLayer *maskLayer;
@property (readonly, nonatomic) FSCalendarHeader *header;
-@property (readonly, nonatomic) UICollectionView *collectionView;
-@property (readonly, nonatomic) UICollectionViewFlowLayout *collectionViewLayout;
+@property (readonly, nonatomic) FSCalendarCollectionView *collectionView;
+@property (readonly, nonatomic) FSCalendarScopeHandle *scopeHandle;
+@property (readonly, nonatomic) FSCalendarFlowLayout *collectionViewLayout;
+@property (readonly, nonatomic) CAShapeLayer *maskLayer;
@property (readonly, nonatomic) NSArray *weekdays;
@property (readonly, nonatomic) BOOL ibEditing;
@property (readonly, nonatomic) BOOL floatingMode;
diff --git a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarEventIndicator.m b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarEventIndicator.m
index 6705c7d1..b0a8d71b 100644
--- a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarEventIndicator.m
+++ b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarEventIndicator.m
@@ -36,8 +36,7 @@ - (instancetype)initWithFrame:(CGRect)frame
self.eventLayers = [NSMutableArray arrayWithCapacity:3];
for (int i = 0; i < 3; i++) {
CALayer *layer = [CALayer layer];
- layer.masksToBounds = YES;
- layer.backgroundColor = FSCalendarStandardEventDotColor.CGColor;
+ layer.backgroundColor = [UIColor clearColor].CGColor;
[self.eventLayers addObject:layer];
[self.contentView.layer addSublayer:layer];
}
@@ -68,11 +67,10 @@ - (void)layoutSublayersOfLayer:(CALayer *)layer
_needsAdjustingViewFrame = NO;
CGFloat diameter = MIN(MIN(self.fs_width, self.fs_height),FSCalendarMaximumEventDotDiameter);
for (int i = 0; i < self.eventLayers.count; i++) {
- CALayer *layer = self.eventLayers[i];
- layer.hidden = i >= self.numberOfEvents;
- if (!layer.hidden) {
- layer.frame = CGRectMake(2*i*diameter, (self.fs_height-diameter)*0.5, diameter, diameter);
- layer.cornerRadius = diameter * 0.5;
+ CALayer *eventLayer = self.eventLayers[i];
+ eventLayer.hidden = i >= self.numberOfEvents;
+ if (!eventLayer.hidden) {
+ eventLayer.frame = CGRectMake(2*i*diameter, (self.fs_height-diameter)*0.5, diameter, diameter);
}
}
}
@@ -86,13 +84,13 @@ - (void)layoutSublayersOfLayer:(CALayer *)layer
NSArray *colors = (NSArray *)_color;
if (colors.count) {
UIColor *lastColor = colors.firstObject;
- for (int i = 0; i < self.numberOfEvents; i++) {
+ for (int i = 0; i < self.eventLayers.count; i++) {
if (i < colors.count) {
lastColor = colors[i];
}
- CALayer *layer = self.eventLayers[i];
+ CALayer *eventLayer = self.eventLayers[i];
UIImage *dotImage = [self dotImageWithColor:lastColor diameter:diameter];
- layer.contents = (id)dotImage.CGImage;
+ eventLayer.contents = (id)dotImage.CGImage;
}
}
}
diff --git a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarScopeHandle.h b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarScopeHandle.h
new file mode 100644
index 00000000..9c18cb48
--- /dev/null
+++ b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarScopeHandle.h
@@ -0,0 +1,27 @@
+//
+// FSCalendarScopeHandle.h
+// FSCalendar
+//
+// Created by dingwenchao on 4/29/16.
+// Copyright © 2016 wenchaoios. All rights reserved.
+//
+
+#import
+
+@class FSCalendar, FSCalendarScopeHandle;
+
+@protocol FSCalendarScopeHandleDelegate
+
+@optional
+- (BOOL)scopeHandleShouldBegin:(FSCalendarScopeHandle *)scopeHandle;
+- (void)scopeHandleDidBegin:(FSCalendarScopeHandle *)scopeHandle;
+- (void)scopeHandleDidUpdate:(FSCalendarScopeHandle *)scopeHandle;;
+- (void)scopeHandleDidEnd:(FSCalendarScopeHandle *)scopeHandle;
+@end
+
+@interface FSCalendarScopeHandle : UIView
+
+@property (weak, nonatomic) UIPanGestureRecognizer *panGesture;
+@property (weak, nonatomic) id delegate;
+
+@end
diff --git a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarScopeHandle.m b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarScopeHandle.m
new file mode 100644
index 00000000..73f8048c
--- /dev/null
+++ b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarScopeHandle.m
@@ -0,0 +1,118 @@
+//
+// FSCalendarScopeHandle.m
+// FSCalendar
+//
+// Created by dingwenchao on 4/29/16.
+// Copyright © 2016 wenchaoios. All rights reserved.
+//
+
+#import "FSCalendarScopeHandle.h"
+#import "FSCalendar.h"
+#import "FSCalendarAnimator.h"
+#import "UIView+FSExtension.h"
+
+@interface FSCalendarScopeHandle ()
+
+@property (weak, nonatomic) UIView *topBorder;
+@property (weak, nonatomic) UIView *handleIndicator;
+
+@property (weak, nonatomic) FSCalendarAppearance *appearance;
+
+@property (assign, nonatomic) CGFloat lastTranslation;
+
+- (void)handlePan:(id)sender;
+
+@end
+
+@implementation FSCalendarScopeHandle
+
+- (instancetype)initWithFrame:(CGRect)frame
+{
+ self = [super initWithFrame:frame];
+ if (self) {
+
+ UIView *view;
+
+ view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 1)];
+ view.backgroundColor = FSCalendarStandardSeparatorColor;
+ [self addSubview:view];
+ self.topBorder = view;
+
+ view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 30, 6)];
+ view.layer.shouldRasterize = YES;
+ view.layer.masksToBounds = YES;
+ view.layer.cornerRadius = 3;
+ view.layer.backgroundColor = FSCalendarStandardScopeHandleColor.CGColor;
+ [self addSubview:view];
+ self.handleIndicator = view;
+
+ UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
+ panGesture.minimumNumberOfTouches = 1;
+ panGesture.maximumNumberOfTouches = 2;
+ panGesture.delegate = self;
+ [self addGestureRecognizer:panGesture];
+ self.panGesture = panGesture;
+
+ }
+ return self;
+}
+
+- (void)layoutSubviews
+{
+ [super layoutSubviews];
+ self.topBorder.frame = CGRectMake(0, 0, self.fs_width, 1);
+ self.handleIndicator.center = CGPointMake(self.fs_width/2, self.fs_height/2-0.5);
+}
+
+#pragma mark - Target actions
+
+- (void)handlePan:(id)sender
+{
+ switch (self.panGesture.state) {
+ case UIGestureRecognizerStateBegan: {
+ if (self.delegate && [self.delegate respondsToSelector:@selector(scopeHandleDidBegin:)]) {
+ [self.delegate scopeHandleDidBegin:self];
+ }
+ break;
+ }
+ case UIGestureRecognizerStateChanged: {
+ if (self.delegate && [self.delegate respondsToSelector:@selector(scopeHandleDidUpdate:)]) {
+ [self.delegate scopeHandleDidUpdate:self];
+ }
+ break;
+ }
+ case UIGestureRecognizerStateEnded: {
+ if (self.delegate && [self.delegate respondsToSelector:@selector(scopeHandleDidEnd:)]) {
+ [self.delegate scopeHandleDidEnd:self];
+ }
+ break;
+ }
+ case UIGestureRecognizerStateCancelled: {
+ if (self.delegate && [self.delegate respondsToSelector:@selector(scopeHandleDidEnd:)]) {
+ [self.delegate scopeHandleDidEnd:self];
+ }
+ break;
+ }
+ case UIGestureRecognizerStateFailed: {
+ if (self.delegate && [self.delegate respondsToSelector:@selector(scopeHandleDidEnd:)]) {
+ [self.delegate scopeHandleDidEnd:self];
+ }
+ break;
+ }
+ default: {
+ break;
+ }
+ }
+}
+
+#pragma mark -
+
+- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
+{
+ if (self.delegate && [self.delegate respondsToSelector:@selector(scopeHandleShouldBegin:)]) {
+ return [self.delegate scopeHandleShouldBegin:self];
+ }
+ return NO;
+}
+
+@end
diff --git a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarStickyHeader.m b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarStickyHeader.m
index 10381174..6769965b 100644
--- a/iOS/Pods/FSCalendar/FSCalendar/FSCalendarStickyHeader.m
+++ b/iOS/Pods/FSCalendar/FSCalendar/FSCalendarStickyHeader.m
@@ -121,7 +121,7 @@ - (void)reloadData
- (void)invalidateHeaderFont
{
- _titleLabel.font = _appearance.headerTitleFont;
+ _titleLabel.font = _appearance.preferredHeaderTitleFont;
}
- (void)invalidateHeaderTextColor
diff --git a/iOS/Pods/FSCalendar/FSCalendar/NSDate+FSExtension.h b/iOS/Pods/FSCalendar/FSCalendar/NSDate+FSExtension.h
deleted file mode 100644
index c91d31ce..00000000
--- a/iOS/Pods/FSCalendar/FSCalendar/NSDate+FSExtension.h
+++ /dev/null
@@ -1,79 +0,0 @@
-//
-// NSDate+FSExtension.h
-// Pods
-//
-// Created by Wenchao Ding on 29/1/15.
-//
-//
-
-#import
-
-/**
- * This category is deprecated in this framework as it premised that the calendar should be gregorian. But feel free to use it for gregorian-only.
- */
-@interface NSDate (FSExtension)
-
-@property (readonly, nonatomic) NSInteger fs_year;
-@property (readonly, nonatomic) NSInteger fs_month;
-@property (readonly, nonatomic) NSInteger fs_day;
-@property (readonly, nonatomic) NSInteger fs_weekday;
-@property (readonly, nonatomic) NSInteger fs_weekOfYear;
-@property (readonly, nonatomic) NSInteger fs_hour;
-@property (readonly, nonatomic) NSInteger fs_minute;
-@property (readonly, nonatomic) NSInteger fs_second;
-
-@property (readonly, nonatomic) NSDate *fs_dateByIgnoringTimeComponents;
-@property (readonly, nonatomic) NSDate *fs_firstDayOfMonth;
-@property (readonly, nonatomic) NSDate *fs_lastDayOfMonth;
-@property (readonly, nonatomic) NSDate *fs_firstDayOfWeek;
-@property (readonly, nonatomic) NSDate *fs_middleOfWeek;
-@property (readonly, nonatomic) NSDate *fs_tomorrow;
-@property (readonly, nonatomic) NSDate *fs_yesterday;
-@property (readonly, nonatomic) NSInteger fs_numberOfDaysInMonth;
-
-+ (instancetype)fs_dateFromString:(NSString *)string format:(NSString *)format;
-+ (instancetype)fs_dateWithYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day;
-
-- (NSDate *)fs_dateByAddingYears:(NSInteger)years;
-- (NSDate *)fs_dateBySubtractingYears:(NSInteger)years;
-- (NSDate *)fs_dateByAddingMonths:(NSInteger)months;
-- (NSDate *)fs_dateBySubtractingMonths:(NSInteger)months;
-- (NSDate *)fs_dateByAddingWeeks:(NSInteger)weeks;
-- (NSDate *)fs_dateBySubtractingWeeks:(NSInteger)weeks;
-- (NSDate *)fs_dateByAddingDays:(NSInteger)days;
-- (NSDate *)fs_dateBySubtractingDays:(NSInteger)days;
-- (NSInteger)fs_yearsFrom:(NSDate *)date;
-- (NSInteger)fs_monthsFrom:(NSDate *)date;
-- (NSInteger)fs_weeksFrom:(NSDate *)date;
-- (NSInteger)fs_daysFrom:(NSDate *)date;
-
-- (BOOL)fs_isEqualToDateForMonth:(NSDate *)date;
-- (BOOL)fs_isEqualToDateForWeek:(NSDate *)date;
-- (BOOL)fs_isEqualToDateForDay:(NSDate *)date;
-
-- (NSString *)fs_stringWithFormat:(NSString *)format;
-- (NSString *)fs_string;
-
-@end
-
-
-@interface NSCalendar (FSExtension)
-
-+ (instancetype)fs_sharedCalendar;
-
-@end
-
-@interface NSDateFormatter (FSExtension)
-
-+ (instancetype)fs_sharedDateFormatter;
-
-@end
-
-@interface NSDateComponents (FSExtension)
-
-+ (instancetype)fs_sharedDateComponents;
-
-@end
-
-
-
diff --git a/iOS/Pods/FSCalendar/FSCalendar/NSDate+FSExtension.m b/iOS/Pods/FSCalendar/FSCalendar/NSDate+FSExtension.m
deleted file mode 100644
index 7a464135..00000000
--- a/iOS/Pods/FSCalendar/FSCalendar/NSDate+FSExtension.m
+++ /dev/null
@@ -1,344 +0,0 @@
-//
-// NSDate+FSExtension.m
-// Pods
-//
-// Created by Wenchao Ding on 29/1/15.
-//
-//
-
-#import "NSDate+FSExtension.h"
-
-@implementation NSDate (FSExtension)
-
-- (NSInteger)fs_year
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *component = [calendar components:NSCalendarUnitYear fromDate:self];
- return component.year;
-}
-
-- (NSInteger)fs_month
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *component = [calendar components:NSCalendarUnitMonth
- fromDate:self];
- return component.month;
-}
-
-- (NSInteger)fs_day
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *component = [calendar components:NSCalendarUnitDay
- fromDate:self];
- return component.day;
-}
-
-- (NSInteger)fs_weekday
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *component = [calendar components:NSCalendarUnitWeekday fromDate:self];
- return component.weekday;
-}
-
-- (NSInteger)fs_weekOfYear
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *component = [calendar components:NSCalendarUnitWeekOfYear fromDate:self];
- return component.weekOfYear;
-}
-
-- (NSInteger)fs_hour
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *component = [calendar components:NSCalendarUnitHour
- fromDate:self];
- return component.hour;
-}
-
-- (NSInteger)fs_minute
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *component = [calendar components:NSCalendarUnitMinute
- fromDate:self];
- return component.minute;
-}
-
-- (NSInteger)fs_second
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *component = [calendar components:NSCalendarUnitSecond
- fromDate:self];
- return component.second;
-}
-
-- (NSDate *)fs_dateByIgnoringTimeComponents
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:self];
- return [calendar dateFromComponents:components];
-}
-
-- (NSDate *)fs_firstDayOfMonth
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth| NSCalendarUnitDay fromDate:self];
- components.day = 1;
- return [calendar dateFromComponents:components];
-}
-
-- (NSDate *)fs_lastDayOfMonth
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:self];
- components.month++;
- components.day = 0;
- return [calendar dateFromComponents:components];
-}
-
-- (NSDate *)fs_firstDayOfWeek
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *weekdayComponents = [calendar components:NSCalendarUnitWeekday fromDate:self];
- NSDateComponents *componentsToSubtract = [NSDateComponents fs_sharedDateComponents];
- componentsToSubtract.day = - (weekdayComponents.weekday - calendar.firstWeekday);
- NSDate *beginningOfWeek = [calendar dateByAddingComponents:componentsToSubtract toDate:self options:0];
- NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:beginningOfWeek];
- beginningOfWeek = [calendar dateFromComponents:components];
- componentsToSubtract.day = NSIntegerMax;
- return beginningOfWeek;
-}
-
-- (NSDate *)fs_middleOfWeek
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *weekdayComponents = [calendar components:NSCalendarUnitWeekday fromDate:self];
- NSDateComponents *componentsToSubtract = [NSDateComponents fs_sharedDateComponents];
- componentsToSubtract.day = - (weekdayComponents.weekday - calendar.firstWeekday) + 3;
- NSDate *middleOfWeek = [calendar dateByAddingComponents:componentsToSubtract toDate:self options:0];
- NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:middleOfWeek];
- middleOfWeek = [calendar dateFromComponents:components];
- componentsToSubtract.day = NSIntegerMax;
- return middleOfWeek;
-}
-
-- (NSDate *)fs_tomorrow
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:self];
- components.day++;
- return [calendar dateFromComponents:components];
-}
-
-- (NSDate *)fs_yesterday
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:self];
- components.day--;
- return [calendar dateFromComponents:components];
-}
-
-- (NSInteger)fs_numberOfDaysInMonth
-{
- NSCalendar *c = [NSCalendar fs_sharedCalendar];
- NSRange days = [c rangeOfUnit:NSCalendarUnitDay
- inUnit:NSCalendarUnitMonth
- forDate:self];
- return days.length;
-}
-
-+ (instancetype)fs_dateFromString:(NSString *)string format:(NSString *)format
-{
- NSDateFormatter *formatter = [NSDateFormatter fs_sharedDateFormatter];
- formatter.dateFormat = format;
- return [formatter dateFromString:string];
-}
-
-+ (instancetype)fs_dateWithYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *components = [NSDateComponents fs_sharedDateComponents];
- components.year = year;
- components.month = month;
- components.day = day;
- NSDate *date = [calendar dateFromComponents:components];
- components.year = NSIntegerMax;
- components.month = NSIntegerMax;
- components.day = NSIntegerMax;
- return date;
-}
-
-- (NSDate *)fs_dateByAddingYears:(NSInteger)years
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *components = [NSDateComponents fs_sharedDateComponents];
- components.year = years;
- NSDate *date = [calendar dateByAddingComponents:components toDate:self options:0];
- components.year = NSIntegerMax;
- return date;
-}
-
-- (NSDate *)fs_dateBySubtractingYears:(NSInteger)years
-{
- return [self fs_dateByAddingYears:-years];
-}
-
-- (NSDate *)fs_dateByAddingMonths:(NSInteger)months
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *components = [NSDateComponents fs_sharedDateComponents];
- components.month = months;
- NSDate *date = [calendar dateByAddingComponents:components toDate:self options:0];
- components.month = NSIntegerMax;
- return date;
-}
-
-- (NSDate *)fs_dateBySubtractingMonths:(NSInteger)months
-{
- return [self fs_dateByAddingMonths:-months];
-}
-
-- (NSDate *)fs_dateByAddingWeeks:(NSInteger)weeks
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *components = [NSDateComponents fs_sharedDateComponents];
- components.weekOfYear = weeks;
- NSDate *date = [calendar dateByAddingComponents:components toDate:self options:0];
- components.weekOfYear = NSIntegerMax;
- return date;
-}
-
--(NSDate *)fs_dateBySubtractingWeeks:(NSInteger)weeks
-{
- return [self fs_dateByAddingWeeks:-weeks];
-}
-
-- (NSDate *)fs_dateByAddingDays:(NSInteger)days
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *components = [NSDateComponents fs_sharedDateComponents];
- components.day = days;
- NSDate *date = [calendar dateByAddingComponents:components toDate:self options:0];
- components.day = NSIntegerMax;
- return date;
-}
-
-- (NSDate *)fs_dateBySubtractingDays:(NSInteger)days
-{
- return [self fs_dateByAddingDays:-days];
-}
-
-- (NSInteger)fs_yearsFrom:(NSDate *)date
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *components = [calendar components:NSCalendarUnitYear
- fromDate:date
- toDate:self
- options:0];
- return components.year;
-}
-
-- (NSInteger)fs_monthsFrom:(NSDate *)date
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *components = [calendar components:NSCalendarUnitMonth
- fromDate:date
- toDate:self
- options:0];
- return components.month;
-}
-
-- (NSInteger)fs_weeksFrom:(NSDate *)date
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *components = [calendar components:NSCalendarUnitWeekOfYear
- fromDate:date
- toDate:self
- options:0];
- return components.weekOfYear;
-}
-
-- (NSInteger)fs_daysFrom:(NSDate *)date
-{
- NSCalendar *calendar = [NSCalendar fs_sharedCalendar];
- NSDateComponents *components = [calendar components:NSCalendarUnitDay
- fromDate:date
- toDate:self
- options:0];
- return components.day;
-}
-
-- (NSString *)fs_stringWithFormat:(NSString *)format
-{
- NSDateFormatter *formatter = [NSDateFormatter fs_sharedDateFormatter];
- formatter.dateFormat = format;
- return [formatter stringFromDate:self];
-}
-
-- (NSString *)fs_string
-{
- return [self fs_stringWithFormat:@"yyyyMMdd"];
-}
-
-
-- (BOOL)fs_isEqualToDateForMonth:(NSDate *)date
-{
- return self.fs_year == date.fs_year && self.fs_month == date.fs_month;
-}
-
-- (BOOL)fs_isEqualToDateForWeek:(NSDate *)date
-{
- return self.fs_year == date.fs_year && self.fs_weekOfYear == date.fs_weekOfYear;
-}
-
-- (BOOL)fs_isEqualToDateForDay:(NSDate *)date
-{
- return self.fs_year == date.fs_year && self.fs_month == date.fs_month && self.fs_day == date.fs_day;
-}
-
-@end
-
-
-@implementation NSCalendar (FSExtension)
-
-+ (instancetype)fs_sharedCalendar
-{
- static id instance;
- static dispatch_once_t fs_sharedCalendar_onceToken;
- dispatch_once(&fs_sharedCalendar_onceToken, ^{
- instance = [NSCalendar currentCalendar];
- });
- return instance;
-}
-
-@end
-
-
-@implementation NSDateFormatter (FSExtension)
-
-+ (instancetype)fs_sharedDateFormatter
-{
- static id instance;
- static dispatch_once_t fs_sharedDateFormatter_onceToken;
- dispatch_once(&fs_sharedDateFormatter_onceToken, ^{
- instance = [[NSDateFormatter alloc] init];
- });
- return instance;
-}
-
-@end
-
-@implementation NSDateComponents (FSExtension)
-
-+ (instancetype)fs_sharedDateComponents
-{
- static id instance;
- static dispatch_once_t fs_sharedDateFormatter_onceToken;
- dispatch_once(&fs_sharedDateFormatter_onceToken, ^{
- instance = [[NSDateComponents alloc] init];
- });
- return instance;
-}
-
-@end
-
-
diff --git a/iOS/Pods/FSCalendar/FSCalendar/NSString+FSExtension.h b/iOS/Pods/FSCalendar/FSCalendar/NSString+FSExtension.h
deleted file mode 100644
index abffa9a2..00000000
--- a/iOS/Pods/FSCalendar/FSCalendar/NSString+FSExtension.h
+++ /dev/null
@@ -1,16 +0,0 @@
-//
-// NSString+FSExtension.h
-// FSCalendar
-//
-// Created by Wenchao Ding on 8/29/15.
-// Copyright (c) 2015 wenchaoios. All rights reserved.
-//
-
-#import
-
-@interface NSString (FSExtension)
-
-- (NSDate *)fs_dateWithFormat:(NSString *)format;
-- (NSDate *)fs_date;
-
-@end
diff --git a/iOS/Pods/FSCalendar/FSCalendar/NSString+FSExtension.m b/iOS/Pods/FSCalendar/FSCalendar/NSString+FSExtension.m
deleted file mode 100644
index ce22fb03..00000000
--- a/iOS/Pods/FSCalendar/FSCalendar/NSString+FSExtension.m
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-// NSString+FSExtension.m
-// FSCalendar
-//
-// Created by Wenchao Ding on 8/29/15.
-// Copyright (c) 2015 wenchaoios. All rights reserved.
-//
-
-#import "NSString+FSExtension.h"
-#import "NSDate+FSExtension.h"
-
-@implementation NSString (FSExtension)
-
-- (NSDate *)fs_dateWithFormat:(NSString *)format
-{
- NSDateFormatter *formatter = [NSDateFormatter fs_sharedDateFormatter];
- formatter.dateFormat = format;
- return [formatter dateFromString:self];
-}
-
-- (NSDate *)fs_date
-{
- return [self fs_dateWithFormat:@"yyyyMMdd"];
-}
-
-@end
diff --git a/iOS/Pods/FSCalendar/README.md b/iOS/Pods/FSCalendar/README.md
index c62c481a..2f6477a3 100644
--- a/iOS/Pods/FSCalendar/README.md
+++ b/iOS/Pods/FSCalendar/README.md
@@ -1,13 +1,28 @@
+
![fscalendar](https://cloud.githubusercontent.com/assets/5186464/6655324/213a814a-cb36-11e4-9add-f80515a83291.png)
[![Travis](https://travis-ci.org/WenchaoD/FSCalendar.svg?branch=master)](https://travis-ci.org/WenchaoD/FSCalendar)
[![Version](https://img.shields.io/cocoapods/v/FSCalendar.svg?style=flat)](http://cocoadocs.org/docsets/FSCalendar)
[![Platform](https://img.shields.io/badge/platform-iOS%207%2B-blue.svg?style=flat)](http://cocoadocs.org/docsets/FSCalendar)
[![Swift2 compatible](https://img.shields.io/badge/swift2-compatible-4BC51D.svg?style=flat)](https://developer.apple.com/swift/)
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
-[![License](https://img.shields.io/cocoapods/l/FSCalendar.svg?style=flat)](http://cocoadocs.org/docsets/FSCalendar)
-[![Join the chat at https://gitter.im/WenchaoD/FSCalendar](https://badges.gitter.im/WenchaoD/FSCalendar.svg)](https://gitter.im/WenchaoD/FSCalendar?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+[![QQ group](https://img.shields.io/badge/QQ%E7%BE%A4-323861692-orange.svg)](https://github.com/WenchaoD)
+[![Twitter](https://img.shields.io/badge/Twitter-@WenchaoD-55ACEE.svg)](https://twitter.com/WenchaoD)
+[![微博](https://img.shields.io/badge/%E5%BE%AE%E5%8D%9A-@WenchaoD-%23E6162D.svg)](http://weibo.com/WenchaoD)
+
+* 在您静静的离开之前,请确保点击了这个按钮
+* Before leaving quietly, please make sure you've taken good care of this button.
+
+
+# [中文介绍](http://www.jianshu.com/notebooks/4276521/latest)
+
+
+# Table of contents
+* [Screenshots](#screenshots)
+* [Installation](#installation)
+* [Advanced usage](#advanced_usage)
+* [Support me](#support)
-# Screenshots
+# Screenshots
## iPhone
![fscalendar](https://cloud.githubusercontent.com/assets/5186464/10262249/4fabae40-69f2-11e5-97ab-afbacd0a3da2.jpg)
@@ -18,7 +33,15 @@
## Working with AutoLayout and Orientation
![fscalendar-scope-orientation-autolayout](https://cloud.githubusercontent.com/assets/5186464/13728798/59855e3e-e95e-11e5-84db-60f843427ef3.gif)
-# Installation
+## Hide placeholder dates
+![fscalendar-showsplaceholder](https://cloud.githubusercontent.com/assets/5186464/13727902/21a90042-e940-11e5-9b9f-392f38cf007d.gif)
+
+## Scope handle
+![scopehandle](https://cloud.githubusercontent.com/assets/5186464/15096674/5270ef9c-1536-11e6-88b0-c4e3e8f93115.gif)
+
+> FSCalendar doesn't change frame or the constraint by itself, see [Adjusts frame dynamicly](#adjusts_frame_dynamicly)
+
+# Installation
## CocoaPods:
@@ -95,15 +118,12 @@ self.calendar = calendar
```
+## Warning
+`FSCalendar` doesn't change frame by itself, Please implement
-## Hide placeholder dates
-![fscalendar-showsplaceholder](https://cloud.githubusercontent.com/assets/5186464/13727902/21a90042-e940-11e5-9b9f-392f38cf007d.gif)
-
-1. Set `calendar.showsPlaceholders = NO`;
-2. Implement `-calendar:boundingRectWillChange:animated:`
+* For autoLayout
```objc
-// For autoLayout
- (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated
{
_calendarHeightConstraint.constant = CGRectGetHeight(bounds);
@@ -111,8 +131,9 @@ self.calendar = calendar
}
```
+* For manual layout
+
```objc
-// For manual layout
- (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated
{
calendar.frame = (CGRect){calendar.frame.origin,bounds.size};
@@ -122,28 +143,33 @@ self.calendar = calendar
### Roll with Interface Builder
![fscalendar - ibdesignable](https://cloud.githubusercontent.com/assets/5186464/9301716/2e76a2ca-4503-11e5-8450-1fa7aa93e9fd.gif)
-## More Usage
+## Advanced Usage
* To view more usage, download the zip file and read the example.
* Or you could refer to [this document](https://github.com/WenchaoD/FSCalendar/blob/master/MOREUSAGE.md)
* To view the full documentation, see [CocoaPods Documentation](http://cocoadocs.org/docsets/FSCalendar/2.0.1/)
-# If you like this repo
-* ***Star*** this repo.
-* Send your calendar screenshot or `itunes link address` [here](https://github.com/WenchaoD/FSCalendar/issues/2).
+# Support me via [![paypal](https://www.paypalobjects.com/webstatic/i/logo/rebrand/ppcom.svg)](https://www.paypalobjects.com/webstatic/i/logo/rebrand/ppcom.svg)
-# Support me via [![paypal](https://www.paypalobjects.com/webstatic/i/logo/rebrand/ppcom.svg)](https://www.paypalobjects.com/webstatic/i/logo/rebrand/ppcom.svg)
* ☕️ [This coffee is on me!](https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=Z84P82H3V4Q26&lc=C2&item_name=This%20coffee%20is%20on%20me%21&item_number=Support%20FSCalendar%20%2d%20WenchaoIOS&amount=5%2e00¤cy_code=USD&button_subtype=services&bn=PP%2dBuyNowBF%3abtn_buynowCC_LG%2egif%3aNonHosted)
* [Lunch is on me!](https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=Z84P82H3V4Q26&lc=C2&item_name=Lunch%20is%20on%20me%21&item_number=Support%20FSCalendar&amount=10%2e00¤cy_code=USD&button_subtype=services&bn=PP%2dBuyNowBF%3abtn_buynowCC_LG%2egif%3aNonHosted)
* [Have a nice dinner!](https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=Z84P82H3V4Q26&lc=C2&item_name=Tonight%27s%20dinner%20is%20on%20me%21&item_number=Support%20FSCalendar%20%2d%20WenchaoIOS&amount=25%2e00¤cy_code=USD&button_subtype=services&bn=PP%2dBuyNowBF%3abtn_buynowCC_LG%2egif%3aNonHosted)
* [Greate work! Keep the change!](https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=Z84P82H3V4Q26&lc=C2&item_name=Great%20work%21%20Keep%20the%20change%21&item_number=Support%20FSCalendar%20%2d%20WenchaoIOS&amount=100%2e00¤cy_code=USD&button_subtype=services&bn=PP%2dBuyNowBF%3abtn_buynowCC_LG%2egif%3aNonHosted)
-# License
-FSCalendar is available under the MIT license. See the LICENSE file for more info.
+
-# Contributions
-* Issues and pull requests are absolutely welcome.
-* For code contributions, please follow [Coding Guidelines for Cocoa](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html)
+# 打赏支持
-# Contact
-* Email: `f33chobits@gmail.com`
+
+
+
+
+
+
+# Communications
+* If you found a bug ***with certain steps to reproduce***, open an issue.
+* If you need help about your code, use [stackoverflow](http://stackoverflow.com/questions/tagged/fscalendar) and tag `fscalendar`
+* If you want to contribute, submit a pull request. Make sure to follow [Coding Guidelines for Cocoa](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html)
+
+# License
+FSCalendar is available under the MIT license. See the LICENSE file for more info.
diff --git a/iOS/Pods/INTULocationManager/LocationManager/INTULocationManager/INTUHeadingRequest.h b/iOS/Pods/INTULocationManager/LocationManager/INTULocationManager/INTUHeadingRequest.h
index d0963d37..d9352128 100644
--- a/iOS/Pods/INTULocationManager/LocationManager/INTULocationManager/INTUHeadingRequest.h
+++ b/iOS/Pods/INTULocationManager/LocationManager/INTULocationManager/INTUHeadingRequest.h
@@ -38,4 +38,4 @@ __INTU_ASSUME_NONNULL_BEGIN
@end
-__INTU_ASSUME_NONNULL_END
\ No newline at end of file
+__INTU_ASSUME_NONNULL_END
diff --git a/iOS/Pods/INTULocationManager/LocationManager/INTULocationManager/INTURequestIDGenerator.h b/iOS/Pods/INTULocationManager/LocationManager/INTULocationManager/INTURequestIDGenerator.h
index 0a633dfd..22da4706 100644
--- a/iOS/Pods/INTULocationManager/LocationManager/INTULocationManager/INTURequestIDGenerator.h
+++ b/iOS/Pods/INTULocationManager/LocationManager/INTULocationManager/INTURequestIDGenerator.h
@@ -36,4 +36,4 @@ __INTU_ASSUME_NONNULL_BEGIN
@end
-__INTU_ASSUME_NONNULL_END
\ No newline at end of file
+__INTU_ASSUME_NONNULL_END
diff --git a/iOS/Pods/Local Podspecs/Alamofire.podspec.json b/iOS/Pods/Local Podspecs/Alamofire.podspec.json
new file mode 100644
index 00000000..c8c5f7d0
--- /dev/null
+++ b/iOS/Pods/Local Podspecs/Alamofire.podspec.json
@@ -0,0 +1,22 @@
+{
+ "name": "Alamofire",
+ "version": "3.4.1",
+ "license": "MIT",
+ "summary": "Elegant HTTP Networking in Swift",
+ "homepage": "https://github.com/Alamofire/Alamofire",
+ "social_media_url": "http://twitter.com/AlamofireSF",
+ "authors": {
+ "Alamofire Software Foundation": "info@alamofire.org"
+ },
+ "source": {
+ "git": "https://github.com/Alamofire/Alamofire.git",
+ "tag": "3.4.1"
+ },
+ "platforms": {
+ "ios": "8.0",
+ "osx": "10.9",
+ "tvos": "9.0",
+ "watchos": "2.0"
+ },
+ "source_files": "Source/*.swift"
+}
diff --git a/iOS/Pods/Local Podspecs/Localize-Swift.podspec.json b/iOS/Pods/Local Podspecs/Localize-Swift.podspec.json
index 63cf5721..02da8748 100644
--- a/iOS/Pods/Local Podspecs/Localize-Swift.podspec.json
+++ b/iOS/Pods/Local Podspecs/Localize-Swift.podspec.json
@@ -1,6 +1,6 @@
{
"name": "Localize-Swift",
- "version": "1.1.2",
+ "version": "1.5",
"summary": "Swift-friendly localization and i18n syntax with in-app language switching.",
"description": "A simple framework that improves localization and i18n in Swift apps with cleaner syntax and in-app language switching.",
"homepage": "https://github.com/marmelroy/Localize-Swift",
@@ -10,13 +10,15 @@
},
"source": {
"git": "https://github.com/marmelroy/Localize-Swift.git",
- "tag": "1.1.2",
+ "tag": "1.5",
"submodules": true
},
"social_media_url": "http://twitter.com/marmelroy",
"platforms": {
"ios": "8.0",
- "tvos": "9.0"
+ "osx": "10.9",
+ "tvos": "9.0",
+ "watchos": "2.0"
},
"requires_arc": true,
"source_files": "Sources"
diff --git a/iOS/Pods/Local Podspecs/Log.podspec.json b/iOS/Pods/Local Podspecs/Log.podspec.json
deleted file mode 100644
index ec65244d..00000000
--- a/iOS/Pods/Local Podspecs/Log.podspec.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "name": "Log",
- "version": "0.5",
- "license": {
- "type": "MIT"
- },
- "homepage": "https://github.com/delba/Log",
- "authors": {
- "Damien": "damien@delba.io"
- },
- "summary": "An extensible logging framework for Swift",
- "source": {
- "git": "https://github.com/delba/Log.git",
- "tag": "v0.5"
- },
- "platforms": {
- "ios": "8.0",
- "osx": "10.9",
- "tvos": "9.0",
- "watchos": "2.0"
- },
- "source_files": "Source/**/*.{swift, h}",
- "requires_arc": true
-}
diff --git a/iOS/Pods/Local Podspecs/NVActivityIndicatorView.podspec.json b/iOS/Pods/Local Podspecs/NVActivityIndicatorView.podspec.json
index 9cfa2855..27d1c279 100644
--- a/iOS/Pods/Local Podspecs/NVActivityIndicatorView.podspec.json
+++ b/iOS/Pods/Local Podspecs/NVActivityIndicatorView.podspec.json
@@ -1,6 +1,6 @@
{
"name": "NVActivityIndicatorView",
- "version": "2.6",
+ "version": "2.9",
"summary": "A collection of nice loading animations",
"homepage": "https://github.com/ninjaprox/NVActivityIndicatorView",
"screenshots": "https://raw.githubusercontent.com/ninjaprox/NVActivityIndicatorView/master/Demo.gif",
@@ -16,7 +16,7 @@
},
"source": {
"git": "https://github.com/ninjaprox/NVActivityIndicatorView.git",
- "tag": "v2.6"
+ "tag": "v2.9"
},
"source_files": "NVActivityIndicatorView/**/*.swift",
"frameworks": [
diff --git a/iOS/Pods/Local Podspecs/SCLAlertView.podspec.json b/iOS/Pods/Local Podspecs/SCLAlertView.podspec.json
index 1e58b68b..594c124f 100644
--- a/iOS/Pods/Local Podspecs/SCLAlertView.podspec.json
+++ b/iOS/Pods/Local Podspecs/SCLAlertView.podspec.json
@@ -1,6 +1,6 @@
{
"name": "SCLAlertView",
- "version": "0.5.8",
+ "version": "0.5.9",
"summary": "Beautiful Alert View. Written in Swift",
"homepage": "https://github.com/vikmeup/SCLAlertView-Swift",
"screenshots": [
@@ -20,7 +20,7 @@
},
"source": {
"git": "https://github.com/vikmeup/SCLAlertView-Swift.git",
- "tag": "0.5.8"
+ "tag": "0.5.9"
},
"source_files": "SCLAlertView/*",
"requires_arc": true
diff --git a/iOS/Pods/Local Podspecs/SwiftInAppPurchase.podspec.json b/iOS/Pods/Local Podspecs/SwiftInAppPurchase.podspec.json
deleted file mode 100644
index 727c938b..00000000
--- a/iOS/Pods/Local Podspecs/SwiftInAppPurchase.podspec.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "name": "SwiftInAppPurchase",
- "version": "1.0.0",
- "summary": "A swift wrapper for iOS in app purchases.",
- "description": "This CocoaPod provide the ability of in app purchase (IAP)",
- "homepage": "https://github.com/rpzzzzzz/IAPMaster",
- "license": "Apache",
- "authors": {
- "Rawd": "suraphan.d@gmail.com"
- },
- "source": {
- "git": "https://github.com/rpzzzzzz/IAPMaster.git",
- "tag": "1.0.0"
- },
- "platforms": {
- "ios": "8.0"
- },
- "requires_arc": true,
- "source_files": "Pod/Classes/**/*",
- "resource_bundles": {
- "SwiftInAppPurchase": [
- "Pod/Assets/*.png"
- ]
- },
- "frameworks": "StoreKit"
-}
diff --git a/iOS/Pods/Local Podspecs/SwiftTweaks.podspec.json b/iOS/Pods/Local Podspecs/SwiftTweaks.podspec.json
deleted file mode 100644
index f82d9f96..00000000
--- a/iOS/Pods/Local Podspecs/SwiftTweaks.podspec.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "SwiftTweaks",
- "version": "1.0",
- "summary": "Tweak your Swift-based app on-device.",
- "description": "SwiftTweaks is a way to adjust your Swift-based iOS app on-device without needing to recompile. Read more about it on our blog: http://engineering.khanacademy.org/posts/introducing-swifttweaks.htm",
- "homepage": "https://github.com/Khan/SwiftTweaks",
- "screenshots": [
- "https://raw.githubusercontent.com/Khan/SwiftTweaks/master/Images/SwiftTweaks%20Demo.gif",
- "https://raw.githubusercontent.com/Khan/SwiftTweaks/master/Images/SwiftTweaks%20Overview.png"
- ],
- "license": {
- "type": "MIT",
- "file": "LICENSE"
- },
- "authors": [
- "Khan Academy",
- "Bryan Clark"
- ],
- "social_media_url": "https://twitter.com/khanacademy",
- "platforms": {
- "ios": "8.0"
- },
- "source": {
- "git": "https://github.com/Khan/SwiftTweaks.git",
- "tag": "v1.0",
- "submodules": true
- },
- "source_files": "SwiftTweaks/**/*.swift",
- "resources": "SwiftTweaks/*.xcassets",
- "ios": {
- "frameworks": "UIKit"
- }
-}
diff --git a/iOS/Pods/Local Podspecs/SwiftyBeaver.podspec.json b/iOS/Pods/Local Podspecs/SwiftyBeaver.podspec.json
new file mode 100644
index 00000000..f24acf7d
--- /dev/null
+++ b/iOS/Pods/Local Podspecs/SwiftyBeaver.podspec.json
@@ -0,0 +1,26 @@
+{
+ "name": "SwiftyBeaver",
+ "version": "0.6.3",
+ "summary": "Convenient logging during development & release in Swift 2 & 3",
+ "description": "Easy-to-use, extensible & powerful logging & analytics for Swift 2 & 3.\nGreat for development & release due to its support for many logging destinations & platforms.",
+ "homepage": "https://github.com/SwiftyBeaver/SwiftyBeaver",
+ "screenshots": [
+ "https://cloud.githubusercontent.com/assets/564725/11452558/17fd5f04-95ec-11e5-96d2-427f62ed4f05.jpg",
+ "https://cloud.githubusercontent.com/assets/564725/11452560/33225d16-95ec-11e5-8461-78f50b9e8da7.jpg"
+ ],
+ "license": "MIT",
+ "authors": {
+ "Sebastian Kreutzberger": "s.kreutzberger@googlemail.com"
+ },
+ "platforms": {
+ "ios": "8.0",
+ "watchos": "2.0",
+ "tvos": "9.0",
+ "osx": "10.10"
+ },
+ "source": {
+ "git": "https://github.com/SwiftyBeaver/SwiftyBeaver.git",
+ "tag": "0.6.3"
+ },
+ "source_files": "sources"
+}
diff --git a/iOS/Pods/Localize-Swift/README.md b/iOS/Pods/Localize-Swift/README.md
index 9e083b4b..185ab811 100644
--- a/iOS/Pods/Localize-Swift/README.md
+++ b/iOS/Pods/Localize-Swift/README.md
@@ -1,3 +1,4 @@
+[![Platform](https://img.shields.io/cocoapods/p/Localize-Swift.svg?maxAge=2592000)](http://cocoapods.org/?q=Localize-Swift)
[![Build Status](https://travis-ci.org/marmelroy/Localize-Swift.svg?branch=master)](https://travis-ci.org/marmelroy/Localize-Swift) [![Version](http://img.shields.io/cocoapods/v/Localize-Swift.svg)](http://cocoapods.org/?q=Localize-Swift)
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
@@ -11,7 +12,7 @@ Localize-Swift is a simple framework that improves i18n and localization in Swif
- Keep the Localizable.strings file your app already uses.
- Allow your users to change the app's language without changing their device language.
- Use .localized() instead of NSLocalizedString(key,comment) - a more Swifty syntax.
-- Generate your strings with a new genstrings python script that recognises .localized().
+- Generate your strings with a new genstrings swift/python script that recognises .localized().
## Usage
@@ -49,9 +50,14 @@ Localize.resetCurrentLanguageToDefault()
## genstrings
-To support this new i18n syntax, Localize-Swift includes a custom genstrings python script.
+To support this new i18n syntax, Localize-Swift includes custom genstrings swift and python scripts.
-Copy the genstrings.py file into your project's root folder and run with
+Copy the genstrings file (either .swift or .py) into your project's root folder and run with
+
+```
+./genstrings.swift
+```
+or
```
python genstrings.py
@@ -59,6 +65,7 @@ python genstrings.py
This will print the collected strings in the terminal. Select and copy to your default Localizable.strings.
+The swift genstrings includes the ability to specify excluded directories and files (by editing the script).
### Setting up with Carthage
diff --git a/iOS/Pods/Localize-Swift/Sources/Localize.swift b/iOS/Pods/Localize-Swift/Sources/Localize.swift
index 3ade44a0..4f4b27d7 100644
--- a/iOS/Pods/Localize-Swift/Sources/Localize.swift
+++ b/iOS/Pods/Localize-Swift/Sources/Localize.swift
@@ -98,8 +98,13 @@ public class Localize: NSObject {
List available languages
- Returns: Array of available languages.
*/
- public class func availableLanguages() -> [String] {
- return NSBundle.mainBundle().localizations
+ public class func availableLanguages(excludeBase: Bool = false) -> [String] {
+ var availableLanguages = NSBundle.mainBundle().localizations
+ // If excludeBase = true, don't include "Base" in available languages
+ if let indexOfBase = availableLanguages.indexOf("Base") where excludeBase == true {
+ availableLanguages.removeAtIndex(indexOfBase)
+ }
+ return availableLanguages
}
/**
diff --git a/iOS/Pods/Localize-Swift/Sources/Localize_Swift.h b/iOS/Pods/Localize-Swift/Sources/Localize_Swift.h
index 36673b5c..be5dbc9b 100644
--- a/iOS/Pods/Localize-Swift/Sources/Localize_Swift.h
+++ b/iOS/Pods/Localize-Swift/Sources/Localize_Swift.h
@@ -6,7 +6,7 @@
// Copyright © 2016 Roy Marmelstein. All rights reserved.
//
-#import
+@import Foundation;
//! Project version number for Localize_Swift.
FOUNDATION_EXPORT double Localize_SwiftVersionNumber;
diff --git a/iOS/Pods/Log/LICENSE b/iOS/Pods/Log/LICENSE
deleted file mode 100644
index c567f8ea..00000000
--- a/iOS/Pods/Log/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2015-2016 Damien (http://delba.io)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/iOS/Pods/Log/README.md b/iOS/Pods/Log/README.md
deleted file mode 100644
index e6c1ae3f..00000000
--- a/iOS/Pods/Log/README.md
+++ /dev/null
@@ -1,169 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-`Log` is a powerful logging framework that provides built-in themes and formatters, and a nice API to define your owns.
-
-> Get the most out of `Log` by installing [`XcodeColors`](https://github.com/robbiehanson/XcodeColors) and [`KZLinkedConsole`](https://github.com/krzysztofzablocki/KZLinkedConsole)
-
-
- Usage • Installation • License
-
-
-### Usage
-
-#### The basics
-
-- Use `Log` just as you would use `print`.
-
-```swift
-let Log = Logger()
-
-Log.trace("Called!!!")
-Log.debug("Who is self:", self)
-Log.info(some, objects, here)
-Log.warning(one, two, three, separator: " - ")
-Log.error(error, terminator: "😱😱😱\n")
-```
-
-
-
-- Disable `Log` by setting `enabled` to `false`:
-
-```swift
-Log.enabled = false
-```
-
-- Define a minimum level of severity to only print the messages with a greater or equal severity:
-
-```swift
-Log.minLevel = .Warning
-```
-
-> The severity levels are `Trace`, `Debug`, `Info`, `Warning`, and `Error`.
-
-#### Customization
-
-- Create your own `Logger` by changing its `Theme` and/or `Formatter`.
-
-A suggested way of doing it is by extending `Formatters` and `Themes`:
-
-```swift
-extension Formatters {
- static let Detailed = Formatter("[%@] %@.%@:%@ %@: %@", [
- .Date("yyyy-MM-dd HH:mm:ss.SSS"),
- .File(fullPath: false, fileExtension: false),
- .Function,
- .Line,
- .Level,
- .Message
- ])
-}
-
-extension Themes {
- static let TomorrowNight = Theme(
- trace: "#C5C8C6",
- debug: "#81A2BE",
- info: "#B5BD68",
- warning: "#F0C674",
- error: "#CC6666"
- )
-}
-```
-
-```swift
-let Log = Logger(formatter: .Detailed, theme: .TomorrowNight)
-```
-
-
-
-> See the built-in [formatters](https://github.com/delba/Log/blob/master/Source/Extensions/Formatters.swift) and [themes](https://github.com/delba/Log/blob/master/Source/Extensions/Themes.swift) for more examples.
-
-**Tip:** `Log.format` and `Log.colors` can be useful to visually debug your logger.
-
-Nothing prevents you from creating as many loggers as you want!
-
-```swift
-let Basic = Logger(formatter: .Default, theme: nil)
-let Short = Logger(
- formatter: Formatter("%@: %@", .Level, .Message),
- theme: .TomorrowNightEighties,
- minLevel: .Info
-)
-```
-
-
-
-- Turn off the colors by setting the theme to `nil`:
-
-```swift
-Log.theme = nil
-```
-
-#### Advanced
-
-Include a custom `Block` component in your formatter to print its result in every log message:
-
-```swift
-struct User {
- static func token() -> Int {
- return NSUserDefaults.standardUserDefaults.integerForKey("token")
- }
-}
-
-Log.formatter = Formatter("[%@] %@: %@", .Block(User.token), .Level, .Message)
-```
-
-## Installation
-
-### Carthage
-
-[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that automates the process of adding frameworks to your Cocoa application.
-
-You can install Carthage with [Homebrew](http://brew.sh/) using the following command:
-
-```bash
-$ brew update
-$ brew install carthage
-```
-
-To integrate Log into your Xcode project using Carthage, specify it in your `Cartfile`:
-
-```ogdl
-github "delba/Log"
-```
-
-### CocoaPods
-
-[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects.
-
-You can install it with the following command:
-
-```bash
-$ gem install cocoapods
-```
-
-To integrate Log into your Xcode project using CocoaPods, specify it in your `Podfile`:
-
-```ruby
-use_frameworks!
-
-pod 'Log'
-```
-
-## License
-
-Copyright (c) 2015-2016 Damien (http://delba.io)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/iOS/Pods/Log/Source/Benchmarker.swift b/iOS/Pods/Log/Source/Benchmarker.swift
deleted file mode 100644
index d84a220c..00000000
--- a/iOS/Pods/Log/Source/Benchmarker.swift
+++ /dev/null
@@ -1,74 +0,0 @@
-//
-// Benchmarker.swift
-//
-// Copyright (c) 2015-2016 Damien (http://delba.io)
-//
-// 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.
-//
-
-internal class Benchmarker {
- typealias Result = (
- description: String?,
- average: Double,
- relativeStandardDeviation: Double
- )
-
- /**
- Measures the performance of code.
-
- - parameter description: The measure description.
- - parameter n: The number of iterations.
- - parameter block: The block to measure.
-
- - returns: The measure result.
- */
- func measure(description: String? = nil, iterations n: Int = 10, block: () -> Void) -> Result {
- precondition(n >= 1, "Iteration must be greater or equal to 1.")
-
- let durations = (0.. Void) -> Double {
- let date = NSDate()
-
- block()
-
- return abs(date.timeIntervalSinceNow)
- }
-
- private func average(durations: [Double]) -> Double {
- return durations.reduce(0, combine: +) / Double(durations.count)
- }
-
- private func standardDeviation(average: Double, durations: [Double]) -> Double {
- return durations.reduce(0) { sum, duration in
- return sum + pow(duration - average, 2)
- }
- }
-}
\ No newline at end of file
diff --git a/iOS/Pods/Log/Source/Extensions/Formatters.swift b/iOS/Pods/Log/Source/Extensions/Formatters.swift
deleted file mode 100644
index b288f3d5..00000000
--- a/iOS/Pods/Log/Source/Extensions/Formatters.swift
+++ /dev/null
@@ -1,47 +0,0 @@
-//
-// Formatters.swift
-//
-// Copyright (c) 2015-2016 Damien (http://delba.io)
-//
-// 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.
-//
-
-extension Formatters {
- public static let Default = Formatter("[%@] %@ %@: %@", [
- .Date("yyyy-MM-dd HH:mm:ss.SSS"),
- .Location,
- .Level,
- .Message
- ])
-
- public static let Minimal = Formatter("%@ %@: %@", [
- .Location,
- .Level,
- .Message
- ])
-
- public static let Detailed = Formatter("[%@] %@.%@:%@ %@: %@", [
- .Date("yyyy-MM-dd HH:mm:ss.SSS"),
- .File(fullPath: false, fileExtension: false),
- .Function,
- .Line,
- .Level,
- .Message
- ])
-}
diff --git a/iOS/Pods/Log/Source/Extensions/Themes.swift b/iOS/Pods/Log/Source/Extensions/Themes.swift
deleted file mode 100644
index fce2eb20..00000000
--- a/iOS/Pods/Log/Source/Extensions/Themes.swift
+++ /dev/null
@@ -1,81 +0,0 @@
-//
-// Themes.swift
-//
-// Copyright (c) 2015-2016 Damien (http://delba.io)
-//
-// 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.
-//
-
-extension Themes {
- public static let Default = Theme(
- trace: "#C8C8C8",
- debug: "#0000FF",
- info: "#00FF00",
- warning: "#FFFB00",
- error: "#FF0000"
- )
-
- public static let Dusk = Theme(
- trace: "#FFFFFF",
- debug: "#526EDA",
- info: "#93C96A",
- warning: "#D28F5A",
- error: "#E44347"
- )
-
- public static let Midnight = Theme(
- trace: "#FFFFFF",
- debug: "#527EFF",
- info: "#08FA95",
- warning: "#EB905A",
- error: "#FF4647"
- )
-
- public static let Tomorrow = Theme(
- trace: "#4D4D4C",
- debug: "#4271AE",
- info: "#718C00",
- warning: "#EAB700",
- error: "#C82829"
- )
-
- public static let TomorrowNight = Theme(
- trace: "#C5C8C6",
- debug: "#81A2BE",
- info: "#B5BD68",
- warning: "#F0C674",
- error: "#CC6666"
- )
-
- public static let TomorrowNightEighties = Theme(
- trace: "#CCCCCC",
- debug: "#6699CC",
- info: "#99CC99",
- warning: "#FFCC66",
- error: "#F2777A"
- )
-
- public static let TomorrowNightBright = Theme(
- trace: "#EAEAEA",
- debug: "#7AA6DA",
- info: "#B9CA4A",
- warning: "#E7C547",
- error: "#D54E53"
- )
-}
\ No newline at end of file
diff --git a/iOS/Pods/Log/Source/Formatter.swift b/iOS/Pods/Log/Source/Formatter.swift
deleted file mode 100644
index 831cd31b..00000000
--- a/iOS/Pods/Log/Source/Formatter.swift
+++ /dev/null
@@ -1,315 +0,0 @@
-//
-// Formatter.swift
-//
-// Copyright (c) 2015-2016 Damien (http://delba.io)
-//
-// 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.
-//
-
-public enum Component {
- case Date(String)
- case Message
- case Level
- case File(fullPath: Bool, fileExtension: Bool)
- case Line
- case Column
- case Function
- case Location
- case Block(() -> Any?)
-}
-
-public class Formatters {}
-
-public class Formatter: Formatters {
- /// The formatter format.
- private var format: String
-
- /// The formatter components.
- private var components: [Component]
-
- /// The date formatter.
- private let dateFormatter = NSDateFormatter()
-
- /// The formatter logger.
- internal weak var logger: Logger!
-
- /// The formatter textual representation.
- internal var description: String {
- return String(format: format, arguments: components.map { (component: Component) -> CVarArgType in
- return String(component).uppercaseString
- })
- }
-
- /**
- Creates and returns a new formatter with the specified format and components.
-
- - parameter format: The formatter format.
- - parameter components: The formatter components.
-
- - returns: A newly created formatter.
- */
- public convenience init(_ format: String, _ components: Component...) {
- self.init(format, components)
- }
-
- /**
- Creates and returns a new formatter with the specified format and components.
-
- - parameter format: The formatter format.
- - parameter components: The formatter components.
-
- - returns: A newly created formatter.
- */
- public init(_ format: String, _ components: [Component]) {
- self.format = format
- self.components = components
- }
-
- /**
- Formats a string with the formatter format and components.
-
- - parameter level: The severity level.
- - parameter items: The items to format.
- - parameter separator: The separator between the items.
- - parameter terminator: The terminator of the formatted string.
- - parameter file: The log file path.
- - parameter line: The log line number.
- - parameter column: The log column number.
- - parameter function: The log function.
- - parameter date: The log date.
-
- - returns: A formatted string.
- */
- internal func format(level level: Level, items: [Any], separator: String, terminator: String, file: String, line: Int, column: Int, function: String, date: NSDate) -> String {
- let arguments = components.map { (component: Component) -> CVarArgType in
- switch component {
- case .Date(let dateFormat):
- return format(date: date, dateFormat: dateFormat)
- case .File(let fullPath, let fileExtension):
- return format(file: file, fullPath: fullPath, fileExtension: fileExtension)
- case .Function:
- return String(function)
- case .Line:
- return String(line)
- case .Column:
- return String(column)
- case .Level:
- return format(level: level)
- case .Message:
- return items.map({ String($0) }).joinWithSeparator(separator)
- case .Location:
- return format(file: file, line: line)
- case .Block(let block):
- return block().flatMap({ String($0) }) ?? ""
- }
- }
-
- return String(format: format, arguments: arguments) + terminator
- }
-
- /**
- Formats a string with the formatter format and components.
-
- - parameter description: The measure description.
- - parameter average: The average time.
- - parameter relativeStandardDeviation: The relative standard description.
- - parameter file: The log file path.
- - parameter line: The log line number.
- - parameter column: The log column number.
- - parameter function: The log function.
- - parameter date: The log date.
-
- - returns: A formatted string.
- */
- func format(description description: String?, average: Double, relativeStandardDeviation: Double, file: String, line: Int, column: Int, function: String, date: NSDate) -> String {
-
- let arguments = components.map { (component: Component) -> CVarArgType in
- switch component {
- case .Date(let dateFormat):
- return format(date: date, dateFormat: dateFormat)
- case .File(let fullPath, let fileExtension):
- return format(file: file, fullPath: fullPath, fileExtension: fileExtension)
- case .Function:
- return String(function)
- case .Line:
- return String(line)
- case .Column:
- return String(column)
- case .Level:
- return format(description: description)
- case .Message:
- return format(average: average, relativeStandardDeviation: relativeStandardDeviation)
- case .Location:
- return format(file: file, line: line)
- case .Block(let block):
- return block().flatMap({ String($0) }) ?? ""
- }
- }
-
- return String(format: format, arguments: arguments)
- }
-}
-
-private extension Formatter {
- /**
- Formats a date with the specified date format.
-
- - parameter date: The date.
- - parameter dateFormat: The date format.
-
- - returns: A formatted date.
- */
- func format(date date: NSDate, dateFormat: String) -> String {
- dateFormatter.dateFormat = dateFormat
- return dateFormatter.stringFromDate(date)
- }
-
- /**
- Formats a file path with the specified parameters.
-
- - parameter file: The file path.
- - parameter fullPath: Whether the full path should be included.
- - parameter fileExtension: Whether the file extension should be included.
-
- - returns: A formatted file path.
- */
- func format(file file: String, fullPath: Bool, fileExtension: Bool) -> String {
- var file = file
-
- if !fullPath { file = file.lastPathComponent }
- if !fileExtension { file = file.stringByDeletingPathExtension }
-
- return file
- }
-
- /**
- Formats a Location component with a specified file path and line number.
-
- - parameter file: The file path.
- - parameter line: The line number.
-
- - returns: A formatted Location component.
- */
- func format(file file: String, line: Int) -> String {
- return [
- format(file: file, fullPath: false, fileExtension: true),
- String(line)
- ].joinWithSeparator(":")
- }
-
- /**
- Formats a Level component.
-
- - parameter level: The Level component.
-
- - returns: A formatted Level component.
- */
- func format(level level: Level) -> String {
- let text = level.description
-
- if let color = logger.theme?.colors[level] {
- return text.withColor(color)
- }
-
- return text
- }
-
- /**
- Formats a measure description.
-
- - parameter description: The measure description.
-
- - returns: A formatted measure description.
- */
- func format(description description: String?) -> String {
- var text = "MEASURE"
-
- if let color = logger.theme?.colors[.Debug] {
- text = text.withColor(color)
- }
-
- if let description = description {
- text = "\(text) \(description)"
- }
-
- return text
- }
-
- /**
- Formats an average time and a relative standard deviation.
-
- - parameter average: The average time.
- - parameter relativeStandardDeviation: The relative standard deviation.
-
- - returns: A formatted average time and relative standard deviation.
- */
- func format(average average: Double, relativeStandardDeviation: Double) -> String {
- let average = format(average: average)
- let relativeStandardDeviation = format(relativeStandardDeviation: relativeStandardDeviation)
-
- return "Time: \(average) sec (\(relativeStandardDeviation) STDEV)"
- }
-
- /**
- Formats an average time.
-
- - parameter average: An average time.
-
- - returns: A formatted average time.
- */
- func format(average average: Double) -> String {
- return String(format: "%.3f", average)
- }
-
- /**
- Formats a list of durations.
-
- - parameter durations: A list of durations.
-
- - returns: A formatted list of durations.
- */
- func format(durations durations: [Double]) -> String {
- var format = Array(count: durations.count, repeatedValue: "%.6f").joinWithSeparator(", ")
- format = "[\(format)]"
-
- return String(format: format, arguments: durations.map{ $0 as CVarArgType })
- }
-
- /**
- Formats a standard deviation.
-
- - parameter standardDeviation: A standard deviation.
-
- - returns: A formatted standard deviation.
- */
- func format(standardDeviation standardDeviation: Double) -> String {
- return String(format: "%.6f", standardDeviation)
- }
-
- /**
- Formats a relative standard deviation.
-
- - parameter relativeStandardDeviation: A relative standard deviation.
-
- - returns: A formatted relative standard deviation.
- */
- func format(relativeStandardDeviation relativeStandardDeviation: Double) -> String {
- return String(format: "%.3f%%", relativeStandardDeviation)
- }
-}
\ No newline at end of file
diff --git a/iOS/Pods/Log/Source/Logger.swift b/iOS/Pods/Log/Source/Logger.swift
deleted file mode 100644
index 8ca20db2..00000000
--- a/iOS/Pods/Log/Source/Logger.swift
+++ /dev/null
@@ -1,232 +0,0 @@
-//
-// Logger.swift
-//
-// Copyright (c) 2015-2016 Damien (http://delba.io)
-//
-// 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.
-//
-
-private let benchmarker = Benchmarker()
-
-public enum Level {
- case Trace, Debug, Info, Warning, Error
-
- var description: String {
- return String(self).uppercaseString
- }
-}
-
-extension Level: Comparable {}
-
-public func ==(x: Level, y: Level) -> Bool {
- return x.hashValue == y.hashValue
-}
-
-public func <(x: Level, y: Level) -> Bool {
- return x.hashValue < y.hashValue
-}
-
-public class Logger {
- /// The logger state.
- public var enabled: Bool = true
-
- /// The logger formatter.
- public var formatter: Formatter {
- didSet { formatter.logger = self }
- }
-
- /// The logger theme.
- public var theme: Theme?
-
- /// The minimum level of severity.
- public var minLevel: Level
-
- /// The logger format.
- public var format: String {
- return formatter.description
- }
-
- /// The logger colors
- public var colors: String {
- return theme?.description ?? ""
- }
-
- /// The queue used for logging.
- private let queue = dispatch_queue_create("delba.log", DISPATCH_QUEUE_SERIAL)
-
- /**
- Creates and returns a new logger.
-
- - parameter formatter: The formatter.
- - parameter theme: The theme.
- - parameter minLevel: The minimum level of severity.
-
- - returns: A newly created logger.
- */
- public init(formatter: Formatter = .Default, theme: Theme? = nil, minLevel: Level = .Trace) {
- self.formatter = formatter
- self.theme = theme
- self.minLevel = minLevel
-
- formatter.logger = self
- }
-
- /**
- Logs a message with a trace severity level.
-
- - parameter items: The items to log.
- - parameter separator: The separator between the items.
- - parameter terminator: The terminator of the log message.
- - parameter file: The file in which the log happens.
- - parameter line: The line at which the log happens.
- - parameter column: The column at which the log happens.
- - parameter function: The function in which the log happens.
- */
- public func trace(items: Any..., separator: String = " ", terminator: String = "\n", file: String = #file, line: Int = #line, column: Int = #column, function: String = #function) {
- log(.Trace, items, separator, terminator, file, line, column, function)
- }
-
- /**
- Logs a message with a debug severity level.
-
- - parameter items: The items to log.
- - parameter separator: The separator between the items.
- - parameter terminator: The terminator of the log message.
- - parameter file: The file in which the log happens.
- - parameter line: The line at which the log happens.
- - parameter column: The column at which the log happens.
- - parameter function: The function in which the log happens.
- */
- public func debug(items: Any..., separator: String = " ", terminator: String = "\n", file: String = #file, line: Int = #line, column: Int = #column, function: String = #function) {
- log(.Debug, items, separator, terminator, file, line, column, function)
- }
-
- /**
- Logs a message with an info severity level.
-
- - parameter items: The items to log.
- - parameter separator: The separator between the items.
- - parameter terminator: The terminator of the log message.
- - parameter file: The file in which the log happens.
- - parameter line: The line at which the log happens.
- - parameter column: The column at which the log happens.
- - parameter function: The function in which the log happens.
- */
- public func info(items: Any..., separator: String = " ", terminator: String = "\n", file: String = #file, line: Int = #line, column: Int = #column, function: String = #function) {
- log(.Info, items, separator, terminator, file, line, column, function)
- }
-
- /**
- Logs a message with a warning severity level.
-
- - parameter items: The items to log.
- - parameter separator: The separator between the items.
- - parameter terminator: The terminator of the log message.
- - parameter file: The file in which the log happens.
- - parameter line: The line at which the log happens.
- - parameter column: The column at which the log happens.
- - parameter function: The function in which the log happens.
- */
- public func warning(items: Any..., separator: String = " ", terminator: String = "\n", file: String = #file, line: Int = #line, column: Int = #column, function: String = #function) {
- log(.Warning, items, separator, terminator, file, line, column, function)
- }
-
- /**
- Logs a message with an error severity level.
-
- - parameter items: The items to log.
- - parameter separator: The separator between the items.
- - parameter terminator: The terminator of the log message.
- - parameter file: The file in which the log happens.
- - parameter line: The line at which the log happens.
- - parameter column: The column at which the log happens.
- - parameter function: The function in which the log happens.
- */
- public func error(items: Any..., separator: String = " ", terminator: String = "\n", file: String = #file, line: Int = #line, column: Int = #column, function: String = #function) {
- log(.Error, items, separator, terminator, file, line, column, function)
- }
-
- /**
- Logs a message.
-
- - parameter level: The severity level.
- - parameter items: The items to log.
- - parameter separator: The separator between the items.
- - parameter terminator: The terminator of the log message.
- - parameter file: The file in which the log happens.
- - parameter line: The line at which the log happens.
- - parameter column: The column at which the log happens.
- - parameter function: The function in which the log happens.
- */
- private func log(level: Level, _ items: [Any], _ separator: String, _ terminator: String, _ file: String, _ line: Int, _ column: Int, _ function: String) {
- guard enabled && level >= minLevel else { return }
-
- let date = NSDate()
-
- let result = formatter.format(
- level: level,
- items: items,
- separator: separator,
- terminator: terminator,
- file: file,
- line: line,
- column: column,
- function: function,
- date: date
- )
-
- dispatch_async(queue) {
- Swift.print(result, separator: "", terminator: "")
- }
- }
-
- /**
- Measures the performance of code.
-
- - parameter description: The measure description.
- - parameter n: The number of iterations.
- - parameter file: The file in which the measure happens.
- - parameter line: The line at which the measure happens.
- - parameter column: The column at which the measure happens.
- - parameter function: The function in which the measure happens.
- - parameter block: The block to measure.
- */
- public func measure(description: String? = nil, iterations n: Int = 10, file: String = #file, line: Int = #line, column: Int = #column, function: String = #function, block: () -> Void) {
- guard enabled && .Debug >= minLevel else { return }
-
- let measure = benchmarker.measure(description, iterations: n, block: block)
-
- let date = NSDate()
-
- let result = formatter.format(
- description: measure.description,
- average: measure.average,
- relativeStandardDeviation: measure.relativeStandardDeviation,
- file: file,
- line: line,
- column: column,
- function: function,
- date: date
- )
-
- dispatch_async(queue) {
- Swift.print(result)
- }
- }
-}
\ No newline at end of file
diff --git a/iOS/Pods/Log/Source/Supporting Files/Utilities.swift b/iOS/Pods/Log/Source/Supporting Files/Utilities.swift
deleted file mode 100644
index 78dddd8b..00000000
--- a/iOS/Pods/Log/Source/Supporting Files/Utilities.swift
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// Utilities.swift
-//
-// Copyright (c) 2015-2016 Damien (http://delba.io)
-//
-// 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.
-//
-
-internal extension String {
- /// The last path component of the receiver.
- var lastPathComponent: String {
- return NSString(string: self).lastPathComponent
- }
-
- /// A new string made by deleting the extension from the receiver.
- var stringByDeletingPathExtension: String {
- return NSString(string: self).stringByDeletingPathExtension
- }
-
- /**
- Returns a string colored with the specified color.
-
- - parameter color: The string representation of the color.
-
- - returns: A string colored with the specified color.
- */
- func withColor(color: String) -> String {
- return "\u{001b}[fg\(color);\(self)\u{001b}[;"
- }
-}
\ No newline at end of file
diff --git a/iOS/Pods/Log/Source/Theme.swift b/iOS/Pods/Log/Source/Theme.swift
deleted file mode 100644
index d2e0cea2..00000000
--- a/iOS/Pods/Log/Source/Theme.swift
+++ /dev/null
@@ -1,79 +0,0 @@
-//
-// Theme.swift
-//
-// Copyright (c) 2015-2016 Damien (http://delba.io)
-//
-// 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.
-//
-
-public class Themes {}
-
-public class Theme: Themes {
- /// The theme colors.
- internal var colors: [Level: String]
-
- /// The theme textual representation.
- internal var description: String {
- return colors.keys.sort().map {
- $0.description.withColor(colors[$0]!)
- }.joinWithSeparator(" ")
- }
-
- /**
- Creates and returns a theme with the specified colors.
-
- - parameter trace: The color for the trace level.
- - parameter debug: The color for the debug level.
- - parameter info: The color for the info level.
- - parameter warning: The color for the warning level.
- - parameter error: The color for the error level.
-
- - returns: A theme with the specified colors.
- */
- public init(trace: String, debug: String, info: String, warning: String, error: String) {
- self.colors = [
- .Trace: Theme.formatHex(trace),
- .Debug: Theme.formatHex(debug),
- .Info: Theme.formatHex(info),
- .Warning: Theme.formatHex(warning),
- .Error: Theme.formatHex(error)
- ]
- }
-
- /**
- Returns a string representation of the hex color.
-
- - parameter hex: The hex color.
-
- - returns: A string representation of the hex color.
- */
- private static func formatHex(hex: String) -> String {
- let scanner = NSScanner(string: hex)
- var hex: UInt32 = 0
-
- scanner.charactersToBeSkipped = NSCharacterSet(charactersInString: "#")
- scanner.scanHexInt(&hex)
-
- let r = (hex & 0xFF0000) >> 16
- let g = (hex & 0xFF00) >> 8
- let b = (hex & 0xFF)
-
- return [r, g, b].map({ String($0) }).joinWithSeparator(",")
- }
-}
\ No newline at end of file
diff --git a/iOS/Pods/Manifest.lock b/iOS/Pods/Manifest.lock
index bf25c8f1..112da2ac 100644
--- a/iOS/Pods/Manifest.lock
+++ b/iOS/Pods/Manifest.lock
@@ -1,11 +1,11 @@
PODS:
- AKPickerView-Swift (1.0.1)
- - Alamofire (3.4.0)
+ - Alamofire (3.4.1)
- AsyncSwift (1.7.2)
- ChameleonFramework/Default (2.1.0)
- ChameleonFramework/Swift (2.1.0):
- ChameleonFramework/Default
- - Crashlytics (3.7.0):
+ - Crashlytics (3.7.2):
- Fabric (~> 1.6.3)
- DGElasticPullToRefresh (1.0.3)
- DGRunkeeperSwitch (1.1.1)
@@ -32,10 +32,9 @@ PODS:
- FontAwesomeKit/Core
- FontAwesomeKit/Zocial (2.2.1):
- FontAwesomeKit/Core
- - FSCalendar (2.1.1)
+ - FSCalendar (2.2.0)
- INTULocationManager (4.2.0)
- - Localize-Swift (1.1.2)
- - Log (0.5)
+ - Localize-Swift (1.5)
- MRProgress (0.8.3):
- MRProgress/ActivityIndicator (= 0.8.3)
- MRProgress/Blur (= 0.8.3)
@@ -64,18 +63,17 @@ PODS:
- MRProgress/ProgressBaseClass (0.8.3)
- MRProgress/Stopable (0.8.3):
- MRProgress/Helper
- - NVActivityIndicatorView (2.6)
+ - NVActivityIndicatorView (2.9)
- Onboard (2.1.9)
- PermissionScope (1.0.2)
- - SCLAlertView (0.5.8)
+ - SCLAlertView (0.5.9)
- SwiftDate (3.0.9)
- - SwiftInAppPurchase (1.0.0)
- - SwiftTweaks (1.0)
+ - SwiftyBeaver (0.6.3)
- SwiftyJSON (2.3.2)
DEPENDENCIES:
- AKPickerView-Swift (from `https://github.com/Akkyie/AKPickerView-Swift.git`)
- - Alamofire
+ - Alamofire (from `https://github.com/Alamofire/Alamofire.git`)
- AsyncSwift (from `https://github.com/duemunk/Async.git`)
- ChameleonFramework/Swift (from `https://github.com/ViccAlexander/Chameleon.git`)
- Crashlytics
@@ -87,20 +85,20 @@ DEPENDENCIES:
- FSCalendar
- INTULocationManager (from `https://github.com/intuit/LocationManager.git`)
- Localize-Swift (from `https://github.com/marmelroy/Localize-Swift.git`)
- - Log (from `https://github.com/delba/Log.git`)
- MRProgress (from `https://github.com/RemyDCF/MRProgress.git`)
- NVActivityIndicatorView (from `https://github.com/ninjaprox/NVActivityIndicatorView.git`)
- Onboard (from `https://github.com/mamaral/Onboard.git`, tag `v2.1.9`)
- PermissionScope (from `https://github.com/nickoneill/PermissionScope.git`)
- SCLAlertView (from `https://github.com/vikmeup/SCLAlertView-Swift.git`)
- SwiftDate (from `https://github.com/malcommac/SwiftDate.git`)
- - SwiftInAppPurchase (from `https://github.com/rpzzzzzz/SwiftInAppPurchase.git`)
- - SwiftTweaks (from `https://github.com/Khan/SwiftTweaks.git`)
+ - SwiftyBeaver (from `https://github.com/SwiftyBeaver/SwiftyBeaver.git`)
- SwiftyJSON (from `https://github.com/SwiftyJSON/SwiftyJSON.git`)
EXTERNAL SOURCES:
AKPickerView-Swift:
:git: https://github.com/Akkyie/AKPickerView-Swift.git
+ Alamofire:
+ :git: https://github.com/Alamofire/Alamofire.git
AsyncSwift:
:git: https://github.com/duemunk/Async.git
ChameleonFramework:
@@ -117,8 +115,6 @@ EXTERNAL SOURCES:
:git: https://github.com/intuit/LocationManager.git
Localize-Swift:
:git: https://github.com/marmelroy/Localize-Swift.git
- Log:
- :git: https://github.com/delba/Log.git
MRProgress:
:git: https://github.com/RemyDCF/MRProgress.git
NVActivityIndicatorView:
@@ -132,10 +128,8 @@ EXTERNAL SOURCES:
:git: https://github.com/vikmeup/SCLAlertView-Swift.git
SwiftDate:
:git: https://github.com/malcommac/SwiftDate.git
- SwiftInAppPurchase:
- :git: https://github.com/rpzzzzzz/SwiftInAppPurchase.git
- SwiftTweaks:
- :git: https://github.com/Khan/SwiftTweaks.git
+ SwiftyBeaver:
+ :git: https://github.com/SwiftyBeaver/SwiftyBeaver.git
SwiftyJSON:
:git: https://github.com/SwiftyJSON/SwiftyJSON.git
@@ -143,17 +137,20 @@ CHECKOUT OPTIONS:
AKPickerView-Swift:
:commit: 07c03dca3878fb3adaaa1087c40e5e4dc592fe0d
:git: https://github.com/Akkyie/AKPickerView-Swift.git
+ Alamofire:
+ :commit: 0f506b1c455e5ce4312d27daeb98c10a608107d3
+ :git: https://github.com/Alamofire/Alamofire.git
AsyncSwift:
:commit: e8e53f0fd39fabc226f4609d1c910c8af27a17cc
:git: https://github.com/duemunk/Async.git
ChameleonFramework:
- :commit: 3f87b407bb84ad5e23a0ee8a2ef4023ebb62b00a
+ :commit: 5b51a317485339c3e6762cd7d2adb2b4c7481ca2
:git: https://github.com/ViccAlexander/Chameleon.git
DGElasticPullToRefresh:
:commit: 188a2ff3c498c81aa3a5fe1916c1f8ed15c85dda
:git: https://github.com/gontovnik/DGElasticPullToRefresh.git
DGRunkeeperSwitch:
- :commit: 75829583f41c6eee1b86c66a0b2d947df70cc734
+ :commit: aa5c3986905e7d5b320bf5c4499f9aef60201618
:git: https://github.com/gontovnik/DGRunkeeperSwitch.git
EFCircularSlider:
:commit: 6366f39721c33d0d457f17cc7f225d7795cea2da
@@ -162,19 +159,16 @@ CHECKOUT OPTIONS:
:commit: eac30313fee77f6db1b6832b1d4b7d8f2007b381
:git: https://github.com/PrideChung/FontAwesomeKit.git
INTULocationManager:
- :commit: 8e8402e8b4486e4a59581ed77efc928a2f727481
+ :commit: 7741779256eae4fe727b027a046d6dcc7900566a
:git: https://github.com/intuit/LocationManager.git
Localize-Swift:
- :commit: 9a2bc3a3749390bb92c40694a4da4829a9b602c4
+ :commit: e3ce4b72c184dce8261a1cf35cb0875e55549e20
:git: https://github.com/marmelroy/Localize-Swift.git
- Log:
- :commit: 153e9c3d68031726f575bb255e3dc62267f4d1a1
- :git: https://github.com/delba/Log.git
MRProgress:
:commit: 0a9a8e9299c35f1ed1be0648910505fbd156e952
:git: https://github.com/RemyDCF/MRProgress.git
NVActivityIndicatorView:
- :commit: dfc0ea8b99e2be84548590f7786902c32c02098a
+ :commit: 49a0beb6a33eebc6cec322f05448516881615bf6
:git: https://github.com/ninjaprox/NVActivityIndicatorView.git
Onboard:
:git: https://github.com/mamaral/Onboard.git
@@ -183,46 +177,41 @@ CHECKOUT OPTIONS:
:commit: 8e7df5b5b676363b680a9fc0578ff232bcf8be5d
:git: https://github.com/nickoneill/PermissionScope.git
SCLAlertView:
- :commit: 5824520fd0978c0ff5864639b6340d0d0abd8d5f
+ :commit: 58090eb84843bb4cea3a554eefbd8217e6a2ec13
:git: https://github.com/vikmeup/SCLAlertView-Swift.git
SwiftDate:
:commit: 0dd3a3c610f2147a92c834cb4bdb5d983dd5f37b
:git: https://github.com/malcommac/SwiftDate.git
- SwiftInAppPurchase:
- :commit: 1080c4821443c5b71dff445a8c6c5b79f4bed2e4
- :git: https://github.com/rpzzzzzz/SwiftInAppPurchase.git
- SwiftTweaks:
- :commit: 88f8edd00c309afdd4490ce54c23bcc237802c8e
- :git: https://github.com/Khan/SwiftTweaks.git
+ SwiftyBeaver:
+ :commit: 572c71899c772f22a7706e83ae92213237ef9940
+ :git: https://github.com/SwiftyBeaver/SwiftyBeaver.git
SwiftyJSON:
- :commit: 2a5b70f06001316d4fb54501edc70b4084705da0
+ :commit: 73670b94292b8d8496c398a973f56ac67789ba9f
:git: https://github.com/SwiftyJSON/SwiftyJSON.git
SPEC CHECKSUMS:
AKPickerView-Swift: 8509d472bb257649383c276506334a7373d3cb33
- Alamofire: c19a627cefd6a95f840401c49ab1f124e07f54ee
+ Alamofire: 01a82e2f6c0f860ade35534c8dd88be61bdef40c
AsyncSwift: 15c496983f752a3ab8d1be17e64dd4c6f2a31239
ChameleonFramework: d21a3cc247abfe5e37609a283a8238b03575cf64
- Crashlytics: c3a2333dea9e2733d2777f730910321fc9e25c0d
+ Crashlytics: 130ab943f8c78cda7a814b434f270b2e2c8a3cba
DGElasticPullToRefresh: 3129c558cd59d68f9c2472d79abcd68a49bcd345
DGRunkeeperSwitch: da12f199532a99958a1e87ec0a5af61efdba11ec
EFCircularSlider: 8c9e901891fb813e89c4158508eefa8e35903454
Fabric: caf7580c725e64db144f610ac65cd60956911dc7
FontAwesomeKit: 3614979b3dbb0ec3f7fac1bd760b91f66c31db67
- FSCalendar: 04dc531f06fbde8a8e5b7394e9d4edebd45a591f
+ FSCalendar: 766367b91bcf2829c492c5ac50a58652c6df4ee8
INTULocationManager: 73f8254b3d05c897c56bb13c190e5b7c648c0998
- Localize-Swift: 584bcde9c6b13fcccb1333f398a46a0e60735e7a
- Log: 5972312cb85cffbc56407b612936b610eb4af8a5
+ Localize-Swift: 288aa763db72b0628d2cb111fbf5babc90529d0c
MRProgress: b0c2bcff94ee700ac2aea810e1f51720c059cbd3
- NVActivityIndicatorView: b8207b369c012af32da0916a8346a56d16a5fbbe
+ NVActivityIndicatorView: 0084f6be71bdf4735b5424ebfb530b1e3db3276c
Onboard: 4d92c763ed15f939071dec12e87ed9e8dc036746
PermissionScope: 860828c5516d349b6f49e5491799cfef33c5ccc7
- SCLAlertView: 653e84d1f9fd95333bc54671fbadb7d0c47fce49
+ SCLAlertView: d7c6a48c7d340e60206d4ed0e8ebcbff3b9d2a44
SwiftDate: fa487d9b7d8c3070ea2553486902494f4915465d
- SwiftInAppPurchase: e6d19c8a9d102635cb62fd9de7291eb6f3f0669e
- SwiftTweaks: ac08b7565d90776a6668e37e60224a9daa1e9ba6
+ SwiftyBeaver: c182c001d532111becf2285b8878abf54c7b5621
SwiftyJSON: 04ccea08915aa0109039157c7974cf0298da292a
-PODFILE CHECKSUM: a7106aefefacad5bbb4bc23c5be7c778bb25884d
+PODFILE CHECKSUM: ef83cc600101fd8f5e6957cfa365b330a4325a07
-COCOAPODS: 1.0.0.rc.1
+COCOAPODS: 1.0.1
diff --git a/iOS/Pods/NVActivityIndicatorView/LICENSE b/iOS/Pods/NVActivityIndicatorView/LICENSE
index 47517cfb..065499d5 100644
--- a/iOS/Pods/NVActivityIndicatorView/LICENSE
+++ b/iOS/Pods/NVActivityIndicatorView/LICENSE
@@ -1,6 +1,6 @@
The MIT License (MIT)
-Copyright (c) 2015 Nguyen Vinh
+Copyright (c) 2016 Nguyen Vinh
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/iOS/Pods/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationAudioEqualizer.swift b/iOS/Pods/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationAudioEqualizer.swift
new file mode 100644
index 00000000..fdcd3a66
--- /dev/null
+++ b/iOS/Pods/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationAudioEqualizer.swift
@@ -0,0 +1,51 @@
+//
+// NVActivityIndicatorAnimationAudioEqualizer.swift
+// NVActivityIndicatorViewDemo
+//
+// Created by Nguyen Vinh on 6/14/16.
+// Copyright © 2016 Nguyen Vinh. All rights reserved.
+//
+
+import UIKit
+
+class NVActivityIndicatorAnimationAudioEqualizer: NVActivityIndicatorAnimationDelegate {
+
+ func setUpAnimationInLayer(layer: CALayer, size: CGSize, color: UIColor) {
+ let lineSize = size.width / 9
+ let x = (layer.bounds.size.width - lineSize * 7) / 2
+ let y = (layer.bounds.size.height - size.height) / 2
+ let duration: [CFTimeInterval] = [4.3, 2.5, 1.7, 3.1]
+ let values = [0, 0.7, 0.4, 0.05, 0.95, 0.3, 0.9, 0.4, 0.15, 0.18, 0.75, 0.01]
+
+ // Draw lines
+ for i in 0 ..< 4 {
+ let animation = CAKeyframeAnimation()
+
+ animation.keyPath = "path"
+ animation.additive = true
+ animation.values = []
+
+ for j in 0 ..< values.count {
+ let heightFactor = values[j]
+ let height = size.height * CGFloat(heightFactor)
+ let point = CGPointMake(0, size.height - height)
+ let path = UIBezierPath(rect: CGRect(origin: point, size: CGSize(width: lineSize, height: height)))
+
+ animation.values?.append(path.CGPath)
+ }
+ animation.duration = duration[i]
+ animation.repeatCount = HUGE
+ animation.removedOnCompletion = false
+
+ let line = NVActivityIndicatorShape.Line.createLayerWith(size: CGSize(width: lineSize, height: size.height), color: color)
+ let frame = CGRect(x: x + lineSize * 2 * CGFloat(i),
+ y: y,
+ width: lineSize,
+ height: size.height)
+
+ line.frame = frame
+ line.addAnimation(animation, forKey: "animation")
+ layer.addSublayer(line)
+ }
+ }
+}
\ No newline at end of file
diff --git a/iOS/Pods/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationOrbit.swift b/iOS/Pods/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationOrbit.swift
new file mode 100644
index 00000000..3bceafba
--- /dev/null
+++ b/iOS/Pods/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationOrbit.swift
@@ -0,0 +1,153 @@
+//
+// NVActivityIndicatorAnimationOrbit.swift
+// NVActivityIndicatorViewDemo
+//
+// Created by Nguyen Vinh on 6/12/16.
+// Copyright © 2016 Nguyen Vinh. All rights reserved.
+//
+
+import UIKit
+
+class NVActivityIndicatorAnimationOrbit: NVActivityIndicatorAnimationDelegate {
+ let duration: CFTimeInterval = 1.9
+ let satelliteCoreRatio: CGFloat = 0.25
+ let distanceRatio:CGFloat = 1.5 // distance / core size
+
+ var coreSize: CGFloat = 0
+ var satelliteSize: CGFloat = 0
+
+ func setUpAnimationInLayer(layer: CALayer, size: CGSize, color: UIColor) {
+ coreSize = size.width / (1 + satelliteCoreRatio + distanceRatio)
+ satelliteSize = coreSize * satelliteCoreRatio
+
+ ring1InLayer(layer, size: size, color: color)
+ ring2InLayer(layer, size: size, color: color)
+ coreInLayer(layer, size: size, color: color)
+ satelliteInLayer(layer, size: size, color: color)
+ }
+
+ func ring1InLayer(layer: CALayer, size: CGSize, color: UIColor) {
+ // Scale animation
+ let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale")
+
+ scaleAnimation.keyTimes = [0, 0.45, 0.45, 1]
+ scaleAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
+ scaleAnimation.values = [0, 0, 1.3, 2]
+ scaleAnimation.duration = duration
+
+ // Opacity animation
+ let opacityAnimation = CAKeyframeAnimation(keyPath: "opacity")
+ let timingFunction = CAMediaTimingFunction(controlPoints: 0.19, 1, 0.22, 1)
+
+ opacityAnimation.keyTimes = [0, 0.45, 1]
+ scaleAnimation.timingFunctions = [CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear), timingFunction]
+ opacityAnimation.values = [0.8, 0.8, 0]
+ opacityAnimation.duration = duration
+
+ // Animation
+ let animation = CAAnimationGroup()
+
+ animation.animations = [scaleAnimation, opacityAnimation]
+ animation.duration = duration
+ animation.repeatCount = HUGE
+ animation.removedOnCompletion = false
+
+ // Draw circle
+ let circle = NVActivityIndicatorShape.Circle.createLayerWith(size: CGSize(width: coreSize, height: coreSize), color: color)
+ let frame = CGRectMake((layer.bounds.size.width - coreSize) / 2,
+ (layer.bounds.size.height - coreSize) / 2,
+ coreSize,
+ coreSize)
+
+ circle.frame = frame
+ circle.addAnimation(animation, forKey: "animation")
+ layer.addSublayer(circle)
+ }
+
+ func ring2InLayer(layer: CALayer, size: CGSize, color: UIColor) {
+ // Scale animation
+ let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale")
+
+ scaleAnimation.keyTimes = [0, 0.55, 0.55, 1]
+ scaleAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
+ scaleAnimation.values = [0, 0, 1.3, 2.1]
+ scaleAnimation.duration = duration
+
+ // Opacity animation
+ let opacityAnimation = CAKeyframeAnimation(keyPath: "opacity")
+ let timingFunction = CAMediaTimingFunction(controlPoints: 0.19, 1, 0.22, 1)
+
+ opacityAnimation.keyTimes = [0, 0.55, 0.65, 1]
+ scaleAnimation.timingFunctions = [CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear), timingFunction]
+ opacityAnimation.values = [0.7, 0.7, 0, 0]
+ opacityAnimation.duration = duration
+
+ // Animation
+ let animation = CAAnimationGroup()
+
+ animation.animations = [scaleAnimation, opacityAnimation]
+ animation.duration = duration
+ animation.repeatCount = HUGE
+ animation.removedOnCompletion = false
+
+ // Draw circle
+ let circle = NVActivityIndicatorShape.Circle.createLayerWith(size: CGSize(width: coreSize, height: coreSize), color: color)
+ let frame = CGRectMake((layer.bounds.size.width - coreSize) / 2,
+ (layer.bounds.size.height - coreSize) / 2,
+ coreSize,
+ coreSize)
+
+ circle.frame = frame
+ circle.addAnimation(animation, forKey: "animation")
+ layer.addSublayer(circle)
+ }
+
+ func coreInLayer(layer: CALayer, size: CGSize, color: UIColor) {
+ let inTimingFunction = CAMediaTimingFunction(controlPoints: 0.7, 0, 1, 0.5)
+ let outTimingFunction = CAMediaTimingFunction(controlPoints: 0, 0.7, 0.5, 1)
+ let standByTimingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
+
+ // Scale animation
+ let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale")
+
+ scaleAnimation.keyTimes = [0, 0.45, 0.55, 1]
+ scaleAnimation.timingFunctions = [inTimingFunction, standByTimingFunction, outTimingFunction];
+ scaleAnimation.values = [1, 1.3, 1.3, 1]
+ scaleAnimation.duration = duration
+ scaleAnimation.repeatCount = HUGE
+ scaleAnimation.removedOnCompletion = false
+
+ // Draw circle
+ let circle = NVActivityIndicatorShape.Circle.createLayerWith(size: CGSize(width: coreSize, height: coreSize), color: color)
+ let frame = CGRectMake((layer.bounds.size.width - coreSize) / 2,
+ (layer.bounds.size.height - coreSize) / 2,
+ coreSize,
+ coreSize)
+
+ circle.frame = frame
+ circle.addAnimation(scaleAnimation, forKey: "animation")
+ layer.addSublayer(circle)
+ }
+
+ func satelliteInLayer(layer: CALayer, size: CGSize, color: UIColor) {
+ // Rotate animation
+ let rotateAnimation = CAKeyframeAnimation(keyPath: "position")
+
+ rotateAnimation.path = UIBezierPath(arcCenter: CGPoint(x: CGRectGetMidX(layer.bounds), y: CGRectGetMidY(layer.bounds)),
+ radius: (size.width - satelliteSize) / 2,
+ startAngle: CGFloat(M_PI) * 1.5,
+ endAngle: CGFloat(M_PI) * 1.5 + 4 * CGFloat(M_PI),
+ clockwise: true).CGPath
+ rotateAnimation.duration = duration * 2
+ rotateAnimation.repeatCount = HUGE
+ rotateAnimation.removedOnCompletion = false
+
+ // Draw circle
+ let circle = NVActivityIndicatorShape.Circle.createLayerWith(size: CGSize(width: satelliteSize, height: satelliteSize), color: color)
+ let frame = CGRectMake(0, 0, satelliteSize, satelliteSize)
+
+ circle.frame = frame
+ circle.addAnimation(rotateAnimation, forKey: "animation")
+ layer.addSublayer(circle)
+ }
+}
\ No newline at end of file
diff --git a/iOS/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView.swift b/iOS/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView.swift
index ee174f72..306cd6b4 100644
--- a/iOS/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView.swift
+++ b/iOS/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView.swift
@@ -41,6 +41,7 @@ import UIKit
- BallGridBeat: BallGridBeat animation.
- SemiCircleSpin: SemiCircleSpin animation.
- BallRotateChase: BallRotateChase animation.
+ - Orbit: Orbit animation.
*/
public enum NVActivityIndicatorType: Int {
/**
@@ -223,8 +224,20 @@ public enum NVActivityIndicatorType: Int {
- returns: Instance of NVActivityIndicatorAnimationBallRotateChase.
*/
case BallRotateChase
+ /**
+ Orbit.
+
+ - returns: Instance of NVActivityIndicatorAnimationOrbit.
+ */
+ case Orbit
+ /**
+ AudioEqualizer.
+
+ - returns: Instance of NVActivityIndicatorAnimationAudioEqualizer.
+ */
+ case AudioEqualizer
- private static let allTypes = (Blank.rawValue ... BallRotateChase.rawValue).map{ NVActivityIndicatorType(rawValue: $0)! }
+ private static let allTypes = (Blank.rawValue ... Orbit.rawValue).map{ NVActivityIndicatorType(rawValue: $0)! }
private func animation() -> NVActivityIndicatorAnimationDelegate {
switch self {
@@ -288,15 +301,27 @@ public enum NVActivityIndicatorType: Int {
return NVActivityIndicatorAnimationSemiCircleSpin()
case .BallRotateChase:
return NVActivityIndicatorAnimationBallRotateChase()
+ case .Orbit:
+ return NVActivityIndicatorAnimationOrbit()
+ case .AudioEqualizer:
+ return NVActivityIndicatorAnimationAudioEqualizer()
}
}
}
/// Activity indicator view with nice animations
public class NVActivityIndicatorView: UIView {
- private static let DEFAULT_TYPE: NVActivityIndicatorType = .BallSpinFadeLoader
- private static let DEFAULT_COLOR = UIColor.whiteColor()
- private static let DEFAULT_PADDING: CGFloat = 0
+ /// Default type. Default value is .BallSpinFadeLoader.
+ public static var DEFAULT_TYPE: NVActivityIndicatorType = .BallSpinFadeLoader
+
+ /// Default color. Default value is UIColor.whiteColor().
+ public static var DEFAULT_COLOR = UIColor.whiteColor()
+
+ /// Default padding. Default value is 0.
+ public static var DEFAULT_PADDING: CGFloat = 0
+
+ /// Default size of activity indicator view in UI blocker. Default value is 60x60.
+ public static var DEFAULT_BLOCKER_SIZE = CGSizeMake(60, 60)
/// Animation type, value of NVActivityIndicatorType enum.
public var type: NVActivityIndicatorType = NVActivityIndicatorView.DEFAULT_TYPE
@@ -355,10 +380,10 @@ public class NVActivityIndicatorView: UIView {
- returns: The activity indicator view.
*/
- public init(frame: CGRect, type: NVActivityIndicatorType = DEFAULT_TYPE, color: UIColor = DEFAULT_COLOR, padding: CGFloat = DEFAULT_PADDING) {
- self.type = type
- self.color = color
- self.padding = padding
+ public init(frame: CGRect, type: NVActivityIndicatorType? = nil, color: UIColor? = nil, padding: CGFloat? = nil) {
+ self.type = type ?? NVActivityIndicatorView.DEFAULT_TYPE
+ self.color = color ?? NVActivityIndicatorView.DEFAULT_COLOR
+ self.padding = padding ?? NVActivityIndicatorView.DEFAULT_PADDING
super.init(frame: frame)
}
diff --git a/iOS/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorViewable.swift b/iOS/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorViewable.swift
new file mode 100644
index 00000000..c518c3d5
--- /dev/null
+++ b/iOS/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorViewable.swift
@@ -0,0 +1,77 @@
+//
+// NVActivityIndicatorViewable.swift
+// NVActivityIndicatorViewDemo
+//
+// Created by Basem Emara on 5/26/16.
+// Copyright © 2016 Nguyen Vinh. All rights reserved.
+//
+
+import UIKit
+
+/**
+ * UIViewController conforms this protocol to be able to display NVActivityIndicatorView as UI blocker.
+ *
+ * This will add functionalities to UIViewController to display and remove UI blocker.
+ */
+public protocol NVActivityIndicatorViewable { }
+
+public extension NVActivityIndicatorViewable where Self: UIViewController {
+
+ private var activityRestorationIdentifier: String {
+ return "NVActivityIndicatorViewContainer"
+ }
+
+ /**
+ Create a activity indicator view with specified frame, type, color and padding and start animation.
+
+ - parameter size: activity indicator view's size. Default size is 60x60.
+ - parameter message: message under activity indicator view.
+ - parameter type: animation type, value of NVActivityIndicatorType enum. Default type is BallSpinFadeLoader.
+ - parameter color: color of activity indicator view. Default color is white.
+ - parameter padding: view's padding. Default padding is 0.
+ */
+ public func startActivityAnimating(size: CGSize? = nil, message: String? = nil, type: NVActivityIndicatorType? = nil, color: UIColor? = nil, padding: CGFloat? = nil) {
+ let activityContainer: UIView = UIView(frame: view.bounds)
+
+ activityContainer.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5)
+ activityContainer.restorationIdentifier = activityRestorationIdentifier
+
+ let actualSize = size ?? NVActivityIndicatorView.DEFAULT_BLOCKER_SIZE
+ let activityIndicatorView = NVActivityIndicatorView(
+ frame: CGRectMake(0, 0, actualSize.width, actualSize.height),
+ type: type,
+ color: color,
+ padding: padding)
+
+ activityIndicatorView.center = activityContainer.center
+ activityIndicatorView.hidesWhenStopped = true
+ activityIndicatorView.startAnimation()
+ activityContainer.addSubview(activityIndicatorView)
+
+ let width = activityContainer.frame.size.width / 3
+ if let message = message where !message.isEmpty {
+ let label = UILabel(frame: CGRectMake(0, 0, width, 30))
+ label.center = CGPointMake(
+ activityIndicatorView.center.x,
+ activityIndicatorView.center.y + actualSize.height)
+ label.textAlignment = .Center
+ label.text = message
+ label.font = UIFont.boldSystemFontOfSize(20)
+ label.textColor = activityIndicatorView.color
+ activityContainer.addSubview(label)
+ }
+
+ view.addSubview(activityContainer)
+ }
+
+ /**
+ Stop animation and remove from view hierarchy.
+ */
+ public func stopActivityAnimating() {
+ for item in view.subviews
+ where item.restorationIdentifier == activityRestorationIdentifier {
+ item.removeFromSuperview()
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/iOS/Pods/NVActivityIndicatorView/README.md b/iOS/Pods/NVActivityIndicatorView/README.md
index 4a8830e0..e05f8672 100644
--- a/iOS/Pods/NVActivityIndicatorView/README.md
+++ b/iOS/Pods/NVActivityIndicatorView/README.md
@@ -47,6 +47,8 @@ For first-hand experience, just open the project and run it.
27. BallGridBeat
28. SemiCircleSpin
29. BallRotateChase
+30. Orbit
+31. AudioEqualizer
# Installation
@@ -165,6 +167,26 @@ Stop animation
activityIndicatorView.stopAnimation()
```
+## UI blocker
+
+You can use `NVActivityIndicatorView` as UI blocker for `UIViewController` by conforming `NVActivityIndicatorViewable` protocol.
+
+```swift
+class ViewController: UIViewController, NVActivityIndicatorViewable { }
+```
+
+Start animation
+
+```swift
+startActivityAnimating(size, message) // plus other parameters as when initializing
+```
+
+Stop animation
+
+```swift
+stopActivityAnimating()
+```
+
## Change properties
If you use `NVActivityIndicatorView` in storyboard, you can change these properties in Attributes inspector tab of Utilities panel.
@@ -194,6 +216,17 @@ Get current status of animation
animation = activityIndicatorView.animating
```
+## Change defaults
+
+Change global defaults if needed
+
+```swift
+NVActivityIndicatorView.DEFAULT_TYPE = .Pacman
+NVActivityIndicatorView.DEFAULT_COLOR = UIColor.yellowColor()
+NVActivityIndicatorView.DEFAULT_PADDING = CGFloat(5.0)
+NVActivityIndicatorView.DEFAULT_BLOCKER_SIZE = CGSizeMake(60, 60)
+```
+
# Acknowledgment
Thanks [Connor Atherton](https://github.com/ConnorAtherton) for great loaders and [Danil Gontovnik](https://github.com/gontovnik) for kick-start.
diff --git a/iOS/Pods/Pods.xcodeproj/project.pbxproj b/iOS/Pods/Pods.xcodeproj/project.pbxproj
index c61e5ede..0850b1ee 100644
--- a/iOS/Pods/Pods.xcodeproj/project.pbxproj
+++ b/iOS/Pods/Pods.xcodeproj/project.pbxproj
@@ -1,5118 +1,15649 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 46;
- objects = {
-
-/* Begin PBXBuildFile section */
- 001A845B74D148EBB6F18AE5742E2D17 /* INTULocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 447B9A6A811DB3F64D3D83940CE3366D /* INTULocationManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 0054438F822C8DE3B23E57F945C6733D /* SwiftInAppPurchase-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A3457F1FC69AA54BCBEF35F1B158D039 /* SwiftInAppPurchase-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 00967A34C0778275E41D1CBA32E398F8 /* UILabel+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 849C68141D31405B40D13AD2C8B773C6 /* UILabel+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 01C6F32401BCBE9FF9B3C095B031D92B /* UIColor+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = B656B002A52FEAE9387B7EDD97D110E7 /* UIColor+Chameleon.m */; };
- 05F9EFB06257765DD08FB9D48590ECB5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EEBEDE07DCC047923720CEDA35982E /* Foundation.framework */; };
- 06720CD7705F71178390FE16A75D419A /* DGRunkeeperSwitch.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD32A5FBC69D7089DA79EE914D73AFB6 /* DGRunkeeperSwitch.swift */; };
- 0686B89336BC7948B8112632BE3BA8E6 /* NVActivityIndicatorAnimationBallZigZagDeflect.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB90F07A4822A1DA79878873304DDF1E /* NVActivityIndicatorAnimationBallZigZagDeflect.swift */; };
- 078D4DF75013A50AAFBCC75467214CFB /* NSString+FSExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = F11B98FD6A0C718D5DA609DF7EE5B2DC /* NSString+FSExtension.m */; };
- 082C46A244A1077339875D1132DF9874 /* FSCalendarAppearance.m in Sources */ = {isa = PBXBuildFile; fileRef = B8B5CF40640D21C440172236DBD428C2 /* FSCalendarAppearance.m */; };
- 095406039B4D371E48D08B38A2975AC8 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32872696A15B7ED2D762F49591E1D0A5 /* Error.swift */; };
- 097AE4014349090D14C6C5637F8A3464 /* ChameleonConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 57F146A001151D3104E6D36C4C128249 /* ChameleonConstants.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 0AB4C7D0B16AE708849843F055FC111C /* EFCircularTrig.m in Sources */ = {isa = PBXBuildFile; fileRef = 8406423E6114C31520801D4021859618 /* EFCircularTrig.m */; };
- 0B330B5573EB7B74DB2738315326E745 /* TweakCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89190DA7A50AAE4C6B178B872132CCC2 /* TweakCollection.swift */; };
- 0B87AEED887108FF3FDA89B00E048E1B /* MRCircularProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2211FDEBCC6FEAC482F69A4DA39D7366 /* MRCircularProgressView.m */; };
- 0C47745482BBB2380A6E3806E725E1F2 /* DateInRegion+NSDatePort.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0857403C81F18B61814CA26C8A6C318 /* DateInRegion+NSDatePort.swift */; };
- 0E44012DD097816D61C9AF7B4D509469 /* FSCalendarHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = B308A9AA2A2121A6C76951E22E829A61 /* FSCalendarHeader.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 0EB9810F4FF177DB9FC568988A3D61AD /* NSCalendar+SwiftDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A259EF94300F07E785F53C6DDB04D452 /* NSCalendar+SwiftDate.swift */; };
- 0F85524881D6DA94329304BA17B41E45 /* NVActivityIndicatorAnimationBlank.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD954368950DBE6188ABF6411D0E2F87 /* NVActivityIndicatorAnimationBlank.swift */; };
- 0FBD5E2C6A03099EC2D8BC9F1FCCE00C /* FAKOcticons.h in Headers */ = {isa = PBXBuildFile; fileRef = 482709D9A1EDC65C7090BE3F2A6BE946 /* FAKOcticons.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 1070D2E058014E659F1475DC85A7C176 /* NSDateComponents+SwiftDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2948F4158FE4D2BBE8C813788219DB9 /* NSDateComponents+SwiftDate.swift */; };
- 10AA9E0562348025E925BDD4096992F4 /* INTULocationManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 99583B8A48BFD9C00C28992142B2A014 /* INTULocationManager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 114EC44860AE0279E6D99134F9AD6A4F /* NSDate+SwiftDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F1DCE3FF7C8BD48A42884948C4E0A63 /* NSDate+SwiftDate.swift */; };
- 11BA64BC0B2FE8DDB41883B7241A8C49 /* DGElasticPullToRefresh-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3706DEF5E05D37992415349C6E630839 /* DGElasticPullToRefresh-dummy.m */; };
- 11F20D807E923A4DBE6CDFDA9A73C229 /* FSCalendarCollectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = F708B4EA38504B2CCFC0DB52F22A48E1 /* FSCalendarCollectionView.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 11F2BC52C5B615CDAEAFB7851AC38F94 /* NVActivityIndicatorAnimationTriangleSkewSpin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 728F8DE7C15B97A90553B6FDC5261775 /* NVActivityIndicatorAnimationTriangleSkewSpin.swift */; };
- 1236ECB96A915EC617957A42838CDD7B /* ChameleonConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = ECAD2275A230BC19D18511D36F75CB0E /* ChameleonConstants.m */; };
- 1250C15821D063438351CA3D374B8153 /* INTUHeadingRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = A144E1C7B06A6519A9145CE8AD66715A /* INTUHeadingRequest.m */; };
- 126169B8BF7430D89BB990B97C36D75F /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EEDECF77A1A763AF36DA8A58379BC01 /* Async.swift */; };
- 1317BB4073D01F6F798D8A71D02AA800 /* NVActivityIndicatorAnimationDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7908A27084490866DA36B3A90495AB62 /* NVActivityIndicatorAnimationDelegate.swift */; };
- 1373B67E375E068650B2E2CBB034D392 /* SwiftTweaks-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A1DBD7224FF5E1783B1C86C2AB99816 /* SwiftTweaks-dummy.m */; };
- 13EDB09E7DEF6FFF1E38F91B668F718A /* NVActivityIndicatorShape.swift in Sources */ = {isa = PBXBuildFile; fileRef = B67E17F81B9948A10A15D07BD52B27F9 /* NVActivityIndicatorShape.swift */; };
- 15E113F19F49C0C0472242BD6E849A1B /* UIImage+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 20EA86D5BABC04E604138A9939838E79 /* UIImage+ChameleonPrivate.m */; };
- 16102E4E35FAA0FC4161282FECE56469 /* Timeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C7186E0433615B16D699B21AAC3BA1D /* Timeline.swift */; };
- 165244AE75779FAEAA05BF5A8F6CF526 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EEBEDE07DCC047923720CEDA35982E /* Foundation.framework */; };
- 18BC1B2A0EA94E2BF2DC912E1645E906 /* Permissions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DC219A03C285CA4550E1EA425A657CA /* Permissions.swift */; };
- 18F7B1BC3DFC0A52FF8FB133607EEA02 /* zocial-regular-webfont.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AA6A5F7E3DE9DE7F172B6ED993415B2C /* zocial-regular-webfont.ttf */; };
- 1941EA048852E4C592F5A0C2F080720E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EEBEDE07DCC047923720CEDA35982E /* Foundation.framework */; };
- 195C882D7CF3B187A7ABD8D9A24ECDDC /* NVActivityIndicatorAnimationBallClipRotatePulse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6122E275D2F9E5AF26DD833E4B1A3F3F /* NVActivityIndicatorAnimationBallClipRotatePulse.swift */; };
- 19A44C55B25612B9721A27E7C49E03CF /* MRIconView.m in Sources */ = {isa = PBXBuildFile; fileRef = F0040F5CDC1B8B85F16675C3952BF53C /* MRIconView.m */; };
- 1A2435BB3EA4E8AEB8E91E18815012F0 /* UIEdgeInsets+EdgeInsetsTweakTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20E6C13EB21880BDBB2FFC26B4497DD9 /* UIEdgeInsets+EdgeInsetsTweakTemplate.swift */; };
- 1CD9428D34F76710C9565467CF1F2F73 /* NVActivityIndicatorAnimationBallPulseRise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53F8617638F2D9D06E35B6F8FB835920 /* NVActivityIndicatorAnimationBallPulseRise.swift */; };
- 1CECA6AF45BF404B2D2DFE7C83F28BA9 /* TweakClusterType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EF0A4509D6442CBC9A8F75617BBAA0A /* TweakClusterType.swift */; };
- 1D2EFA0B86C5816E844D2436C2B5EBA7 /* INTULocationManager+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = CCEE1B5492455A6A571CE59384580EDA /* INTULocationManager+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 1D35C1D706CC250647A30E728E9C1B30 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E591C42CC4E4658C8954976C3DB5CE1 /* QuartzCore.framework */; };
- 1DD0C4D6F1DB0270DD7A98B6BD82559E /* NVActivityIndicatorAnimationCubeTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 169BACA90582EBFD066DA19FDC8EB364 /* NVActivityIndicatorAnimationCubeTransition.swift */; };
- 20C5E87C1DF07DEA65CD74B8D07D6D1C /* DGElasticPullToRefresh-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B56AC12E15DE38849DD78F6AFF9A0093 /* DGElasticPullToRefresh-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 21209814564B699E013C0579D7617C88 /* FSCalendarCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 569706BE3B48E5ADE03CE8CC5AE907D2 /* FSCalendarCell.m */; };
- 21545F160C46FD160CD617256FA82180 /* NVActivityIndicatorAnimationBallScale.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1522ADB16DE3A06A2671763014ABD715 /* NVActivityIndicatorAnimationBallScale.swift */; };
- 21E13D0D47B4A85902BA6A603922906E /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E591C42CC4E4658C8954976C3DB5CE1 /* QuartzCore.framework */; };
- 229DE6B8FE392023C9B9A74F3193F65D /* INTUHeadingRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = A63280472AA63AA3827046A0A9320C9B /* INTUHeadingRequest.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 2344EEA95021B1E417191EFF5661A1E8 /* UIView+TweakGroupTemplateSpringAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD55E0D5E9305873433818D9DAAC229F /* UIView+TweakGroupTemplateSpringAnimation.swift */; };
- 237B3AC32C4A07FFE56EFB3E26E90013 /* INTURequestIDGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = CB3D61728F1D9BA9148E11E01029BFB0 /* INTURequestIDGenerator.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 24E7D20FD204AF7AACB30A3B7C16388C /* NSArray+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = BE88A80595B96E4361417A5C09BE74AC /* NSArray+Chameleon.m */; };
- 263B82D79238953CC9F9619897122D31 /* NSDateFormatter+SwiftDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11CD7B4D6796DE722E7E6AE91271E532 /* NSDateFormatter+SwiftDate.swift */; };
- 2678DD25584EF746F6C2B2451B25A499 /* Dictionary+SwiftDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F7502E73C5C7AFF2D7C193B3CC17635 /* Dictionary+SwiftDate.swift */; };
- 2754C4E95E265639D7CFC90BA8264476 /* AsyncSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE356A9212EF12B261B74490F444E91 /* AsyncSwift-dummy.m */; };
- 28BFEF0F25609E5CF6D310771B92CD24 /* MRStopButton.m in Sources */ = {isa = PBXBuildFile; fileRef = BC89282A528D90977B0E6F31AA0FDEBF /* MRStopButton.m */; };
- 2A1C08A4886BAA4B1C137186C1922810 /* TweaksCollectionsListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4BE8B37F5227AE9F22B760ABF5A04E0 /* TweaksCollectionsListViewController.swift */; };
- 2A356D564FA2B8D64F7081E23DD8A424 /* EFCircularTrig.h in Headers */ = {isa = PBXBuildFile; fileRef = CFC0D160A932B3831E1F860B453DEFF9 /* EFCircularTrig.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 2B760213EE78830957A29FF2AEC63E40 /* MRProgress-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A8F16B1600A0AB85750BF471BD387E4 /* MRProgress-dummy.m */; };
- 2BB77CD255C32BA9566C3A6110B43AFF /* TweakGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E12931828371D1F461C1EFA4DF0E6A1 /* TweakGroup.swift */; };
- 2D3405986FC586FA6C0A5E0B6BA7E64E /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24C4760F5DD4CB467A7112281E967C04 /* Validation.swift */; };
- 2F302D0DA9C29B0C831DCCAD09C11BA6 /* TweaksRootViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB8B32E09A6D660843696180B2EA06FE /* TweaksRootViewController.swift */; };
- 2F903EAED6109D3BF3F180DDFD24D62A /* AsyncSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A5DF86838CC87F5636E6003B7B2A6FD /* AsyncSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 2FCE1C00460CF74F457E0093A676A834 /* FSCalendarConstance.h in Headers */ = {isa = PBXBuildFile; fileRef = BD65FFE029BD5131BE61C0203190CE62 /* FSCalendarConstance.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 308124B98FD3652B201324103914C0E7 /* TweakStore+Sharing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73B75EF826BC45E0FD16F366632E4061 /* TweakStore+Sharing.swift */; };
- 3084B72EA21046D2E806C9661E8FF54E /* MRCircularProgressView.h in Headers */ = {isa = PBXBuildFile; fileRef = 54FBED247FC03E61556D0E18EDE19BAA /* MRCircularProgressView.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 30F74FFB8022989294FEE27D2CF1B66B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8442BF0F0C3D860646481C46099D3C2A /* UIKit.framework */; };
- 31664405792D70A623BBBDF3A04A0776 /* DateInRegion+Components.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC646D44C22C4D190BD828E2FBDD9110 /* DateInRegion+Components.swift */; };
- 3229A4B8643CC32C52B866C29AF7D3F4 /* NVActivityIndicatorAnimationSemiCircleSpin.swift in Sources */ = {isa = PBXBuildFile; fileRef = F794F15EA8EB2CF6949F988E303227F3 /* NVActivityIndicatorAnimationSemiCircleSpin.swift */; };
- 33196910D726B12C2DAE7B7F1F3E5517 /* SCLAlertView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4151BD174057BBEF8FDBFFB30DD54C24 /* SCLAlertView-dummy.m */; };
- 33BEEEDA9F79EFF262B940A9A9EA8D38 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EEBEDE07DCC047923720CEDA35982E /* Foundation.framework */; };
- 34CCDCA848A701466256BC2927DA8856 /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2D4BA395E15BF7D4DE9A5B98C09FD03 /* NetworkReachabilityManager.swift */; };
- 34F1A41432F9FD7D314BC11F66BBA40C /* NVActivityIndicatorAnimationLineScalePulseOutRapid.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDD45079373CEF4DB383A974AA819997 /* NVActivityIndicatorAnimationLineScalePulseOutRapid.swift */; };
- 351D7AEB6A0C1AAB2267AD1216CE8B63 /* PermissionScope.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B80CAA48BD48E55BDE62C7CCFA8DA6D /* PermissionScope.swift */; };
- 3538271BE9957556474BEFD50E0DAB53 /* TweakStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D2F5D5E3664356890D3BACD6C700289 /* TweakStore.swift */; };
- 387C50EDB866026D550580B80DAD9021 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EEBEDE07DCC047923720CEDA35982E /* Foundation.framework */; };
- 389F4FC852E57772F6B9444E0013890F /* NSTimeZone+SwiftDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F06F8B0DC961F6025FAE8D3C0D82F37D /* NSTimeZone+SwiftDate.swift */; };
- 38BC77477F17624F3CD61F54847FCFA1 /* TweakBackup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0395352DDFC006935068F7248640B54F /* TweakBackup.swift */; };
- 39142C7BD7BBC877D884D0CDB2A70EF0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EEBEDE07DCC047923720CEDA35982E /* Foundation.framework */; };
- 39582F80068C0DEF708DEE01B8C053F7 /* NSDate+FSExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = C87940E53F694BE749F7FA882590EBD0 /* NSDate+FSExtension.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 3B202C12728218C238D98AEE659FF7D1 /* FSCalendarHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 83C00FF983D24287B17F2A761C657BB6 /* FSCalendarHeader.m */; };
- 3CBF88CA2DE4F67B82C36AE6290DCC90 /* FSCalendarStickyHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 32CA1C89376BDA8A4BA761521A0973B4 /* FSCalendarStickyHeader.m */; };
- 3E218859B14210B9FC24C75E5A9D7BDF /* SCLAlertView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 117385C631C97B0A140C7BAB9815BC8B /* SCLAlertView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 3EA8F215C9C1432D74E5CCA4834AA8C0 /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CE28601D5261E856C0D00DDAF43B5D0 /* ResponseSerialization.swift */; };
- 4081EA628AF0B73AC51FFB9D7AB3B89E /* Manager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68E47FA06F12259C88755EBCF2B5F6D0 /* Manager.swift */; };
- 40941F6499CC47BDB600BE4C748BD089 /* PermissionScope-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F513CD12D6CE1CEB681A67342D80B7A3 /* PermissionScope-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 414FBF440325FF92AD9E28D8FD38B0D5 /* TweaksViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 569830AE11E3A35BD852B8ED6F3D5EF3 /* TweaksViewController.swift */; };
- 4194C2418EEF62E01342A820B5EF9C71 /* UIColor+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = D3077E65F29689E9252DD264638DC02B /* UIColor+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 42550B9FB3F43C948A94F65969E2A2C8 /* BasicAnimationTweakTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F72A59E865956F9E03182D589274659E /* BasicAnimationTweakTemplate.swift */; };
- 42E18A7773D704188DAE03B594B0B690 /* UIView+FSExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F3EA4423BD406CFC32F8401D8B98AD0 /* UIView+FSExtension.m */; };
- 4426A691D97D39921800FF233CF4D761 /* TweaksBackupsListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D322867D872F05065D7739085407378 /* TweaksBackupsListViewController.swift */; };
- 454E1EB4F7B62721B59982B1E983DCFA /* MRProgressOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE3F8157087AA2025B0191725E87696 /* MRProgressOverlayView.m */; };
- 4573AE19937C8058AE5C21C64A3CA95B /* Log-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CD5B81E6F37FD70176FDCF14CAA80ACD /* Log-dummy.m */; };
- 45B28CDACD362CEF2CA6012BA0015DB6 /* OnboardingViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 548A620D1A26A399B464DDF4F7A1958C /* OnboardingViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 4781EBC1F6439821D47B84B8FFDFA36D /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8442BF0F0C3D860646481C46099D3C2A /* UIKit.framework */; };
- 47DD9712148A849597BF4BB6A7CF5B9C /* EFCircularSlider-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = ABF63F2B8ADEAFA35248F1055F9E9167 /* EFCircularSlider-dummy.m */; };
- 47DE477BA301030E4897DBAF3C6F691A /* SwiftDate-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 07616EFF2950BF156B44B1883E4026C2 /* SwiftDate-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 4814EE71271BC074621A5ABB07525ACF /* FSCalendar+IBExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = D97FB9255C36E255BC8927C3A6E463ED /* FSCalendar+IBExtension.m */; };
- 4A0E71E9E2BD86AA8CB6077A95CDC034 /* ChameleonEnums.h in Headers */ = {isa = PBXBuildFile; fileRef = A982CC753D49BAF3586677608039BB2C /* ChameleonEnums.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 4B799D845B4D8A77F7BBE9639B18FC4F /* FAKIonIcons.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BD7A27382116A1BC71A4C5B2D59C2F3 /* FAKIonIcons.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 4B9AD6ACBAAFB29322FBD43EE53822DE /* TweakableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C83D7B5517F1A42EBAFFD190376EACF /* TweakableType.swift */; };
- 4BDF7B753610E441D4237A2A11DF96E4 /* EdgeInsetsTweakTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A924633224C2DB29B1DF6C655045F58 /* EdgeInsetsTweakTemplate.swift */; };
- 4C11C1DBB66C7F9B63E69D4185222DCA /* DateInRegion+Operations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C83AD2BC1FBEB0750B19B093712D545 /* DateInRegion+Operations.swift */; };
- 4C6CEBA607BEA909A9CCB80C6AB6AE88 /* UINavigationController+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = D44F8A2880915B7FE2A827F1DC978F65 /* UINavigationController+Chameleon.m */; };
- 4CCFBAC76E15D8995C498F804B1C8916 /* NSDateInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E32D81915143777356AD901BFF95ED6 /* NSDateInterval.swift */; };
- 4CE052B699FE14245A9BC48EAB53D9F5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EEBEDE07DCC047923720CEDA35982E /* Foundation.framework */; };
- 4D79EC114BE4E3A99C20702B190F2FCA /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF1E25E16A3028704811EB5A6B5615C9 /* Constants.swift */; };
- 4EE7425D051C10CFC7D52095223EB7FA /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8442BF0F0C3D860646481C46099D3C2A /* UIKit.framework */; };
- 4FED89D46A7E0802F4CE50A530FFD92C /* Media.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7FCECEA5B329F642D7DDE7E9C1161556 /* Media.xcassets */; };
- 501198AA5B6723D71C0194BAD075BF02 /* DGElasticPullToRefreshView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BA74DB244E08F0B20B447A60A292B28 /* DGElasticPullToRefreshView.swift */; };
- 50A0CC643EC96C430655196AA0BE47D0 /* HashingUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92CC62C5C9F65A5EE2CB374D204B665D /* HashingUtilities.swift */; };
- 511DB1410DA63BFA56F3BC2B311E14C9 /* Pods-tpg offline-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 57E26CB58B93C4F17A71252E0318205B /* Pods-tpg offline-dummy.m */; };
- 5177B3B95985D0A2CF8376A6FD4488C2 /* UIViewController+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = E9C2BB2D6E127F0B0CAEF19791583027 /* UIViewController+Chameleon.m */; };
- 51D1AC1D010EA99E078E75C69C6D2111 /* FSCalendarEventIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = F8B6FABB6260EFAB6BE019E1F5E5F821 /* FSCalendarEventIndicator.m */; };
- 529B5FE84D8845B8B5FD0D72FB81FCAC /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8442BF0F0C3D860646481C46099D3C2A /* UIKit.framework */; };
- 52A5E8263E7C91DDAB94F66A5364369B /* MRProgressOverlayView.h in Headers */ = {isa = PBXBuildFile; fileRef = 30BBB37269D011A14B4F6205299257E7 /* MRProgressOverlayView.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 543CDB14C968232D7678AE5654E50C86 /* DateInRegion+Formatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA5B58475862B2A09FA58AEE9EFE1722 /* DateInRegion+Formatter.swift */; };
- 5808D58D1830247ACB009488726E1B06 /* NVActivityIndicatorView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 64ACDA21709E5496176A04222208D4E9 /* NVActivityIndicatorView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 581717436435D5B2B4CD456003D11B61 /* AKPickerView-Swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 23ED5B56EAD6A1100447D1DB06EC925A /* AKPickerView-Swift-dummy.m */; };
- 583AF6FB2DC5270369C73CAFABBE8025 /* HitTransparentWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB5B04BC6BFF42CAAED02C773D25DBCB /* HitTransparentWindow.swift */; };
- 58E841A4DCB11D3EB3499A93638E281D /* DateInRegion+StartEnd.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09E4A22324BF4C3DF06D0A9FA09A7FA5 /* DateInRegion+StartEnd.swift */; };
- 595D2F50A91B50B34D1CA62399375A9C /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E56E9A3513EA29BB78B1359F627F1B9 /* StoreKit.framework */; };
- 599393E375A20A35BDA5AF34B08A443D /* EFCircularSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = 8630F62CDC57FBD5BFE1B7C6E011FEDE /* EFCircularSlider.m */; };
- 5A06805481198392167DEC158CA02B1A /* SignedNumberTweakDefaultParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54A8A52B91480CCB30E99C484E02BEAA /* SignedNumberTweakDefaultParameters.swift */; };
- 5A287039D4F0CF32ACBFB84796C9FFC1 /* TweakLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6250EC902E949A4A30CA1FCAD56C9EBB /* TweakLibrary.swift */; };
- 5BC19E6E0F199276003F0AF96838BCE5 /* Upload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B3520258A6D98CCE6EBB297C6877589 /* Upload.swift */; };
- 5BD99F146DD53623AB4C1BA232860E0C /* SwiftInAppPurchase.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 6AC0D26FE0B5388F306CF6D5FE85B74D /* SwiftInAppPurchase.bundle */; };
- 5C88EB02C6D789D20C6298CF77049112 /* FSCalendar+IBExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = E265939F188BA3C70277F6560858C0F9 /* FSCalendar+IBExtension.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 5CB05FBCB32D21E194B5ECF680CB6AE0 /* Download.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8C34F39A3C8D212879095A190678BF3 /* Download.swift */; };
- 5CCC419BB423F48192FBA3C7D7D6B7DA /* ChameleonMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE445956B1D21BF32C83E62B273F5BA /* ChameleonMacros.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 5D8CC81D38FFCFD3A5745E8C2F86F40B /* DGRunkeeperSwitch-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 44989BC3C89A3F02752B8168BCD91229 /* DGRunkeeperSwitch-dummy.m */; };
- 5F7F40B822116B9DABC6B73B8EBE338B /* MRBlurView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1285CA76BFC0689BF0EFB5B31D3CDA77 /* MRBlurView.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 605479F859F350D44EB0FF16021EE436 /* ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FAC9B52DFE28E8AEB442A5A727BEE41F /* ionicons.ttf */; };
- 615014C3941C729C35CD0B37DB1D8CCF /* PaymentRequestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2444A70958E420012AB33C638444FDE8 /* PaymentRequestHandler.swift */; };
- 62D098F264BA505FF93376E1817B7D31 /* Structs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94FF1A5EBC2411CFF06577497A0AEBD4 /* Structs.swift */; };
- 62DAB376C907D2E207CD97EBBBBD7D82 /* SwiftInAppPurchase-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 800DC6EE597AB4A83203896E40F16190 /* SwiftInAppPurchase-dummy.m */; };
- 62E8346F03C03E7F4D631361F325689E /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F00C55BB4E20BF9BAB4D49ABA3E1A3F /* Response.swift */; };
- 62FD8C39DA7D9DF1AB613C34299AB9AB /* NVActivityIndicatorAnimationPacman.swift in Sources */ = {isa = PBXBuildFile; fileRef = 143249D2E9DB5B34C9E9D293FF3EE6EA /* NVActivityIndicatorAnimationPacman.swift */; };
- 636FA0BF7676E4972B8843F989D305F9 /* INTULocationRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = AB617AFAD86429EFA77D71183891A810 /* INTULocationRequest.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 63FC2F696C591B06128339C15CBF70D9 /* FontAwesomeKit.h in Headers */ = {isa = PBXBuildFile; fileRef = D41FA0747FB93DA0D9215B7940ACF1BD /* FontAwesomeKit.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 6438C9150C2D0298D0FDF8C3C6566842 /* NVActivityIndicatorAnimationBallRotateChase.swift in Sources */ = {isa = PBXBuildFile; fileRef = F51E13B0DA049BC0A09EBFF059D61434 /* NVActivityIndicatorAnimationBallRotateChase.swift */; };
- 64C89D98B9D3B9C57971E1E137233980 /* ChameleonFramework-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CD44BBFB869D5BFF18474F1453345EE9 /* ChameleonFramework-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 659026E53077FED17DB71A0B902F7ECD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EEBEDE07DCC047923720CEDA35982E /* Foundation.framework */; };
- 66323BA01DCC80D9617C3DC6EC93096B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EEBEDE07DCC047923720CEDA35982E /* Foundation.framework */; };
- 6706D233F78CA9528D6C410722BE09C5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EEBEDE07DCC047923720CEDA35982E /* Foundation.framework */; };
- 67BC2C4F5C488A9B4F8ECD0DF6611F2F /* NVActivityIndicatorAnimationBallRotate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51797706944D4A52049858F0D5F68FA2 /* NVActivityIndicatorAnimationBallRotate.swift */; };
- 680BF2F437D5CBFE76A037E4752E343E /* TweakWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BC40F4D6EFA3E6DDA821A2CA0580C83 /* TweakWindow.swift */; };
- 68601DD8D1367CD635712B9FF4797A9A /* Onboard-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B524783A143F71DFD4F4E48E7D90C37A /* Onboard-dummy.m */; };
- 6983260381111B42F335961452EEE2B0 /* FSCalendarFlowLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = A5C697A745766C38BAF738D2E56E9007 /* FSCalendarFlowLayout.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 6B058FB2BD6B6B55995F631EE4B61D8E /* DGElasticPullToRefreshExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 615133C94EA4E19E3A959E24DD35CD7C /* DGElasticPullToRefreshExtensions.swift */; };
- 6C92086C1DC08BB2A45B0A66F839CA48 /* FSCalendarFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B5895B5346264B522236A218B24E021 /* FSCalendarFlowLayout.m */; };
- 6DA60574521A1711FF18D06D5CDB10B9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EEBEDE07DCC047923720CEDA35982E /* Foundation.framework */; };
- 6DF83D3AA2FC55EC3A34594816BAAB73 /* NVActivityIndicatorAnimationBallGridPulse.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC78930784A2D8C9C7AA1646961C6FB /* NVActivityIndicatorAnimationBallGridPulse.swift */; };
- 6E311772AD258F10554F5686089C87DA /* ColorRepresentation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 012189AF218224586E70149DAEF1EAF6 /* ColorRepresentation.swift */; };
- 6EB12E0817F1017B691D7164C76E3AC4 /* SpringAnimationTweakTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65685430497D7C66F47F350FAC62EEDE /* SpringAnimationTweakTemplate.swift */; };
- 6ECD11C96CBDCA50F0331F3FBDAECE64 /* FSCalendar.m in Sources */ = {isa = PBXBuildFile; fileRef = DBF9579287A757FEABC9C9D7D379C907 /* FSCalendar.m */; };
- 6F092C062F9052E042399723F30A51FD /* NVActivityIndicatorAnimationBallGridBeat.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDCAB3216A15D7C6D5EB472E9314C345 /* NVActivityIndicatorAnimationBallGridBeat.swift */; };
- 6FFDAD2F800BC27FCF40E92B71D88CF3 /* UINavigationController+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BE7C528A139F58C646149FE94EC5DFB /* UINavigationController+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 70BEF2DCF1FC89FCF98648FD6786A1AC /* NVActivityIndicatorAnimationBallPulseSync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F902121FD352F721FB38767860C7EDD /* NVActivityIndicatorAnimationBallPulseSync.swift */; };
- 717E6DF8C0702567A757898EEC4C07F7 /* Localize-Swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B87C9926EB91EE966744F50A33275833 /* Localize-Swift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 72079B7D694FB64AA4109CDFB0181EB4 /* NVActivityIndicatorAnimationBallClipRotateMultiple.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8EE31FD01C4A8007E12433A6E78CE5C /* NVActivityIndicatorAnimationBallClipRotateMultiple.swift */; };
- 738E4E0555CE3C233C400AE87B9887E4 /* Chameleon_.h in Headers */ = {isa = PBXBuildFile; fileRef = 353C100864557E00F0CB9AE5E823B140 /* Chameleon_.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 743D63D3EF95A875E73D332BC60C60BE /* FAKFontAwesome.h in Headers */ = {isa = PBXBuildFile; fileRef = EB412DCE625C4C5EC1F4B45499E42B49 /* FAKFontAwesome.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 744D91185307ACFC2DF330EE1875CB87 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3804017A096C4E2CA1596FC93D45728 /* CoreText.framework */; };
- 74DA1BB41C1D7C0DD17F213B20E23978 /* SwiftyJSON-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 475FF44C03EF51904E86BA0A0C5CDD89 /* SwiftyJSON-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 75C2EC4E91C632BA530B5B1E60DC4AEE /* MRNavigationBarProgressView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B08A1B36F0A6E4CD519408A67150374 /* MRNavigationBarProgressView.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 76D105B81BEFA8C655354721EA448746 /* SwiftTweaks-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 29A163B5F0893795F7872B422D5A89A4 /* SwiftTweaks-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7708E07C85FF6C2BC400C15CCDB7EB1C /* UIImage+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 3402FC82014D3F9A274CC1D9750A4A05 /* UIImage+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 774B3272DCC6211CA7AED1E05E400F76 /* TweakBinding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D89CF12858C8F74A57B7A3941152568 /* TweakBinding.swift */; };
- 776F694F5E6A073F685303E7083650F2 /* Region.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91E89C91C9DC0DA11924AF3FFF6B2AEB /* Region.swift */; };
- 77BA62656E59803B6782E00479704D93 /* DateInRegion+Comparisons.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B466E914C58E53362C6F1A7983FC2AC /* DateInRegion+Comparisons.swift */; };
- 780A8FD22AD4E27401AF6F633520103F /* Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = 7BB2FDDE4B22A473B310D6921A44C78F /* Info.plist */; };
- 785778BB36B2F9B21FAE5E476E1B6E2E /* FSCalendarAnimator.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A9B88BD886F9C7651F805A3DBCACC97 /* FSCalendarAnimator.m */; };
- 788907A105CE1BC948CBF1DC3F0099CD /* MRProgressHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DF31DB524F144E46EA30058681A9BD3 /* MRProgressHelper.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 78FBD2D1B972B768E83DA7377CA955E2 /* Formatters.swift in Sources */ = {isa = PBXBuildFile; fileRef = E862FCBC80BDF066FF76FF03CF39124E /* Formatters.swift */; };
- 7A779B7652F894A80FBCAF67E3E960FA /* FSCalendar-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B482A8605F29D73503290B9E4AA4EB2 /* FSCalendar-dummy.m */; };
- 7A88BF95853A69E550E9F63A060BED12 /* DGElasticPullToRefreshConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB7AFABF698F4CD279547D38D300AE6E /* DGElasticPullToRefreshConstants.swift */; };
- 7B48852C4D848FA2DA416A98F6425869 /* ServerTrustPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFAD3D6865CCE62AEAAC55474370C395 /* ServerTrustPolicy.swift */; };
- 7B5D7C23C9847DCBB53E1088298700D7 /* SwiftInAppPurchase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D8ED75DBB75FFF5A2554BE7A6B5FAE /* SwiftInAppPurchase.swift */; };
- 7BA049A8A530320D26A5FED8582518B9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EEBEDE07DCC047923720CEDA35982E /* Foundation.framework */; };
- 7BF65A51F3250D8151856AA7EA2D44BA /* ProductRequestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 401E757E105FA6900E55FD5306AA9BB1 /* ProductRequestHandler.swift */; };
- 7C5E58BD5FB3BCDD5AD14F713E251CC8 /* INTULocationRequestDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = B46F5758B7FFFECD9FDF111E82C65D84 /* INTULocationRequestDefines.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7CFF3D11D2A80054659CB09F8D17A1A1 /* MRProgress.h in Headers */ = {isa = PBXBuildFile; fileRef = C5BB0113B0ACB514D4B71FA4E831AE43 /* MRProgress.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7E1B58C9322E8E27C3376E330C124FC7 /* CALayer+FSExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 23463BA6B27E8D9CB734A84F68F678B9 /* CALayer+FSExtension.m */; };
- 7E20ADDFDF13E48484CEE7CF77123F5A /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAEB52F7F4B383C8C9502DF81A8B100A /* Accelerate.framework */; };
- 7EC9330EBDF327051B12E42AE8741B6E /* Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 3ACA4B77854E43D279CD57545ED64207 /* Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7EDBA77726C5EA875090AE0BFF3B6B41 /* NVActivityIndicatorView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EF5B0EADF433576B56E366D8A9988165 /* NVActivityIndicatorView-dummy.m */; };
- 7F3A0CA4D0F80DC61F79C17B9A13B09D /* FAKIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = 865ABBAEA184B126E10CEB031EDD3A03 /* FAKIcon.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7F4D112748EC34E41E3C773E84C2CF53 /* NVActivityIndicatorAnimationBallScaleMultiple.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6890441BBDE5909F0DA1EE0DC9744A4D /* NVActivityIndicatorAnimationBallScaleMultiple.swift */; };
- 7FADB403A7E3DF122A1F578277BF90A1 /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92999EBA6A50997D0E3B0512FF70F9BA /* Utilities.swift */; };
- 7FE3ECFE7843570AAFAD9216E3546026 /* FSCalendarStickyHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = C8D0A9C864A81B0108B45BBA2C7925C5 /* FSCalendarStickyHeader.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 811BF3A1EDF9B595901E2FC404641EE7 /* MRProgress-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F38C1AA679DF04C7447321FF8B8A05 /* MRProgress-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 81694B31763640FB3743C90CF3547673 /* MRStopableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C22F909FB0F3DD46C504563172D8789 /* MRStopableView.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 832946EFD651EC8DD5310FAE546A6C47 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1504F4A49DFBE37627F7A0F13F6CF397 /* Extensions.swift */; };
- 83BC947C81CD6B24E1F1B4423A032DE5 /* MRNavigationBarProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 65E3C0FB9C1B9E53E853458A8AEAC330 /* MRNavigationBarProgressView.m */; };
- 84E3D8DE2C016D309B09DDB3593EC4A1 /* NVActivityIndicatorAnimationBallZigZag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BACC5238693EE10E41BDE9B4911F7ED /* NVActivityIndicatorAnimationBallZigZag.swift */; };
- 86BA959299BECF7B0314ECC08EC0614F /* OnboardingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 65A70CC4CB141D4EBFC59168958A4DE4 /* OnboardingViewController.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; };
- 88850623C51D10BA9CCA83DD63DD37C0 /* SwiftDate-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 06FA87AAEDB4ADBC7A15BB295EF51C77 /* SwiftDate-dummy.m */; };
- 89CE4E0D4BEDD88C4B05A9D54526CE7E /* MRIconView.h in Headers */ = {isa = PBXBuildFile; fileRef = F1A5D3D018E991DF04506D4F2E409148 /* MRIconView.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 8A593E68797C15E2C6C1ED6DCFDC08BD /* octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CEB6447139423827E1B48125CF6EBC7D /* octicons.ttf */; };
- 8A609220390F13874F262B899AB318EF /* AKPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 576EA2DCE7FC1EBA169E434D12609F9A /* AKPickerView.swift */; };
- 8B2F84E37AD49AFA858923FC733FAAFA /* Formatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B920998E9D716910A06199E29C3B4CA9 /* Formatter.swift */; };
- 8B3B1230521CD79417882869334A6F06 /* Themes.swift in Sources */ = {isa = PBXBuildFile; fileRef = C374256C3EAA6BCADFE9E6D19EEE07CF /* Themes.swift */; };
- 8B7CA5A9DA7A3F51B617639E50EB7484 /* FAKIonIcons.m in Sources */ = {isa = PBXBuildFile; fileRef = 5463B664413144D2EDFF39DBDA74EC6D /* FAKIonIcons.m */; };
- 8C12554B835AD5AE59B3E1F69124913E /* FAKFoundationIcons.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C65E5B0860811BF9D473D2B7234CAA5 /* FAKFoundationIcons.m */; };
- 8CF5ACA6C355B72E2CE843393A3E2C7C /* INTURequestIDGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = C20F20A58AC3A3CED2F92FA6CF39A190 /* INTURequestIDGenerator.m */; };
- 8D93F27DE77DEE3CDF1306A5B38A037C /* FontAwesomeKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F1085B33477CC15BC9967D6C2CDF37B8 /* FontAwesomeKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 8E55107B59A92876B44B690F74B121E7 /* Onboard-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F7FC6CC300F147F92904D63290983456 /* Onboard-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 8EB11202167FCDDF1257AAAB1D1FB244 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7B1618BF0E8E0C81276629C5204C7DC /* Alamofire.swift */; };
- 9244D3E44E9722D18CF2CF2DFF270DBE /* DateInRegion.swift in Sources */ = {isa = PBXBuildFile; fileRef = E45B3E088B8A31948DD3C3DC5F4BB790 /* DateInRegion.swift */; };
- 936D62983D016EF1A5FC1238D601A64B /* Tweak.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754EB805F4315EE916807F50F2AC5149 /* Tweak.swift */; };
- 93DF260DE076854C529392B11CE22D84 /* SCLAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94AD267C710FED7857E31BB2BC3790E8 /* SCLAlertView.swift */; };
- 9469DF81ECB494E84675969B5E13374C /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C7F846C0FC81F64022FEB010412C3936 /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 95167CA6D4FE6CFA3762703F17002FC6 /* UIImage+MRImageEffects.m in Sources */ = {isa = PBXBuildFile; fileRef = 253904F995DD8A5114B6B8B23F201805 /* UIImage+MRImageEffects.m */; };
- 9522DA78F08119D9EAFA3E30698BDE41 /* FSCalendarCell.h in Headers */ = {isa = PBXBuildFile; fileRef = C557B9522D977500DD2538C1D01D753E /* FSCalendarCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 9712567144195F679ABA719D41E4B5D1 /* EFCircularSlider-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D52D3344CACCB26F275FC333B0B4C93 /* EFCircularSlider-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 9AEE8CB9A438667C3BF905C6206BC1EB /* INTULocationRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DE096B1AEA88EF91CBE7BEFC53544CB /* INTULocationRequest.m */; };
- 9B365A3A01EF135485F43412F83C7C65 /* Chameleon_.m in Sources */ = {isa = PBXBuildFile; fileRef = 380689C7DFF7A8B197B0DC7C4235D60E /* Chameleon_.m */; };
- 9B3EEA3CFA303B0D28A8034C16BFDA15 /* UILabel+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 692B79B37557FDC85C5B409036925AAE /* UILabel+Chameleon.m */; };
- 9CB8A816A7DA1AD905C0E945B029B205 /* Localize.swift in Sources */ = {isa = PBXBuildFile; fileRef = D32E384C30E1A582BB08F7CB2A2F41DF /* Localize.swift */; };
- 9D0EE7B15E6199DA4C50FB7D88991814 /* NVActivityIndicatorAnimationBallBeat.swift in Sources */ = {isa = PBXBuildFile; fileRef = B32DF8CD4A79283476F954B3B7E36487 /* NVActivityIndicatorAnimationBallBeat.swift */; };
- 9D7629BB3CA79C720578479C9AE8D811 /* TweakPersistency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A7DFC38D1884A0DF0F693FC2F6959C4 /* TweakPersistency.swift */; };
- 9E691E14C1B77ED5D56D132384AE4E8D /* FAKZocial.h in Headers */ = {isa = PBXBuildFile; fileRef = BA57754C4386A5B8C83765CBE24DB8C5 /* FAKZocial.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 9E8AD46572FB3FDAF618A6C1356C1E7A /* Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6111DF2E5FF984E07C99C0DEC8CD1497 /* Additions.swift */; };
- 9EFD5A3145CC48882E4B6F6A71EE1505 /* NSDate+FSExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = C090C0E8E1C05EFB8A9BF4B2D5B7E33B /* NSDate+FSExtension.m */; };
- 9F2A95262B6FE514152CEF9834A5E23A /* UIColor+Tweaks.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF6F19CE0D9BC761DCED5EFD7038967B /* UIColor+Tweaks.swift */; };
- 9F878A0F038942BF1B2AEF9C3866C8A7 /* Clip.swift in Sources */ = {isa = PBXBuildFile; fileRef = A69A8A7AE4AF7A5B1007DA19CEFEEEA1 /* Clip.swift */; };
- A28930DA66986E8D161FF256CFA2E2E9 /* MRStopButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 05DA5127D70005DF4A1926D0ECA6C42B /* MRStopButton.h */; settings = {ATTRIBUTES = (Public, ); }; };
- A2AC9FD0F42F638C48E72F88E8BC4C80 /* ChameleonShorthand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82887638727A876D13CC7A099D199D60 /* ChameleonShorthand.swift */; };
- A3A24F2FE9B94B152877A4A4B048D6CD /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8442BF0F0C3D860646481C46099D3C2A /* UIKit.framework */; };
- A3C8626AC35DC46D1291E4B38362F4FB /* MRActivityIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A479638F18BC4159CD4A162894127C4 /* MRActivityIndicatorView.m */; };
- A46A3EAB602FB4840C5AB8493F86AE4F /* UIButton+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = DE4248941F6AC5DA4F76E04CEDD23E60 /* UIButton+Chameleon.m */; };
- A4DCEF92F739D25D84C99E4A5FC95288 /* CALayer+ShadowTweakTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16CFEEA46E9DB7A13A733AB5F8DF8B31 /* CALayer+ShadowTweakTemplate.swift */; };
- A6E2DF853665F4EC399BA881C3309C2F /* Precision.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84A5E520707745E67BB7C2E8C9CB683E /* Precision.swift */; };
- A710FE984AD94FC5D56628BDC1DECEEE /* ShadowTweakTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C94102413A8DC5A3E0C2AA2CDB1E75E /* ShadowTweakTemplate.swift */; };
- A8F50206CD66357B3514F8F057DE87B4 /* FAKMaterialIcons.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EDF3C4C5B01BF1A4204E0FCA8CC9D55 /* FAKMaterialIcons.m */; };
- A93B6A2AF2DBFD2AB32170E213BE0FEA /* Localize-Swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A32488174BA7657D1A1B6594AA1926F /* Localize-Swift-dummy.m */; };
- A9E85FF731AB7C5FBA248E0482C0571A /* NSLocale+SwiftDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF2A0E3EB72D2E622AE03568C5BCD3F6 /* NSLocale+SwiftDate.swift */; };
- AA314156AC500125F4078EE968DB14C6 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9DA28EC1AA04CB7380412B46AD2FFC8 /* Result.swift */; };
- AA4C2F68882DBBC02C6EF24AF45D2350 /* NVActivityIndicatorAnimationBallTrianglePath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87EF30893B2C5830F8D91CC6097A5C93 /* NVActivityIndicatorAnimationBallTrianglePath.swift */; };
- ACF7C3C74DE8C78434656A73C2CE8CCA /* INTULocationManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 20FFC9B0591D66FBA439062F9DEACE33 /* INTULocationManager-dummy.m */; };
- ADF19C953CE2A7D0B72EC93A81FCCC26 /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EC6FC930F54A7941EE9F398953A22CB7 /* Alamofire-dummy.m */; };
- AE208B115D3EC98547A417F875912B5E /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E591C42CC4E4658C8954976C3DB5CE1 /* QuartzCore.framework */; };
- AE4CF87C02C042DF13ED5B21C4FDC1E0 /* Stream.swift in Sources */ = {isa = PBXBuildFile; fileRef = CED2BB71913B580FA0DDB21429A64DEB /* Stream.swift */; };
- AE689678FC0C8BA7398F9D8874735970 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 164B0C51C22E65985D17281C16A13D15 /* CoreGraphics.framework */; };
- AEA72DCE63F6B01478EF51120E64A734 /* FAKMaterialIcons.h in Headers */ = {isa = PBXBuildFile; fileRef = 83EE592F7637C053AFF7DC90997291B0 /* FAKMaterialIcons.h */; settings = {ATTRIBUTES = (Public, ); }; };
- AEC65AA7DED93A21068C32F0BABCD88C /* FAKOcticons.m in Sources */ = {isa = PBXBuildFile; fileRef = A15BB207EBA58F3F5DEA357B503E27C3 /* FAKOcticons.m */; };
- AF3632DCF38D8A9FFE5DC667982E9460 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EEBEDE07DCC047923720CEDA35982E /* Foundation.framework */; };
- AF9FDFE994A206795619E469B68C614E /* UIViewController+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = F0E6CF08BA91D826830F089409668DE6 /* UIViewController+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; };
- B032C65734E9DC58CD77E0D19CE4D133 /* UIImage+SwiftTweaks.swift in Sources */ = {isa = PBXBuildFile; fileRef = B53B3249BDE829A94F4286AAA0152420 /* UIImage+SwiftTweaks.swift */; };
- B08294E2247DE35943C7180A647EE72D /* NSString+FSExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E7C6A5429108261D8B83820BD32F246 /* NSString+FSExtension.h */; settings = {ATTRIBUTES = (Public, ); }; };
- B1CFEE9FF3EB53A1C0009F6EFD1A9043 /* FAKFontAwesome.m in Sources */ = {isa = PBXBuildFile; fileRef = 07D44E5A2B1ED2B0337E9A4AD9067EEC /* FAKFontAwesome.m */; };
- B2F9711D635766F4754D415B41FFC818 /* DGElasticPullToRefreshLoadingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75DD798E7D3D42C66695A6AF5CAAA19 /* DGElasticPullToRefreshLoadingView.swift */; };
- B3E855DC27E787D79472053C4DBA94B6 /* EFCircularSlider.h in Headers */ = {isa = PBXBuildFile; fileRef = 8813445013B43D7240ADDB91C29F0C8F /* EFCircularSlider.h */; settings = {ATTRIBUTES = (Public, ); }; };
- B4C2D38D9DCCDD65CC30966C0A6186C2 /* SCLExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BD5CB26790BFDA44BA441707F8958D1 /* SCLExtensions.swift */; };
- B71968ADC80D9CA74C57959B609E46F6 /* UIAppearance+Swift.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DAD7C30FD4D6DC7F5269E0A612B6A36 /* UIAppearance+Swift.h */; settings = {ATTRIBUTES = (Public, ); }; };
- B75369FF87B3F9D706695005D71600C2 /* NVActivityIndicatorAnimationLineScale.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4578FB1A019DD82FD8FD4CA2C3A37F60 /* NVActivityIndicatorAnimationLineScale.swift */; };
- B75B9D17D39561D7A2F3E67C79FA9F27 /* NVActivityIndicatorAnimationBallScaleRippleMultiple.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C909FCCADC0AEDCF8376875F60FA2B6 /* NVActivityIndicatorAnimationBallScaleRippleMultiple.swift */; };
- B947C4D115342A33C6604EF0D7848766 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EEBEDE07DCC047923720CEDA35982E /* Foundation.framework */; };
- BBCA1EEBD4D5812E7A6A79E93A1AAD92 /* NVActivityIndicatorAnimationBallClipRotate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26D2207734A971357125F6D6E729B193 /* NVActivityIndicatorAnimationBallClipRotate.swift */; };
- BBD629D333A966C9DAEC646285909AC7 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8442BF0F0C3D860646481C46099D3C2A /* UIKit.framework */; };
- BC25E5B3E461B68EA802BD657A72701A /* NVActivityIndicatorAnimationBallPulse.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA651F2A90E354D34F45409F0FFD358A /* NVActivityIndicatorAnimationBallPulse.swift */; };
- BD4BBFEFCA87BEF75752066B57CD39E8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EEBEDE07DCC047923720CEDA35982E /* Foundation.framework */; };
- BD9F0543F7B4F444CA4A0948C0F03070 /* MRProgressView.h in Headers */ = {isa = PBXBuildFile; fileRef = 38A20C65B2DDE5ADA6C18A8560CA073D /* MRProgressView.h */; settings = {ATTRIBUTES = (Public, ); }; };
- BDC0281540324E5A27D70A10BD529254 /* UIImage+MRImageEffects.h in Headers */ = {isa = PBXBuildFile; fileRef = EF16672313C1C6DF29D804092742EA43 /* UIImage+MRImageEffects.h */; settings = {ATTRIBUTES = (Public, ); }; };
- BE325A5869FCE249947C11DED959C6A0 /* AKPickerView-Swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E9B48114062883632E4C68D9FB335E8 /* AKPickerView-Swift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- BE41196F6A3903E59C3306FE3F8B43FE /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8BE62B0DB38BE26830BA0802BE4087F /* Notifications.swift */; };
- BE6DEECD31FE32EF1E994DFAAD9F503A /* TweakTableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 778FAA1882C875729C4E405795B361E6 /* TweakTableCell.swift */; };
- BEE56A40F61CD4315BEF518972E7E3AE /* Pods-tpg offline-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FBBFDF212822057BD5E4A7A48B921D2A /* Pods-tpg offline-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- BFA6BEC20D219FAF8C6924A8FC384CBF /* DateInRegion+Equations.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3220264804ECF24D8567464665E7A9 /* DateInRegion+Equations.swift */; };
- C08DCA5180F1A15542694844C66B0EFB /* UIView+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = BD668705D280F596E1207992E834E7E8 /* UIView+ChameleonPrivate.m */; };
- C0DB70AB368765DC64BFB5FEA75E0696 /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = E82CAD7D235046418F082D5B0A8D1D1D /* ParameterEncoding.swift */; };
- C17B63D63425ED26125A32CC2E15B2A6 /* UIView+FSExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = B72324C3C9166605A2805A2A5E7646A9 /* UIView+FSExtension.h */; settings = {ATTRIBUTES = (Public, ); }; };
- C5DC5509FE360B0C018179AEAB679380 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8442BF0F0C3D860646481C46099D3C2A /* UIKit.framework */; };
- C60C0BAB1840ED78E320BF832EB7D90F /* CALayer+FSExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = EF812FB579F24D01A081FBE04EFB98ED /* CALayer+FSExtension.h */; settings = {ATTRIBUTES = (Public, ); }; };
- C6E011EAC995523734C90C4B3362D037 /* OnboardingContentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 077F96B6080AFA56C57756CC1B6BFED2 /* OnboardingContentViewController.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; };
- C7B6DD7C0456C50289A2C381DFE9FA3F /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0240A81A134DD1E2D3C463B8013AF0D2 /* MultipartFormData.swift */; };
- C8A2FAD60F45E95A498EF0FD614844BF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EEBEDE07DCC047923720CEDA35982E /* Foundation.framework */; };
- C8F191C4FA3530AAEBAD2DDE2604DCF2 /* UIButton+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = AFF042E3819A5722A4E18DEE744CFA04 /* UIButton+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; };
- CC4F3479033014A3EFFF0C4712CFB523 /* NVActivityIndicatorAnimationLineSpinFadeLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2F5A2E6587190800C702F2B44E52267 /* NVActivityIndicatorAnimationLineSpinFadeLoader.swift */; };
- CC6706A5C5AC9744A850FC11730CA53E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EEBEDE07DCC047923720CEDA35982E /* Foundation.framework */; };
- CC78BD4F08AE3B0638B853554389D7CA /* NVActivityIndicatorAnimationLineScaleParty.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5B76A6EC7318EA20649D1FD6905C38F /* NVActivityIndicatorAnimationLineScaleParty.swift */; };
- CCA8087439D9E8C2EAD3A4C533E7EFB1 /* Benchmarker.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEB960B7A10FA8958C385E4D9EF969E3 /* Benchmarker.swift */; };
- CD3C1E8D1BAFF179B13FDDDD6118D146 /* MRBlurView.m in Sources */ = {isa = PBXBuildFile; fileRef = E1ADC7D00128B9A718A72BD4BA56F652 /* MRBlurView.m */; };
- CEBADA794147C66483B0C205EDED2F4B /* FSCalendarDynamicHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AC606C96D46045AC70EC388375A7BD5 /* FSCalendarDynamicHeader.h */; settings = {ATTRIBUTES = (Public, ); }; };
- CEDB724342476CBE063FFB437D7EE973 /* DGRunkeeperSwitch-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 454DA591C828EE125C4CD4E6829B9ED5 /* DGRunkeeperSwitch-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- CFB8C96C7D3F7331E409D296466B923A /* UIColor+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 10D6C959ADAB08F6EB230BC43BFC2FD6 /* UIColor+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; };
- D0A45C8A6CA3AF10051732462D30FEC0 /* NVActivityIndicatorAnimationBallSpinFadeLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9DF2FE20405EFBFF97566DBF9718C86 /* NVActivityIndicatorAnimationBallSpinFadeLoader.swift */; };
- D0FDBDE18D6FAABAEABA137E6A6B2B9A /* Material-Design-Iconic-Font.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C810E8892D2F625782B3A449D93647FD /* Material-Design-Iconic-Font.ttf */; };
- D2B61A78124FCB785E11A98BDD0471BC /* UIAppearance+Swift.m in Sources */ = {isa = PBXBuildFile; fileRef = 758162B8C0C5CAB0B598A3588DD4706F /* UIAppearance+Swift.m */; };
- D36BC9B0C925A5244E16EE70E4809EE6 /* UIView+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9944D6F8523318B37645CC37A0E06966 /* UIView+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; };
- D4B2E79A7850584715A743A46D4EFA14 /* FSCalendarConstance.m in Sources */ = {isa = PBXBuildFile; fileRef = BF2CFCDC407A045CB56009AD862C15E3 /* FSCalendarConstance.m */; };
- D4C09BD820399466CF0F48D5715A87C3 /* AnyTweak.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FE8CFE54F5FD038412BD75F9D2890D2 /* AnyTweak.swift */; };
- D551E691006DBF532FE809BA00CE9870 /* TweakCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 100B619BBAE3DE405CC6DF902857E43C /* TweakCollectionViewController.swift */; };
- D603EE78D5DBF389EC429A33757BFF5C /* FSCalendarAppearance.h in Headers */ = {isa = PBXBuildFile; fileRef = 096E3E2ECB4B674FD113D8026B00053A /* FSCalendarAppearance.h */; settings = {ATTRIBUTES = (Public, ); }; };
- D625A38F982BA2BB58D9FF6E58614806 /* Localize_Swift.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A32003675B3ABBF1314CF933AB87375 /* Localize_Swift.h */; settings = {ATTRIBUTES = (Public, ); }; };
- D63F7FC5B62A6D19BA38171777327391 /* TweakViewData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2192196CA44729C9D1505D22AADDCB7 /* TweakViewData.swift */; };
- D9AFEB183A6CB4D9B68B6F907D09F993 /* FontAwesomeKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 40CA6433785FC9F38E0E0F3BF97F4F95 /* FontAwesomeKit-dummy.m */; };
- DA711B72294670E9CDAF019922103A11 /* AppTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D4DA5B5F177A7FA50DE4292B29B6CC1 /* AppTheme.swift */; };
- DACEC73F51892F550928C78B65B4651A /* FAKIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A5579509F95593DAED8FB04906B5FB9 /* FAKIcon.m */; };
- DB0D7D2A2EDB8D6D5C18B850CB779F7B /* FSCalendarCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8205CA4F95C78A184EBC77D2E0B2ED1B /* FSCalendarCollectionView.m */; };
- DD2FA3B21ECD486EA416583741BB1631 /* NVActivityIndicatorAnimationSquareSpin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DE1D25DC54E44FCD2AE272DC052C2A9 /* NVActivityIndicatorAnimationSquareSpin.swift */; };
- DE0A4E10ED1E104BF1DEF81453A6EBC8 /* FSCalendar-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 90E06F971EA05F91B4956215AA8D2C6E /* FSCalendar-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DEF6A4568B82118FAE7955FDD99F6E8C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EEBEDE07DCC047923720CEDA35982E /* Foundation.framework */; };
- DFB3F12058051C96E88682F4CA437C55 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EEBEDE07DCC047923720CEDA35982E /* Foundation.framework */; };
- E01442ABCD312C1599319B377D5613A9 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 164B0C51C22E65985D17281C16A13D15 /* CoreGraphics.framework */; };
- E016B37F0BA5A823E7FCC5877A97B129 /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32613149A7AF175826CE1CFCF651CFBE /* Theme.swift */; };
- E0AFA39DA4A01D8A8FE3D4EC76250F46 /* UIColor+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D16A93616A9A640FF798E7840712607 /* UIColor+ChameleonPrivate.m */; };
- E0C720836FBA4E75E3E57069219B7107 /* ChameleonFramework-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DD07F5DB3DFC380B9784E9D99B4C5731 /* ChameleonFramework-dummy.m */; };
- E1A910F5234561A4C2EB1125836E91C2 /* INTULocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 21121123C5B33FF775BAA3D06D968739 /* INTULocationManager.m */; };
- E2B51184ECD219B7CB07CD73E1DC4224 /* UIView+BasicAnimationTweakTemplate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 237C787FECBD1138A66985CAC077E53E /* UIView+BasicAnimationTweakTemplate.swift */; };
- E6ABAD1063A8CB12D73A2783D0DB7216 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EEBEDE07DCC047923720CEDA35982E /* Foundation.framework */; };
- E773A27D47BC2080FB249FBD4513AB1C /* FSCalendarAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 9723CB2FC157980453D10224CEE0430E /* FSCalendarAnimator.h */; settings = {ATTRIBUTES = (Public, ); }; };
- E790AFAB2583C46159772F294A0ADFFE /* ReceiptRequestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 536DBA6E97C669D79451FB7EC582F5D0 /* ReceiptRequestHandler.swift */; };
- E9868ED09710D93318015E60BA8486E9 /* Log-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D53E43A6E1A1D781835396A1F32DD588 /* Log-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- EA0EC972B280E9EFDDE71403E549B8B0 /* NVActivityIndicatorAnimationBallScaleRipple.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4065B136C6EFC843464BAF19A19F3F2E /* NVActivityIndicatorAnimationBallScaleRipple.swift */; };
- EB3E236040ACCF771CBCE9AD1789EF3D /* SwiftyJSON-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 97F733E10E63932C16318469DF7C8D5C /* SwiftyJSON-dummy.m */; };
- ECDF2C04EED904A4AFC64DED8EA45544 /* DGElasticPullToRefreshLoadingViewCircle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 542CD4854F2F6D005416A4127DAC773A /* DGElasticPullToRefreshLoadingViewCircle.swift */; };
- ED6729BBCAA181743608834CFDA28B10 /* FAKZocial.m in Sources */ = {isa = PBXBuildFile; fileRef = CB235D3B34CCE108C64AACB06E7D031B /* FAKZocial.m */; };
- EE07C99FAD103050F7920FECE45C07D2 /* FAKFoundationIcons.h in Headers */ = {isa = PBXBuildFile; fileRef = AFFFE59B2788F7707E3E36955E993A6F /* FAKFoundationIcons.h */; settings = {ATTRIBUTES = (Public, ); }; };
- EE442E93E5BBC6AB805C3E1B2D3482CA /* MRActivityIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = BF6DD70BE4A19BCE9C1B986D54AC5C90 /* MRActivityIndicatorView.h */; settings = {ATTRIBUTES = (Public, ); }; };
- EE45E0FB3A26B7DFF80DDCF6C597970B /* PermissionScope-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F9F0CABD8AAE5E2035A6316FC2F9FA3 /* PermissionScope-dummy.m */; };
- EE5D6304D6519F6B8791C10525530DB8 /* NVActivityIndicatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B8DF4469A5D2B4DA2FF9BF71D53DC68 /* NVActivityIndicatorView.swift */; };
- EE691DA3C9B83F18E776E1437AC81D60 /* FontAwesome.otf in Resources */ = {isa = PBXBuildFile; fileRef = 611B8A00EE9A2180740BBBF5D94809B7 /* FontAwesome.otf */; };
- EF4066B0EEC6CF4D847A4C6810886BDA /* OnboardingContentViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 395FAC894A5ADF945D2B1653437240B7 /* OnboardingContentViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
- EFB1A09738CFD06D630DAE60519CA842 /* SwiftyJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD209D5A87DE1524F3873D0C9A22F11F /* SwiftyJSON.swift */; };
- EFE92E8D3813DD26E78E93EEAF6D7E7E /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCE8A2553E5B9A016379202FDA207C7C /* Request.swift */; };
- F0062A0D1BD5D56ED254B194BB3B7EB4 /* MRProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E41F20516EA06D76ABB01C821CE0ADA /* MRProgressView.m */; };
- F06F0A5FD1403D3DD2A86D0D35E353A7 /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0A3FDE44E8E4E33BE4E2821205460EF /* Logger.swift */; };
- F20261D324026E13795C3888A17CD315 /* NSTimeInterval+SwiftDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F37516AE097D14D7139938C1A6A56E1D /* NSTimeInterval+SwiftDate.swift */; };
- F60E1974ADBE32987CC1F894A09C93CC /* foundation-icons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3D9A2063443FE1336500CA6EE481925F /* foundation-icons.ttf */; };
- F7317B2BAF77EC9AF9422499C1D467AA /* FSCalendarEventIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = B7C966C5C4F0D4B0212EBAB97F455DDF /* FSCalendarEventIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; };
- F7944D091AD240B80D98066395A99B95 /* FSCalendar.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E36B1C494135FAF52B477E9E07EA99A /* FSCalendar.h */; settings = {ATTRIBUTES = (Public, ); }; };
- FA19565E2FF7CB15E8214ACA25479462 /* TweakColorEditViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEAED082D59B4CE39C8F6723C03E01CF /* TweakColorEditViewController.swift */; };
- FA63634FDB30074D8C573E62746B15F1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EEBEDE07DCC047923720CEDA35982E /* Foundation.framework */; };
- FAB7C37DE795BFC72E7BD013F4E23F70 /* TweakGroupTemplateType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74829C1847C33BE2BA16B72AAB4A4B94 /* TweakGroupTemplateType.swift */; };
- FB5734D36AF2C93820C669F247C63C36 /* FloatingTweakGroupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA1BB5DAE05A08902EF205597768C8D2 /* FloatingTweakGroupViewController.swift */; };
- FC513481E5E93CCD0D98FFE2339E5F3C /* NVActivityIndicatorAnimationLineScalePulseOut.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E0ADC0F48415673EFE2A2450859A825 /* NVActivityIndicatorAnimationLineScalePulseOut.swift */; };
- FDEFC3630F3E6EF3D22FA7BE4B331689 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E591C42CC4E4658C8954976C3DB5CE1 /* QuartzCore.framework */; };
- FE21FC7BACB9BCD40402CF778F2A0C6E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8442BF0F0C3D860646481C46099D3C2A /* UIKit.framework */; };
- FF4A8EFE1154C1FFD58B48E978298871 /* NSArray+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = F3575C06FA5B2FEE49DE0106BD7F14A2 /* NSArray+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; };
- FFBABEC849DD7ED1EEED415EDB35CCEB /* TweakColorCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651C38CADE593207E970A4FA4DF4FE65 /* TweakColorCell.swift */; };
- FFCD27FF219DEC63137D56C7AD5A048A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EEBEDE07DCC047923720CEDA35982E /* Foundation.framework */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
- 032C469C00809BCA2844F06249CBEA05 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = EF89A4DA92CC0D0F76CF983AB2A6F4F1;
- remoteInfo = DGRunkeeperSwitch;
- };
- 291946D90B5432246EA95B78E53576DC /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = A59A93B402011A0E65D47D9CF441BB2B;
- remoteInfo = SwiftDate;
- };
- 2DDD9C17EEE66C0BBF883AEF77239EEC /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 5AF1C612F4CDA296FC4C82D9BD0BD25D;
- remoteInfo = INTULocationManager;
- };
- 3ABD836359387E4B93E15DDDCA4760B4 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = D1DC35DB2C695031A72543555FB23729;
- remoteInfo = AsyncSwift;
- };
- 4054063BE0FF4557D9C02554D93EEE58 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = C55E46AC6A1E70A6AA25E306AE545375;
- remoteInfo = PermissionScope;
- };
- 4CD435AAF1DDF12580368D4D0EE9726B /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = B2619B2813D910DBC9FE9714E0788D55;
- remoteInfo = FSCalendar;
- };
- 55CF4A04A38F093A1DDB1D38C304C53F /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 99467F259B31FBA8DDB95086022B4977;
- remoteInfo = FontAwesomeKit;
- };
- 68BA1AAAE0B378C71D43AA97E1E82464 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 115824B7CB2E76E5ACB836A251E79404;
- remoteInfo = DGElasticPullToRefresh;
- };
- 770B642137C7C845FD19E0F8D49AD53C /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 79C040AFDDCE1BCBF6D8B5EB0B85887F;
- remoteInfo = Alamofire;
- };
- 83CD15991BDDB1B489357CEECEC4C9CC /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = B8A49B21FD9EF99E936D68AE82846108;
- remoteInfo = SCLAlertView;
- };
- 88308D7E134981F1E3F98D70D35AAFD0 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = B7C99010DEE22AAAB76BCF07F093651A;
- remoteInfo = Log;
- };
- A51B8E0F6AF84688C70971D422AED7B1 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 32227DE82A25F38D0FB6FD6A6B51574B;
- remoteInfo = SwiftTweaks;
- };
- B7C26EEAE364AA545DE656A8F490939A /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 626D49AD18621B0A3059EE726B27AE89;
- remoteInfo = NVActivityIndicatorView;
- };
- B8FB17933F3770833D99859B81D581E6 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 9CAAB2A1855182D992E2945796B03B4D;
- remoteInfo = MRProgress;
- };
- BDF7B9AE18DE37206659C7AF95B9DB24 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 4D48BE2E1C03FDDFE91191F0714E9095;
- remoteInfo = SwiftyJSON;
- };
- C2EBB6FA7C7FBF0B76E0CCA06BA2B080 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 8F17DD5BDDF65F3AB77F350BE14632BE;
- remoteInfo = EFCircularSlider;
- };
- C6BE78948DFC589E40ED1035746E5022 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 4E3BBCA6078A6AAAD053C911572F0B0C;
- remoteInfo = "Localize-Swift";
- };
- D6F68B7573AE43464C44B4C2EBB97952 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 05FE1F0D2B1FA1DC3263A13FCD68A0C1;
- remoteInfo = SwiftInAppPurchase;
- };
- E1CB140447FDC1130E04CA57E03CAC19 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 5172ACAB7FEA22813859DC97CA0AA16F;
- remoteInfo = ChameleonFramework;
- };
- E8CA9C0ADAE37A93179C11D7C4397076 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = D7FF48F3092783E4E42B336F0DEF2D1A;
- remoteInfo = Onboard;
- };
- F094DD956FAA5F4696994A82D51AC840 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 7EC1417298041145E9B1A4C7B395C179;
- remoteInfo = "AKPickerView-Swift";
- };
- FD1D82C478088254698B77D05C5A37C6 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = AC21AA5E85F7C4BF354E6D4D7FC2D0DF;
- remoteInfo = "SwiftInAppPurchase-SwiftInAppPurchase";
- };
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXFileReference section */
- 00F7E960E08F42ACCC8917B304C13FEC /* FSCalendar-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FSCalendar-prefix.pch"; sourceTree = ""; };
- 012189AF218224586E70149DAEF1EAF6 /* ColorRepresentation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ColorRepresentation.swift; path = SwiftTweaks/ColorRepresentation.swift; sourceTree = ""; };
- 021DC339F4390779FFA6D901574617AF /* DGElasticPullToRefresh.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DGElasticPullToRefresh.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 0240A81A134DD1E2D3C463B8013AF0D2 /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/MultipartFormData.swift; sourceTree = ""; };
- 0370319F2FA7B83D9BCA15C396CA0748 /* Pods-tpg offline.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-tpg offline.debug.xcconfig"; sourceTree = ""; };
- 0395352DDFC006935068F7248640B54F /* TweakBackup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TweakBackup.swift; path = SwiftTweaks/TweakBackup.swift; sourceTree = ""; };
- 05DA5127D70005DF4A1926D0ECA6C42B /* MRStopButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRStopButton.h; path = src/Components/MRStopButton.h; sourceTree = ""; };
- 06FA87AAEDB4ADBC7A15BB295EF51C77 /* SwiftDate-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftDate-dummy.m"; sourceTree = ""; };
- 07616EFF2950BF156B44B1883E4026C2 /* SwiftDate-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftDate-umbrella.h"; sourceTree = ""; };
- 07708D0251576271A17840367001B492 /* ChameleonFramework.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ChameleonFramework.xcconfig; sourceTree = ""; };
- 077F96B6080AFA56C57756CC1B6BFED2 /* OnboardingContentViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OnboardingContentViewController.m; path = Source/OnboardingContentViewController.m; sourceTree = ""; };
- 07D44E5A2B1ED2B0337E9A4AD9067EEC /* FAKFontAwesome.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FAKFontAwesome.m; path = FontAwesomeKit/FAKFontAwesome.m; sourceTree = ""; };
- 096E3E2ECB4B674FD113D8026B00053A /* FSCalendarAppearance.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSCalendarAppearance.h; path = FSCalendar/FSCalendarAppearance.h; sourceTree = ""; };
- 09AD54C6E2914DE3B0E92BDD596F6AD8 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 09E4A22324BF4C3DF06D0A9FA09A7FA5 /* DateInRegion+StartEnd.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DateInRegion+StartEnd.swift"; path = "Sources/SwiftDate/DateInRegion+StartEnd.swift"; sourceTree = ""; };
- 0A63A88E702614AA9B3512595A93EA20 /* Log.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Log.modulemap; sourceTree = ""; };
- 0A8F16B1600A0AB85750BF471BD387E4 /* MRProgress-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MRProgress-dummy.m"; sourceTree = ""; };
- 0B8DF4469A5D2B4DA2FF9BF71D53DC68 /* NVActivityIndicatorView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorView.swift; path = NVActivityIndicatorView/NVActivityIndicatorView.swift; sourceTree = ""; };
- 0C22F909FB0F3DD46C504563172D8789 /* MRStopableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRStopableView.h; path = src/Components/MRStopableView.h; sourceTree = ""; };
- 0C65E5B0860811BF9D473D2B7234CAA5 /* FAKFoundationIcons.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FAKFoundationIcons.m; path = FontAwesomeKit/FAKFoundationIcons.m; sourceTree = ""; };
- 0C83AD2BC1FBEB0750B19B093712D545 /* DateInRegion+Operations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DateInRegion+Operations.swift"; path = "Sources/SwiftDate/DateInRegion+Operations.swift"; sourceTree = ""; };
- 0DC29C54CADD9261CB2B0CACBD12A199 /* ChameleonFramework.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = ChameleonFramework.modulemap; sourceTree = ""; };
- 0E72770DE0D17CFD80BE5FF3B7A57E83 /* FSCalendar.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = FSCalendar.modulemap; sourceTree = ""; };
- 0E7C6A5429108261D8B83820BD32F246 /* NSString+FSExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+FSExtension.h"; path = "FSCalendar/NSString+FSExtension.h"; sourceTree = ""; };
- 0EDF3C4C5B01BF1A4204E0FCA8CC9D55 /* FAKMaterialIcons.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FAKMaterialIcons.m; path = FontAwesomeKit/FAKMaterialIcons.m; sourceTree = ""; };
- 0FE626E37E62401F5B2AA468245A2B4A /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 1005CA704AA24D3EEBD7C2BFD47BA390 /* DGElasticPullToRefresh-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DGElasticPullToRefresh-prefix.pch"; sourceTree = ""; };
- 100B619BBAE3DE405CC6DF902857E43C /* TweakCollectionViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TweakCollectionViewController.swift; path = SwiftTweaks/TweakCollectionViewController.swift; sourceTree = ""; };
- 10D6C959ADAB08F6EB230BC43BFC2FD6 /* UIColor+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+Chameleon.h"; path = "Pod/Classes/Objective-C/UIColor+Chameleon.h"; sourceTree = ""; };
- 117385C631C97B0A140C7BAB9815BC8B /* SCLAlertView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SCLAlertView-umbrella.h"; sourceTree = ""; };
- 11CD7B4D6796DE722E7E6AE91271E532 /* NSDateFormatter+SwiftDate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSDateFormatter+SwiftDate.swift"; path = "Sources/SwiftDate/NSDateFormatter+SwiftDate.swift"; sourceTree = ""; };
- 1285CA76BFC0689BF0EFB5B31D3CDA77 /* MRBlurView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRBlurView.h; path = src/Blur/MRBlurView.h; sourceTree = ""; };
- 143249D2E9DB5B34C9E9D293FF3EE6EA /* NVActivityIndicatorAnimationPacman.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationPacman.swift; path = NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationPacman.swift; sourceTree = ""; };
- 1504F4A49DFBE37627F7A0F13F6CF397 /* Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Extensions.swift; path = PermissionScope/Extensions.swift; sourceTree = ""; };
- 1522ADB16DE3A06A2671763014ABD715 /* NVActivityIndicatorAnimationBallScale.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallScale.swift; path = NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScale.swift; sourceTree = ""; };
- 164B0C51C22E65985D17281C16A13D15 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; };
- 169BACA90582EBFD066DA19FDC8EB364 /* NVActivityIndicatorAnimationCubeTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationCubeTransition.swift; path = NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationCubeTransition.swift; sourceTree = ""; };
- 16B9F126247EF67C8E784A58684997D4 /* SCLAlertView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = SCLAlertView.modulemap; sourceTree = ""; };
- 16CFEEA46E9DB7A13A733AB5F8DF8B31 /* CALayer+ShadowTweakTemplate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CALayer+ShadowTweakTemplate.swift"; path = "SwiftTweaks/CALayer+ShadowTweakTemplate.swift"; sourceTree = ""; };
- 173F81A6134A7E817D9E2FDF0A396D0F /* SCLAlertView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SCLAlertView-prefix.pch"; sourceTree = ""; };
- 17AA292F3F46A8F70EB63C90D00A043D /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 1A924633224C2DB29B1DF6C655045F58 /* EdgeInsetsTweakTemplate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EdgeInsetsTweakTemplate.swift; path = SwiftTweaks/EdgeInsetsTweakTemplate.swift; sourceTree = ""; };
- 1A9B88BD886F9C7651F805A3DBCACC97 /* FSCalendarAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSCalendarAnimator.m; path = FSCalendar/FSCalendarAnimator.m; sourceTree = ""; };
- 1B08A1B36F0A6E4CD519408A67150374 /* MRNavigationBarProgressView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRNavigationBarProgressView.h; path = src/Components/MRNavigationBarProgressView.h; sourceTree = ""; };
- 1B466E914C58E53362C6F1A7983FC2AC /* DateInRegion+Comparisons.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DateInRegion+Comparisons.swift"; path = "Sources/SwiftDate/DateInRegion+Comparisons.swift"; sourceTree = ""; };
- 1B5895B5346264B522236A218B24E021 /* FSCalendarFlowLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSCalendarFlowLayout.m; path = FSCalendar/FSCalendarFlowLayout.m; sourceTree = ""; };
- 1CE28601D5261E856C0D00DDAF43B5D0 /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = ""; };
- 1D16A93616A9A640FF798E7840712607 /* UIColor+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIColor+ChameleonPrivate.m"; sourceTree = ""; };
- 1DE096B1AEA88EF91CBE7BEFC53544CB /* INTULocationRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = INTULocationRequest.m; path = LocationManager/INTULocationManager/INTULocationRequest.m; sourceTree = ""; };
- 1E12931828371D1F461C1EFA4DF0E6A1 /* TweakGroup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TweakGroup.swift; path = SwiftTweaks/TweakGroup.swift; sourceTree = ""; };
- 1E6194A20C15CB11C0ECDE11F0934EAD /* SwiftTweaks-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftTweaks-prefix.pch"; sourceTree = ""; };
- 1E9B48114062883632E4C68D9FB335E8 /* AKPickerView-Swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AKPickerView-Swift-umbrella.h"; sourceTree = ""; };
- 1F1C7B10C405C285F7BDF56720444EF7 /* FSCalendar.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FSCalendar.xcconfig; sourceTree = ""; };
- 1F36DA1EE58BB1A91340DB0685A26671 /* INTULocationManager.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = INTULocationManager.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 1F7502E73C5C7AFF2D7C193B3CC17635 /* Dictionary+SwiftDate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Dictionary+SwiftDate.swift"; path = "Sources/SwiftDate/Dictionary+SwiftDate.swift"; sourceTree = ""; };
- 20D109B02F78A11AD7B77031C3804269 /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Crashlytics.framework; path = iOS/Crashlytics.framework; sourceTree = ""; };
- 20E6C13EB21880BDBB2FFC26B4497DD9 /* UIEdgeInsets+EdgeInsetsTweakTemplate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIEdgeInsets+EdgeInsetsTweakTemplate.swift"; path = "SwiftTweaks/UIEdgeInsets+EdgeInsetsTweakTemplate.swift"; sourceTree = ""; };
- 20EA86D5BABC04E604138A9939838E79 /* UIImage+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIImage+ChameleonPrivate.m"; sourceTree = ""; };
- 20FFC9B0591D66FBA439062F9DEACE33 /* INTULocationManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "INTULocationManager-dummy.m"; sourceTree = ""; };
- 21121123C5B33FF775BAA3D06D968739 /* INTULocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = INTULocationManager.m; path = LocationManager/INTULocationManager/INTULocationManager.m; sourceTree = ""; };
- 21D6DBB62DF8E7BD317235591F214E73 /* Alamofire.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.xcconfig; sourceTree = ""; };
- 2211FDEBCC6FEAC482F69A4DA39D7366 /* MRCircularProgressView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRCircularProgressView.m; path = src/Components/MRCircularProgressView.m; sourceTree = ""; };
- 22340697ED9176CA38E1B91FAC17833A /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 23463BA6B27E8D9CB734A84F68F678B9 /* CALayer+FSExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CALayer+FSExtension.m"; path = "FSCalendar/CALayer+FSExtension.m"; sourceTree = ""; };
- 2351275ADA76388D170C0A5C13AD8E98 /* Localize-Swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Localize-Swift.modulemap"; sourceTree = ""; };
- 237C787FECBD1138A66985CAC077E53E /* UIView+BasicAnimationTweakTemplate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+BasicAnimationTweakTemplate.swift"; path = "SwiftTweaks/UIView+BasicAnimationTweakTemplate.swift"; sourceTree = ""; };
- 23A34AA5CD92A090D44B23774301EF02 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 23ED5B56EAD6A1100447D1DB06EC925A /* AKPickerView-Swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AKPickerView-Swift-dummy.m"; sourceTree = ""; };
- 2444A70958E420012AB33C638444FDE8 /* PaymentRequestHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PaymentRequestHandler.swift; path = Pod/Classes/PaymentRequestHandler.swift; sourceTree = ""; };
- 24C4760F5DD4CB467A7112281E967C04 /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = ""; };
- 253904F995DD8A5114B6B8B23F201805 /* UIImage+MRImageEffects.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MRImageEffects.m"; path = "src/Blur/UIImage+MRImageEffects.m"; sourceTree = ""; };
- 26D2207734A971357125F6D6E729B193 /* NVActivityIndicatorAnimationBallClipRotate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallClipRotate.swift; path = NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallClipRotate.swift; sourceTree = ""; };
- 28D73AB258480A097A803D4F208B3542 /* Log-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Log-prefix.pch"; sourceTree = ""; };
- 294819245101964815C51BF087071704 /* Async.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Async.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 29574C1F2CC308A7ABD9E7FD370021D8 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 29A163B5F0893795F7872B422D5A89A4 /* SwiftTweaks-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftTweaks-umbrella.h"; sourceTree = ""; };
- 2A54265BF06C63ACCBD029400FBB8882 /* AsyncSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = AsyncSwift.modulemap; sourceTree = ""; };
- 2AE3F8157087AA2025B0191725E87696 /* MRProgressOverlayView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRProgressOverlayView.m; path = src/Components/MRProgressOverlayView.m; sourceTree = ""; };
- 2D322867D872F05065D7739085407378 /* TweaksBackupsListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TweaksBackupsListViewController.swift; path = SwiftTweaks/TweaksBackupsListViewController.swift; sourceTree = ""; };
- 2E0ADC0F48415673EFE2A2450859A825 /* NVActivityIndicatorAnimationLineScalePulseOut.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationLineScalePulseOut.swift; path = NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineScalePulseOut.swift; sourceTree = ""; };
- 30BBB37269D011A14B4F6205299257E7 /* MRProgressOverlayView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRProgressOverlayView.h; path = src/Components/MRProgressOverlayView.h; sourceTree = ""; };
- 30D41B656C99462D9F4D00E14498D6B3 /* MRProgress.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = MRProgress.modulemap; sourceTree = ""; };
- 30E6AE2E1BD4C674401E6B317147249B /* SwiftTweaks.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftTweaks.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 31160AB1A3FE7012378FCDEAE1BA7A6C /* Onboard.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Onboard.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 32613149A7AF175826CE1CFCF651CFBE /* Theme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Theme.swift; path = Source/Theme.swift; sourceTree = ""; };
- 32872696A15B7ED2D762F49591E1D0A5 /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = Source/Error.swift; sourceTree = ""; };
- 32CA1C89376BDA8A4BA761521A0973B4 /* FSCalendarStickyHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSCalendarStickyHeader.m; path = FSCalendar/FSCalendarStickyHeader.m; sourceTree = ""; };
- 33295618FF88A0FAD24334AAA865C0A0 /* AsyncSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AsyncSwift-prefix.pch"; sourceTree = ""; };
- 33EB840B783AB3267C8C681297A1DC95 /* Pods-tpg offline-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-tpg offline-acknowledgements.plist"; sourceTree = ""; };
- 3402FC82014D3F9A274CC1D9750A4A05 /* UIImage+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIImage+ChameleonPrivate.h"; sourceTree = ""; };
- 344D585A05C9D3B4BB8D386FF73777AC /* INTULocationManager.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = INTULocationManager.xcconfig; sourceTree = ""; };
- 353C100864557E00F0CB9AE5E823B140 /* Chameleon_.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Chameleon_.h; path = "Pod/Classes/Objective-C/Chameleon_.h"; sourceTree = ""; };
- 3706DEF5E05D37992415349C6E630839 /* DGElasticPullToRefresh-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DGElasticPullToRefresh-dummy.m"; sourceTree = ""; };
- 380689C7DFF7A8B197B0DC7C4235D60E /* Chameleon_.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Chameleon_.m; path = "Pod/Classes/Objective-C/Chameleon_.m"; sourceTree = ""; };
- 38A20C65B2DDE5ADA6C18A8560CA073D /* MRProgressView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRProgressView.h; path = src/Components/MRProgressView.h; sourceTree = ""; };
- 395FAC894A5ADF945D2B1653437240B7 /* OnboardingContentViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OnboardingContentViewController.h; path = Source/OnboardingContentViewController.h; sourceTree = ""; };
- 39680D13CAA4BAEA00B63EE9BDDFA403 /* NVActivityIndicatorView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NVActivityIndicatorView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 3A1DBD7224FF5E1783B1C86C2AB99816 /* SwiftTweaks-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftTweaks-dummy.m"; sourceTree = ""; };
- 3A5579509F95593DAED8FB04906B5FB9 /* FAKIcon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FAKIcon.m; path = FontAwesomeKit/FAKIcon.m; sourceTree = ""; };
- 3A5DF86838CC87F5636E6003B7B2A6FD /* AsyncSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AsyncSwift-umbrella.h"; sourceTree = ""; };
- 3ACA4B77854E43D279CD57545ED64207 /* Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Chameleon.h; path = "Pod/Classes/Objective-C/Chameleon.h"; sourceTree = ""; };
- 3B3520258A6D98CCE6EBB297C6877589 /* Upload.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Upload.swift; path = Source/Upload.swift; sourceTree = ""; };
- 3B80CAA48BD48E55BDE62C7CCFA8DA6D /* PermissionScope.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PermissionScope.swift; path = PermissionScope/PermissionScope.swift; sourceTree = ""; };
- 3BA74DB244E08F0B20B447A60A292B28 /* DGElasticPullToRefreshView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DGElasticPullToRefreshView.swift; path = DGElasticPullToRefresh/DGElasticPullToRefreshView.swift; sourceTree = ""; };
- 3BC40F4D6EFA3E6DDA821A2CA0580C83 /* TweakWindow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TweakWindow.swift; path = SwiftTweaks/TweakWindow.swift; sourceTree = ""; };
- 3D34BB12EA18038B02F24F7282FE226E /* AKPickerView-Swift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AKPickerView-Swift.xcconfig"; sourceTree = ""; };
- 3D9A2063443FE1336500CA6EE481925F /* foundation-icons.ttf */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = "foundation-icons.ttf"; path = "FontAwesomeKit/foundation-icons.ttf"; sourceTree = ""; };
- 3DF31DB524F144E46EA30058681A9BD3 /* MRProgressHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRProgressHelper.h; path = src/Utils/MRProgressHelper.h; sourceTree = ""; };
- 3EFDC87411DBA840DCC781C41CAAA87C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 3F389FD129777AC1F01283A61ABEF404 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 401E757E105FA6900E55FD5306AA9BB1 /* ProductRequestHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ProductRequestHandler.swift; path = Pod/Classes/ProductRequestHandler.swift; sourceTree = ""; };
- 4065B136C6EFC843464BAF19A19F3F2E /* NVActivityIndicatorAnimationBallScaleRipple.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallScaleRipple.swift; path = NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScaleRipple.swift; sourceTree = ""; };
- 40CA6433785FC9F38E0E0F3BF97F4F95 /* FontAwesomeKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FontAwesomeKit-dummy.m"; sourceTree = ""; };
- 4151BD174057BBEF8FDBFFB30DD54C24 /* SCLAlertView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SCLAlertView-dummy.m"; sourceTree = ""; };
- 41F38C1AA679DF04C7447321FF8B8A05 /* MRProgress-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MRProgress-umbrella.h"; sourceTree = ""; };
- 4415036062D30932A796432DA868BF74 /* Onboard.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Onboard.xcconfig; sourceTree = ""; };
- 447B9A6A811DB3F64D3D83940CE3366D /* INTULocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = INTULocationManager.h; path = LocationManager/INTULocationManager/INTULocationManager.h; sourceTree = ""; };
- 44989BC3C89A3F02752B8168BCD91229 /* DGRunkeeperSwitch-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DGRunkeeperSwitch-dummy.m"; sourceTree = ""; };
- 454DA591C828EE125C4CD4E6829B9ED5 /* DGRunkeeperSwitch-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DGRunkeeperSwitch-umbrella.h"; sourceTree = ""; };
- 4578FB1A019DD82FD8FD4CA2C3A37F60 /* NVActivityIndicatorAnimationLineScale.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationLineScale.swift; path = NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineScale.swift; sourceTree = ""; };
- 46597FA5EAF275C090D9B4273EEE0D53 /* MRProgress-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MRProgress-prefix.pch"; sourceTree = ""; };
- 475FF44C03EF51904E86BA0A0C5CDD89 /* SwiftyJSON-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-umbrella.h"; sourceTree = ""; };
- 47AD9FEEB5021C7822A96B70D1B28079 /* DGRunkeeperSwitch.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = DGRunkeeperSwitch.modulemap; sourceTree = ""; };
- 482709D9A1EDC65C7090BE3F2A6BE946 /* FAKOcticons.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FAKOcticons.h; path = FontAwesomeKit/FAKOcticons.h; sourceTree = ""; };
- 48410F3E0FB6DFDC49AFCC8A7F2F1200 /* FontAwesomeKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FontAwesomeKit-prefix.pch"; sourceTree = ""; };
- 492BC27888460D7791C0AEF0F65916BF /* FontAwesomeKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FontAwesomeKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 4A32488174BA7657D1A1B6594AA1926F /* Localize-Swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Localize-Swift-dummy.m"; sourceTree = ""; };
- 4A68B533C75C155FA0480BE3E8007693 /* SwiftInAppPurchase.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftInAppPurchase.xcconfig; sourceTree = ""; };
- 4C83D7B5517F1A42EBAFFD190376EACF /* TweakableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TweakableType.swift; path = SwiftTweaks/TweakableType.swift; sourceTree = ""; };
- 4D03FAC5FFD7706B2A1D655B63CD25FA /* Localize-Swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Localize-Swift-prefix.pch"; sourceTree = ""; };
- 4D2F5D5E3664356890D3BACD6C700289 /* TweakStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TweakStore.swift; path = SwiftTweaks/TweakStore.swift; sourceTree = ""; };
- 4D8AE4384AD61D05325B3A45E6D16C5E /* FontAwesomeKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = FontAwesomeKit.modulemap; sourceTree = ""; };
- 4DAD7C30FD4D6DC7F5269E0A612B6A36 /* UIAppearance+Swift.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAppearance+Swift.h"; path = "Pod/Classes/Objective-C/UIAppearance+Swift.h"; sourceTree = ""; };
- 4DE2F7540F07676FE654870A2BA39E30 /* AsyncSwift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AsyncSwift.xcconfig; sourceTree = ""; };
- 4E32D81915143777356AD901BFF95ED6 /* NSDateInterval.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSDateInterval.swift; path = Sources/SwiftDate/NSDateInterval.swift; sourceTree = ""; };
- 4E36B1C494135FAF52B477E9E07EA99A /* FSCalendar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSCalendar.h; path = FSCalendar/FSCalendar.h; sourceTree = ""; };
- 4F902121FD352F721FB38767860C7EDD /* NVActivityIndicatorAnimationBallPulseSync.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallPulseSync.swift; path = NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallPulseSync.swift; sourceTree = ""; };
- 5060A44DA2E95A11C353E3822955BA8B /* FontAwesomeKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FontAwesomeKit.xcconfig; sourceTree = ""; };
- 51797706944D4A52049858F0D5F68FA2 /* NVActivityIndicatorAnimationBallRotate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallRotate.swift; path = NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallRotate.swift; sourceTree = ""; };
- 536DBA6E97C669D79451FB7EC582F5D0 /* ReceiptRequestHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReceiptRequestHandler.swift; path = Pod/Classes/ReceiptRequestHandler.swift; sourceTree = ""; };
- 53A733F5026792B56429C77348A720B9 /* Pods-tpg offline.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-tpg offline.release.xcconfig"; sourceTree = ""; };
- 53F8617638F2D9D06E35B6F8FB835920 /* NVActivityIndicatorAnimationBallPulseRise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallPulseRise.swift; path = NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallPulseRise.swift; sourceTree = ""; };
- 542CD4854F2F6D005416A4127DAC773A /* DGElasticPullToRefreshLoadingViewCircle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DGElasticPullToRefreshLoadingViewCircle.swift; path = DGElasticPullToRefresh/DGElasticPullToRefreshLoadingViewCircle.swift; sourceTree = ""; };
- 5463B664413144D2EDFF39DBDA74EC6D /* FAKIonIcons.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FAKIonIcons.m; path = FontAwesomeKit/FAKIonIcons.m; sourceTree = ""; };
- 548A620D1A26A399B464DDF4F7A1958C /* OnboardingViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OnboardingViewController.h; path = Source/OnboardingViewController.h; sourceTree = ""; };
- 54A8A52B91480CCB30E99C484E02BEAA /* SignedNumberTweakDefaultParameters.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SignedNumberTweakDefaultParameters.swift; path = SwiftTweaks/SignedNumberTweakDefaultParameters.swift; sourceTree = ""; };
- 54FBED247FC03E61556D0E18EDE19BAA /* MRCircularProgressView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRCircularProgressView.h; path = src/Components/MRCircularProgressView.h; sourceTree = ""; };
- 560A61239DF4D9DDEA62AD4E59AC43EF /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 569706BE3B48E5ADE03CE8CC5AE907D2 /* FSCalendarCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSCalendarCell.m; path = FSCalendar/FSCalendarCell.m; sourceTree = ""; };
- 569830AE11E3A35BD852B8ED6F3D5EF3 /* TweaksViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TweaksViewController.swift; path = SwiftTweaks/TweaksViewController.swift; sourceTree = ""; };
- 576EA2DCE7FC1EBA169E434D12609F9A /* AKPickerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AKPickerView.swift; path = AKPickerView/AKPickerView.swift; sourceTree = ""; };
- 57E26CB58B93C4F17A71252E0318205B /* Pods-tpg offline-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-tpg offline-dummy.m"; sourceTree = ""; };
- 57F146A001151D3104E6D36C4C128249 /* ChameleonConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonConstants.h; path = "Pod/Classes/Objective-C/ChameleonConstants.h"; sourceTree = ""; };
- 5A32003675B3ABBF1314CF933AB87375 /* Localize_Swift.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Localize_Swift.h; path = Sources/Localize_Swift.h; sourceTree = ""; };
- 5AC606C96D46045AC70EC388375A7BD5 /* FSCalendarDynamicHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSCalendarDynamicHeader.h; path = FSCalendar/FSCalendarDynamicHeader.h; sourceTree = ""; };
- 5B65CD432E7FA5EAF2588655EFDE7F51 /* DGElasticPullToRefresh.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DGElasticPullToRefresh.xcconfig; sourceTree = ""; };
- 5BACC5238693EE10E41BDE9B4911F7ED /* NVActivityIndicatorAnimationBallZigZag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallZigZag.swift; path = NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallZigZag.swift; sourceTree = ""; };
- 5C7186E0433615B16D699B21AAC3BA1D /* Timeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timeline.swift; path = Source/Timeline.swift; sourceTree = ""; };
- 5D2A0207C1930855687C529BC2244128 /* MRProgress.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MRProgress.xcconfig; sourceTree = ""; };
- 5D4DA5B5F177A7FA50DE4292B29B6CC1 /* AppTheme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AppTheme.swift; path = SwiftTweaks/AppTheme.swift; sourceTree = ""; };
- 5E591C42CC4E4658C8954976C3DB5CE1 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; };
- 5E8413B979EE016E4F0B3B4B854D1CE3 /* FSCalendar.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FSCalendar.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 5EF0A4509D6442CBC9A8F75617BBAA0A /* TweakClusterType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TweakClusterType.swift; path = SwiftTweaks/TweakClusterType.swift; sourceTree = ""; };
- 5F1DCE3FF7C8BD48A42884948C4E0A63 /* NSDate+SwiftDate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSDate+SwiftDate.swift"; path = "Sources/SwiftDate/NSDate+SwiftDate.swift"; sourceTree = ""; };
- 6111DF2E5FF984E07C99C0DEC8CD1497 /* Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Additions.swift; path = Sources/SwiftDate/Additions.swift; sourceTree = ""; };
- 611B8A00EE9A2180740BBBF5D94809B7 /* FontAwesome.otf */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = FontAwesome.otf; path = FontAwesomeKit/FontAwesome.otf; sourceTree = ""; };
- 6122E275D2F9E5AF26DD833E4B1A3F3F /* NVActivityIndicatorAnimationBallClipRotatePulse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallClipRotatePulse.swift; path = NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallClipRotatePulse.swift; sourceTree = ""; };
- 615133C94EA4E19E3A959E24DD35CD7C /* DGElasticPullToRefreshExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DGElasticPullToRefreshExtensions.swift; path = DGElasticPullToRefresh/DGElasticPullToRefreshExtensions.swift; sourceTree = ""; };
- 617E9DE70412934B3F4398BDEC4D1974 /* SwiftDate.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftDate.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 6250EC902E949A4A30CA1FCAD56C9EBB /* TweakLibrary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TweakLibrary.swift; path = SwiftTweaks/TweakLibrary.swift; sourceTree = ""; };
- 64245670253294D2139A6887F6CF0185 /* DGElasticPullToRefresh.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = DGElasticPullToRefresh.modulemap; sourceTree = ""; };
- 64ACDA21709E5496176A04222208D4E9 /* NVActivityIndicatorView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NVActivityIndicatorView-umbrella.h"; sourceTree = ""; };
- 651C38CADE593207E970A4FA4DF4FE65 /* TweakColorCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TweakColorCell.swift; path = SwiftTweaks/TweakColorCell.swift; sourceTree = ""; };
- 65685430497D7C66F47F350FAC62EEDE /* SpringAnimationTweakTemplate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SpringAnimationTweakTemplate.swift; path = SwiftTweaks/SpringAnimationTweakTemplate.swift; sourceTree = ""; };
- 65A70CC4CB141D4EBFC59168958A4DE4 /* OnboardingViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OnboardingViewController.m; path = Source/OnboardingViewController.m; sourceTree = ""; };
- 65E3C0FB9C1B9E53E853458A8AEAC330 /* MRNavigationBarProgressView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRNavigationBarProgressView.m; path = src/Components/MRNavigationBarProgressView.m; sourceTree = ""; };
- 6627FEC475D21527AC29B5014EC906B7 /* PermissionScope.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PermissionScope.xcconfig; sourceTree = ""; };
- 68453EF70623263E54D4B92B5824D712 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 6890441BBDE5909F0DA1EE0DC9744A4D /* NVActivityIndicatorAnimationBallScaleMultiple.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallScaleMultiple.swift; path = NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScaleMultiple.swift; sourceTree = ""; };
- 68E47FA06F12259C88755EBCF2B5F6D0 /* Manager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Manager.swift; path = Source/Manager.swift; sourceTree = ""; };
- 692B79B37557FDC85C5B409036925AAE /* UILabel+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UILabel+Chameleon.m"; path = "Pod/Classes/Objective-C/UILabel+Chameleon.m"; sourceTree = ""; };
- 69B6EC74EEF804F1CCAD5A532B0EE3CD /* PermissionScope.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = PermissionScope.modulemap; sourceTree = ""; };
- 6AC0D26FE0B5388F306CF6D5FE85B74D /* SwiftInAppPurchase.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwiftInAppPurchase.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
- 6B482A8605F29D73503290B9E4AA4EB2 /* FSCalendar-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FSCalendar-dummy.m"; sourceTree = ""; };
- 6C94102413A8DC5A3E0C2AA2CDB1E75E /* ShadowTweakTemplate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShadowTweakTemplate.swift; path = SwiftTweaks/ShadowTweakTemplate.swift; sourceTree = ""; };
- 6DBA4A6F0B23CE4BE713AC25EEB362F8 /* Onboard-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Onboard-prefix.pch"; sourceTree = ""; };
- 6DC219A03C285CA4550E1EA425A657CA /* Permissions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Permissions.swift; path = PermissionScope/Permissions.swift; sourceTree = ""; };
- 6E56E9A3513EA29BB78B1359F627F1B9 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; };
- 6F3EA4423BD406CFC32F8401D8B98AD0 /* UIView+FSExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+FSExtension.m"; path = "FSCalendar/UIView+FSExtension.m"; sourceTree = ""; };
- 6FE445956B1D21BF32C83E62B273F5BA /* ChameleonMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonMacros.h; path = "Pod/Classes/Objective-C/ChameleonMacros.h"; sourceTree = ""; };
- 728F8DE7C15B97A90553B6FDC5261775 /* NVActivityIndicatorAnimationTriangleSkewSpin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationTriangleSkewSpin.swift; path = NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationTriangleSkewSpin.swift; sourceTree = ""; };
- 73B75EF826BC45E0FD16F366632E4061 /* TweakStore+Sharing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "TweakStore+Sharing.swift"; path = "SwiftTweaks/TweakStore+Sharing.swift"; sourceTree = ""; };
- 741D7533A3555ACA2DF2396B59C7073C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 74829C1847C33BE2BA16B72AAB4A4B94 /* TweakGroupTemplateType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TweakGroupTemplateType.swift; path = SwiftTweaks/TweakGroupTemplateType.swift; sourceTree = ""; };
- 754EB805F4315EE916807F50F2AC5149 /* Tweak.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Tweak.swift; path = SwiftTweaks/Tweak.swift; sourceTree = ""; };
- 758162B8C0C5CAB0B598A3588DD4706F /* UIAppearance+Swift.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAppearance+Swift.m"; path = "Pod/Classes/Objective-C/UIAppearance+Swift.m"; sourceTree = ""; };
- 75BAEF93F95F80D3D4AFA1E652247CB8 /* ChameleonFramework-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ChameleonFramework-prefix.pch"; sourceTree = ""; };
- 7708BD7415BE05A3D043D8D649E527FB /* SwiftTweaks.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftTweaks.xcconfig; sourceTree = ""; };
- 778FAA1882C875729C4E405795B361E6 /* TweakTableCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TweakTableCell.swift; path = SwiftTweaks/TweakTableCell.swift; sourceTree = ""; };
- 7800A05E739CBDDE2863D062784E17A4 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 7908A27084490866DA36B3A90495AB62 /* NVActivityIndicatorAnimationDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationDelegate.swift; path = NVActivityIndicatorView/NVActivityIndicatorAnimationDelegate.swift; sourceTree = ""; };
- 7A6B168885F607CAD9DFAD30CC19FA17 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 7A7DFC38D1884A0DF0F693FC2F6959C4 /* TweakPersistency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TweakPersistency.swift; path = SwiftTweaks/TweakPersistency.swift; sourceTree = ""; };
- 7AA893DDB924B85DE7F08068EB12D864 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 7BB2FDDE4B22A473B310D6921A44C78F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = SCLAlertView/Info.plist; sourceTree = ""; };
- 7BE7C528A139F58C646149FE94EC5DFB /* UINavigationController+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UINavigationController+Chameleon.h"; path = "Pod/Classes/Objective-C/UINavigationController+Chameleon.h"; sourceTree = ""; };
- 7E7F7EEDE4A6336989F738C08CD60BE7 /* MRProgress.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MRProgress.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 7EE72D59CAF1F3278814D1278ADF49FF /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 7F9F0CABD8AAE5E2035A6316FC2F9FA3 /* PermissionScope-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PermissionScope-dummy.m"; sourceTree = ""; };
- 7FCECEA5B329F642D7DDE7E9C1161556 /* Media.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = Media.xcassets; path = SwiftTweaks/Media.xcassets; sourceTree = ""; };
- 800DC6EE597AB4A83203896E40F16190 /* SwiftInAppPurchase-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftInAppPurchase-dummy.m"; sourceTree = ""; };
- 8109158DD1A05826FC05ACA5B8BF7AAF /* SwiftyJSON.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = SwiftyJSON.modulemap; sourceTree = ""; };
- 8137FF6AAEFBD19340391A23C585D687 /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Alamofire.modulemap; sourceTree = ""; };
- 8205CA4F95C78A184EBC77D2E0B2ED1B /* FSCalendarCollectionView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSCalendarCollectionView.m; path = FSCalendar/FSCalendarCollectionView.m; sourceTree = ""; };
- 82417D172FB5B1E7EA8BDD6B9F2DE558 /* SwiftDate.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = SwiftDate.modulemap; sourceTree = ""; };
- 82887638727A876D13CC7A099D199D60 /* ChameleonShorthand.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChameleonShorthand.swift; path = Pod/Classes/Swift/ChameleonShorthand.swift; sourceTree = ""; };
- 83C00FF983D24287B17F2A761C657BB6 /* FSCalendarHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FSCalendarHeader.m; path = FSCalendar/FSCalendarHeader.m; sourceTree = ""; };
- 83EE592F7637C053AFF7DC90997291B0 /* FAKMaterialIcons.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FAKMaterialIcons.h; path = FontAwesomeKit/FAKMaterialIcons.h; sourceTree = ""; };
- 8406423E6114C31520801D4021859618 /* EFCircularTrig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EFCircularTrig.m; path = EFCircularSlider/EFCircularTrig.m; sourceTree = ""; };
- 8442BF0F0C3D860646481C46099D3C2A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
- 8458F7E361AFE5DA87CBCA9E42C4E188 /* SwiftInAppPurchase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftInAppPurchase.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 849C68141D31405B40D13AD2C8B773C6 /* UILabel+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UILabel+Chameleon.h"; path = "Pod/Classes/Objective-C/UILabel+Chameleon.h"; sourceTree = ""; };
- 84A5E520707745E67BB7C2E8C9CB683E /* Precision.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Precision.swift; path = SwiftTweaks/Precision.swift; sourceTree = ""; };
- 8630F62CDC57FBD5BFE1B7C6E011FEDE /* EFCircularSlider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EFCircularSlider.m; path = EFCircularSlider/EFCircularSlider.m; sourceTree = ""; };
- 865ABBAEA184B126E10CEB031EDD3A03 /* FAKIcon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FAKIcon.h; path = FontAwesomeKit/FAKIcon.h; sourceTree = ""; };
- 871E25AA944D15C774077F641D876D1F /* Localize_Swift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Localize_Swift.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 87EF30893B2C5830F8D91CC6097A5C93 /* NVActivityIndicatorAnimationBallTrianglePath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallTrianglePath.swift; path = NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallTrianglePath.swift; sourceTree = ""; };
- 8813445013B43D7240ADDB91C29F0C8F /* EFCircularSlider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EFCircularSlider.h; path = EFCircularSlider/EFCircularSlider.h; sourceTree = ""; };
- 8842396EEC13F1AA15EADEC863533FDD /* Localize-Swift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Localize-Swift.xcconfig"; sourceTree = ""; };
- 89190DA7A50AAE4C6B178B872132CCC2 /* TweakCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TweakCollection.swift; path = SwiftTweaks/TweakCollection.swift; sourceTree = ""; };
- 8BD5CB26790BFDA44BA441707F8958D1 /* SCLExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SCLExtensions.swift; path = SCLAlertView/SCLExtensions.swift; sourceTree = ""; };
- 8BD7A27382116A1BC71A4C5B2D59C2F3 /* FAKIonIcons.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FAKIonIcons.h; path = FontAwesomeKit/FAKIonIcons.h; sourceTree = ""; };
- 8C909FCCADC0AEDCF8376875F60FA2B6 /* NVActivityIndicatorAnimationBallScaleRippleMultiple.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallScaleRippleMultiple.swift; path = NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScaleRippleMultiple.swift; sourceTree = ""; };
- 8D5A788BE31AE67A2F682117054D11BA /* EFCircularSlider.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = EFCircularSlider.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 8D790C3DB600556A09AE3A59B618B969 /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; };
- 8D8544BE791FEE0A6F3803349C550AF9 /* INTULocationManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "INTULocationManager-prefix.pch"; sourceTree = ""; };
- 8E94A299422242F8A9EE35B7E90D847F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 8EEDECF77A1A763AF36DA8A58379BC01 /* Async.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Async.swift; path = Source/Async.swift; sourceTree = ""; };
- 9067483368E8900844AFD9014A739056 /* SCLAlertView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SCLAlertView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 90E06F971EA05F91B4956215AA8D2C6E /* FSCalendar-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FSCalendar-umbrella.h"; sourceTree = ""; };
- 91D8ED75DBB75FFF5A2554BE7A6B5FAE /* SwiftInAppPurchase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftInAppPurchase.swift; path = Pod/Classes/SwiftInAppPurchase.swift; sourceTree = ""; };
- 91E89C91C9DC0DA11924AF3FFF6B2AEB /* Region.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Region.swift; path = Sources/SwiftDate/Region.swift; sourceTree = ""; };
- 92999EBA6A50997D0E3B0512FF70F9BA /* Utilities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utilities.swift; path = "Source/Supporting Files/Utilities.swift"; sourceTree = ""; };
- 92CC62C5C9F65A5EE2CB374D204B665D /* HashingUtilities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HashingUtilities.swift; path = SwiftTweaks/HashingUtilities.swift; sourceTree = ""; };
- 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
- 94AD267C710FED7857E31BB2BC3790E8 /* SCLAlertView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SCLAlertView.swift; path = SCLAlertView/SCLAlertView.swift; sourceTree = ""; };
- 94FF1A5EBC2411CFF06577497A0AEBD4 /* Structs.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Structs.swift; path = PermissionScope/Structs.swift; sourceTree = ""; };
- 96565D8A48BDFEED9889517849C0DD1B /* SwiftDate.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftDate.xcconfig; sourceTree = ""; };
- 9723CB2FC157980453D10224CEE0430E /* FSCalendarAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSCalendarAnimator.h; path = FSCalendar/FSCalendarAnimator.h; sourceTree = ""; };
- 975C39377A67B1703B31E9F792F767D7 /* Pods_tpg_offline.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_tpg_offline.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 97F733E10E63932C16318469DF7C8D5C /* SwiftyJSON-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftyJSON-dummy.m"; sourceTree = ""; };
- 98600BEC33ADC75E6D2D9D95D2BC54B5 /* ResourceBundle-SwiftInAppPurchase-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-SwiftInAppPurchase-Info.plist"; sourceTree = ""; };
- 9944D6F8523318B37645CC37A0E06966 /* UIView+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIView+ChameleonPrivate.h"; sourceTree = ""; };
- 99583B8A48BFD9C00C28992142B2A014 /* INTULocationManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "INTULocationManager-umbrella.h"; sourceTree = ""; };
- 9A479638F18BC4159CD4A162894127C4 /* MRActivityIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRActivityIndicatorView.m; path = src/Components/MRActivityIndicatorView.m; sourceTree = ""; };
- 9D52D3344CACCB26F275FC333B0B4C93 /* EFCircularSlider-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "EFCircularSlider-umbrella.h"; sourceTree = "