├── .gitignore
├── .swift-version
├── .travis.yml
├── Cartfile
├── Cartfile.private
├── Cartfile.resolved
├── Example
├── ExamplesOfUsage.playground
│ ├── Contents.swift
│ ├── contents.xcplayground
│ └── timeline.xctimeline
├── PersistentStorageSerializable.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── xcschemes
│ │ ├── PersistentStorageSerializable-MacExample.xcscheme
│ │ ├── PersistentStorageSerializable-Tests.xcscheme
│ │ └── PersistentStorageSerializable-iOSExample.xcscheme
├── PersistentStorageSerializable.xcworkspace
│ └── contents.xcworkspacedata
├── PersistentStorageSerializable
│ ├── AppDelegate.swift
│ ├── Base.lproj
│ │ ├── LaunchScreen.xib
│ │ └── Main.storyboard
│ ├── Images.xcassets
│ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ ├── Info.plist
│ ├── Settings.swift
│ └── ViewController.swift
├── PersistentStorageSerializable_MacExample
│ ├── AppDelegate.swift
│ ├── AppSettings.swift
│ ├── Assets.xcassets
│ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ ├── Base.lproj
│ │ └── Main.storyboard
│ ├── Info.plist
│ └── ViewController.swift
├── Podfile
├── Podfile.lock
├── Pods
│ ├── Local Podspecs
│ │ └── PersistentStorageSerializable.podspec.json
│ ├── Manifest.lock
│ ├── Nimble
│ │ ├── LICENSE.md
│ │ ├── README.md
│ │ └── Sources
│ │ │ ├── Lib
│ │ │ └── CwlPreconditionTesting
│ │ │ │ ├── CwlCatchException
│ │ │ │ └── CwlCatchException
│ │ │ │ │ ├── CwlCatchException.h
│ │ │ │ │ ├── CwlCatchException.m
│ │ │ │ │ └── CwlCatchException.swift
│ │ │ │ └── CwlPreconditionTesting
│ │ │ │ ├── CwlBadInstructionException.swift
│ │ │ │ ├── CwlCatchBadInstruction.h
│ │ │ │ ├── CwlCatchBadInstruction.m
│ │ │ │ ├── CwlCatchBadInstruction.swift
│ │ │ │ ├── CwlDarwinDefinitions.swift
│ │ │ │ ├── mach_excServer.c
│ │ │ │ └── mach_excServer.h
│ │ │ ├── Nimble
│ │ │ ├── Adapters
│ │ │ │ ├── AdapterProtocols.swift
│ │ │ │ ├── AssertionDispatcher.swift
│ │ │ │ ├── AssertionRecorder.swift
│ │ │ │ ├── NMBExpectation.swift
│ │ │ │ ├── NMBObjCMatcher.swift
│ │ │ │ ├── NimbleEnvironment.swift
│ │ │ │ └── NimbleXCTestHandler.swift
│ │ │ ├── DSL+Wait.swift
│ │ │ ├── DSL.swift
│ │ │ ├── Expectation.swift
│ │ │ ├── Expression.swift
│ │ │ ├── FailureMessage.swift
│ │ │ ├── Matchers
│ │ │ │ ├── AllPass.swift
│ │ │ │ ├── AsyncMatcherWrapper.swift
│ │ │ │ ├── BeAKindOf.swift
│ │ │ │ ├── BeAnInstanceOf.swift
│ │ │ │ ├── BeCloseTo.swift
│ │ │ │ ├── BeEmpty.swift
│ │ │ │ ├── BeGreaterThan.swift
│ │ │ │ ├── BeGreaterThanOrEqualTo.swift
│ │ │ │ ├── BeIdenticalTo.swift
│ │ │ │ ├── BeLessThan.swift
│ │ │ │ ├── BeLessThanOrEqual.swift
│ │ │ │ ├── BeLogical.swift
│ │ │ │ ├── BeNil.swift
│ │ │ │ ├── BeVoid.swift
│ │ │ │ ├── BeginWith.swift
│ │ │ │ ├── Contain.swift
│ │ │ │ ├── EndWith.swift
│ │ │ │ ├── Equal.swift
│ │ │ │ ├── HaveCount.swift
│ │ │ │ ├── Match.swift
│ │ │ │ ├── MatchError.swift
│ │ │ │ ├── MatcherFunc.swift
│ │ │ │ ├── MatcherProtocols.swift
│ │ │ │ ├── PostNotification.swift
│ │ │ │ ├── RaisesException.swift
│ │ │ │ ├── SatisfyAnyOf.swift
│ │ │ │ ├── ThrowAssertion.swift
│ │ │ │ └── ThrowError.swift
│ │ │ ├── Nimble.h
│ │ │ └── Utils
│ │ │ │ ├── Async.swift
│ │ │ │ ├── Errors.swift
│ │ │ │ ├── Functional.swift
│ │ │ │ ├── SourceLocation.swift
│ │ │ │ └── Stringers.swift
│ │ │ └── NimbleObjectiveC
│ │ │ ├── CurrentTestCaseTracker.h
│ │ │ ├── DSL.h
│ │ │ ├── DSL.m
│ │ │ ├── NMBExceptionCapture.h
│ │ │ ├── NMBExceptionCapture.m
│ │ │ ├── NMBStringify.h
│ │ │ ├── NMBStringify.m
│ │ │ └── XCTestObservationCenter+Register.m
│ ├── Pods.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ └── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ ├── PersistentStorageSerializable-OSX.xcscheme
│ │ │ ├── PersistentStorageSerializable-iOS.xcscheme
│ │ │ ├── Reflection-OSX.xcscheme
│ │ │ └── Reflection-iOS.xcscheme
│ ├── Quick
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── Sources
│ │ │ ├── Quick
│ │ │ ├── Callsite.swift
│ │ │ ├── Configuration
│ │ │ │ └── Configuration.swift
│ │ │ ├── DSL
│ │ │ │ ├── DSL.swift
│ │ │ │ └── World+DSL.swift
│ │ │ ├── ErrorUtility.swift
│ │ │ ├── Example.swift
│ │ │ ├── ExampleGroup.swift
│ │ │ ├── ExampleMetadata.swift
│ │ │ ├── Filter.swift
│ │ │ ├── Hooks
│ │ │ │ ├── Closures.swift
│ │ │ │ ├── ExampleHooks.swift
│ │ │ │ ├── HooksPhase.swift
│ │ │ │ └── SuiteHooks.swift
│ │ │ ├── NSBundle+CurrentTestBundle.swift
│ │ │ ├── QuickSelectedTestSuiteBuilder.swift
│ │ │ ├── QuickTestSuite.swift
│ │ │ ├── URL+FileName.swift
│ │ │ └── World.swift
│ │ │ └── QuickObjectiveC
│ │ │ ├── Configuration
│ │ │ ├── QuickConfiguration.h
│ │ │ └── QuickConfiguration.m
│ │ │ ├── DSL
│ │ │ ├── QCKDSL.h
│ │ │ ├── QCKDSL.m
│ │ │ └── World+DSL.h
│ │ │ ├── NSString+QCKSelectorName.h
│ │ │ ├── NSString+QCKSelectorName.m
│ │ │ ├── Quick.h
│ │ │ ├── QuickSpec.h
│ │ │ ├── QuickSpec.m
│ │ │ ├── World.h
│ │ │ └── XCTestSuite+QuickTestSuiteBuilder.m
│ ├── Reflection
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── Sources
│ │ │ └── Reflection
│ │ │ ├── Advance.swift
│ │ │ ├── Any+Extensions.swift
│ │ │ ├── Array+Extensions.swift
│ │ │ ├── Construct.swift
│ │ │ ├── Get.swift
│ │ │ ├── Identity.swift
│ │ │ ├── MemoryProperties.swift
│ │ │ ├── Metadata+Class.swift
│ │ │ ├── Metadata+Kind.swift
│ │ │ ├── Metadata+Struct.swift
│ │ │ ├── Metadata+Tuple.swift
│ │ │ ├── Metadata.swift
│ │ │ ├── MetadataType.swift
│ │ │ ├── NominalType.swift
│ │ │ ├── NominalTypeDescriptor.swift
│ │ │ ├── PointerType.swift
│ │ │ ├── Properties.swift
│ │ │ ├── ReflectionError.swift
│ │ │ ├── RelativePointer.swift
│ │ │ ├── Set.swift
│ │ │ ├── Storage.swift
│ │ │ ├── UnsafePointer+Extensions.swift
│ │ │ └── ValueWitnessTable.swift
│ └── Target Support Files
│ │ ├── Nimble
│ │ ├── Info.plist
│ │ ├── Nimble-dummy.m
│ │ ├── Nimble-prefix.pch
│ │ ├── Nimble-umbrella.h
│ │ ├── Nimble.modulemap
│ │ └── Nimble.xcconfig
│ │ ├── PersistentStorageSerializable-OSX
│ │ ├── Info.plist
│ │ ├── PersistentStorageSerializable-OSX-dummy.m
│ │ ├── PersistentStorageSerializable-OSX-prefix.pch
│ │ ├── PersistentStorageSerializable-OSX-umbrella.h
│ │ ├── PersistentStorageSerializable-OSX.modulemap
│ │ └── PersistentStorageSerializable-OSX.xcconfig
│ │ ├── PersistentStorageSerializable-iOS
│ │ ├── Info.plist
│ │ ├── PersistentStorageSerializable-iOS-dummy.m
│ │ ├── PersistentStorageSerializable-iOS-prefix.pch
│ │ ├── PersistentStorageSerializable-iOS-umbrella.h
│ │ ├── PersistentStorageSerializable-iOS.modulemap
│ │ └── PersistentStorageSerializable-iOS.xcconfig
│ │ ├── Pods-PersistentStorageSerializable_MacExample
│ │ ├── Info.plist
│ │ ├── Pods-PersistentStorageSerializable_MacExample-acknowledgements.markdown
│ │ ├── Pods-PersistentStorageSerializable_MacExample-acknowledgements.plist
│ │ ├── Pods-PersistentStorageSerializable_MacExample-dummy.m
│ │ ├── Pods-PersistentStorageSerializable_MacExample-frameworks.sh
│ │ ├── Pods-PersistentStorageSerializable_MacExample-resources.sh
│ │ ├── Pods-PersistentStorageSerializable_MacExample-umbrella.h
│ │ ├── Pods-PersistentStorageSerializable_MacExample.debug.xcconfig
│ │ ├── Pods-PersistentStorageSerializable_MacExample.modulemap
│ │ └── Pods-PersistentStorageSerializable_MacExample.release.xcconfig
│ │ ├── Pods-PersistentStorageSerializable_Tests
│ │ ├── Info.plist
│ │ ├── Pods-PersistentStorageSerializable_Tests-acknowledgements.markdown
│ │ ├── Pods-PersistentStorageSerializable_Tests-acknowledgements.plist
│ │ ├── Pods-PersistentStorageSerializable_Tests-dummy.m
│ │ ├── Pods-PersistentStorageSerializable_Tests-frameworks.sh
│ │ ├── Pods-PersistentStorageSerializable_Tests-resources.sh
│ │ ├── Pods-PersistentStorageSerializable_Tests-umbrella.h
│ │ ├── Pods-PersistentStorageSerializable_Tests.debug.xcconfig
│ │ ├── Pods-PersistentStorageSerializable_Tests.modulemap
│ │ └── Pods-PersistentStorageSerializable_Tests.release.xcconfig
│ │ ├── Pods-PersistentStorageSerializable_iOSExample
│ │ ├── Info.plist
│ │ ├── Pods-PersistentStorageSerializable_iOSExample-acknowledgements.markdown
│ │ ├── Pods-PersistentStorageSerializable_iOSExample-acknowledgements.plist
│ │ ├── Pods-PersistentStorageSerializable_iOSExample-dummy.m
│ │ ├── Pods-PersistentStorageSerializable_iOSExample-frameworks.sh
│ │ ├── Pods-PersistentStorageSerializable_iOSExample-resources.sh
│ │ ├── Pods-PersistentStorageSerializable_iOSExample-umbrella.h
│ │ ├── Pods-PersistentStorageSerializable_iOSExample.debug.xcconfig
│ │ ├── Pods-PersistentStorageSerializable_iOSExample.modulemap
│ │ └── Pods-PersistentStorageSerializable_iOSExample.release.xcconfig
│ │ ├── Quick
│ │ ├── Info.plist
│ │ ├── Quick-dummy.m
│ │ ├── Quick-prefix.pch
│ │ ├── Quick-umbrella.h
│ │ ├── Quick.modulemap
│ │ └── Quick.xcconfig
│ │ ├── Reflection-OSX
│ │ ├── Info.plist
│ │ ├── Reflection-OSX-dummy.m
│ │ ├── Reflection-OSX-prefix.pch
│ │ ├── Reflection-OSX-umbrella.h
│ │ ├── Reflection-OSX.modulemap
│ │ └── Reflection-OSX.xcconfig
│ │ └── Reflection-iOS
│ │ ├── Info.plist
│ │ ├── Reflection-iOS-dummy.m
│ │ ├── Reflection-iOS-prefix.pch
│ │ ├── Reflection-iOS-umbrella.h
│ │ ├── Reflection-iOS.modulemap
│ │ └── Reflection-iOS.xcconfig
└── Tests
│ ├── Car.plist
│ ├── Info.plist
│ ├── PersistentStorageMock.swift
│ ├── PersistentStorageSerializableTests.swift
│ └── SupportedSerializableTypeTests.swift
├── LICENSE
├── PersistentStorageSerializable.podspec
├── PersistentStorageSerializable
├── Assets
│ └── .gitkeep
└── Classes
│ ├── .gitkeep
│ ├── PersistentStorage.swift
│ ├── PersistentStorageSerializable.swift
│ ├── PlistStorage.swift
│ ├── PropertiesIteration.swift
│ ├── SupportedSerializableType.swift
│ ├── SwiftTryCatch.h
│ ├── SwiftTryCatch.m
│ └── UserDefaultsStorage.swift
├── README.md
└── _Pods.xcodeproj
/.gitignore:
--------------------------------------------------------------------------------
1 | # OS X
2 | .DS_Store
3 |
4 | # Xcode
5 | build/
6 | *.pbxuser
7 | !default.pbxuser
8 | *.mode1v3
9 | !default.mode1v3
10 | *.mode2v3
11 | !default.mode2v3
12 | *.perspectivev3
13 | !default.perspectivev3
14 | xcuserdata/
15 | *.xccheckout
16 | profile
17 | *.moved-aside
18 | DerivedData
19 | *.hmap
20 | *.ipa
21 |
22 | # Bundler
23 | .bundle
24 |
25 | Carthage
26 | # We recommend against adding the Pods directory to your .gitignore. However
27 | # you should judge for yourself, the pros and cons are mentioned at:
28 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
29 | #
30 | # Note: if you ignore the Pods directory, make sure to uncomment
31 | # `pod install` in .travis.yml
32 | #
33 | !Pods/
34 | Pods/*
35 | !Pods/Pods.xcodeproj/
36 | Podfile.lock
37 |
--------------------------------------------------------------------------------
/.swift-version:
--------------------------------------------------------------------------------
1 | 3.1
2 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | # references:
2 | # * http://www.objc.io/issue-6/travis-ci.html
3 | # * https://github.com/supermarin/xcpretty#usage
4 |
5 | osx_image: xcode8.3
6 | language: objective-c
7 | # cache: cocoapods
8 | # podfile: Example/Podfile
9 | # before_install:
10 | # - gem install cocoapods # Since Travis is not always on latest version
11 | # - pod install --project-directory=Example
12 | before_install: cd Example && pod install && cd -
13 | install:
14 | - gem install xcpretty --no-rdoc --no-ri --no-document --quiet
15 | script:
16 | - set -o pipefail && xcodebuild test -workspace Example/PersistentStorageSerializable.xcworkspace -scheme PersistentStorageSerializable-Tests -sdk iphonesimulator10.0 -destination 'platform=iOS Simulator,name=iPhone SE,OS=10.0' ONLY_ACTIVE_ARCH=NO | xcpretty
17 | - pod lib lint
18 |
--------------------------------------------------------------------------------
/Cartfile:
--------------------------------------------------------------------------------
1 | github "Zewo/Reflection" ~> 0.14
2 |
--------------------------------------------------------------------------------
/Cartfile.private:
--------------------------------------------------------------------------------
1 | github "jspahrsummers/xcconfigs" "2055f18"
2 |
--------------------------------------------------------------------------------
/Cartfile.resolved:
--------------------------------------------------------------------------------
1 | github "Zewo/Reflection" "0.14.3"
2 | github "jspahrsummers/xcconfigs" "2055f18efbe18e77408f7f43947f7ad92b2d4ff0"
3 |
--------------------------------------------------------------------------------
/Example/ExamplesOfUsage.playground/contents.xcplayground:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/Example/ExamplesOfUsage.playground/timeline.xctimeline:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Example/PersistentStorageSerializable.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Example/PersistentStorageSerializable.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Example/PersistentStorageSerializable/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // PersistentStorageSerializable
4 | //
5 | // Created by IvanRublev on 04/05/2017.
6 | // Copyright (c) 2017 IvanRublev. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | @UIApplicationMain
12 | class AppDelegate: UIResponder, UIApplicationDelegate {
13 |
14 | var window: UIWindow?
15 |
16 |
17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
18 | // Override point for customization after application launch.
19 | return true
20 | }
21 |
22 | func applicationWillResignActive(_ application: UIApplication) {
23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
24 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
25 | }
26 |
27 | func applicationDidEnterBackground(_ application: UIApplication) {
28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
30 | }
31 |
32 | func applicationWillEnterForeground(_ application: UIApplication) {
33 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
34 | }
35 |
36 | func applicationDidBecomeActive(_ application: UIApplication) {
37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
38 | }
39 |
40 | func applicationWillTerminate(_ application: UIApplication) {
41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
42 | }
43 |
44 |
45 | }
46 |
47 |
--------------------------------------------------------------------------------
/Example/PersistentStorageSerializable/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "29x29",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "29x29",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "40x40",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "40x40",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "60x60",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "60x60",
31 | "scale" : "3x"
32 | }
33 | ],
34 | "info" : {
35 | "version" : 1,
36 | "author" : "xcode"
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/Example/PersistentStorageSerializable/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UIRequiredDeviceCapabilities
30 |
31 | armv7
32 |
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/Example/PersistentStorageSerializable/Settings.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Settings.swift
3 | // PersistentStorageSerializable
4 | //
5 | // Created by Ivan Rublev on 4/5/17.
6 | // Copyright © 2017 CocoaPods. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import PersistentStorageSerializable
11 |
12 | struct Settings: PersistentStorageSerializable {
13 | var flag = false
14 | var title = ""
15 | var number = 1
16 |
17 | // MARK: Adopt PersistentStorageSerializable
18 | var persistentStorage: PersistentStorage!
19 | var persistentStorageKeyPrefix: String!
20 | }
21 |
--------------------------------------------------------------------------------
/Example/PersistentStorageSerializable/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // PersistentStorageSerializable
4 | //
5 | // Created by IvanRublev on 04/05/2017.
6 | // Copyright (c) 2017 IvanRublev. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import PersistentStorageSerializable
11 |
12 | class ViewController: UIViewController {
13 | @IBOutlet var flagSwitch: UISwitch!
14 | @IBOutlet var textField: UITextField!
15 | @IBOutlet var numberStepper: UIStepper!
16 | @IBOutlet var numberLabel: UILabel!
17 | @IBOutlet var userDefaultsLabel: UILabel!
18 |
19 | var settings: Settings!
20 |
21 | override func viewDidLoad() {
22 | super.viewDidLoad()
23 | load(0)
24 | }
25 |
26 | func updateViews() {
27 | flagSwitch.isOn = settings.flag
28 | textField.text = settings.title
29 | numberStepper.value = Double(settings.number)
30 | numberLabel.text = String(Int(numberStepper.value))
31 | userDefaultsLabel.text = try! String(describing: settings.persistedDictionaryRepresentation())
32 | }
33 | }
34 |
35 | // MARK: - Input controls actions
36 | extension ViewController {
37 | @IBAction func updateSettings(_ sender: Any) {
38 | settings.flag = flagSwitch.isOn
39 | settings.title = textField.text ?? ""
40 | settings.number = Int(numberStepper.value)
41 | updateViews()
42 | }
43 |
44 | @IBAction func donePressed(_ sender: Any) {
45 | textField.resignFirstResponder()
46 | }
47 | }
48 |
49 | // MARK: - Buttons actions
50 | extension ViewController {
51 | @IBAction func load(_ sender: Any) {
52 | settings = try! Settings(from: UserDefaultsStorage.standard, keyPrefix: "Settings")
53 | updateViews()
54 | }
55 |
56 | @IBAction func save(_ sender: Any) {
57 | try! settings.persist()
58 | updateViews()
59 | }
60 |
61 | @IBAction func reset(_ sender: Any) {
62 | try! settings.removeFromPersistentStorage()
63 | updateViews()
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/Example/PersistentStorageSerializable_MacExample/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // PersistentStorageSerializable_MacExample
4 | //
5 | // Created by Ivan Rublev on 4/6/17.
6 | // Copyright © 2017 CocoaPods. All rights reserved.
7 | //
8 |
9 | import Cocoa
10 |
11 | @NSApplicationMain
12 | class AppDelegate: NSObject, NSApplicationDelegate {
13 |
14 | func applicationDidFinishLaunching(_ aNotification: Notification) {
15 | // Insert code here to initialize your application
16 | }
17 |
18 | func applicationWillTerminate(_ aNotification: Notification) {
19 | // Insert code here to tear down your application
20 | }
21 |
22 | }
23 |
24 |
--------------------------------------------------------------------------------
/Example/PersistentStorageSerializable_MacExample/AppSettings.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppSettings.swift
3 | // PersistentStorageSerializable
4 | //
5 | // Created by Ivan Rublev on 4/6/17.
6 | // Copyright © 2017 CocoaPods. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import PersistentStorageSerializable
11 |
12 | final class AppSettings: NSObject, PersistentStorageSerializable {
13 | dynamic var flag = false
14 | dynamic var title = "Default text"
15 | dynamic var number = 1
16 |
17 | // MARK: Adopt PersistentStorageSerializable
18 | var persistentStorage: PersistentStorage! = PlistStorage(at: FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last!.appendingPathComponent("storage.plist"))
19 | var persistentStorageKeyPrefix: String! = "AppSettings"
20 | }
21 |
--------------------------------------------------------------------------------
/Example/PersistentStorageSerializable_MacExample/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "mac",
5 | "size" : "16x16",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "mac",
10 | "size" : "16x16",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "mac",
15 | "size" : "32x32",
16 | "scale" : "1x"
17 | },
18 | {
19 | "idiom" : "mac",
20 | "size" : "32x32",
21 | "scale" : "2x"
22 | },
23 | {
24 | "idiom" : "mac",
25 | "size" : "128x128",
26 | "scale" : "1x"
27 | },
28 | {
29 | "idiom" : "mac",
30 | "size" : "128x128",
31 | "scale" : "2x"
32 | },
33 | {
34 | "idiom" : "mac",
35 | "size" : "256x256",
36 | "scale" : "1x"
37 | },
38 | {
39 | "idiom" : "mac",
40 | "size" : "256x256",
41 | "scale" : "2x"
42 | },
43 | {
44 | "idiom" : "mac",
45 | "size" : "512x512",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "mac",
50 | "size" : "512x512",
51 | "scale" : "2x"
52 | }
53 | ],
54 | "info" : {
55 | "version" : 1,
56 | "author" : "xcode"
57 | }
58 | }
--------------------------------------------------------------------------------
/Example/PersistentStorageSerializable_MacExample/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIconFile
10 |
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleVersion
22 | 1
23 | LSMinimumSystemVersion
24 | $(MACOSX_DEPLOYMENT_TARGET)
25 | NSHumanReadableCopyright
26 | Copyright © 2017 CocoaPods. All rights reserved.
27 | NSMainStoryboardFile
28 | Main
29 | NSPrincipalClass
30 | NSApplication
31 |
32 |
33 |
--------------------------------------------------------------------------------
/Example/PersistentStorageSerializable_MacExample/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // PersistentStorageSerializable_MacExample
4 | //
5 | // Created by Ivan Rublev on 4/6/17.
6 | // Copyright © 2017 CocoaPods. All rights reserved.
7 | //
8 |
9 | import Cocoa
10 |
11 | class ViewController: NSViewController {
12 | @IBOutlet var userDefaultsText: NSTextField!
13 |
14 | dynamic var settings = AppSettings()
15 |
16 | override func viewDidLoad() {
17 | super.viewDidLoad()
18 | load(0)
19 | }
20 |
21 | func updateUserDefaultsText() {
22 | userDefaultsText.stringValue = try! String(describing: settings.persistedDictionaryRepresentation())
23 | }
24 |
25 | @IBAction func load(_ sender: Any) {
26 | view.window?.makeFirstResponder(nil)
27 | var loadedSettings = AppSettings()
28 | try! loadedSettings.pullFromPersistentStorage()
29 | settings = loadedSettings
30 | updateUserDefaultsText()
31 | }
32 |
33 | @IBAction func save(_ sender: Any) {
34 | view.window?.makeFirstResponder(nil)
35 | try! settings.pushToPersistentStorage()
36 | updateUserDefaultsText()
37 | }
38 |
39 | @IBAction func reset(_ sender: Any) {
40 | view.window?.makeFirstResponder(nil)
41 | try! settings.removeFromPersistentStorage()
42 | updateUserDefaultsText()
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/Example/Podfile:
--------------------------------------------------------------------------------
1 | use_frameworks!
2 |
3 | target 'PersistentStorageSerializable_iOSExample' do
4 | platform :ios, '9.0'
5 | pod 'PersistentStorageSerializable', :path => '../'
6 | end
7 |
8 | target 'PersistentStorageSerializable_Tests' do
9 | platform :ios, '9.0'
10 | pod 'PersistentStorageSerializable', :path => '../'
11 | pod 'Quick', '~> 1.0.0'
12 | pod 'Nimble', '~> 5.1.1'
13 | end
14 |
15 | target 'PersistentStorageSerializable_MacExample' do
16 | platform :osx, '10.11'
17 | pod 'PersistentStorageSerializable', :path => '../'
18 | end
19 |
--------------------------------------------------------------------------------
/Example/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - Nimble (5.1.1)
3 | - PersistentStorageSerializable (1.1.0):
4 | - Reflection (~> 0.14)
5 | - Quick (1.0.0)
6 | - Reflection (0.14.3)
7 |
8 | DEPENDENCIES:
9 | - Nimble (~> 5.1.1)
10 | - PersistentStorageSerializable (from `../`)
11 | - Quick (~> 1.0.0)
12 |
13 | EXTERNAL SOURCES:
14 | PersistentStorageSerializable:
15 | :path: "../"
16 |
17 | SPEC CHECKSUMS:
18 | Nimble: 415e3aa3267e7bc2c96b05fa814ddea7bb686a29
19 | PersistentStorageSerializable: d941980a136f85a546b3378c6228526ad4fd7d51
20 | Quick: 8024e4a47e6cc03a9d5245ef0948264fc6d27cff
21 | Reflection: 93327e50981227ac33c18274fcbaed33b1127811
22 |
23 | PODFILE CHECKSUM: 1725b222e0b97edb7fa20facee56f57f70eaa39d
24 |
25 | COCOAPODS: 1.1.1
26 |
--------------------------------------------------------------------------------
/Example/Pods/Local Podspecs/PersistentStorageSerializable.podspec.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "PersistentStorageSerializable",
3 | "version": "1.1.0",
4 | "summary": "Bunch of protocols to make a class or structure to be serializable to persistent system storage like UserDefaults or Keychain. Useful to store app configuration or settings.",
5 | "description": "Number of protocols from this pod helps to serialize swift class or structure to persistent storage like User Defaults or Keychain. The class/structure must contain properties of simple data type only. These types are: Data, String, Int, Float, Double, Bool, URL, Date, Array, or Dictionary.\nAdopt the PersistentStorageSerializable protocol from your struct. Then call pullFromUserDefaults() or pushToUserDefaults() on instance of your struct.",
6 | "homepage": "https://github.com/IvanRublev/PersistentStorageSerializable",
7 | "license": {
8 | "type": "MIT",
9 | "file": "LICENSE"
10 | },
11 | "authors": {
12 | "IvanRublev": "ivan@ivanrublev.me"
13 | },
14 | "source": {
15 | "git": "https://github.com/IvanRublev/PersistentStorageSerializable.git",
16 | "tag": "1.1.0"
17 | },
18 | "platforms": {
19 | "ios": "9.0",
20 | "osx": "10.11"
21 | },
22 | "source_files": "PersistentStorageSerializable/Classes/**/*",
23 | "frameworks": "Foundation",
24 | "dependencies": {
25 | "Reflection": [
26 | "~> 0.14"
27 | ]
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Example/Pods/Manifest.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - Nimble (5.1.1)
3 | - PersistentStorageSerializable (1.1.0):
4 | - Reflection (~> 0.14)
5 | - Quick (1.0.0)
6 | - Reflection (0.14.3)
7 |
8 | DEPENDENCIES:
9 | - Nimble (~> 5.1.1)
10 | - PersistentStorageSerializable (from `../`)
11 | - Quick (~> 1.0.0)
12 |
13 | EXTERNAL SOURCES:
14 | PersistentStorageSerializable:
15 | :path: "../"
16 |
17 | SPEC CHECKSUMS:
18 | Nimble: 415e3aa3267e7bc2c96b05fa814ddea7bb686a29
19 | PersistentStorageSerializable: d941980a136f85a546b3378c6228526ad4fd7d51
20 | Quick: 8024e4a47e6cc03a9d5245ef0948264fc6d27cff
21 | Reflection: 93327e50981227ac33c18274fcbaed33b1127811
22 |
23 | PODFILE CHECKSUM: 1725b222e0b97edb7fa20facee56f57f70eaa39d
24 |
25 | COCOAPODS: 1.1.1
26 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Lib/CwlPreconditionTesting/CwlCatchException/CwlCatchException/CwlCatchException.h:
--------------------------------------------------------------------------------
1 | //
2 | // CwlCatchException.h
3 | // CwlCatchException
4 | //
5 | // Created by Matt Gallagher on 2016/01/10.
6 | // Copyright © 2016 Matt Gallagher ( http://cocoawithlove.com ). All rights reserved.
7 | //
8 | // Permission to use, copy, modify, and/or distribute this software for any
9 | // purpose with or without fee is hereby granted, provided that the above
10 | // copyright notice and this permission notice appear in all copies.
11 | //
12 | // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13 | // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14 | // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
15 | // SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16 | // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 | // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
18 | // IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 | //
20 |
21 | #import
22 |
23 | //! Project version number for CwlCatchException.
24 | FOUNDATION_EXPORT double CwlCatchExceptionVersionNumber;
25 |
26 | //! Project version string for CwlCatchException.
27 | FOUNDATION_EXPORT const unsigned char CwlCatchExceptionVersionString[];
28 |
29 | __attribute__((visibility("hidden")))
30 | NSException* __nullable catchExceptionOfKind(Class __nonnull type, __attribute__((noescape)) void (^ __nonnull inBlock)());
31 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Lib/CwlPreconditionTesting/CwlCatchException/CwlCatchException/CwlCatchException.m:
--------------------------------------------------------------------------------
1 | //
2 | // CwlCatchException.m
3 | // CwlAssertionTesting
4 | //
5 | // Created by Matt Gallagher on 2016/01/10.
6 | // Copyright © 2016 Matt Gallagher ( http://cocoawithlove.com ). All rights reserved.
7 | //
8 | // Permission to use, copy, modify, and/or distribute this software for any
9 | // purpose with or without fee is hereby granted, provided that the above
10 | // copyright notice and this permission notice appear in all copies.
11 | //
12 | // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13 | // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14 | // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
15 | // SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16 | // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 | // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
18 | // IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 | //
20 |
21 | #import "CwlCatchException.h"
22 |
23 | __attribute__((visibility("hidden")))
24 | NSException* catchExceptionOfKind(Class __nonnull type, __attribute__((noescape)) void (^ __nonnull inBlock)()) {
25 | @try {
26 | inBlock();
27 | } @catch (NSException *exception) {
28 | if ([exception isKindOfClass:type]) {
29 | return exception;
30 | } else {
31 | @throw;
32 | }
33 | }
34 | return nil;
35 | }
36 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Lib/CwlPreconditionTesting/CwlCatchException/CwlCatchException/CwlCatchException.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CwlCatchException.swift
3 | // CwlAssertionTesting
4 | //
5 | // Created by Matt Gallagher on 2016/01/10.
6 | // Copyright © 2016 Matt Gallagher ( http://cocoawithlove.com ). All rights reserved.
7 | //
8 | // Permission to use, copy, modify, and/or distribute this software for any
9 | // purpose with or without fee is hereby granted, provided that the above
10 | // copyright notice and this permission notice appear in all copies.
11 | //
12 | // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13 | // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14 | // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
15 | // SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16 | // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 | // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
18 | // IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 | //
20 |
21 | import Foundation
22 |
23 | // We can't simply cast to Self? in the catchInBlock method so we need this generic function wrapper to do the conversion for us. Mildly annoying.
24 | private func catchReturnTypeConverter(_ type: T.Type, block: () -> Void) -> T? {
25 | return catchExceptionOfKind(type, block) as? T
26 | }
27 |
28 | extension NSException {
29 | public static func catchException(in block: () -> Void) -> Self? {
30 | return catchReturnTypeConverter(self, block: block)
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Lib/CwlPreconditionTesting/CwlPreconditionTesting/CwlCatchBadInstruction.h:
--------------------------------------------------------------------------------
1 | //
2 | // CwlCatchBadInstruction.h
3 | // CwlPreconditionTesting
4 | //
5 | // Created by Matt Gallagher on 2016/01/10.
6 | // Copyright © 2016 Matt Gallagher ( http://cocoawithlove.com ). All rights reserved.
7 | //
8 | // Permission to use, copy, modify, and/or distribute this software for any
9 | // purpose with or without fee is hereby granted, provided that the above
10 | // copyright notice and this permission notice appear in all copies.
11 | //
12 | // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13 | // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14 | // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
15 | // SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16 | // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 | // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
18 | // IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 | //
20 |
21 | #if defined(__x86_64__)
22 |
23 | #import
24 | #import
25 |
26 | NS_ASSUME_NONNULL_BEGIN
27 |
28 | // The request_mach_exception_raise_t struct is passed to mach_msg which assumes its exact layout. To avoid problems with different layouts, we keep the definition in C rather than Swift.
29 | typedef struct
30 | {
31 | mach_msg_header_t Head;
32 | /* start of the kernel processed data */
33 | mach_msg_body_t msgh_body;
34 | mach_msg_port_descriptor_t thread;
35 | mach_msg_port_descriptor_t task;
36 | /* end of the kernel processed data */
37 | NDR_record_t NDR;
38 | exception_type_t exception;
39 | mach_msg_type_number_t codeCnt;
40 | int64_t code[2];
41 | int flavor;
42 | mach_msg_type_number_t old_stateCnt;
43 | natural_t old_state[224];
44 | } request_mach_exception_raise_t;
45 |
46 | // The reply_mach_exception_raise_state_t struct is passed to mach_msg which assumes its exact layout. To avoid problems with different layouts, we keep the definition in C rather than Swift.
47 | typedef struct
48 | {
49 | mach_msg_header_t Head;
50 | NDR_record_t NDR;
51 | kern_return_t RetCode;
52 | int flavor;
53 | mach_msg_type_number_t new_stateCnt;
54 | natural_t new_state[224];
55 | } reply_mach_exception_raise_state_t;
56 |
57 | extern boolean_t mach_exc_server(mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP);
58 |
59 | NS_ASSUME_NONNULL_END
60 |
61 | #endif
62 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Lib/CwlPreconditionTesting/CwlPreconditionTesting/CwlCatchBadInstruction.m:
--------------------------------------------------------------------------------
1 | //
2 | // CwlCatchBadInstruction.m
3 | // CwlPreconditionTesting
4 | //
5 | // Created by Matt Gallagher on 2016/01/10.
6 | // Copyright © 2016 Matt Gallagher ( http://cocoawithlove.com ). All rights reserved.
7 | //
8 | // Permission to use, copy, modify, and/or distribute this software for any
9 | // purpose with or without fee is hereby granted, provided that the above
10 | // copyright notice and this permission notice appear in all copies.
11 | //
12 | // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13 | // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14 | // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
15 | // SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16 | // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 | // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
18 | // IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 | //
20 |
21 | #if defined(__x86_64__)
22 |
23 | #import "CwlCatchBadInstruction.h"
24 |
25 | // Assuming the "PRODUCT_NAME" macro is defined, this will create the name of the Swift generated header file
26 | #define STRINGIZE_NO_EXPANSION(A) #A
27 | #define STRINGIZE_WITH_EXPANSION(A) STRINGIZE_NO_EXPANSION(A)
28 | #define SWIFT_INCLUDE STRINGIZE_WITH_EXPANSION(PRODUCT_NAME-Swift.h)
29 |
30 | // Include the Swift generated header file
31 | #import SWIFT_INCLUDE
32 |
33 | /// A basic function that receives callbacks from mach_exc_server and relays them to the Swift implemented BadInstructionException.catch_mach_exception_raise_state.
34 | kern_return_t catch_mach_exception_raise_state(mach_port_t exception_port, exception_type_t exception, const mach_exception_data_t code, mach_msg_type_number_t codeCnt, int *flavor, const thread_state_t old_state, mach_msg_type_number_t old_stateCnt, thread_state_t new_state, mach_msg_type_number_t *new_stateCnt) {
35 | return [BadInstructionException catch_mach_exception_raise_state:exception_port exception:exception code:code codeCnt:codeCnt flavor:flavor old_state:old_state old_stateCnt:old_stateCnt new_state:new_state new_stateCnt:new_stateCnt];
36 | }
37 |
38 | // The mach port should be configured so that this function is never used.
39 | kern_return_t catch_mach_exception_raise(mach_port_t exception_port, mach_port_t thread, mach_port_t task, exception_type_t exception, mach_exception_data_t code, mach_msg_type_number_t codeCnt) {
40 | assert(false);
41 | return KERN_FAILURE;
42 | }
43 |
44 | // The mach port should be configured so that this function is never used.
45 | kern_return_t catch_mach_exception_raise_state_identity(mach_port_t exception_port, mach_port_t thread, mach_port_t task, exception_type_t exception, mach_exception_data_t code, mach_msg_type_number_t codeCnt, int *flavor, thread_state_t old_state, mach_msg_type_number_t old_stateCnt, thread_state_t new_state, mach_msg_type_number_t *new_stateCnt) {
46 | assert(false);
47 | return KERN_FAILURE;
48 | }
49 |
50 | #endif
51 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Lib/CwlPreconditionTesting/CwlPreconditionTesting/CwlDarwinDefinitions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CwlDarwinDefinitions.swift
3 | // CwlPreconditionTesting
4 | //
5 | // Created by Matt Gallagher on 2016/01/10.
6 | // Copyright © 2016 Matt Gallagher ( http://cocoawithlove.com ). All rights reserved.
7 | //
8 | // Permission to use, copy, modify, and/or distribute this software for any
9 | // purpose with or without fee is hereby granted, provided that the above
10 | // copyright notice and this permission notice appear in all copies.
11 | //
12 | // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13 | // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14 | // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
15 | // SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16 | // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 | // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
18 | // IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 | //
20 |
21 | import Darwin
22 |
23 | #if arch(x86_64)
24 |
25 | // From /usr/include/mach/port.h
26 | // #define MACH_PORT_RIGHT_RECEIVE ((mach_port_right_t) 1)
27 | let MACH_PORT_RIGHT_RECEIVE: mach_port_right_t = 1
28 |
29 | // From /usr/include/mach/message.h
30 | // #define MACH_MSG_TYPE_MAKE_SEND 20 /* Must hold receive right */
31 | // #define MACH_MSGH_BITS_REMOTE(bits) \
32 | // ((bits) & MACH_MSGH_BITS_REMOTE_MASK)
33 | // #define MACH_MSGH_BITS(remote, local) /* legacy */ \
34 | // ((remote) | ((local) << 8))
35 | let MACH_MSG_TYPE_MAKE_SEND: UInt32 = 20
36 | func MACH_MSGH_BITS_REMOTE(_ bits: UInt32) -> UInt32 { return bits & UInt32(MACH_MSGH_BITS_REMOTE_MASK) }
37 | func MACH_MSGH_BITS(_ remote: UInt32, _ local: UInt32) -> UInt32 { return ((remote) | ((local) << 8)) }
38 |
39 | // From /usr/include/mach/exception_types.h
40 | // #define EXC_BAD_INSTRUCTION 2 /* Instruction failed */
41 | // #define EXC_MASK_BAD_INSTRUCTION (1 << EXC_BAD_INSTRUCTION)
42 | // #define EXCEPTION_DEFAULT 1
43 | let EXC_BAD_INSTRUCTION: UInt32 = 2
44 | let EXC_MASK_BAD_INSTRUCTION: UInt32 = 1 << EXC_BAD_INSTRUCTION
45 | let EXCEPTION_DEFAULT: Int32 = 1
46 |
47 | // From /usr/include/mach/i386/thread_status.h
48 | // #define THREAD_STATE_NONE 13
49 | // #define x86_THREAD_STATE64_COUNT ((mach_msg_type_number_t) \
50 | // ( sizeof (x86_thread_state64_t) / sizeof (int) ))
51 | let THREAD_STATE_NONE: Int32 = 13
52 | let x86_THREAD_STATE64_COUNT = UInt32(MemoryLayout.size / MemoryLayout.size)
53 |
54 | let EXC_TYPES_COUNT = 14
55 | struct execTypesCountTuple {
56 | // From /usr/include/mach/i386/exception.h
57 | // #define EXC_TYPES_COUNT 14 /* incl. illegal exception 0 */
58 | var value: (T,T,T,T,T,T,T,T,T,T,T,T,T,T) = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
59 | init() {
60 | }
61 | }
62 |
63 | #endif
64 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Adapters/AdapterProtocols.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | /// Protocol for the assertion handler that Nimble uses for all expectations.
4 | public protocol AssertionHandler {
5 | func assert(_ assertion: Bool, message: FailureMessage, location: SourceLocation)
6 | }
7 |
8 | /// Global backing interface for assertions that Nimble creates.
9 | /// Defaults to a private test handler that passes through to XCTest.
10 | ///
11 | /// If XCTest is not available, you must assign your own assertion handler
12 | /// before using any matchers, otherwise Nimble will abort the program.
13 | ///
14 | /// @see AssertionHandler
15 | public var NimbleAssertionHandler: AssertionHandler = { () -> AssertionHandler in
16 | return isXCTestAvailable() ? NimbleXCTestHandler() : NimbleXCTestUnavailableHandler()
17 | }()
18 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Adapters/AssertionDispatcher.swift:
--------------------------------------------------------------------------------
1 |
2 | /// AssertionDispatcher allows multiple AssertionHandlers to receive
3 | /// assertion messages.
4 | ///
5 | /// @warning Does not fully dispatch if one of the handlers raises an exception.
6 | /// This is possible with XCTest-based assertion handlers.
7 | ///
8 | public class AssertionDispatcher: AssertionHandler {
9 | let handlers: [AssertionHandler]
10 |
11 | public init(handlers: [AssertionHandler]) {
12 | self.handlers = handlers
13 | }
14 |
15 | public func assert(_ assertion: Bool, message: FailureMessage, location: SourceLocation) {
16 | for handler in handlers {
17 | handler.assert(assertion, message: message, location: location)
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Adapters/NimbleEnvironment.swift:
--------------------------------------------------------------------------------
1 | import Dispatch
2 | import Foundation
3 |
4 | /// "Global" state of Nimble is stored here. Only DSL functions should access / be aware of this
5 | /// class' existance
6 | internal class NimbleEnvironment {
7 | static var activeInstance: NimbleEnvironment {
8 | get {
9 | let env = Thread.current.threadDictionary["NimbleEnvironment"]
10 | if let env = env as? NimbleEnvironment {
11 | return env
12 | } else {
13 | let newEnv = NimbleEnvironment()
14 | self.activeInstance = newEnv
15 | return newEnv
16 | }
17 | }
18 | set {
19 | Thread.current.threadDictionary["NimbleEnvironment"] = newValue
20 | }
21 | }
22 |
23 | // TODO: eventually migrate the global to this environment value
24 | var assertionHandler: AssertionHandler {
25 | get { return NimbleAssertionHandler }
26 | set { NimbleAssertionHandler = newValue }
27 | }
28 |
29 | var suppressTVOSAssertionWarning: Bool = false
30 | var awaiter: Awaiter
31 |
32 | init() {
33 | let timeoutQueue: DispatchQueue
34 | if #available(OSX 10.10, *) {
35 | timeoutQueue = DispatchQueue.global(qos: .userInitiated)
36 | } else {
37 | timeoutQueue = DispatchQueue.global(priority: .high)
38 | }
39 |
40 | awaiter = Awaiter(
41 | waitLock: AssertionWaitLock(),
42 | asyncQueue: .main,
43 | timeoutQueue: timeoutQueue)
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 | import XCTest
3 |
4 | /// Default handler for Nimble. This assertion handler passes failures along to
5 | /// XCTest.
6 | public class NimbleXCTestHandler : AssertionHandler {
7 | public func assert(_ assertion: Bool, message: FailureMessage, location: SourceLocation) {
8 | if !assertion {
9 | recordFailure("\(message.stringValue)\n", location: location)
10 | }
11 | }
12 | }
13 |
14 | /// Alternative handler for Nimble. This assertion handler passes failures along
15 | /// to XCTest by attempting to reduce the failure message size.
16 | public class NimbleShortXCTestHandler: AssertionHandler {
17 | public func assert(_ assertion: Bool, message: FailureMessage, location: SourceLocation) {
18 | if !assertion {
19 | let msg: String
20 | if let actual = message.actualValue {
21 | msg = "got: \(actual) \(message.postfixActual)"
22 | } else {
23 | msg = "expected \(message.to) \(message.postfixMessage)"
24 | }
25 | recordFailure("\(msg)\n", location: location)
26 | }
27 | }
28 | }
29 |
30 | /// Fallback handler in case XCTest is unavailable. This assertion handler will abort
31 | /// the program if it is invoked.
32 | class NimbleXCTestUnavailableHandler : AssertionHandler {
33 | func assert(_ assertion: Bool, message: FailureMessage, location: SourceLocation) {
34 | fatalError("XCTest is not available and no custom assertion handler was configured. Aborting.")
35 | }
36 | }
37 |
38 | #if _runtime(_ObjC)
39 | /// Helper class providing access to the currently executing XCTestCase instance, if any
40 | @objc final internal class CurrentTestCaseTracker: NSObject, XCTestObservation {
41 | @objc static let sharedInstance = CurrentTestCaseTracker()
42 |
43 | private(set) var currentTestCase: XCTestCase?
44 |
45 | @objc func testCaseWillStart(_ testCase: XCTestCase) {
46 | currentTestCase = testCase
47 | }
48 |
49 | @objc func testCaseDidFinish(_ testCase: XCTestCase) {
50 | currentTestCase = nil
51 | }
52 | }
53 | #endif
54 |
55 |
56 | func isXCTestAvailable() -> Bool {
57 | #if _runtime(_ObjC)
58 | // XCTest is weakly linked and so may not be present
59 | return NSClassFromString("XCTestCase") != nil
60 | #else
61 | return true
62 | #endif
63 | }
64 |
65 | private func recordFailure(_ message: String, location: SourceLocation) {
66 | #if _runtime(_ObjC)
67 | if let testCase = CurrentTestCaseTracker.sharedInstance.currentTestCase {
68 | testCase.recordFailure(withDescription: message, inFile: location.file, atLine: location.line, expected: true)
69 | } else {
70 | let msg = "Attempted to report a test failure to XCTest while no test case was running. " +
71 | "The failure was:\n\"\(message)\"\nIt occurred at: \(location.file):\(location.line)"
72 | NSException(name: .internalInconsistencyException, reason: msg, userInfo: nil).raise()
73 | }
74 | #else
75 | XCTFail("\(message)\n", file: location.file, line: location.line)
76 | #endif
77 | }
78 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/DSL.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | /// Make an expectation on a given actual value. The value given is lazily evaluated.
4 | public func expect(_ expression: @autoclosure @escaping () throws -> T?, file: FileString = #file, line: UInt = #line) -> Expectation {
5 | return Expectation(
6 | expression: Expression(
7 | expression: expression,
8 | location: SourceLocation(file: file, line: line),
9 | isClosure: true))
10 | }
11 |
12 | /// Make an expectation on a given actual value. The closure is lazily invoked.
13 | public func expect(_ file: FileString = #file, line: UInt = #line, expression: @escaping () throws -> T?) -> Expectation {
14 | return Expectation(
15 | expression: Expression(
16 | expression: expression,
17 | location: SourceLocation(file: file, line: line),
18 | isClosure: true))
19 | }
20 |
21 | /// Always fails the test with a message and a specified location.
22 | public func fail(_ message: String, location: SourceLocation) {
23 | let handler = NimbleEnvironment.activeInstance.assertionHandler
24 | handler.assert(false, message: FailureMessage(stringValue: message), location: location)
25 | }
26 |
27 | /// Always fails the test with a message.
28 | public func fail(_ message: String, file: FileString = #file, line: UInt = #line) {
29 | fail(message, location: SourceLocation(file: file, line: line))
30 | }
31 |
32 | /// Always fails the test.
33 | public func fail(_ file: FileString = #file, line: UInt = #line) {
34 | fail("fail() always fails", file: file, line: line)
35 | }
36 |
37 | /// Like Swift's precondition(), but raises NSExceptions instead of sigaborts
38 | internal func nimblePrecondition(
39 | _ expr: @autoclosure() -> Bool,
40 | _ name: @autoclosure() -> String,
41 | _ message: @autoclosure() -> String,
42 | file: StaticString = #file,
43 | line: UInt = #line) {
44 | let result = expr()
45 | if !result {
46 | #if _runtime(_ObjC)
47 | let e = NSException(
48 | name: NSExceptionName(name()),
49 | reason: message(),
50 | userInfo: nil)
51 | e.raise()
52 | #else
53 | preconditionFailure("\(name()) - \(message())", file: file, line: line)
54 | #endif
55 | }
56 | }
57 |
58 | internal func internalError(_ msg: String, file: FileString = #file, line: UInt = #line) -> Never {
59 | fatalError(
60 | "Nimble Bug Found: \(msg) at \(file):\(line).\n" +
61 | "Please file a bug to Nimble: https://github.com/Quick/Nimble/issues with the " +
62 | "code snippet that caused this error."
63 | )
64 | }
65 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Expectation.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | internal func expressionMatches(_ expression: Expression, matcher: U, to: String, description: String?) -> (Bool, FailureMessage)
4 | where U: Matcher, U.ValueType == T
5 | {
6 | let msg = FailureMessage()
7 | msg.userDescription = description
8 | msg.to = to
9 | do {
10 | let pass = try matcher.matches(expression, failureMessage: msg)
11 | if msg.actualValue == "" {
12 | msg.actualValue = "<\(stringify(try expression.evaluate()))>"
13 | }
14 | return (pass, msg)
15 | } catch let error {
16 | msg.actualValue = "an unexpected error thrown: <\(error)>"
17 | return (false, msg)
18 | }
19 | }
20 |
21 | internal func expressionDoesNotMatch(_ expression: Expression, matcher: U, toNot: String, description: String?) -> (Bool, FailureMessage)
22 | where U: Matcher, U.ValueType == T
23 | {
24 | let msg = FailureMessage()
25 | msg.userDescription = description
26 | msg.to = toNot
27 | do {
28 | let pass = try matcher.doesNotMatch(expression, failureMessage: msg)
29 | if msg.actualValue == "" {
30 | msg.actualValue = "<\(stringify(try expression.evaluate()))>"
31 | }
32 | return (pass, msg)
33 | } catch let error {
34 | msg.actualValue = "an unexpected error thrown: <\(error)>"
35 | return (false, msg)
36 | }
37 | }
38 |
39 | public struct Expectation {
40 |
41 | public let expression: Expression
42 |
43 | public func verify(_ pass: Bool, _ message: FailureMessage) {
44 | let handler = NimbleEnvironment.activeInstance.assertionHandler
45 | handler.assert(pass, message: message, location: expression.location)
46 | }
47 |
48 | /// Tests the actual value using a matcher to match.
49 | public func to(_ matcher: U, description: String? = nil)
50 | where U: Matcher, U.ValueType == T
51 | {
52 | let (pass, msg) = expressionMatches(expression, matcher: matcher, to: "to", description: description)
53 | verify(pass, msg)
54 | }
55 |
56 | /// Tests the actual value using a matcher to not match.
57 | public func toNot(_ matcher: U, description: String? = nil)
58 | where U: Matcher, U.ValueType == T
59 | {
60 | let (pass, msg) = expressionDoesNotMatch(expression, matcher: matcher, toNot: "to not", description: description)
61 | verify(pass, msg)
62 | }
63 |
64 | /// Tests the actual value using a matcher to not match.
65 | ///
66 | /// Alias to toNot().
67 | public func notTo(_ matcher: U, description: String? = nil)
68 | where U: Matcher, U.ValueType == T
69 | {
70 | toNot(matcher, description: description)
71 | }
72 |
73 | // see:
74 | // - AsyncMatcherWrapper for extension
75 | // - NMBExpectation for Objective-C interface
76 | }
77 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/FailureMessage.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | /// Encapsulates the failure message that matchers can report to the end user.
4 | ///
5 | /// This is shared state between Nimble and matchers that mutate this value.
6 | public class FailureMessage: NSObject {
7 | public var expected: String = "expected"
8 | public var actualValue: String? = "" // empty string -> use default; nil -> exclude
9 | public var to: String = "to"
10 | public var postfixMessage: String = "match"
11 | public var postfixActual: String = ""
12 | /// An optional message that will be appended as a new line and provides additional details
13 | /// about the failure. This message will only be visible in the issue navigator / in logs but
14 | /// not directly in the source editor since only a single line is presented there.
15 | public var extendedMessage: String? = nil
16 | public var userDescription: String? = nil
17 |
18 | public var stringValue: String {
19 | get {
20 | if let value = _stringValueOverride {
21 | return value
22 | } else {
23 | return computeStringValue()
24 | }
25 | }
26 | set {
27 | _stringValueOverride = newValue
28 | }
29 | }
30 |
31 | internal var _stringValueOverride: String?
32 |
33 | public override init() {
34 | }
35 |
36 | public init(stringValue: String) {
37 | _stringValueOverride = stringValue
38 | }
39 |
40 | internal func stripNewlines(_ str: String) -> String {
41 | let whitespaces = CharacterSet.whitespacesAndNewlines
42 | return str
43 | .components(separatedBy: "\n")
44 | .map { line in line.trimmingCharacters(in: whitespaces) }
45 | .joined(separator: "")
46 | }
47 |
48 | internal func computeStringValue() -> String {
49 | var value = "\(expected) \(to) \(postfixMessage)"
50 | if let actualValue = actualValue {
51 | value = "\(expected) \(to) \(postfixMessage), got \(actualValue)\(postfixActual)"
52 | }
53 | value = stripNewlines(value)
54 |
55 | if let extendedMessage = extendedMessage {
56 | value += "\n\(stripNewlines(extendedMessage))"
57 | }
58 |
59 | if let userDescription = userDescription {
60 | return "\(userDescription)\n\(value)"
61 | }
62 |
63 | return value
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Matchers/BeAKindOf.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | #if _runtime(_ObjC)
4 |
5 | // A Nimble matcher that catches attempts to use beAKindOf with non Objective-C types
6 | public func beAKindOf(_ expectedClass: Any) -> NonNilMatcherFunc {
7 | return NonNilMatcherFunc {actualExpression, failureMessage in
8 | failureMessage.stringValue = "beAKindOf only works on Objective-C types since"
9 | + " the Swift compiler will automatically type check Swift-only types."
10 | + " This expectation is redundant."
11 | return false
12 | }
13 | }
14 |
15 | /// A Nimble matcher that succeeds when the actual value is an instance of the given class.
16 | /// @see beAnInstanceOf if you want to match against the exact class
17 | public func beAKindOf(_ expectedClass: AnyClass) -> NonNilMatcherFunc {
18 | return NonNilMatcherFunc { actualExpression, failureMessage in
19 | let instance = try actualExpression.evaluate()
20 | if let validInstance = instance {
21 | failureMessage.actualValue = "<\(String(describing: type(of: validInstance))) instance>"
22 | } else {
23 | failureMessage.actualValue = ""
24 | }
25 | failureMessage.postfixMessage = "be a kind of \(String(describing: expectedClass))"
26 | return instance != nil && instance!.isKind(of: expectedClass)
27 | }
28 | }
29 |
30 | extension NMBObjCMatcher {
31 | public class func beAKindOfMatcher(_ expected: AnyClass) -> NMBMatcher {
32 | return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in
33 | return try! beAKindOf(expected).matches(actualExpression, failureMessage: failureMessage)
34 | }
35 | }
36 | }
37 |
38 | #endif
39 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Matchers/BeAnInstanceOf.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | // A Nimble matcher that catches attempts to use beAnInstanceOf with non Objective-C types
4 | public func beAnInstanceOf(_ expectedClass: Any) -> NonNilMatcherFunc {
5 | return NonNilMatcherFunc {actualExpression, failureMessage in
6 | failureMessage.stringValue = "beAnInstanceOf only works on Objective-C types since"
7 | + " the Swift compiler will automatically type check Swift-only types."
8 | + " This expectation is redundant."
9 | return false
10 | }
11 | }
12 |
13 | /// A Nimble matcher that succeeds when the actual value is an instance of the given class.
14 | /// @see beAKindOf if you want to match against subclasses
15 | public func beAnInstanceOf(_ expectedClass: AnyClass) -> NonNilMatcherFunc {
16 | return NonNilMatcherFunc { actualExpression, failureMessage in
17 | let instance = try actualExpression.evaluate()
18 | if let validInstance = instance {
19 | failureMessage.actualValue = "<\(String(describing: type(of: validInstance))) instance>"
20 | } else {
21 | failureMessage.actualValue = ""
22 | }
23 | failureMessage.postfixMessage = "be an instance of \(String(describing: expectedClass))"
24 | #if _runtime(_ObjC)
25 | return instance != nil && instance!.isMember(of: expectedClass)
26 | #else
27 | return instance != nil && type(of: instance!) == expectedClass
28 | #endif
29 | }
30 | }
31 |
32 | #if _runtime(_ObjC)
33 | extension NMBObjCMatcher {
34 | public class func beAnInstanceOfMatcher(_ expected: AnyClass) -> NMBMatcher {
35 | return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in
36 | return try! beAnInstanceOf(expected).matches(actualExpression, failureMessage: failureMessage)
37 | }
38 | }
39 | }
40 | #endif
41 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 |
4 | /// A Nimble matcher that succeeds when the actual value is greater than the expected value.
5 | public func beGreaterThan(_ expectedValue: T?) -> NonNilMatcherFunc {
6 | return NonNilMatcherFunc { actualExpression, failureMessage in
7 | failureMessage.postfixMessage = "be greater than <\(stringify(expectedValue))>"
8 | if let actual = try actualExpression.evaluate(), let expected = expectedValue {
9 | return actual > expected
10 | }
11 | return false
12 | }
13 | }
14 |
15 | /// A Nimble matcher that succeeds when the actual value is greater than the expected value.
16 | public func beGreaterThan(_ expectedValue: NMBComparable?) -> NonNilMatcherFunc {
17 | return NonNilMatcherFunc { actualExpression, failureMessage in
18 | failureMessage.postfixMessage = "be greater than <\(stringify(expectedValue))>"
19 | let actualValue = try actualExpression.evaluate()
20 | let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) == ComparisonResult.orderedDescending
21 | return matches
22 | }
23 | }
24 |
25 | public func >(lhs: Expectation, rhs: T) {
26 | lhs.to(beGreaterThan(rhs))
27 | }
28 |
29 | public func >(lhs: Expectation, rhs: NMBComparable?) {
30 | lhs.to(beGreaterThan(rhs))
31 | }
32 |
33 | #if _runtime(_ObjC)
34 | extension NMBObjCMatcher {
35 | public class func beGreaterThanMatcher(_ expected: NMBComparable?) -> NMBObjCMatcher {
36 | return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in
37 | let expr = actualExpression.cast { $0 as? NMBComparable }
38 | return try! beGreaterThan(expected).matches(expr, failureMessage: failureMessage)
39 | }
40 | }
41 | }
42 | #endif
43 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | /// A Nimble matcher that succeeds when the actual value is greater than
4 | /// or equal to the expected value.
5 | public func beGreaterThanOrEqualTo(_ expectedValue: T?) -> NonNilMatcherFunc {
6 | return NonNilMatcherFunc { actualExpression, failureMessage in
7 | failureMessage.postfixMessage = "be greater than or equal to <\(stringify(expectedValue))>"
8 | let actualValue = try actualExpression.evaluate()
9 | if let actual = actualValue, let expected = expectedValue {
10 | return actual >= expected
11 | }
12 | return false
13 | }
14 | }
15 |
16 | /// A Nimble matcher that succeeds when the actual value is greater than
17 | /// or equal to the expected value.
18 | public func beGreaterThanOrEqualTo(_ expectedValue: T?) -> NonNilMatcherFunc {
19 | return NonNilMatcherFunc { actualExpression, failureMessage in
20 | failureMessage.postfixMessage = "be greater than or equal to <\(stringify(expectedValue))>"
21 | let actualValue = try actualExpression.evaluate()
22 | let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) != ComparisonResult.orderedAscending
23 | return matches
24 | }
25 | }
26 |
27 | public func >=(lhs: Expectation, rhs: T) {
28 | lhs.to(beGreaterThanOrEqualTo(rhs))
29 | }
30 |
31 | public func >=(lhs: Expectation, rhs: T) {
32 | lhs.to(beGreaterThanOrEqualTo(rhs))
33 | }
34 |
35 | #if _runtime(_ObjC)
36 | extension NMBObjCMatcher {
37 | public class func beGreaterThanOrEqualToMatcher(_ expected: NMBComparable?) -> NMBObjCMatcher {
38 | return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in
39 | let expr = actualExpression.cast { $0 as? NMBComparable }
40 | return try! beGreaterThanOrEqualTo(expected).matches(expr, failureMessage: failureMessage)
41 | }
42 | }
43 | }
44 | #endif
45 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 |
4 | /// A Nimble matcher that succeeds when the actual value is the same instance
5 | /// as the expected instance.
6 | public func beIdenticalTo(_ expected: Any?) -> NonNilMatcherFunc {
7 | return NonNilMatcherFunc { actualExpression, failureMessage in
8 | #if os(Linux)
9 | let actual = try actualExpression.evaluate() as? AnyObject
10 | #else
11 | let actual = try actualExpression.evaluate() as AnyObject?
12 | #endif
13 | failureMessage.actualValue = "\(identityAsString(actual))"
14 | failureMessage.postfixMessage = "be identical to \(identityAsString(expected))"
15 | #if os(Linux)
16 | return actual === (expected as? AnyObject) && actual !== nil
17 | #else
18 | return actual === (expected as AnyObject?) && actual !== nil
19 | #endif
20 | }
21 | }
22 |
23 | public func ===(lhs: Expectation, rhs: Any?) {
24 | lhs.to(beIdenticalTo(rhs))
25 | }
26 | public func !==(lhs: Expectation, rhs: Any?) {
27 | lhs.toNot(beIdenticalTo(rhs))
28 | }
29 |
30 | /// A Nimble matcher that succeeds when the actual value is the same instance
31 | /// as the expected instance.
32 | ///
33 | /// Alias for "beIdenticalTo".
34 | public func be(_ expected: Any?) -> NonNilMatcherFunc {
35 | return beIdenticalTo(expected)
36 | }
37 |
38 | #if _runtime(_ObjC)
39 | extension NMBObjCMatcher {
40 | public class func beIdenticalToMatcher(_ expected: NSObject?) -> NMBObjCMatcher {
41 | return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in
42 | let aExpr = actualExpression.cast { $0 as Any? }
43 | return try! beIdenticalTo(expected).matches(aExpr, failureMessage: failureMessage)
44 | }
45 | }
46 | }
47 | #endif
48 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Matchers/BeLessThan.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | /// A Nimble matcher that succeeds when the actual value is less than the expected value.
4 | public func beLessThan(_ expectedValue: T?) -> NonNilMatcherFunc {
5 | return NonNilMatcherFunc { actualExpression, failureMessage in
6 | failureMessage.postfixMessage = "be less than <\(stringify(expectedValue))>"
7 | if let actual = try actualExpression.evaluate(), let expected = expectedValue {
8 | return actual < expected
9 | }
10 | return false
11 | }
12 | }
13 |
14 | /// A Nimble matcher that succeeds when the actual value is less than the expected value.
15 | public func beLessThan(_ expectedValue: NMBComparable?) -> NonNilMatcherFunc {
16 | return NonNilMatcherFunc { actualExpression, failureMessage in
17 | failureMessage.postfixMessage = "be less than <\(stringify(expectedValue))>"
18 | let actualValue = try actualExpression.evaluate()
19 | let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) == ComparisonResult.orderedAscending
20 | return matches
21 | }
22 | }
23 |
24 | public func <(lhs: Expectation, rhs: T) {
25 | lhs.to(beLessThan(rhs))
26 | }
27 |
28 | public func <(lhs: Expectation, rhs: NMBComparable?) {
29 | lhs.to(beLessThan(rhs))
30 | }
31 |
32 | #if _runtime(_ObjC)
33 | extension NMBObjCMatcher {
34 | public class func beLessThanMatcher(_ expected: NMBComparable?) -> NMBObjCMatcher {
35 | return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in
36 | let expr = actualExpression.cast { $0 as? NMBComparable }
37 | return try! beLessThan(expected).matches(expr, failureMessage: failureMessage)
38 | }
39 | }
40 | }
41 | #endif
42 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | /// A Nimble matcher that succeeds when the actual value is less than
4 | /// or equal to the expected value.
5 | public func beLessThanOrEqualTo(_ expectedValue: T?) -> NonNilMatcherFunc {
6 | return NonNilMatcherFunc { actualExpression, failureMessage in
7 | failureMessage.postfixMessage = "be less than or equal to <\(stringify(expectedValue))>"
8 | if let actual = try actualExpression.evaluate(), let expected = expectedValue {
9 | return actual <= expected
10 | }
11 | return false
12 | }
13 | }
14 |
15 | /// A Nimble matcher that succeeds when the actual value is less than
16 | /// or equal to the expected value.
17 | public func beLessThanOrEqualTo(_ expectedValue: T?) -> NonNilMatcherFunc {
18 | return NonNilMatcherFunc { actualExpression, failureMessage in
19 | failureMessage.postfixMessage = "be less than or equal to <\(stringify(expectedValue))>"
20 | let actualValue = try actualExpression.evaluate()
21 | return actualValue != nil && actualValue!.NMB_compare(expectedValue) != ComparisonResult.orderedDescending
22 | }
23 | }
24 |
25 | public func <=(lhs: Expectation, rhs: T) {
26 | lhs.to(beLessThanOrEqualTo(rhs))
27 | }
28 |
29 | public func <=(lhs: Expectation, rhs: T) {
30 | lhs.to(beLessThanOrEqualTo(rhs))
31 | }
32 |
33 | #if _runtime(_ObjC)
34 | extension NMBObjCMatcher {
35 | public class func beLessThanOrEqualToMatcher(_ expected: NMBComparable?) -> NMBObjCMatcher {
36 | return NMBObjCMatcher(canMatchNil:false) { actualExpression, failureMessage in
37 | let expr = actualExpression.cast { $0 as? NMBComparable }
38 | return try! beLessThanOrEqualTo(expected).matches(expr, failureMessage: failureMessage)
39 | }
40 | }
41 | }
42 | #endif
43 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Matchers/BeNil.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | /// A Nimble matcher that succeeds when the actual value is nil.
4 | public func beNil() -> MatcherFunc {
5 | return MatcherFunc { actualExpression, failureMessage in
6 | failureMessage.postfixMessage = "be nil"
7 | let actualValue = try actualExpression.evaluate()
8 | return actualValue == nil
9 | }
10 | }
11 |
12 | #if _runtime(_ObjC)
13 | extension NMBObjCMatcher {
14 | public class func beNilMatcher() -> NMBObjCMatcher {
15 | return NMBObjCMatcher { actualExpression, failureMessage in
16 | return try! beNil().matches(actualExpression, failureMessage: failureMessage)
17 | }
18 | }
19 | }
20 | #endif
21 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Matchers/BeVoid.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | /// A Nimble matcher that succeeds when the actual value is Void.
4 | public func beVoid() -> MatcherFunc<()> {
5 | return MatcherFunc { actualExpression, failureMessage in
6 | failureMessage.postfixMessage = "be void"
7 | let actualValue: ()? = try actualExpression.evaluate()
8 | return actualValue != nil
9 | }
10 | }
11 |
12 | public func ==(lhs: Expectation<()>, rhs: ()) {
13 | lhs.to(beVoid())
14 | }
15 |
16 | public func !=(lhs: Expectation<()>, rhs: ()) {
17 | lhs.toNot(beVoid())
18 | }
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Matchers/BeginWith.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 |
4 | /// A Nimble matcher that succeeds when the actual sequence's first element
5 | /// is equal to the expected value.
6 | public func beginWith(_ startingElement: T) -> NonNilMatcherFunc
7 | where S.Iterator.Element == T
8 | {
9 | return NonNilMatcherFunc { actualExpression, failureMessage in
10 | failureMessage.postfixMessage = "begin with <\(startingElement)>"
11 | if let actualValue = try actualExpression.evaluate() {
12 | var actualGenerator = actualValue.makeIterator()
13 | return actualGenerator.next() == startingElement
14 | }
15 | return false
16 | }
17 | }
18 |
19 | /// A Nimble matcher that succeeds when the actual collection's first element
20 | /// is equal to the expected object.
21 | public func beginWith(_ startingElement: Any) -> NonNilMatcherFunc {
22 | return NonNilMatcherFunc { actualExpression, failureMessage in
23 | failureMessage.postfixMessage = "begin with <\(startingElement)>"
24 | guard let collection = try actualExpression.evaluate() else { return false }
25 | guard collection.count > 0 else { return false }
26 | #if os(Linux)
27 | guard let collectionValue = collection.object(at: 0) as? NSObject else {
28 | return false
29 | }
30 | #else
31 | let collectionValue = collection.object(at: 0) as AnyObject
32 | #endif
33 | return collectionValue.isEqual(startingElement)
34 | }
35 | }
36 |
37 | /// A Nimble matcher that succeeds when the actual string contains expected substring
38 | /// where the expected substring's location is zero.
39 | public func beginWith(_ startingSubstring: String) -> NonNilMatcherFunc {
40 | return NonNilMatcherFunc { actualExpression, failureMessage in
41 | failureMessage.postfixMessage = "begin with <\(startingSubstring)>"
42 | if let actual = try actualExpression.evaluate() {
43 | let range = actual.range(of: startingSubstring)
44 | return range != nil && range!.lowerBound == actual.startIndex
45 | }
46 | return false
47 | }
48 | }
49 |
50 | #if _runtime(_ObjC)
51 | extension NMBObjCMatcher {
52 | public class func beginWithMatcher(_ expected: Any) -> NMBObjCMatcher {
53 | return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in
54 | let actual = try! actualExpression.evaluate()
55 | if let _ = actual as? String {
56 | let expr = actualExpression.cast { $0 as? String }
57 | return try! beginWith(expected as! String).matches(expr, failureMessage: failureMessage)
58 | } else {
59 | let expr = actualExpression.cast { $0 as? NMBOrderedCollection }
60 | return try! beginWith(expected).matches(expr, failureMessage: failureMessage)
61 | }
62 | }
63 | }
64 | }
65 | #endif
66 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Matchers/HaveCount.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | // The `haveCount` matchers do not print the full string representation of the collection value,
4 | // instead they only print the type name and the expected count. This makes it easier to understand
5 | // the reason for failed expectations. See: https://github.com/Quick/Nimble/issues/308.
6 | // The representation of the collection content is provided in a new line as an `extendedMessage`.
7 |
8 | /// A Nimble matcher that succeeds when the actual Collection's count equals
9 | /// the expected value
10 | public func haveCount(_ expectedValue: T.IndexDistance) -> NonNilMatcherFunc {
11 | return NonNilMatcherFunc { actualExpression, failureMessage in
12 | if let actualValue = try actualExpression.evaluate() {
13 | failureMessage.postfixMessage = "have \(prettyCollectionType(actualValue)) with count \(stringify(expectedValue))"
14 | let result = expectedValue == actualValue.count
15 | failureMessage.actualValue = "\(actualValue.count)"
16 | failureMessage.extendedMessage = "Actual Value: \(stringify(actualValue))"
17 | return result
18 | } else {
19 | return false
20 | }
21 | }
22 | }
23 |
24 | /// A Nimble matcher that succeeds when the actual collection's count equals
25 | /// the expected value
26 | public func haveCount(_ expectedValue: Int) -> MatcherFunc {
27 | return MatcherFunc { actualExpression, failureMessage in
28 | if let actualValue = try actualExpression.evaluate() {
29 | failureMessage.postfixMessage = "have \(prettyCollectionType(actualValue)) with count \(stringify(expectedValue))"
30 | let result = expectedValue == actualValue.count
31 | failureMessage.actualValue = "\(actualValue.count)"
32 | failureMessage.extendedMessage = "Actual Value: \(stringify(actualValue))"
33 | return result
34 | } else {
35 | return false
36 | }
37 | }
38 | }
39 |
40 | #if _runtime(_ObjC)
41 | extension NMBObjCMatcher {
42 | public class func haveCountMatcher(_ expected: NSNumber) -> NMBObjCMatcher {
43 | return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in
44 | let location = actualExpression.location
45 | let actualValue = try! actualExpression.evaluate()
46 | if let value = actualValue as? NMBCollection {
47 | let expr = Expression(expression: ({ value as NMBCollection}), location: location)
48 | return try! haveCount(expected.intValue).matches(expr, failureMessage: failureMessage)
49 | } else if let actualValue = actualValue {
50 | failureMessage.postfixMessage = "get type of NSArray, NSSet, NSDictionary, or NSHashTable"
51 | failureMessage.actualValue = "\(String(describing: type(of: actualValue)))"
52 | }
53 | return false
54 | }
55 | }
56 | }
57 | #endif
58 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Matchers/Match.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | /// A Nimble matcher that succeeds when the actual string satisfies the regular expression
4 | /// described by the expected string.
5 | public func match(_ expectedValue: String?) -> NonNilMatcherFunc {
6 | return NonNilMatcherFunc { actualExpression, failureMessage in
7 | failureMessage.postfixMessage = "match <\(stringify(expectedValue))>"
8 |
9 | if let actual = try actualExpression.evaluate() {
10 | if let regexp = expectedValue {
11 | return actual.range(of: regexp, options: .regularExpression) != nil
12 | }
13 | }
14 |
15 | return false
16 | }
17 | }
18 |
19 | #if _runtime(_ObjC)
20 |
21 | extension NMBObjCMatcher {
22 | public class func matchMatcher(_ expected: NSString) -> NMBMatcher {
23 | return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in
24 | let actual = actualExpression.cast { $0 as? String }
25 | return try! match(expected.description).matches(actual, failureMessage: failureMessage)
26 | }
27 | }
28 | }
29 |
30 | #endif
31 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Matchers/MatchError.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | /// A Nimble matcher that succeeds when the actual expression evaluates to an
4 | /// error from the specified case.
5 | ///
6 | /// Errors are tried to be compared by their implementation of Equatable,
7 | /// otherwise they fallback to comparision by _domain and _code.
8 | public func matchError(_ error: T) -> NonNilMatcherFunc {
9 | return NonNilMatcherFunc { actualExpression, failureMessage in
10 | let actualError: Error? = try actualExpression.evaluate()
11 |
12 | setFailureMessageForError(failureMessage, postfixMessageVerb: "match", actualError: actualError, error: error)
13 | return errorMatchesNonNilFieldsOrClosure(actualError, error: error)
14 | }
15 | }
16 |
17 | /// A Nimble matcher that succeeds when the actual expression evaluates to an
18 | /// error of the specified type
19 | public func matchError(_ errorType: T.Type) -> NonNilMatcherFunc {
20 | return NonNilMatcherFunc { actualExpression, failureMessage in
21 | let actualError: Error? = try actualExpression.evaluate()
22 |
23 | setFailureMessageForError(failureMessage, postfixMessageVerb: "match", actualError: actualError, errorType: errorType)
24 | return errorMatchesNonNilFieldsOrClosure(actualError, errorType: errorType)
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Matchers/MatcherFunc.swift:
--------------------------------------------------------------------------------
1 | /// A convenience API to build matchers that don't need special negation
2 | /// behavior. The toNot() behavior is the negation of to().
3 | ///
4 | /// @see NonNilMatcherFunc if you prefer to have this matcher fail when nil
5 | /// values are recieved in an expectation.
6 | ///
7 | /// You may use this when implementing your own custom matchers.
8 | ///
9 | /// Use the Matcher protocol instead of this type to accept custom matchers as
10 | /// input parameters.
11 | /// @see allPass for an example that uses accepts other matchers as input.
12 | public struct MatcherFunc: Matcher {
13 | public let matcher: (Expression, FailureMessage) throws -> Bool
14 |
15 | public init(_ matcher: @escaping (Expression, FailureMessage) throws -> Bool) {
16 | self.matcher = matcher
17 | }
18 |
19 | public func matches(_ actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool {
20 | return try matcher(actualExpression, failureMessage)
21 | }
22 |
23 | public func doesNotMatch(_ actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool {
24 | return try !matcher(actualExpression, failureMessage)
25 | }
26 | }
27 |
28 | /// A convenience API to build matchers that don't need special negation
29 | /// behavior. The toNot() behavior is the negation of to().
30 | ///
31 | /// Unlike MatcherFunc, this will always fail if an expectation contains nil.
32 | /// This applies regardless of using to() or toNot().
33 | ///
34 | /// You may use this when implementing your own custom matchers.
35 | ///
36 | /// Use the Matcher protocol instead of this type to accept custom matchers as
37 | /// input parameters.
38 | /// @see allPass for an example that uses accepts other matchers as input.
39 | public struct NonNilMatcherFunc: Matcher {
40 | public let matcher: (Expression, FailureMessage) throws -> Bool
41 |
42 | public init(_ matcher: @escaping (Expression, FailureMessage) throws -> Bool) {
43 | self.matcher = matcher
44 | }
45 |
46 | public func matches(_ actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool {
47 | let pass = try matcher(actualExpression, failureMessage)
48 | if try attachNilErrorIfNeeded(actualExpression, failureMessage: failureMessage) {
49 | return false
50 | }
51 | return pass
52 | }
53 |
54 | public func doesNotMatch(_ actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool {
55 | let pass = try !matcher(actualExpression, failureMessage)
56 | if try attachNilErrorIfNeeded(actualExpression, failureMessage: failureMessage) {
57 | return false
58 | }
59 | return pass
60 | }
61 |
62 | internal func attachNilErrorIfNeeded(_ actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool {
63 | if try actualExpression.evaluate() == nil {
64 | failureMessage.postfixActual = " (use beNil() to match nils)"
65 | return true
66 | }
67 | return false
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Matchers/PostNotification.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | internal class NotificationCollector {
4 | private(set) var observedNotifications: [Notification]
5 | private let notificationCenter: NotificationCenter
6 | #if _runtime(_ObjC)
7 | private var token: AnyObject?
8 | #else
9 | private var token: NSObjectProtocol?
10 | #endif
11 |
12 | required init(notificationCenter: NotificationCenter) {
13 | self.notificationCenter = notificationCenter
14 | self.observedNotifications = []
15 | }
16 |
17 | func startObserving() {
18 | self.token = self.notificationCenter.addObserver(forName: nil, object: nil, queue: nil) {
19 | // linux-swift gets confused by .append(n)
20 | [weak self] n in self?.observedNotifications.append(n)
21 | }
22 | }
23 |
24 | deinit {
25 | #if _runtime(_ObjC)
26 | if let token = self.token {
27 | self.notificationCenter.removeObserver(token)
28 | }
29 | #else
30 | if let token = self.token as? AnyObject {
31 | self.notificationCenter.removeObserver(token)
32 | }
33 | #endif
34 | }
35 | }
36 |
37 | private let mainThread = pthread_self()
38 |
39 | let notificationCenterDefault = NotificationCenter.default
40 |
41 | public func postNotifications(
42 | _ notificationsMatcher: T,
43 | fromNotificationCenter center: NotificationCenter = notificationCenterDefault)
44 | -> MatcherFunc
45 | where T: Matcher, T.ValueType == [Notification]
46 | {
47 | let _ = mainThread // Force lazy-loading of this value
48 | let collector = NotificationCollector(notificationCenter: center)
49 | collector.startObserving()
50 | var once: Bool = false
51 | return MatcherFunc { actualExpression, failureMessage in
52 | let collectorNotificationsExpression = Expression(memoizedExpression: { _ in
53 | return collector.observedNotifications
54 | }, location: actualExpression.location, withoutCaching: true)
55 |
56 | assert(pthread_equal(mainThread, pthread_self()) != 0, "Only expecting closure to be evaluated on main thread.")
57 | if !once {
58 | once = true
59 | _ = try actualExpression.evaluate()
60 | }
61 |
62 | let match = try notificationsMatcher.matches(collectorNotificationsExpression, failureMessage: failureMessage)
63 | if collector.observedNotifications.isEmpty {
64 | failureMessage.actualValue = "no notifications"
65 | } else {
66 | failureMessage.actualValue = "<\(stringify(collector.observedNotifications))>"
67 | }
68 | return match
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Matchers/SatisfyAnyOf.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | /// A Nimble matcher that succeeds when the actual value matches with any of the matchers
4 | /// provided in the variable list of matchers.
5 | public func satisfyAnyOf(_ matchers: U...) -> NonNilMatcherFunc
6 | where U: Matcher, U.ValueType == T
7 | {
8 | return satisfyAnyOf(matchers)
9 | }
10 |
11 | internal func satisfyAnyOf(_ matchers: [U]) -> NonNilMatcherFunc
12 | where U: Matcher, U.ValueType == T
13 | {
14 | return NonNilMatcherFunc { actualExpression, failureMessage in
15 | let postfixMessages = NSMutableArray()
16 | var matches = false
17 | for matcher in matchers {
18 | if try matcher.matches(actualExpression, failureMessage: failureMessage) {
19 | matches = true
20 | }
21 | postfixMessages.add(NSString(string: "{\(failureMessage.postfixMessage)}"))
22 | }
23 |
24 | failureMessage.postfixMessage = "match one of: " + postfixMessages.componentsJoined(by: ", or ")
25 | if let actualValue = try actualExpression.evaluate() {
26 | failureMessage.actualValue = "\(actualValue)"
27 | }
28 |
29 | return matches
30 | }
31 | }
32 |
33 | public func ||(left: NonNilMatcherFunc, right: NonNilMatcherFunc) -> NonNilMatcherFunc {
34 | return satisfyAnyOf(left, right)
35 | }
36 |
37 | public func ||(left: MatcherFunc, right: MatcherFunc) -> NonNilMatcherFunc {
38 | return satisfyAnyOf(left, right)
39 | }
40 |
41 | #if _runtime(_ObjC)
42 | extension NMBObjCMatcher {
43 | public class func satisfyAnyOfMatcher(_ matchers: [NMBObjCMatcher]) -> NMBObjCMatcher {
44 | return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in
45 | if matchers.isEmpty {
46 | failureMessage.stringValue = "satisfyAnyOf must be called with at least one matcher"
47 | return false
48 | }
49 |
50 | var elementEvaluators = [NonNilMatcherFunc]()
51 | for matcher in matchers {
52 | let elementEvaluator: (Expression, FailureMessage) -> Bool = {
53 | expression, failureMessage in
54 | return matcher.matches(
55 | {try! expression.evaluate()}, failureMessage: failureMessage, location: actualExpression.location)
56 | }
57 |
58 | elementEvaluators.append(NonNilMatcherFunc(elementEvaluator))
59 | }
60 |
61 | return try! satisfyAnyOf(elementEvaluators).matches(actualExpression, failureMessage: failureMessage)
62 | }
63 | }
64 | }
65 | #endif
66 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Matchers/ThrowAssertion.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | public func throwAssertion() -> MatcherFunc {
4 | return MatcherFunc { actualExpression, failureMessage in
5 | #if arch(x86_64) && _runtime(_ObjC) && !SWIFT_PACKAGE
6 | failureMessage.postfixMessage = "throw an assertion"
7 | failureMessage.actualValue = nil
8 |
9 | var succeeded = true
10 |
11 | let caughtException: BadInstructionException? = catchBadInstruction {
12 | #if os(tvOS)
13 | if (!NimbleEnvironment.activeInstance.suppressTVOSAssertionWarning) {
14 | print()
15 | print("[Nimble Warning]: If you're getting stuck on a debugger breakpoint for a " +
16 | "fatal error while using throwAssertion(), please disable 'Debug Executable' " +
17 | "in your scheme. Go to 'Edit Scheme > Test > Info' and uncheck " +
18 | "'Debug Executable'. If you've already done that, suppress this warning " +
19 | "by setting `NimbleEnvironment.activeInstance.suppressTVOSAssertionWarning = true`. " +
20 | "This is required because the standard methods of catching assertions " +
21 | "(mach APIs) are unavailable for tvOS. Instead, the same mechanism the " +
22 | "debugger uses is the fallback method for tvOS."
23 | )
24 | print()
25 | NimbleEnvironment.activeInstance.suppressTVOSAssertionWarning = true
26 | }
27 | #endif
28 | do {
29 | try actualExpression.evaluate()
30 | } catch let error {
31 | succeeded = false
32 | failureMessage.postfixMessage += "; threw error instead <\(error)>"
33 | }
34 | }
35 |
36 | if !succeeded {
37 | return false
38 | }
39 |
40 | if caughtException == nil {
41 | return false
42 | }
43 |
44 | return true
45 | #elseif SWIFT_PACKAGE
46 | fatalError("The throwAssertion Nimble matcher does not currently support Swift CLI." +
47 | " You can silence this error by placing the test case inside an #if !SWIFT_PACKAGE" +
48 | " conditional statement")
49 | #else
50 | fatalError("The throwAssertion Nimble matcher can only run on x86_64 platforms with " +
51 | "Objective-C (e.g. Mac, iPhone 5s or later simulators). You can silence this error " +
52 | "by placing the test case inside an #if arch(x86_64) or _runtime(_ObjC) conditional statement")
53 | #endif
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Matchers/ThrowError.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | /// A Nimble matcher that succeeds when the actual expression throws an
4 | /// error of the specified type or from the specified case.
5 | ///
6 | /// Errors are tried to be compared by their implementation of Equatable,
7 | /// otherwise they fallback to comparision by _domain and _code.
8 | ///
9 | /// Alternatively, you can pass a closure to do any arbitrary custom matching
10 | /// to the thrown error. The closure only gets called when an error was thrown.
11 | ///
12 | /// nil arguments indicates that the matcher should not attempt to match against
13 | /// that parameter.
14 | public func throwError(
15 | _ error: T? = nil,
16 | errorType: T.Type? = nil,
17 | closure: ((T) -> Void)? = nil) -> MatcherFunc {
18 | return MatcherFunc { actualExpression, failureMessage in
19 |
20 | var actualError: Error?
21 | do {
22 | _ = try actualExpression.evaluate()
23 | } catch let catchedError {
24 | actualError = catchedError
25 | }
26 |
27 | setFailureMessageForError(failureMessage, actualError: actualError, error: error, errorType: errorType, closure: closure)
28 | return errorMatchesNonNilFieldsOrClosure(actualError, error: error, errorType: errorType, closure: closure)
29 | }
30 | }
31 |
32 | /// A Nimble matcher that succeeds when the actual expression throws any
33 | /// error or when the passed closures' arbitrary custom matching succeeds.
34 | ///
35 | /// This duplication to it's generic adequate is required to allow to receive
36 | /// values of the existential type `Error` in the closure.
37 | ///
38 | /// The closure only gets called when an error was thrown.
39 | public func throwError(
40 | closure: ((Error) -> Void)? = nil) -> MatcherFunc {
41 | return MatcherFunc { actualExpression, failureMessage in
42 |
43 | var actualError: Error?
44 | do {
45 | _ = try actualExpression.evaluate()
46 | } catch let catchedError {
47 | actualError = catchedError
48 | }
49 |
50 | setFailureMessageForError(failureMessage, actualError: actualError, closure: closure)
51 | return errorMatchesNonNilFieldsOrClosure(actualError, closure: closure)
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Nimble.h:
--------------------------------------------------------------------------------
1 | #import
2 | #import "NMBExceptionCapture.h"
3 | #import "NMBStringify.h"
4 | #import "DSL.h"
5 |
6 | #import "CwlCatchException.h"
7 | #import "CwlCatchBadInstruction.h"
8 |
9 | #if !TARGET_OS_TV
10 | #import "mach_excServer.h"
11 | #endif
12 |
13 | FOUNDATION_EXPORT double NimbleVersionNumber;
14 | FOUNDATION_EXPORT const unsigned char NimbleVersionString[];
15 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Utils/Functional.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | extension Sequence {
4 | internal func all(_ fn: (Iterator.Element) -> Bool) -> Bool {
5 | for item in self {
6 | if !fn(item) {
7 | return false
8 | }
9 | }
10 | return true
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/Nimble/Utils/SourceLocation.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | // Ideally we would always use `StaticString` as the type for tracking the file name
4 | // that expectations originate from, for consistency with `assert` etc. from the
5 | // stdlib, and because recent versions of the XCTest overlay require `StaticString`
6 | // when calling `XCTFail`. Under the Objective-C runtime (i.e. building on Mac), we
7 | // have to use `String` instead because StaticString can't be generated from Objective-C
8 | #if _runtime(_ObjC)
9 | public typealias FileString = String
10 | #else
11 | public typealias FileString = StaticString
12 | #endif
13 |
14 | public final class SourceLocation : NSObject {
15 | public let file: FileString
16 | public let line: UInt
17 |
18 | override init() {
19 | file = "Unknown File"
20 | line = 0
21 | }
22 |
23 | init(file: FileString, line: UInt) {
24 | self.file = file
25 | self.line = line
26 | }
27 |
28 | override public var description: String {
29 | return "\(file):\(line)"
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/NimbleObjectiveC/CurrentTestCaseTracker.h:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 |
4 | SWIFT_CLASS("_TtC6Nimble22CurrentTestCaseTracker")
5 | @interface CurrentTestCaseTracker : NSObject
6 | + (CurrentTestCaseTracker *)sharedInstance;
7 | @end
8 |
9 | @interface CurrentTestCaseTracker (Register) @end
10 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/NimbleObjectiveC/NMBExceptionCapture.h:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 |
4 | @interface NMBExceptionCapture : NSObject
5 |
6 | - (nonnull instancetype)initWithHandler:(void(^ _Nullable)(NSException * _Nonnull))handler finally:(void(^ _Nullable)())finally;
7 | - (void)tryBlock:(void(^ _Nonnull)())unsafeBlock NS_SWIFT_NAME(tryBlock(_:));
8 |
9 | @end
10 |
11 | typedef void(^NMBSourceCallbackBlock)(BOOL successful);
12 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/NimbleObjectiveC/NMBExceptionCapture.m:
--------------------------------------------------------------------------------
1 | #import "NMBExceptionCapture.h"
2 |
3 | @interface NMBExceptionCapture ()
4 | @property (nonatomic, copy) void(^ _Nullable handler)(NSException * _Nullable);
5 | @property (nonatomic, copy) void(^ _Nullable finally)();
6 | @end
7 |
8 | @implementation NMBExceptionCapture
9 |
10 | - (nonnull instancetype)initWithHandler:(void(^ _Nullable)(NSException * _Nonnull))handler finally:(void(^ _Nullable)())finally {
11 | self = [super init];
12 | if (self) {
13 | self.handler = handler;
14 | self.finally = finally;
15 | }
16 | return self;
17 | }
18 |
19 | - (void)tryBlock:(void(^ _Nonnull)())unsafeBlock {
20 | @try {
21 | unsafeBlock();
22 | }
23 | @catch (NSException *exception) {
24 | if (self.handler) {
25 | self.handler(exception);
26 | }
27 | }
28 | @finally {
29 | if (self.finally) {
30 | self.finally();
31 | }
32 | }
33 | }
34 |
35 | @end
36 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/NimbleObjectiveC/NMBStringify.h:
--------------------------------------------------------------------------------
1 | @class NSString;
2 |
3 | /**
4 | * Returns a string appropriate for displaying in test output
5 | * from the provided value.
6 | *
7 | * @param value A value that will show up in a test's output.
8 | *
9 | * @return The string that is returned can be
10 | * customized per type by conforming a type to the `TestOutputStringConvertible`
11 | * protocol. When stringifying a non-`TestOutputStringConvertible` type, this
12 | * function will return the value's debug description and then its
13 | * normal description if available and in that order. Otherwise it
14 | * will return the result of constructing a string from the value.
15 | *
16 | * @see `TestOutputStringConvertible`
17 | */
18 | extern NSString *_Nonnull NMBStringify(id _Nullable anyObject) __attribute__((warn_unused_result));
19 |
--------------------------------------------------------------------------------
/Example/Pods/Nimble/Sources/NimbleObjectiveC/NMBStringify.m:
--------------------------------------------------------------------------------
1 | #import "NMBStringify.h"
2 | #import
3 |
4 | NSString *_Nonnull NMBStringify(id _Nullable anyObject) {
5 | return [NMBStringer stringify:anyObject];
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/PersistentStorageSerializable-OSX.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
34 |
35 |
45 |
46 |
52 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
66 |
67 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/PersistentStorageSerializable-iOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
34 |
35 |
45 |
46 |
52 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
66 |
67 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Reflection-OSX.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
34 |
35 |
45 |
46 |
52 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
66 |
67 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Reflection-iOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
34 |
35 |
45 |
46 |
52 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
66 |
67 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/Example/Pods/Quick/Sources/Quick/Callsite.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | /**
4 | An object encapsulating the file and line number at which
5 | a particular example is defined.
6 | */
7 | final public class Callsite: NSObject {
8 | /**
9 | The absolute path of the file in which an example is defined.
10 | */
11 | public let file: String
12 |
13 | /**
14 | The line number on which an example is defined.
15 | */
16 | public let line: UInt
17 |
18 | internal init(file: String, line: UInt) {
19 | self.file = file
20 | self.line = line
21 | }
22 | }
23 |
24 | /**
25 | Returns a boolean indicating whether two Callsite objects are equal.
26 | If two callsites are in the same file and on the same line, they must be equal.
27 | */
28 | public func == (lhs: Callsite, rhs: Callsite) -> Bool {
29 | return lhs.file == rhs.file && lhs.line == rhs.line
30 | }
31 |
--------------------------------------------------------------------------------
/Example/Pods/Quick/Sources/Quick/ErrorUtility.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | internal func raiseError(_ message: String) -> Never {
4 | #if _runtime(_ObjC)
5 | NSException(name: .internalInconsistencyException, reason: message, userInfo: nil).raise()
6 | #endif
7 |
8 | // This won't be reached when ObjC is available and the exception above is raisd
9 | fatalError(message)
10 | }
11 |
--------------------------------------------------------------------------------
/Example/Pods/Quick/Sources/Quick/ExampleMetadata.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | /**
4 | A class that encapsulates information about an example,
5 | including the index at which the example was executed, as
6 | well as the example itself.
7 | */
8 | final public class ExampleMetadata: NSObject {
9 | /**
10 | The example for which this metadata was collected.
11 | */
12 | public let example: Example
13 |
14 | /**
15 | The index at which this example was executed in the
16 | test suite.
17 | */
18 | public let exampleIndex: Int
19 |
20 | internal init(example: Example, exampleIndex: Int) {
21 | self.example = example
22 | self.exampleIndex = exampleIndex
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/Example/Pods/Quick/Sources/Quick/Filter.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | /**
4 | A mapping of string keys to booleans that can be used to
5 | filter examples or example groups. For example, a "focused"
6 | example would have the flags [Focused: true].
7 | */
8 | public typealias FilterFlags = [String: Bool]
9 |
10 | /**
11 | A namespace for filter flag keys, defined primarily to make the
12 | keys available in Objective-C.
13 | */
14 | final public class Filter: NSObject {
15 | /**
16 | Example and example groups with [Focused: true] are included in test runs,
17 | excluding all other examples without this flag. Use this to only run one or
18 | two tests that you're currently focusing on.
19 | */
20 | public class var focused: String {
21 | return "focused"
22 | }
23 |
24 | /**
25 | Example and example groups with [Pending: true] are excluded from test runs.
26 | Use this to temporarily suspend examples that you know do not pass yet.
27 | */
28 | public class var pending: String {
29 | return "pending"
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/Example/Pods/Quick/Sources/Quick/Hooks/Closures.swift:
--------------------------------------------------------------------------------
1 | // MARK: Example Hooks
2 |
3 | /**
4 | A closure executed before an example is run.
5 | */
6 | public typealias BeforeExampleClosure = () -> ()
7 |
8 | /**
9 | A closure executed before an example is run. The closure is given example metadata,
10 | which contains information about the example that is about to be run.
11 | */
12 | public typealias BeforeExampleWithMetadataClosure = (_ exampleMetadata: ExampleMetadata) -> ()
13 |
14 | /**
15 | A closure executed after an example is run.
16 | */
17 | public typealias AfterExampleClosure = BeforeExampleClosure
18 |
19 | /**
20 | A closure executed after an example is run. The closure is given example metadata,
21 | which contains information about the example that has just finished running.
22 | */
23 | public typealias AfterExampleWithMetadataClosure = BeforeExampleWithMetadataClosure
24 |
25 | // MARK: Suite Hooks
26 |
27 | /**
28 | A closure executed before any examples are run.
29 | */
30 | public typealias BeforeSuiteClosure = () -> ()
31 |
32 | /**
33 | A closure executed after all examples have finished running.
34 | */
35 | public typealias AfterSuiteClosure = BeforeSuiteClosure
36 |
--------------------------------------------------------------------------------
/Example/Pods/Quick/Sources/Quick/Hooks/ExampleHooks.swift:
--------------------------------------------------------------------------------
1 | /**
2 | A container for closures to be executed before and after each example.
3 | */
4 | final internal class ExampleHooks {
5 | internal var befores: [BeforeExampleWithMetadataClosure] = []
6 | internal var afters: [AfterExampleWithMetadataClosure] = []
7 | internal var phase: HooksPhase = .nothingExecuted
8 |
9 | internal func appendBefore(_ closure: @escaping BeforeExampleWithMetadataClosure) {
10 | befores.append(closure)
11 | }
12 |
13 | internal func appendBefore(_ closure: @escaping BeforeExampleClosure) {
14 | befores.append { (exampleMetadata: ExampleMetadata) in closure() }
15 | }
16 |
17 | internal func appendAfter(_ closure: @escaping AfterExampleWithMetadataClosure) {
18 | afters.append(closure)
19 | }
20 |
21 | internal func appendAfter(_ closure: @escaping AfterExampleClosure) {
22 | afters.append { (exampleMetadata: ExampleMetadata) in closure() }
23 | }
24 |
25 | internal func executeBefores(_ exampleMetadata: ExampleMetadata) {
26 | phase = .beforesExecuting
27 | for before in befores {
28 | before(exampleMetadata)
29 | }
30 |
31 | phase = .beforesFinished
32 | }
33 |
34 | internal func executeAfters(_ exampleMetadata: ExampleMetadata) {
35 | phase = .aftersExecuting
36 | for after in afters {
37 | after(exampleMetadata)
38 | }
39 |
40 | phase = .aftersFinished
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/Example/Pods/Quick/Sources/Quick/Hooks/HooksPhase.swift:
--------------------------------------------------------------------------------
1 | /**
2 | A description of the execution cycle of the current example with
3 | respect to the hooks of that example.
4 | */
5 | internal enum HooksPhase {
6 | case nothingExecuted
7 | case beforesExecuting
8 | case beforesFinished
9 | case aftersExecuting
10 | case aftersFinished
11 | }
12 |
--------------------------------------------------------------------------------
/Example/Pods/Quick/Sources/Quick/Hooks/SuiteHooks.swift:
--------------------------------------------------------------------------------
1 | /**
2 | A container for closures to be executed before and after all examples.
3 | */
4 | final internal class SuiteHooks {
5 | internal var befores: [BeforeSuiteClosure] = []
6 | internal var afters: [AfterSuiteClosure] = []
7 | internal var phase: HooksPhase = .nothingExecuted
8 |
9 | internal func appendBefore(_ closure: @escaping BeforeSuiteClosure) {
10 | befores.append(closure)
11 | }
12 |
13 | internal func appendAfter(_ closure: @escaping AfterSuiteClosure) {
14 | afters.append(closure)
15 | }
16 |
17 | internal func executeBefores() {
18 | phase = .beforesExecuting
19 | for before in befores {
20 | before()
21 | }
22 | phase = .beforesFinished
23 | }
24 |
25 | internal func executeAfters() {
26 | phase = .aftersExecuting
27 | for after in afters {
28 | after()
29 | }
30 | phase = .aftersFinished
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/Example/Pods/Quick/Sources/Quick/NSBundle+CurrentTestBundle.swift:
--------------------------------------------------------------------------------
1 | #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS)
2 |
3 | import Foundation
4 |
5 | extension Bundle {
6 |
7 | /**
8 | Locates the first bundle with a '.xctest' file extension.
9 | */
10 | internal static var currentTestBundle: Bundle? {
11 | return allBundles.first { $0.bundlePath.hasSuffix(".xctest") }
12 | }
13 |
14 | }
15 |
16 | #endif
17 |
--------------------------------------------------------------------------------
/Example/Pods/Quick/Sources/Quick/QuickSelectedTestSuiteBuilder.swift:
--------------------------------------------------------------------------------
1 | #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS)
2 | import Foundation
3 |
4 | /**
5 | Responsible for building a "Selected tests" suite. This corresponds to a single
6 | spec, and all its examples.
7 | */
8 | internal class QuickSelectedTestSuiteBuilder: QuickTestSuiteBuilder {
9 |
10 | /**
11 | The test spec class to run.
12 | */
13 | let testCaseClass: AnyClass!
14 |
15 | /**
16 | For Objective-C classes, returns the class name. For Swift classes without,
17 | an explicit Objective-C name, returns a module-namespaced class name
18 | (e.g., "FooTests.FooSpec").
19 | */
20 | var testSuiteClassName: String {
21 | return NSStringFromClass(testCaseClass)
22 | }
23 |
24 | /**
25 | Given a test case name:
26 |
27 | FooSpec/testFoo
28 |
29 | Optionally constructs a test suite builder for the named test case class
30 | in the running test bundle.
31 |
32 | If no test bundle can be found, or the test case class can't be found,
33 | initialization fails and returns `nil`.
34 | */
35 | init?(forTestCaseWithName name: String) {
36 | guard let testCaseClass = testCaseClassForTestCaseWithName(name) else {
37 | self.testCaseClass = nil
38 | return nil
39 | }
40 |
41 | self.testCaseClass = testCaseClass
42 | }
43 |
44 | /**
45 | Returns a `QuickTestSuite` that runs the associated test case class.
46 | */
47 | func buildTestSuite() -> QuickTestSuite {
48 | return QuickTestSuite(forTestCaseClass: testCaseClass)
49 | }
50 |
51 | }
52 |
53 | /**
54 | Searches `Bundle.allBundles()` for an xctest bundle, then looks up the named
55 | test case class in that bundle.
56 |
57 | Returns `nil` if a bundle or test case class cannot be found.
58 | */
59 | private func testCaseClassForTestCaseWithName(_ name: String) -> AnyClass? {
60 | func extractClassName(_ name: String) -> String? {
61 | return name.components(separatedBy: "/").first
62 | }
63 |
64 | guard let className = extractClassName(name) else { return nil }
65 | guard let bundle = Bundle.currentTestBundle else { return nil }
66 |
67 | if let testCaseClass = bundle.classNamed(className) { return testCaseClass }
68 |
69 | let bundleFileName = bundle.bundleURL.fileName
70 | let moduleName = bundleFileName.replacingOccurrences(of: " ", with: "_")
71 |
72 | return NSClassFromString("\(moduleName).\(className)")
73 | }
74 |
75 | #endif
76 |
--------------------------------------------------------------------------------
/Example/Pods/Quick/Sources/Quick/QuickTestSuite.swift:
--------------------------------------------------------------------------------
1 | #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS)
2 |
3 | import XCTest
4 |
5 | /**
6 | This protocol defines the role of an object that builds test suites.
7 | */
8 | internal protocol QuickTestSuiteBuilder {
9 |
10 | /**
11 | Construct a `QuickTestSuite` instance with the appropriate test cases added as tests.
12 |
13 | Subsequent calls to this method should return equivalent test suites.
14 | */
15 | func buildTestSuite() -> QuickTestSuite
16 |
17 | }
18 |
19 | /**
20 | A base class for a class cluster of Quick test suites, that should correctly
21 | build dynamic test suites for XCTest to execute.
22 | */
23 | public class QuickTestSuite: XCTestSuite {
24 |
25 | private static var builtTestSuites: Set = Set()
26 |
27 | /**
28 | Construct a test suite for a specific, selected subset of test cases (rather
29 | than the default, which as all test cases).
30 |
31 | If this method is called multiple times for the same test case class, e.g..
32 |
33 | FooSpec/testFoo
34 | FooSpec/testBar
35 |
36 | It is expected that the first call should return a valid test suite, and
37 | all subsequent calls should return `nil`.
38 | */
39 | public static func selectedTestSuite(forTestCaseWithName name: String) -> QuickTestSuite? {
40 | guard let builder = QuickSelectedTestSuiteBuilder(forTestCaseWithName: name) else { return nil }
41 |
42 | if builtTestSuites.contains(builder.testSuiteClassName) {
43 | return nil
44 | } else {
45 | builtTestSuites.insert(builder.testSuiteClassName)
46 | return builder.buildTestSuite()
47 | }
48 | }
49 |
50 | }
51 |
52 | #endif
53 |
--------------------------------------------------------------------------------
/Example/Pods/Quick/Sources/Quick/URL+FileName.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | extension URL {
4 |
5 | /**
6 | Returns the path file name without file extension.
7 | */
8 | var fileName: String {
9 | return self.deletingPathExtension().lastPathComponent
10 | }
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/Example/Pods/Quick/Sources/QuickObjectiveC/Configuration/QuickConfiguration.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | @class Configuration;
4 |
5 | /**
6 | Subclass QuickConfiguration and override the +[QuickConfiguration configure:]
7 | method in order to configure how Quick behaves when running specs, or to define
8 | shared examples that are used across spec files.
9 | */
10 | @interface QuickConfiguration : NSObject
11 |
12 | /**
13 | This method is executed on each subclass of this class before Quick runs
14 | any examples. You may override this method on as many subclasses as you like, but
15 | there is no guarantee as to the order in which these methods are executed.
16 |
17 | You can override this method in order to:
18 |
19 | 1. Configure how Quick behaves, by modifying properties on the Configuration object.
20 | Setting the same properties in several methods has undefined behavior.
21 |
22 | 2. Define shared examples using `sharedExamples`.
23 |
24 | @param configuration A mutable object that is used to configure how Quick behaves on
25 | a framework level. For details on all the options, see the
26 | documentation in Configuration.swift.
27 | */
28 | + (void)configure:(Configuration *)configuration;
29 |
30 | @end
31 |
--------------------------------------------------------------------------------
/Example/Pods/Quick/Sources/QuickObjectiveC/Configuration/QuickConfiguration.m:
--------------------------------------------------------------------------------
1 | #import "QuickConfiguration.h"
2 | #import "World.h"
3 | #import
4 |
5 | typedef void (^QCKClassEnumerationBlock)(Class klass);
6 |
7 | /**
8 | Finds all direct subclasses of the given class and passes them to the block provided.
9 | The classes are iterated over in the order that objc_getClassList returns them.
10 |
11 | @param klass The base class to find subclasses of.
12 | @param block A block that takes a Class. This block will be executed once for each subclass of klass.
13 | */
14 | void qck_enumerateSubclasses(Class klass, QCKClassEnumerationBlock block) {
15 | Class *classes = NULL;
16 | int classesCount = objc_getClassList(NULL, 0);
17 |
18 | if (classesCount > 0) {
19 | classes = (Class *)calloc(sizeof(Class), classesCount);
20 | classesCount = objc_getClassList(classes, classesCount);
21 |
22 | Class subclass, superclass;
23 | for(int i = 0; i < classesCount; i++) {
24 | subclass = classes[i];
25 | superclass = class_getSuperclass(subclass);
26 | if (superclass == klass && block) {
27 | block(subclass);
28 | }
29 | }
30 |
31 | free(classes);
32 | }
33 | }
34 |
35 | @implementation QuickConfiguration
36 |
37 | #pragma mark - Object Lifecycle
38 |
39 | /**
40 | QuickConfiguration is not meant to be instantiated; it merely provides a hook
41 | for users to configure how Quick behaves. Raise an exception if an instance of
42 | QuickConfiguration is created.
43 | */
44 | - (instancetype)init {
45 | NSString *className = NSStringFromClass([self class]);
46 | NSString *selectorName = NSStringFromSelector(@selector(configure:));
47 | [NSException raise:NSInternalInconsistencyException
48 | format:@"%@ is not meant to be instantiated; "
49 | @"subclass %@ and override %@ to configure Quick.",
50 | className, className, selectorName];
51 | return nil;
52 | }
53 |
54 | #pragma mark - NSObject Overrides
55 |
56 | /**
57 | Hook into when QuickConfiguration is initialized in the runtime in order to
58 | call +[QuickConfiguration configure:] on each of its subclasses.
59 | */
60 | + (void)initialize {
61 | // Only enumerate over the subclasses of QuickConfiguration, not any of its subclasses.
62 | if ([self class] == [QuickConfiguration class]) {
63 |
64 | // Only enumerate over subclasses once, even if +[QuickConfiguration initialize]
65 | // were to be called several times. This is necessary because +[QuickSpec initialize]
66 | // manually calls +[QuickConfiguration initialize].
67 | static dispatch_once_t onceToken;
68 | dispatch_once(&onceToken, ^{
69 | qck_enumerateSubclasses([QuickConfiguration class], ^(__unsafe_unretained Class klass) {
70 | [[World sharedWorld] configure:^(Configuration *configuration) {
71 | [klass configure:configuration];
72 | }];
73 | });
74 | [[World sharedWorld] finalizeConfiguration];
75 | });
76 | }
77 | }
78 |
79 | #pragma mark - Public Interface
80 |
81 | + (void)configure:(Configuration *)configuration { }
82 |
83 | @end
84 |
--------------------------------------------------------------------------------
/Example/Pods/Quick/Sources/QuickObjectiveC/DSL/QCKDSL.m:
--------------------------------------------------------------------------------
1 | #import "QCKDSL.h"
2 | #import "World.h"
3 | #import "World+DSL.h"
4 |
5 | void qck_beforeSuite(QCKDSLEmptyBlock closure) {
6 | [[World sharedWorld] beforeSuite:closure];
7 | }
8 |
9 | void qck_afterSuite(QCKDSLEmptyBlock closure) {
10 | [[World sharedWorld] afterSuite:closure];
11 | }
12 |
13 | void qck_sharedExamples(NSString *name, QCKDSLSharedExampleBlock closure) {
14 | [[World sharedWorld] sharedExamples:name closure:closure];
15 | }
16 |
17 | void qck_describe(NSString *description, QCKDSLEmptyBlock closure) {
18 | [[World sharedWorld] describe:description flags:@{} closure:closure];
19 | }
20 |
21 | void qck_context(NSString *description, QCKDSLEmptyBlock closure) {
22 | qck_describe(description, closure);
23 | }
24 |
25 | void qck_beforeEach(QCKDSLEmptyBlock closure) {
26 | [[World sharedWorld] beforeEach:closure];
27 | }
28 |
29 | void qck_beforeEachWithMetadata(QCKDSLExampleMetadataBlock closure) {
30 | [[World sharedWorld] beforeEachWithMetadata:closure];
31 | }
32 |
33 | void qck_afterEach(QCKDSLEmptyBlock closure) {
34 | [[World sharedWorld] afterEach:closure];
35 | }
36 |
37 | void qck_afterEachWithMetadata(QCKDSLExampleMetadataBlock closure) {
38 | [[World sharedWorld] afterEachWithMetadata:closure];
39 | }
40 |
41 | QCKItBlock qck_it_builder(NSDictionary *flags, NSString *file, NSUInteger line) {
42 | return ^(NSString *description, QCKDSLEmptyBlock closure) {
43 | [[World sharedWorld] itWithDescription:description
44 | flags:flags
45 | file:file
46 | line:line
47 | closure:closure];
48 | };
49 | }
50 |
51 | QCKItBehavesLikeBlock qck_itBehavesLike_builder(NSDictionary *flags, NSString *file, NSUInteger line) {
52 | return ^(NSString *name, QCKDSLSharedExampleContext context) {
53 | [[World sharedWorld] itBehavesLikeSharedExampleNamed:name
54 | sharedExampleContext:context
55 | flags:flags
56 | file:file
57 | line:line];
58 | };
59 | }
60 |
61 | void qck_pending(NSString *description, QCKDSLEmptyBlock closure) {
62 | [[World sharedWorld] pending:description closure:closure];
63 | }
64 |
65 | void qck_xdescribe(NSString *description, QCKDSLEmptyBlock closure) {
66 | [[World sharedWorld] xdescribe:description flags:@{} closure:closure];
67 | }
68 |
69 | void qck_xcontext(NSString *description, QCKDSLEmptyBlock closure) {
70 | qck_xdescribe(description, closure);
71 | }
72 |
73 | void qck_fdescribe(NSString *description, QCKDSLEmptyBlock closure) {
74 | [[World sharedWorld] fdescribe:description flags:@{} closure:closure];
75 | }
76 |
77 | void qck_fcontext(NSString *description, QCKDSLEmptyBlock closure) {
78 | qck_fdescribe(description, closure);
79 | }
80 |
--------------------------------------------------------------------------------
/Example/Pods/Quick/Sources/QuickObjectiveC/DSL/World+DSL.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | @interface World (SWIFT_EXTENSION(Quick))
4 | - (void)beforeSuite:(void (^ __nonnull)(void))closure;
5 | - (void)afterSuite:(void (^ __nonnull)(void))closure;
6 | - (void)sharedExamples:(NSString * __nonnull)name closure:(void (^ __nonnull)(NSDictionary * __nonnull (^ __nonnull)(void)))closure;
7 | - (void)describe:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure;
8 | - (void)context:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure;
9 | - (void)fdescribe:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure;
10 | - (void)xdescribe:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure;
11 | - (void)beforeEach:(void (^ __nonnull)(void))closure;
12 | - (void)beforeEachWithMetadata:(void (^ __nonnull)(ExampleMetadata * __nonnull))closure;
13 | - (void)afterEach:(void (^ __nonnull)(void))closure;
14 | - (void)afterEachWithMetadata:(void (^ __nonnull)(ExampleMetadata * __nonnull))closure;
15 | - (void)itWithDescription:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line closure:(void (^ __nonnull)(void))closure;
16 | - (void)fitWithDescription:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line closure:(void (^ __nonnull)(void))closure;
17 | - (void)xitWithDescription:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line closure:(void (^ __nonnull)(void))closure;
18 | - (void)itBehavesLikeSharedExampleNamed:(NSString * __nonnull)name sharedExampleContext:(NSDictionary * __nonnull (^ __nonnull)(void))sharedExampleContext flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line;
19 | - (void)pending:(NSString * __nonnull)description closure:(void (^ __nonnull)(void))closure;
20 | @end
21 |
--------------------------------------------------------------------------------
/Example/Pods/Quick/Sources/QuickObjectiveC/NSString+QCKSelectorName.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | /**
4 | QuickSpec converts example names into test methods.
5 | Those test methods need valid selector names, which means no whitespace,
6 | control characters, etc. This category gives NSString objects an easy way
7 | to replace those illegal characters with underscores.
8 | */
9 | @interface NSString (QCKSelectorName)
10 |
11 | /**
12 | Returns a string with underscores in place of all characters that cannot
13 | be included in a selector (SEL) name.
14 | */
15 | @property (nonatomic, readonly) NSString *qck_selectorName;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/Example/Pods/Quick/Sources/QuickObjectiveC/NSString+QCKSelectorName.m:
--------------------------------------------------------------------------------
1 | #import "NSString+QCKSelectorName.h"
2 |
3 | @implementation NSString (QCKSelectorName)
4 |
5 | - (NSString *)qck_selectorName {
6 | static NSMutableCharacterSet *invalidCharacters = nil;
7 | static dispatch_once_t onceToken;
8 | dispatch_once(&onceToken, ^{
9 | invalidCharacters = [NSMutableCharacterSet new];
10 |
11 | NSCharacterSet *whitespaceCharacterSet = [NSCharacterSet whitespaceCharacterSet];
12 | NSCharacterSet *newlineCharacterSet = [NSCharacterSet newlineCharacterSet];
13 | NSCharacterSet *illegalCharacterSet = [NSCharacterSet illegalCharacterSet];
14 | NSCharacterSet *controlCharacterSet = [NSCharacterSet controlCharacterSet];
15 | NSCharacterSet *punctuationCharacterSet = [NSCharacterSet punctuationCharacterSet];
16 | NSCharacterSet *nonBaseCharacterSet = [NSCharacterSet nonBaseCharacterSet];
17 | NSCharacterSet *symbolCharacterSet = [NSCharacterSet symbolCharacterSet];
18 |
19 | [invalidCharacters formUnionWithCharacterSet:whitespaceCharacterSet];
20 | [invalidCharacters formUnionWithCharacterSet:newlineCharacterSet];
21 | [invalidCharacters formUnionWithCharacterSet:illegalCharacterSet];
22 | [invalidCharacters formUnionWithCharacterSet:controlCharacterSet];
23 | [invalidCharacters formUnionWithCharacterSet:punctuationCharacterSet];
24 | [invalidCharacters formUnionWithCharacterSet:nonBaseCharacterSet];
25 | [invalidCharacters formUnionWithCharacterSet:symbolCharacterSet];
26 | });
27 |
28 | NSArray *validComponents = [self componentsSeparatedByCharactersInSet:invalidCharacters];
29 |
30 | NSString *result = [validComponents componentsJoinedByString:@"_"];
31 |
32 | return ([result length] == 0
33 | ? @"_"
34 | : result);
35 | }
36 |
37 | @end
38 |
--------------------------------------------------------------------------------
/Example/Pods/Quick/Sources/QuickObjectiveC/Quick.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | //! Project version number for Quick.
4 | FOUNDATION_EXPORT double QuickVersionNumber;
5 |
6 | //! Project version string for Quick.
7 | FOUNDATION_EXPORT const unsigned char QuickVersionString[];
8 |
9 | #import "QuickSpec.h"
10 | #import "QCKDSL.h"
11 | #import "QuickConfiguration.h"
12 |
--------------------------------------------------------------------------------
/Example/Pods/Quick/Sources/QuickObjectiveC/QuickSpec.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | /**
4 | QuickSpec is a base class all specs written in Quick inherit from.
5 | They need to inherit from QuickSpec, a subclass of XCTestCase, in
6 | order to be discovered by the XCTest framework.
7 |
8 | XCTest automatically compiles a list of XCTestCase subclasses included
9 | in the test target. It iterates over each class in that list, and creates
10 | a new instance of that class for each test method. It then creates an
11 | "invocation" to execute that test method. The invocation is an instance of
12 | NSInvocation, which represents a single message send in Objective-C.
13 | The invocation is set on the XCTestCase instance, and the test is run.
14 |
15 | Most of the code in QuickSpec is dedicated to hooking into XCTest events.
16 | First, when the spec is first loaded and before it is sent any messages,
17 | the +[NSObject initialize] method is called. QuickSpec overrides this method
18 | to call +[QuickSpec spec]. This builds the example group stacks and
19 | registers them with Quick.World, a global register of examples.
20 |
21 | Then, XCTest queries QuickSpec for a list of test methods. Normally, XCTest
22 | automatically finds all methods whose selectors begin with the string "test".
23 | However, QuickSpec overrides this default behavior by implementing the
24 | +[XCTestCase testInvocations] method. This method iterates over each example
25 | registered in Quick.World, defines a new method for that example, and
26 | returns an invocation to call that method to XCTest. Those invocations are
27 | the tests that are run by XCTest. Their selector names are displayed in
28 | the Xcode test navigation bar.
29 | */
30 | @interface QuickSpec : XCTestCase
31 |
32 | /**
33 | Override this method in your spec to define a set of example groups
34 | and examples.
35 |
36 | @code
37 | override func spec() {
38 | describe("winter") {
39 | it("is coming") {
40 | // ...
41 | }
42 | }
43 | }
44 | @endcode
45 |
46 | See DSL.swift for more information on what syntax is available.
47 | */
48 | - (void)spec;
49 |
50 | @end
51 |
--------------------------------------------------------------------------------
/Example/Pods/Quick/Sources/QuickObjectiveC/World.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | @class ExampleGroup;
4 | @class ExampleMetadata;
5 |
6 | SWIFT_CLASS("_TtC5Quick5World")
7 | @interface World
8 |
9 | @property (nonatomic) ExampleGroup * __nullable currentExampleGroup;
10 | @property (nonatomic) ExampleMetadata * __nullable currentExampleMetadata;
11 | @property (nonatomic) BOOL isRunningAdditionalSuites;
12 | + (World * __nonnull)sharedWorld;
13 | - (void)configure:(void (^ __nonnull)(Configuration * __nonnull))closure;
14 | - (void)finalizeConfiguration;
15 | - (ExampleGroup * __nonnull)rootExampleGroupForSpecClass:(Class __nonnull)cls;
16 | - (NSArray * __nonnull)examplesForSpecClass:(Class __nonnull)specClass;
17 | - (void)performWithCurrentExampleGroup:(ExampleGroup * __nonnull)group closure:(void (^ __nonnull)(void))closure;
18 | @end
19 |
--------------------------------------------------------------------------------
/Example/Pods/Quick/Sources/QuickObjectiveC/XCTestSuite+QuickTestSuiteBuilder.m:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 | #import
4 |
5 | @interface XCTestSuite (QuickTestSuiteBuilder)
6 | @end
7 |
8 | @implementation XCTestSuite (QuickTestSuiteBuilder)
9 |
10 | /**
11 | In order to ensure we can correctly build dynamic test suites, we need to
12 | replace some of the default test suite constructors.
13 | */
14 | + (void)load {
15 | Method testCaseWithName = class_getClassMethod(self, @selector(testSuiteForTestCaseWithName:));
16 | Method hooked_testCaseWithName = class_getClassMethod(self, @selector(qck_hooked_testSuiteForTestCaseWithName:));
17 | method_exchangeImplementations(testCaseWithName, hooked_testCaseWithName);
18 | }
19 |
20 | /**
21 | The `+testSuiteForTestCaseWithName:` method is called when a specific test case
22 | class is run from the Xcode test navigator. If the built test suite is `nil`,
23 | Xcode will not run any tests for that test case.
24 |
25 | Given if the following test case class is run from the Xcode test navigator:
26 |
27 | FooSpec
28 | testFoo
29 | testBar
30 |
31 | XCTest will invoke this once per test case, with test case names following this format:
32 |
33 | FooSpec/testFoo
34 | FooSpec/testBar
35 | */
36 | + (nullable instancetype)qck_hooked_testSuiteForTestCaseWithName:(nonnull NSString *)name {
37 | return [QuickTestSuite selectedTestSuiteForTestCaseWithName:name];
38 | }
39 |
40 | @end
41 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016 Brad Hilton
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/Sources/Reflection/Advance.swift:
--------------------------------------------------------------------------------
1 | // TODO: Remove uses of advance()
2 | extension Strideable {
3 | mutating func advance() {
4 | self = advanced(by: 1)
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/Sources/Reflection/Any+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Any+Extensions.swift
3 | // Reflection
4 | //
5 | // Created by Bradley Hilton on 10/17/16.
6 | //
7 | //
8 |
9 | protocol AnyExtensions {}
10 |
11 | extension AnyExtensions {
12 |
13 | static func construct(constructor: (Property.Description) throws -> Any) throws -> Any {
14 | return try Reflection.construct(self, constructor: constructor)
15 | }
16 |
17 | static func construct(dictionary: [String: Any]) throws -> Any {
18 | return try Reflection.construct(self, dictionary: dictionary)
19 | }
20 |
21 | static func isValueTypeOrSubtype(_ value: Any) -> Bool {
22 | return value is Self
23 | }
24 |
25 | static func value(from storage: UnsafeRawPointer) -> Any {
26 | return storage.assumingMemoryBound(to: self).pointee
27 | }
28 |
29 | static func write(_ value: Any, to storage: UnsafeMutableRawPointer) throws {
30 | guard let this = value as? Self else {
31 | throw ReflectionError.valueIsNotType(value: value, type: self)
32 | }
33 | storage.assumingMemoryBound(to: self).initialize(to: this)
34 | }
35 |
36 | }
37 |
38 | func extensions(of type: Any.Type) -> AnyExtensions.Type {
39 | struct Extensions : AnyExtensions {}
40 | var extensions: AnyExtensions.Type = Extensions.self
41 | withUnsafePointer(to: &extensions) { pointer in
42 | UnsafeMutableRawPointer(mutating: pointer).assumingMemoryBound(to: Any.Type.self).pointee = type
43 | }
44 | return extensions
45 | }
46 |
47 | func extensions(of value: Any) -> AnyExtensions {
48 | struct Extensions : AnyExtensions {}
49 | var extensions: AnyExtensions = Extensions()
50 | withUnsafePointer(to: &extensions) { pointer in
51 | UnsafeMutableRawPointer(mutating: pointer).assumingMemoryBound(to: Any.self).pointee = value
52 | }
53 | return extensions
54 | }
55 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/Sources/Reflection/Array+Extensions.swift:
--------------------------------------------------------------------------------
1 | protocol UTF8Initializable {
2 | init?(validatingUTF8: UnsafePointer)
3 | }
4 |
5 | extension String : UTF8Initializable {}
6 |
7 | extension Array where Element : UTF8Initializable {
8 |
9 | init(utf8Strings: UnsafePointer) {
10 | var strings = [Element]()
11 | var pointer = utf8Strings
12 | while let string = Element(validatingUTF8: pointer) {
13 | strings.append(string)
14 | while pointer.pointee != 0 {
15 | pointer.advance()
16 | }
17 | pointer.advance()
18 | guard pointer.pointee != 0 else { break }
19 | }
20 | self = strings
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/Sources/Reflection/Construct.swift:
--------------------------------------------------------------------------------
1 | /// Create a struct with a constructor method. Return a value of `property.type` for each property.
2 | public func construct(_ type: T.Type = T.self, constructor: (Property.Description) throws -> Any) throws -> T {
3 | if Metadata(type: T.self)?.kind == .struct {
4 | return try constructValueType(constructor)
5 | } else {
6 | throw ReflectionError.notStruct(type: T.self)
7 | }
8 | }
9 |
10 | /// Create a struct with a constructor method. Return a value of `property.type` for each property.
11 | public func construct(_ type: Any.Type, constructor: (Property.Description) throws -> Any) throws -> Any {
12 | return try extensions(of: type).construct(constructor: constructor)
13 | }
14 |
15 | private func constructValueType(_ constructor: (Property.Description) throws -> Any) throws -> T {
16 | guard Metadata(type: T.self)?.kind == .struct else { throw ReflectionError.notStruct(type: T.self) }
17 | let pointer = UnsafeMutablePointer.allocate(capacity: 1)
18 | defer { pointer.deallocate(capacity: 1) }
19 | var values: [Any] = []
20 | try constructType(storage: UnsafeMutableRawPointer(pointer), values: &values, properties: properties(T.self), constructor: constructor)
21 | return pointer.move()
22 | }
23 |
24 | private func constructType(storage: UnsafeMutableRawPointer, values: inout [Any], properties: [Property.Description], constructor: (Property.Description) throws -> Any) throws {
25 | var errors = [Error]()
26 | for property in properties {
27 | do {
28 | let value = try constructor(property)
29 | values.append(value)
30 | try property.write(value, to: storage)
31 | } catch {
32 | errors.append(error)
33 | }
34 | }
35 | if errors.count > 0 {
36 | throw ConstructionErrors(errors: errors)
37 | }
38 | }
39 |
40 | /// Create a struct from a dictionary.
41 | public func construct(_ type: T.Type = T.self, dictionary: [String: Any]) throws -> T {
42 | return try construct(constructor: constructorForDictionary(dictionary))
43 | }
44 |
45 | /// Create a struct from a dictionary.
46 | public func construct(_ type: Any.Type, dictionary: [String: Any]) throws -> Any {
47 | return try extensions(of: type).construct(dictionary: dictionary)
48 | }
49 |
50 | private func constructorForDictionary(_ dictionary: [String: Any]) -> (Property.Description) throws -> Any {
51 | return { property in
52 | if let value = dictionary[property.key] {
53 | return value
54 | } else if let expressibleByNilLiteral = property.type as? ExpressibleByNilLiteral.Type {
55 | return expressibleByNilLiteral.init(nilLiteral: ())
56 | } else {
57 | throw ReflectionError.requiredValueMissing(key: property.key)
58 | }
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/Sources/Reflection/Get.swift:
--------------------------------------------------------------------------------
1 | /// Get value for key from instance
2 | public func get(_ key: String, from instance: Any) throws -> Any {
3 | guard let value = try properties(instance).first(where: { $0.key == key })?.value else {
4 | throw ReflectionError.instanceHasNoKey(type: type(of: instance), key: key)
5 | }
6 | return value
7 | }
8 |
9 | /// Get value for key from instance as type `T`
10 | public func get(_ key: String, from instance: Any) throws -> T {
11 | let any: Any = try get(key, from: instance)
12 | guard let value = any as? T else {
13 | throw ReflectionError.valueIsNotType(value: any, type: T.self)
14 | }
15 | return value
16 | }
17 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/Sources/Reflection/Identity.swift:
--------------------------------------------------------------------------------
1 | /// Tests if `value` is `type` or a subclass of `type`
2 | public func value(_ value: Any, is type: Any.Type) -> Bool {
3 | return extensions(of: type).isValueTypeOrSubtype(value)
4 | }
5 |
6 | /// Tests equality of any two existential types
7 | public func ==(lhs: Any.Type, rhs: Any.Type) -> Bool {
8 | return Metadata(type: lhs) == Metadata(type: rhs)
9 | }
10 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/Sources/Reflection/MemoryProperties.swift:
--------------------------------------------------------------------------------
1 | public func alignof(_ x: Any.Type) -> Int {
2 | return Metadata(type: x).valueWitnessTable.align
3 | }
4 |
5 | public func sizeof(_ x: Any.Type) -> Int {
6 | return Metadata(type: x).valueWitnessTable.size
7 | }
8 |
9 | public func strideof(_ x: Any.Type) -> Int {
10 | return Metadata(type: x).valueWitnessTable.stride
11 | }
12 |
13 | public func alignofValue(_ x: Any) -> Int {
14 | return alignof(type(of: x))
15 | }
16 |
17 | public func sizeofValue(_ x: Any) -> Int {
18 | return sizeof(type(of: x))
19 | }
20 |
21 | public func strideofValue(_ x: Any) -> Int {
22 | return strideof(type(of: x))
23 | }
24 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/Sources/Reflection/Metadata+Class.swift:
--------------------------------------------------------------------------------
1 | extension Metadata {
2 | struct Class : NominalType {
3 |
4 | static let kind: Kind? = .class
5 | var pointer: UnsafePointer<_Metadata._Class>
6 |
7 | var nominalTypeDescriptorOffsetLocation: Int {
8 | return is64BitPlatform ? 8 : 11
9 | }
10 |
11 | var superclass: Class? {
12 | guard let superclass = pointer.pointee.superclass else { return nil }
13 | return Metadata.Class(type: superclass)
14 | }
15 |
16 | }
17 | }
18 |
19 | extension _Metadata {
20 | struct _Class {
21 | var kind: Int
22 | var superclass: Any.Type?
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/Sources/Reflection/Metadata+Kind.swift:
--------------------------------------------------------------------------------
1 | // https://github.com/apple/swift/blob/swift-3.0-branch/include/swift/ABI/MetadataKind.def
2 | extension Metadata {
3 | static let kind: Kind? = nil
4 |
5 | enum Kind {
6 | case `struct`
7 | case `enum`
8 | case optional
9 | case opaque
10 | case tuple
11 | case function
12 | case existential
13 | case metatype
14 | case objCClassWrapper
15 | case existentialMetatype
16 | case foreignClass
17 | case heapLocalVariable
18 | case heapGenericLocalVariable
19 | case errorObject
20 | case `class`
21 | init(flag: Int) {
22 | switch flag {
23 | case 1: self = .struct
24 | case 2: self = .enum
25 | case 3: self = .optional
26 | case 8: self = .opaque
27 | case 9: self = .tuple
28 | case 10: self = .function
29 | case 12: self = .existential
30 | case 13: self = .metatype
31 | case 14: self = .objCClassWrapper
32 | case 15: self = .existentialMetatype
33 | case 16: self = .foreignClass
34 | case 64: self = .heapLocalVariable
35 | case 65: self = .heapGenericLocalVariable
36 | case 128: self = .errorObject
37 | default: self = .class
38 | }
39 | }
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/Sources/Reflection/Metadata+Struct.swift:
--------------------------------------------------------------------------------
1 | extension Metadata {
2 | struct Struct : NominalType {
3 | static let kind: Kind? = .struct
4 | var pointer: UnsafePointer<_Metadata._Struct>
5 | var nominalTypeDescriptorOffsetLocation: Int {
6 | return 1
7 | }
8 | }
9 | }
10 |
11 | extension _Metadata {
12 | struct _Struct {
13 | var kind: Int
14 | var nominalTypeDescriptorOffset: Int
15 | var parent: Metadata?
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/Sources/Reflection/Metadata+Tuple.swift:
--------------------------------------------------------------------------------
1 | extension Metadata {
2 | struct Tuple : MetadataType {
3 | static let kind: Kind? = .tuple
4 | var pointer: UnsafePointer
5 | var labels: [String?] {
6 | guard var pointer = UnsafePointer(bitPattern: pointer[2]) else { return [] }
7 | var labels = [String?]()
8 | var string = ""
9 | while pointer.pointee != 0 {
10 | guard pointer.pointee != 32 else {
11 | labels.append(string.isEmpty ? nil : string)
12 | string = ""
13 | pointer.advance()
14 | continue
15 | }
16 | string.append(String(UnicodeScalar(UInt8(bitPattern: pointer.pointee))))
17 | pointer.advance()
18 | }
19 | return labels
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/Sources/Reflection/Metadata.swift:
--------------------------------------------------------------------------------
1 | struct Metadata : MetadataType {
2 | var pointer: UnsafePointer
3 |
4 | init(type: Any.Type) {
5 | self.init(pointer: unsafeBitCast(type, to: UnsafePointer.self))
6 | }
7 | }
8 |
9 | struct _Metadata {}
10 |
11 | var is64BitPlatform: Bool {
12 | return sizeof(Int.self) == sizeof(Int64.self)
13 | }
14 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/Sources/Reflection/MetadataType.swift:
--------------------------------------------------------------------------------
1 | protocol MetadataType : PointerType {
2 | static var kind: Metadata.Kind? { get }
3 | }
4 |
5 | extension MetadataType {
6 | var valueWitnessTable: ValueWitnessTable {
7 | return ValueWitnessTable(pointer: UnsafePointer>(pointer).advanced(by: -1).pointee)
8 | }
9 |
10 | var kind: Metadata.Kind {
11 | return Metadata.Kind(flag: UnsafePointer(pointer).pointee)
12 | }
13 |
14 | init?(type: Any.Type) {
15 | self.init(pointer: unsafeBitCast(type, to: UnsafePointer.self))
16 | if let kind = type(of: self).kind, kind != self.kind {
17 | return nil
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/Sources/Reflection/NominalType.swift:
--------------------------------------------------------------------------------
1 | protocol NominalType : MetadataType {
2 | var nominalTypeDescriptorOffsetLocation: Int { get }
3 | }
4 |
5 | extension NominalType {
6 | var nominalTypeDescriptor: NominalTypeDescriptor {
7 | let pointer = UnsafePointer(self.pointer)
8 | let base = pointer.advanced(by: nominalTypeDescriptorOffsetLocation)
9 | return NominalTypeDescriptor(pointer: relativePointer(base: base, offset: base.pointee))
10 | }
11 |
12 | var fieldTypes: [Any.Type]? {
13 | guard let function = nominalTypeDescriptor.fieldTypesAccessor else { return nil }
14 | return (0..(pointer)).advanced(by: $0).pointee, to: Any.Type.self)
16 | }
17 | }
18 |
19 | var fieldOffsets: [Int]? {
20 | let vectorOffset = nominalTypeDescriptor.fieldOffsetVector
21 | guard vectorOffset != 0 else { return nil }
22 | return (0..(pointer)[vectorOffset + $0]
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/Sources/Reflection/NominalTypeDescriptor.swift:
--------------------------------------------------------------------------------
1 | struct NominalTypeDescriptor : PointerType {
2 | var pointer: UnsafePointer<_NominalTypeDescriptor>
3 |
4 | var mangledName: String {
5 | return String(cString: relativePointer(base: pointer, offset: pointer.pointee.mangledName) as UnsafePointer)
6 | }
7 |
8 | var numberOfFields: Int {
9 | return Int(pointer.pointee.numberOfFields)
10 | }
11 |
12 | var fieldOffsetVector: Int {
13 | return Int(pointer.pointee.fieldOffsetVector)
14 | }
15 |
16 | var fieldNames: [String] {
17 | let p = UnsafePointer(self.pointer)
18 | return Array(utf8Strings: relativePointer(base: p.advanced(by: 3), offset: self.pointer.pointee.fieldNames))
19 | }
20 |
21 | typealias FieldsTypeAccessor = @convention(c) (UnsafePointer) -> UnsafePointer>
22 |
23 | var fieldTypesAccessor: FieldsTypeAccessor? {
24 | let offset = pointer.pointee.fieldTypesAccessor
25 | guard offset != 0 else { return nil }
26 | let p = UnsafePointer(self.pointer)
27 | let offsetPointer: UnsafePointer = relativePointer(base: p.advanced(by: 4), offset: offset)
28 | return unsafeBitCast(offsetPointer, to: FieldsTypeAccessor.self)
29 | }
30 | }
31 |
32 | struct _NominalTypeDescriptor {
33 | var mangledName: Int32
34 | var numberOfFields: Int32
35 | var fieldOffsetVector: Int32
36 | var fieldNames: Int32
37 | var fieldTypesAccessor: Int32
38 | }
39 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/Sources/Reflection/PointerType.swift:
--------------------------------------------------------------------------------
1 | protocol PointerType : Equatable {
2 | associatedtype Pointee
3 | var pointer: UnsafePointer { get set }
4 | }
5 |
6 | extension PointerType {
7 | init(pointer: UnsafePointer) {
8 | func cast(_ value: T) -> U {
9 | return unsafeBitCast(value, to: U.self)
10 | }
11 | self = cast(UnsafePointer(pointer))
12 | }
13 | }
14 |
15 | func ==(lhs: T, rhs: T) -> Bool {
16 | return lhs.pointer == rhs.pointer
17 | }
18 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/Sources/Reflection/Properties.swift:
--------------------------------------------------------------------------------
1 | private struct HashedType : Hashable {
2 | let hashValue: Int
3 | init(_ type: Any.Type) {
4 | hashValue = unsafeBitCast(type, to: Int.self)
5 | }
6 | }
7 |
8 | private func == (lhs: HashedType, rhs: HashedType) -> Bool {
9 | return lhs.hashValue == rhs.hashValue
10 | }
11 |
12 | private var cachedProperties = [HashedType : Array]()
13 |
14 | /// An instance property
15 | public struct Property {
16 | public let key: String
17 | public let value: Any
18 |
19 | /// An instance property description
20 | public struct Description {
21 | public let key: String
22 | public let type: Any.Type
23 | let offset: Int
24 | func write(_ value: Any, to storage: UnsafeMutableRawPointer) throws {
25 | return try extensions(of: type).write(value, to: storage.advanced(by: offset))
26 | }
27 | }
28 | }
29 |
30 | /// Retrieve properties for `instance`
31 | public func properties(_ instance: Any) throws -> [Property] {
32 | let props = try properties(type(of: instance))
33 | var copy = extensions(of: instance)
34 | let storage = copy.storage()
35 | return props.map { nextProperty(description: $0, storage: storage) }
36 | }
37 |
38 | private func nextProperty(description: Property.Description, storage: UnsafeRawPointer) -> Property {
39 | return Property(
40 | key: description.key,
41 | value: extensions(of: description.type).value(from: storage.advanced(by: description.offset))
42 | )
43 | }
44 |
45 | /// Retrieve property descriptions for `type`
46 | public func properties(_ type: Any.Type) throws -> [Property.Description] {
47 | let hashedType = HashedType(type)
48 | if let properties = cachedProperties[hashedType] {
49 | return properties
50 | } else if let nominalType = Metadata.Struct(type: type) {
51 | return try fetchAndSaveProperties(nominalType: nominalType, hashedType: hashedType)
52 | } else if let nominalType = Metadata.Class(type: type) {
53 | return try fetchAndSaveProperties(nominalType: nominalType, hashedType: hashedType)
54 | } else {
55 | throw ReflectionError.notStruct(type: type)
56 | }
57 | }
58 |
59 | private func fetchAndSaveProperties(nominalType: T, hashedType: HashedType) throws -> [Property.Description] {
60 | let properties = try propertiesForNominalType(nominalType)
61 | cachedProperties[hashedType] = properties
62 | return properties
63 | }
64 |
65 | private func propertiesForNominalType(_ type: T) throws -> [Property.Description] {
66 | guard type.nominalTypeDescriptor.numberOfFields != 0 else { return [] }
67 | guard let fieldTypes = type.fieldTypes, let fieldOffsets = type.fieldOffsets else {
68 | throw ReflectionError.unexpected
69 | }
70 | let fieldNames = type.nominalTypeDescriptor.fieldNames
71 | return (0.. Bool {
24 | switch (lhs, rhs) {
25 | case (.notStruct(type: let lhs), .notStruct(type: let rhs)): return lhs == rhs
26 | case (.instanceHasNoKey(type: let lhsType, key: let lhsKey),
27 | .instanceHasNoKey(type: let rhsType, key: let rhsKey)):
28 | return lhsType == rhsType && lhsKey == rhsKey
29 | case (.requiredValueMissing(key: let lhs), .requiredValueMissing(key: let rhs)): return lhs == rhs
30 | case (.unexpected, .unexpected): return true
31 | default: return lhs.description == rhs.description
32 | }
33 | }
34 |
35 | public struct ConstructionErrors : Error, CustomStringConvertible {
36 | public let errors: [Error]
37 | public var description: String {
38 | return errors.reduce("Reflection Construction Errors:") { $0 + "\n\t\($1)" }
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/Sources/Reflection/RelativePointer.swift:
--------------------------------------------------------------------------------
1 | func relativePointer(base: UnsafePointer, offset: U) -> UnsafePointer where U : Integer {
2 | return UnsafeRawPointer(base).advanced(by: Int(integer: offset)).assumingMemoryBound(to: V.self)
3 | }
4 |
5 | extension Int {
6 | fileprivate init(integer: T) {
7 | switch integer {
8 | case let value as Int: self = value
9 | case let value as Int32: self = Int(value)
10 | case let value as Int16: self = Int(value)
11 | case let value as Int8: self = Int(value)
12 | default: self = 0
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/Sources/Reflection/Set.swift:
--------------------------------------------------------------------------------
1 | /// Set value for key of an instance
2 | public func set(_ value: Any, key: String, for instance: inout Any) throws {
3 | try property(type: type(of: instance), key: key).write(value, to: mutableStorage(instance: &instance))
4 | }
5 |
6 | /// Set value for key of an instance
7 | public func set(_ value: Any, key: String, for instance: AnyObject) throws {
8 | var copy: Any = instance
9 | try set(value, key: key, for: ©)
10 | }
11 |
12 | /// Set value for key of an instance
13 | public func set(_ value: Any, key: String, for instance: inout T) throws {
14 | try property(type: T.self, key: key).write(value, to: mutableStorage(instance: &instance))
15 | }
16 |
17 | private func property(type: Any.Type, key: String) throws -> Property.Description {
18 | guard let property = try properties(type).first(where: { $0.key == key }) else { throw ReflectionError.instanceHasNoKey(type: type, key: key) }
19 | return property
20 | }
21 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/Sources/Reflection/Storage.swift:
--------------------------------------------------------------------------------
1 | extension AnyExtensions {
2 |
3 | mutating func mutableStorage() -> UnsafeMutableRawPointer {
4 | return Reflection.mutableStorage(instance: &self)
5 | }
6 |
7 | mutating func storage() -> UnsafeRawPointer {
8 | return Reflection.storage(instance: &self)
9 | }
10 |
11 | }
12 |
13 | func mutableStorage(instance: inout T) -> UnsafeMutableRawPointer {
14 | return UnsafeMutableRawPointer(mutating: storage(instance: &instance))
15 | }
16 |
17 | func storage(instance: inout T) -> UnsafeRawPointer {
18 | return withUnsafePointer(to: &instance) { pointer in
19 | if type(of: instance) is AnyClass {
20 | return UnsafeRawPointer(bitPattern: UnsafePointer(pointer).pointee)!
21 | } else {
22 | return UnsafeRawPointer(pointer)
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/Sources/Reflection/UnsafePointer+Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UnsafePointer+Extensions.swift
3 | // Reflection
4 | //
5 | // Created by Bradley Hilton on 10/29/16.
6 | //
7 | //
8 |
9 | extension UnsafePointer {
10 |
11 | init(_ pointer: UnsafePointer) {
12 | self = UnsafeRawPointer(pointer).assumingMemoryBound(to: Pointee.self)
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/Example/Pods/Reflection/Sources/Reflection/ValueWitnessTable.swift:
--------------------------------------------------------------------------------
1 | // https://github.com/apple/swift/blob/master/lib/IRGen/ValueWitness.h
2 | struct ValueWitnessTable : PointerType {
3 | var pointer: UnsafePointer<_ValueWitnessTable>
4 |
5 | private var alignmentMask: Int {
6 | return 0x0FFFF
7 | }
8 |
9 | var size: Int {
10 | return pointer.pointee.size
11 | }
12 |
13 | var align: Int {
14 | return (pointer.pointee.align & alignmentMask) + 1
15 | }
16 |
17 | var stride: Int {
18 | return pointer.pointee.stride
19 | }
20 | }
21 |
22 | struct _ValueWitnessTable {
23 | let destroyBuffer: Int
24 | let initializeBufferWithCopyOfBuffer: Int
25 | let projectBuffer: Int
26 | let deallocateBuffer: Int
27 | let destroy: Int
28 | let initializeBufferWithCopy: Int
29 | let initializeWithCopy: Int
30 | let assignWithCopy: Int
31 | let initializeBufferWithTake: Int
32 | let initializeWithTake: Int
33 | let assignWithTake: Int
34 | let allocateBuffer: Int
35 | let initializeBufferWithTakeOrBuffer: Int
36 | let destroyArray: Int
37 | let initializeArrayWithCopy: Int
38 | let initializeArrayWithTakeFrontToBack: Int
39 | let initializeArrayWithTakeBackToFront: Int
40 | let size: Int
41 | let align: Int
42 | let stride: Int
43 | }
44 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Nimble/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 5.1.1
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Nimble/Nimble-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Nimble : NSObject
3 | @end
4 | @implementation PodsDummy_Nimble
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Nimble/Nimble-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Nimble/Nimble-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 | #import "CwlCatchException.h"
6 | #import "CwlCatchBadInstruction.h"
7 | #import "mach_excServer.h"
8 | #import "Nimble.h"
9 | #import "DSL.h"
10 | #import "NMBExceptionCapture.h"
11 | #import "NMBStringify.h"
12 |
13 | FOUNDATION_EXPORT double NimbleVersionNumber;
14 | FOUNDATION_EXPORT const unsigned char NimbleVersionString[];
15 |
16 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Nimble/Nimble.modulemap:
--------------------------------------------------------------------------------
1 | framework module Nimble {
2 | umbrella header "Nimble-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Nimble/Nimble.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Nimble
2 | ENABLE_BITCODE = NO
3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks"
4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
5 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public"
6 | OTHER_LDFLAGS = -weak-lswiftXCTest -weak_framework "XCTest"
7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
8 | PODS_BUILD_DIR = $BUILD_DIR
9 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
10 | PODS_ROOT = ${SRCROOT}
11 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
12 | SKIP_INSTALL = YES
13 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/PersistentStorageSerializable-OSX/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/PersistentStorageSerializable-OSX/PersistentStorageSerializable-OSX-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_PersistentStorageSerializable_OSX : NSObject
3 | @end
4 | @implementation PodsDummy_PersistentStorageSerializable_OSX
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/PersistentStorageSerializable-OSX/PersistentStorageSerializable-OSX-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/PersistentStorageSerializable-OSX/PersistentStorageSerializable-OSX-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 | #import "SwiftTryCatch.h"
6 |
7 | FOUNDATION_EXPORT double PersistentStorageSerializableVersionNumber;
8 | FOUNDATION_EXPORT const unsigned char PersistentStorageSerializableVersionString[];
9 |
10 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/PersistentStorageSerializable-OSX/PersistentStorageSerializable-OSX.modulemap:
--------------------------------------------------------------------------------
1 | framework module PersistentStorageSerializable {
2 | umbrella header "PersistentStorageSerializable-OSX-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/PersistentStorageSerializable-OSX/PersistentStorageSerializable-OSX.xcconfig:
--------------------------------------------------------------------------------
1 | CODE_SIGN_IDENTITY =
2 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/PersistentStorageSerializable-OSX
3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Reflection-OSX"
4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
5 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public"
6 | OTHER_LDFLAGS = -framework "Foundation"
7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
8 | PODS_BUILD_DIR = $BUILD_DIR
9 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
10 | PODS_ROOT = ${SRCROOT}
11 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
12 | SKIP_INSTALL = YES
13 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/PersistentStorageSerializable-iOS/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/PersistentStorageSerializable-iOS/PersistentStorageSerializable-iOS-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_PersistentStorageSerializable_iOS : NSObject
3 | @end
4 | @implementation PodsDummy_PersistentStorageSerializable_iOS
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/PersistentStorageSerializable-iOS/PersistentStorageSerializable-iOS-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/PersistentStorageSerializable-iOS/PersistentStorageSerializable-iOS-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 | #import "SwiftTryCatch.h"
6 |
7 | FOUNDATION_EXPORT double PersistentStorageSerializableVersionNumber;
8 | FOUNDATION_EXPORT const unsigned char PersistentStorageSerializableVersionString[];
9 |
10 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/PersistentStorageSerializable-iOS/PersistentStorageSerializable-iOS.modulemap:
--------------------------------------------------------------------------------
1 | framework module PersistentStorageSerializable {
2 | umbrella header "PersistentStorageSerializable-iOS-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/PersistentStorageSerializable-iOS/PersistentStorageSerializable-iOS.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/PersistentStorageSerializable-iOS
2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Reflection-iOS"
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public"
5 | OTHER_LDFLAGS = -framework "Foundation"
6 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
7 | PODS_BUILD_DIR = $BUILD_DIR
8 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
9 | PODS_ROOT = ${SRCROOT}
10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
11 | SKIP_INSTALL = YES
12 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-PersistentStorageSerializable_MacExample/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-PersistentStorageSerializable_MacExample/Pods-PersistentStorageSerializable_MacExample-acknowledgements.markdown:
--------------------------------------------------------------------------------
1 | # Acknowledgements
2 | This application makes use of the following third party libraries:
3 |
4 | ## PersistentStorageSerializable
5 |
6 | Copyright (c) 2017 IvanRublev
7 |
8 | Permission is hereby granted, free of charge, to any person obtaining a copy
9 | of this software and associated documentation files (the "Software"), to deal
10 | in the Software without restriction, including without limitation the rights
11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 | copies of the Software, and to permit persons to whom the Software is
13 | furnished to do so, subject to the following conditions:
14 |
15 | The above copyright notice and this permission notice shall be included in
16 | all copies or substantial portions of the Software.
17 |
18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 | THE SOFTWARE.
25 |
26 |
27 | ## Reflection
28 |
29 | The MIT License (MIT)
30 |
31 | Copyright (c) 2016 Brad Hilton
32 |
33 | Permission is hereby granted, free of charge, to any person obtaining a copy
34 | of this software and associated documentation files (the "Software"), to deal
35 | in the Software without restriction, including without limitation the rights
36 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37 | copies of the Software, and to permit persons to whom the Software is
38 | furnished to do so, subject to the following conditions:
39 |
40 | The above copyright notice and this permission notice shall be included in all
41 | copies or substantial portions of the Software.
42 |
43 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49 | SOFTWARE.
50 |
51 | Generated by CocoaPods - https://cocoapods.org
52 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-PersistentStorageSerializable_MacExample/Pods-PersistentStorageSerializable_MacExample-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_PersistentStorageSerializable_MacExample : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_PersistentStorageSerializable_MacExample
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-PersistentStorageSerializable_MacExample/Pods-PersistentStorageSerializable_MacExample-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
6 | FOUNDATION_EXPORT double Pods_PersistentStorageSerializable_MacExampleVersionNumber;
7 | FOUNDATION_EXPORT const unsigned char Pods_PersistentStorageSerializable_MacExampleVersionString[];
8 |
9 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-PersistentStorageSerializable_MacExample/Pods-PersistentStorageSerializable_MacExample.debug.xcconfig:
--------------------------------------------------------------------------------
1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
2 | CODE_SIGN_IDENTITY =
3 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES
4 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/PersistentStorageSerializable-OSX" "$PODS_CONFIGURATION_BUILD_DIR/Reflection-OSX"
5 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
6 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks'
7 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/PersistentStorageSerializable-OSX/PersistentStorageSerializable.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Reflection-OSX/Reflection.framework/Headers"
8 | OTHER_LDFLAGS = $(inherited) -framework "PersistentStorageSerializable" -framework "Reflection"
9 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
10 | PODS_BUILD_DIR = $BUILD_DIR
11 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
12 | PODS_ROOT = ${SRCROOT}/Pods
13 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-PersistentStorageSerializable_MacExample/Pods-PersistentStorageSerializable_MacExample.modulemap:
--------------------------------------------------------------------------------
1 | framework module Pods_PersistentStorageSerializable_MacExample {
2 | umbrella header "Pods-PersistentStorageSerializable_MacExample-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-PersistentStorageSerializable_MacExample/Pods-PersistentStorageSerializable_MacExample.release.xcconfig:
--------------------------------------------------------------------------------
1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
2 | CODE_SIGN_IDENTITY =
3 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES
4 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/PersistentStorageSerializable-OSX" "$PODS_CONFIGURATION_BUILD_DIR/Reflection-OSX"
5 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
6 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks'
7 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/PersistentStorageSerializable-OSX/PersistentStorageSerializable.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Reflection-OSX/Reflection.framework/Headers"
8 | OTHER_LDFLAGS = $(inherited) -framework "PersistentStorageSerializable" -framework "Reflection"
9 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
10 | PODS_BUILD_DIR = $BUILD_DIR
11 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
12 | PODS_ROOT = ${SRCROOT}/Pods
13 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-PersistentStorageSerializable_Tests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-PersistentStorageSerializable_Tests/Pods-PersistentStorageSerializable_Tests-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_PersistentStorageSerializable_Tests : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_PersistentStorageSerializable_Tests
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-PersistentStorageSerializable_Tests/Pods-PersistentStorageSerializable_Tests-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
6 | FOUNDATION_EXPORT double Pods_PersistentStorageSerializable_TestsVersionNumber;
7 | FOUNDATION_EXPORT const unsigned char Pods_PersistentStorageSerializable_TestsVersionString[];
8 |
9 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-PersistentStorageSerializable_Tests/Pods-PersistentStorageSerializable_Tests.debug.xcconfig:
--------------------------------------------------------------------------------
1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
2 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES
3 | FRAMEWORK_SEARCH_PATHS = $(inherited) $(PLATFORM_DIR)/Developer/Library/Frameworks "$PODS_CONFIGURATION_BUILD_DIR/Nimble" "$PODS_CONFIGURATION_BUILD_DIR/PersistentStorageSerializable-iOS" "$PODS_CONFIGURATION_BUILD_DIR/Quick" "$PODS_CONFIGURATION_BUILD_DIR/Reflection-iOS"
4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
6 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Nimble/Nimble.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/PersistentStorageSerializable-iOS/PersistentStorageSerializable.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Quick/Quick.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Reflection-iOS/Reflection.framework/Headers"
7 | OTHER_LDFLAGS = $(inherited) -framework "Nimble" -framework "PersistentStorageSerializable" -framework "Quick" -framework "Reflection"
8 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
9 | PODS_BUILD_DIR = $BUILD_DIR
10 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
11 | PODS_ROOT = ${SRCROOT}/Pods
12 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-PersistentStorageSerializable_Tests/Pods-PersistentStorageSerializable_Tests.modulemap:
--------------------------------------------------------------------------------
1 | framework module Pods_PersistentStorageSerializable_Tests {
2 | umbrella header "Pods-PersistentStorageSerializable_Tests-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-PersistentStorageSerializable_Tests/Pods-PersistentStorageSerializable_Tests.release.xcconfig:
--------------------------------------------------------------------------------
1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
2 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES
3 | FRAMEWORK_SEARCH_PATHS = $(inherited) $(PLATFORM_DIR)/Developer/Library/Frameworks "$PODS_CONFIGURATION_BUILD_DIR/Nimble" "$PODS_CONFIGURATION_BUILD_DIR/PersistentStorageSerializable-iOS" "$PODS_CONFIGURATION_BUILD_DIR/Quick" "$PODS_CONFIGURATION_BUILD_DIR/Reflection-iOS"
4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
6 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Nimble/Nimble.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/PersistentStorageSerializable-iOS/PersistentStorageSerializable.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Quick/Quick.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Reflection-iOS/Reflection.framework/Headers"
7 | OTHER_LDFLAGS = $(inherited) -framework "Nimble" -framework "PersistentStorageSerializable" -framework "Quick" -framework "Reflection"
8 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
9 | PODS_BUILD_DIR = $BUILD_DIR
10 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
11 | PODS_ROOT = ${SRCROOT}/Pods
12 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-PersistentStorageSerializable_iOSExample/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-PersistentStorageSerializable_iOSExample/Pods-PersistentStorageSerializable_iOSExample-acknowledgements.markdown:
--------------------------------------------------------------------------------
1 | # Acknowledgements
2 | This application makes use of the following third party libraries:
3 |
4 | ## PersistentStorageSerializable
5 |
6 | Copyright (c) 2017 IvanRublev
7 |
8 | Permission is hereby granted, free of charge, to any person obtaining a copy
9 | of this software and associated documentation files (the "Software"), to deal
10 | in the Software without restriction, including without limitation the rights
11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 | copies of the Software, and to permit persons to whom the Software is
13 | furnished to do so, subject to the following conditions:
14 |
15 | The above copyright notice and this permission notice shall be included in
16 | all copies or substantial portions of the Software.
17 |
18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 | THE SOFTWARE.
25 |
26 |
27 | ## Reflection
28 |
29 | The MIT License (MIT)
30 |
31 | Copyright (c) 2016 Brad Hilton
32 |
33 | Permission is hereby granted, free of charge, to any person obtaining a copy
34 | of this software and associated documentation files (the "Software"), to deal
35 | in the Software without restriction, including without limitation the rights
36 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37 | copies of the Software, and to permit persons to whom the Software is
38 | furnished to do so, subject to the following conditions:
39 |
40 | The above copyright notice and this permission notice shall be included in all
41 | copies or substantial portions of the Software.
42 |
43 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49 | SOFTWARE.
50 |
51 | Generated by CocoaPods - https://cocoapods.org
52 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-PersistentStorageSerializable_iOSExample/Pods-PersistentStorageSerializable_iOSExample-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_PersistentStorageSerializable_iOSExample : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_PersistentStorageSerializable_iOSExample
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-PersistentStorageSerializable_iOSExample/Pods-PersistentStorageSerializable_iOSExample-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
6 | FOUNDATION_EXPORT double Pods_PersistentStorageSerializable_iOSExampleVersionNumber;
7 | FOUNDATION_EXPORT const unsigned char Pods_PersistentStorageSerializable_iOSExampleVersionString[];
8 |
9 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-PersistentStorageSerializable_iOSExample/Pods-PersistentStorageSerializable_iOSExample.debug.xcconfig:
--------------------------------------------------------------------------------
1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
2 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES
3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/PersistentStorageSerializable-iOS" "$PODS_CONFIGURATION_BUILD_DIR/Reflection-iOS"
4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
6 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/PersistentStorageSerializable-iOS/PersistentStorageSerializable.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Reflection-iOS/Reflection.framework/Headers"
7 | OTHER_LDFLAGS = $(inherited) -framework "PersistentStorageSerializable" -framework "Reflection"
8 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
9 | PODS_BUILD_DIR = $BUILD_DIR
10 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
11 | PODS_ROOT = ${SRCROOT}/Pods
12 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-PersistentStorageSerializable_iOSExample/Pods-PersistentStorageSerializable_iOSExample.modulemap:
--------------------------------------------------------------------------------
1 | framework module Pods_PersistentStorageSerializable_iOSExample {
2 | umbrella header "Pods-PersistentStorageSerializable_iOSExample-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-PersistentStorageSerializable_iOSExample/Pods-PersistentStorageSerializable_iOSExample.release.xcconfig:
--------------------------------------------------------------------------------
1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
2 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES
3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/PersistentStorageSerializable-iOS" "$PODS_CONFIGURATION_BUILD_DIR/Reflection-iOS"
4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
6 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/PersistentStorageSerializable-iOS/PersistentStorageSerializable.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Reflection-iOS/Reflection.framework/Headers"
7 | OTHER_LDFLAGS = $(inherited) -framework "PersistentStorageSerializable" -framework "Reflection"
8 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
9 | PODS_BUILD_DIR = $BUILD_DIR
10 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
11 | PODS_ROOT = ${SRCROOT}/Pods
12 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Quick/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Quick/Quick-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Quick : NSObject
3 | @end
4 | @implementation PodsDummy_Quick
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Quick/Quick-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Quick/Quick-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 | #import "QuickConfiguration.h"
6 | #import "QCKDSL.h"
7 | #import "Quick.h"
8 | #import "QuickSpec.h"
9 |
10 | FOUNDATION_EXPORT double QuickVersionNumber;
11 | FOUNDATION_EXPORT const unsigned char QuickVersionString[];
12 |
13 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Quick/Quick.modulemap:
--------------------------------------------------------------------------------
1 | framework module Quick {
2 | umbrella header "Quick-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Quick/Quick.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Quick
2 | ENABLE_BITCODE = NO
3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks"
4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
5 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public"
6 | OTHER_LDFLAGS = -framework "XCTest"
7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
8 | PODS_BUILD_DIR = $BUILD_DIR
9 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
10 | PODS_ROOT = ${SRCROOT}
11 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
12 | SKIP_INSTALL = YES
13 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Reflection-OSX/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 0.14.3
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Reflection-OSX/Reflection-OSX-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Reflection_OSX : NSObject
3 | @end
4 | @implementation PodsDummy_Reflection_OSX
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Reflection-OSX/Reflection-OSX-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Reflection-OSX/Reflection-OSX-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
6 | FOUNDATION_EXPORT double ReflectionVersionNumber;
7 | FOUNDATION_EXPORT const unsigned char ReflectionVersionString[];
8 |
9 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Reflection-OSX/Reflection-OSX.modulemap:
--------------------------------------------------------------------------------
1 | framework module Reflection {
2 | umbrella header "Reflection-OSX-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Reflection-OSX/Reflection-OSX.xcconfig:
--------------------------------------------------------------------------------
1 | CODE_SIGN_IDENTITY =
2 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Reflection-OSX
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public"
5 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
6 | PODS_BUILD_DIR = $BUILD_DIR
7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
8 | PODS_ROOT = ${SRCROOT}
9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
10 | SKIP_INSTALL = YES
11 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Reflection-iOS/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 0.14.3
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Reflection-iOS/Reflection-iOS-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Reflection_iOS : NSObject
3 | @end
4 | @implementation PodsDummy_Reflection_iOS
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Reflection-iOS/Reflection-iOS-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Reflection-iOS/Reflection-iOS-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
6 | FOUNDATION_EXPORT double ReflectionVersionNumber;
7 | FOUNDATION_EXPORT const unsigned char ReflectionVersionString[];
8 |
9 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Reflection-iOS/Reflection-iOS.modulemap:
--------------------------------------------------------------------------------
1 | framework module Reflection {
2 | umbrella header "Reflection-iOS-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Reflection-iOS/Reflection-iOS.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Reflection-iOS
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public"
4 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
5 | PODS_BUILD_DIR = $BUILD_DIR
6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
7 | PODS_ROOT = ${SRCROOT}
8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
9 | SKIP_INSTALL = YES
10 |
--------------------------------------------------------------------------------
/Example/Tests/Car.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Car.doors
6 | 7
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Example/Tests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Example/Tests/PersistentStorageMock.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PersistentStorageMock.swift
3 | // PersistentStorageSerializable
4 | //
5 | // Created by Ivan Rublev on 4/5/17.
6 | // Copyright © 2017 CocoaPods. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import PersistentStorageSerializable
11 |
12 | class PersistentStorageMock: PersistentStorage {
13 | var transactionWasBegan = false
14 |
15 | func beginTransaction() throws {
16 | transactionWasBegan = true
17 | }
18 |
19 | open static let shared: PersistentStorage = PersistentStorageMock()
20 |
21 | var registeredDefaultValues: [String : Any]?
22 |
23 | func register(defaultValues: [String : Any]) {
24 | registeredDefaultValues = defaultValues
25 | }
26 |
27 | typealias ValuesDictionary = Dictionary
28 | var tempValues = ValuesDictionary()
29 | var values = ValuesDictionary()
30 |
31 | public func get(valueOf key: String) -> Any? {
32 | if let value = tempValues[key] {
33 | return value
34 | }
35 | return values[key]
36 | }
37 |
38 | enum InternalError: Error {
39 | case Failure
40 | }
41 | var throwOnSet: InternalError?
42 |
43 | func set(value: Any?, for key: String) throws {
44 | if let errorToThrow = throwOnSet {
45 | throw errorToThrow
46 | }
47 | tempValues[key] = value
48 | }
49 |
50 | var synchronizeWasCalled = false
51 |
52 | func finishTransaction() throws {
53 | values = tempValues
54 | tempValues.removeAll()
55 | synchronizeWasCalled = true
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2017 IvanRublev
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
--------------------------------------------------------------------------------
/PersistentStorageSerializable.podspec:
--------------------------------------------------------------------------------
1 | #
2 | # Be sure to run `pod lib lint PersistentStorageSerializable.podspec' to ensure this is a
3 | # valid spec before submitting.
4 | #
5 | # Any lines starting with a # are optional, but their use is encouraged
6 | # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
7 | #
8 |
9 | Pod::Spec.new do |s|
10 | s.name = 'PersistentStorageSerializable'
11 | s.version = '1.1.2'
12 | s.summary = 'Swift library that makes easier to serialize the user\'s preferences class/struct with system User Defaults or Property List file on disk.'
13 |
14 | s.description = <<-DESC
15 | Number of protocols from this pod helps to serialize swift class or structure to persistent storage like User Defaults or Keychain. The class/structure must contain properties of simple data type only. These types are: Data, String, Int, Float, Double, Bool, URL, Date, Array, or Dictionary.
16 | Adopt the PersistentStorageSerializable protocol from your struct. Then call pullFromUserDefaults() or pushToUserDefaults() on instance of your struct.
17 | DESC
18 |
19 | s.homepage = 'https://github.com/IvanRublev/PersistentStorageSerializable'
20 | s.license = { :type => 'MIT', :file => 'LICENSE' }
21 | s.author = { 'IvanRublev' => 'ivan@ivanrublev.me' }
22 | s.source = { :git => 'https://github.com/IvanRublev/PersistentStorageSerializable.git', :tag => s.version.to_s }
23 |
24 | s.ios.deployment_target = '9.0'
25 | s.osx.deployment_target = '10.11'
26 |
27 | s.source_files = 'PersistentStorageSerializable/Classes/**/*'
28 |
29 | s.frameworks = 'Foundation'
30 | s.dependency 'Reflection', '~> 0.14'
31 |
32 | end
33 |
--------------------------------------------------------------------------------
/PersistentStorageSerializable/Assets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IvanRublev/PersistentStorageSerializable/55233686ef4a86145ab6188a6c5718fa0bb9324d/PersistentStorageSerializable/Assets/.gitkeep
--------------------------------------------------------------------------------
/PersistentStorageSerializable/Classes/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IvanRublev/PersistentStorageSerializable/55233686ef4a86145ab6188a6c5718fa0bb9324d/PersistentStorageSerializable/Classes/.gitkeep
--------------------------------------------------------------------------------
/PersistentStorageSerializable/Classes/PersistentStorage.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PersistentStorage.swift
3 | // Pods
4 | //
5 | // Created by Ivan Rublev on 4/5/17.
6 | //
7 | //
8 |
9 | import Foundation
10 |
11 | /**
12 | Abstract protocol to read/write from persistent system storage.
13 | */
14 | public protocol PersistentStorage: class {
15 | /// Begins sequence of operations with persistent storage.
16 | func beginTransaction() throws
17 |
18 | /// Registers default values with storage. Like register(defaults:) method of UserDefaults.
19 | ///
20 | /// - Parameter defaultValues: Dictionary with defaults value.
21 | func register(defaultValues: [String : Any])
22 |
23 | /// Returns a value from persistent storage for specified key.
24 | ///
25 | /// - Parameter key: Key to read
26 | /// - Returns: Value from the persistent storage or nil if there is no value for the specified key.
27 | func get(valueOf key: String) -> Any?
28 |
29 | /// Sets a value for specified key into persistent storage.
30 | /// When value is nil then the key/value pair is removed from the storage.
31 | /// Call synchronize() after all key/value pairs are set to commit changes to the storage.
32 | ///
33 | /// - Parameters:
34 | /// - value: Value to store
35 | /// - key: Key
36 | /// - Throws: Storage write error.
37 | func set(value: Any?, for key: String) throws
38 |
39 | /// Commits operations to the persistent storage.
40 | func finishTransaction() throws
41 | }
42 |
--------------------------------------------------------------------------------
/PersistentStorageSerializable/Classes/PlistStorage.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PlistStorage.swift
3 | // Pods
4 | //
5 | // Created by Ivan Rublev on 4/7/17.
6 | //
7 | //
8 |
9 | import Foundation
10 |
11 | /**
12 | Class to persist data in Plist file on disk.
13 | */
14 | open class PlistStorage {
15 | let url: URL
16 |
17 | public init(at url: URL) {
18 | precondition(url.isFileURL)
19 | self.url = url
20 | }
21 |
22 | var dictionary: NSMutableDictionary?
23 | var newDictionary: NSMutableDictionary!
24 |
25 | var anyKeyWasSet = false
26 | var finished = true
27 | }
28 |
29 | // MARK: - Adopt PersistentStorage
30 | extension PlistStorage: PersistentStorage {
31 | public func beginTransaction() throws {
32 | precondition(finished, "Must call finishTransaction() before beginning a new one.")
33 | finished = false
34 | SwiftTryCatch.try({
35 | self.dictionary = NSMutableDictionary(contentsOf: self.url)
36 | }, catch: nil, finallyBlock: nil)
37 | newDictionary = NSMutableDictionary()
38 | }
39 |
40 | public func register(defaultValues: [String : Any]) { // default values are not applicable
41 | }
42 |
43 | public func get(valueOf key: String) -> Any? {
44 | return dictionary?[key]
45 | }
46 |
47 | public func set(value: Any?, for key: String) throws {
48 | newDictionary[key] = value
49 | anyKeyWasSet = true
50 | }
51 |
52 | public func finishTransaction() throws {
53 | dictionary = nil
54 | if anyKeyWasSet {
55 | let data = try PropertyListSerialization.data(fromPropertyList: newDictionary, format: .xml, options: 0)
56 | try data.write(to: url, options: .atomic)
57 | }
58 | anyKeyWasSet = false
59 | newDictionary = nil
60 | finished = true
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/PersistentStorageSerializable/Classes/SupportedSerializableType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SupportedSerializableType.swift
3 | // Pods
4 | //
5 | // Created by Ivan Rublev on 4/10/17.
6 | //
7 | //
8 |
9 | import Foundation
10 |
11 | public indirect enum PersistentStorageSerializableTypeError: Error {
12 | case UnsupportedOptional
13 | case NonPlistType
14 | case CollectionElement(PersistentStorageSerializableTypeError)
15 | }
16 |
17 | protocol OptionalProtocol {}
18 | extension Optional: OptionalProtocol {}
19 |
20 | protocol ArrayProtocol {}
21 | extension Array: ArrayProtocol {}
22 |
23 | protocol DictionaryProtocol {}
24 | extension Dictionary: DictionaryProtocol {}
25 |
26 | extension PersistentStorageSerializable {
27 | static func isSerializableType(value: Any) -> Bool {
28 | return value is Data ||
29 | value is String ||
30 | value is UInt ||
31 | value is Int ||
32 | value is Float ||
33 | value is Double ||
34 | value is Bool ||
35 | value is URL ||
36 | value is Date
37 | }
38 |
39 | @discardableResult static func serializable(value: Any) throws -> Bool {
40 | if value is OptionalProtocol { // we do not support optionals
41 | throw PersistentStorageSerializableTypeError.UnsupportedOptional
42 | }
43 | if isSerializableType(value: value) {
44 | return true
45 | } // else not a simple type
46 |
47 | func areElementsOfSerializableType(for sequence: T) throws -> Bool {
48 | for element in sequence {
49 | do {
50 | try serializable(value: element)
51 | }
52 | catch let error as PersistentStorageSerializableTypeError {
53 | throw PersistentStorageSerializableTypeError.CollectionElement(error)
54 | }
55 | }
56 | return true
57 | }
58 |
59 | if value is ArrayProtocol, let abstractArray = value as? Array {
60 | return try areElementsOfSerializableType(for: abstractArray)
61 | }
62 | else if value is DictionaryProtocol, let abstractDictionary = value as? Dictionary {
63 | return try areElementsOfSerializableType(for: abstractDictionary.values)
64 | }
65 | // else is not of required collection type
66 | throw PersistentStorageSerializableTypeError.NonPlistType
67 | }
68 |
69 | }
70 |
--------------------------------------------------------------------------------
/PersistentStorageSerializable/Classes/SwiftTryCatch.h:
--------------------------------------------------------------------------------
1 | //
2 | // SwiftTryCatch.h
3 | //
4 | // Created by William Falcon on 10/10/14.
5 | // Copyright (c) 2014 William Falcon. All rights reserved.
6 | //
7 | /*
8 | Permission is hereby granted, free of charge, to any person obtaining a copy
9 | of this software and associated documentation files (the "Software"), to deal
10 | in the Software without restriction, including without limitation the rights
11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 | copies of the Software, and to permit persons to whom the Software is
13 | furnished to do so, subject to the following conditions:
14 |
15 | The above copyright notice and this permission notice shall be included in all
16 | copies or substantial portions of the Software.
17 |
18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 | SOFTWARE.
25 | */
26 |
27 | @import Foundation;
28 |
29 | @interface SwiftTryCatch : NSObject
30 |
31 | /**
32 | Provides try catch functionality for swift by wrapping around Objective-C
33 | */
34 | + (void)tryBlock:(void(^)())tryBlock catchBlock:(void(^)(NSException*exception))catchBlock finallyBlock:(void(^)())finallyBlock;
35 | + (void)throwString:(NSString*)s;
36 | + (void)throwException:(NSException*)e;
37 | @end
38 |
--------------------------------------------------------------------------------
/PersistentStorageSerializable/Classes/SwiftTryCatch.m:
--------------------------------------------------------------------------------
1 | //
2 | // SwiftTryCatch.h
3 | //
4 | // Created by William Falcon on 10/10/14.
5 | // Copyright (c) 2014 William Falcon. All rights reserved.
6 | //
7 | /*
8 | Permission is hereby granted, free of charge, to any person obtaining a copy
9 | of this software and associated documentation files (the "Software"), to deal
10 | in the Software without restriction, including without limitation the rights
11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 | copies of the Software, and to permit persons to whom the Software is
13 | furnished to do so, subject to the following conditions:
14 |
15 | The above copyright notice and this permission notice shall be included in all
16 | copies or substantial portions of the Software.
17 |
18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 | SOFTWARE.
25 | */
26 |
27 |
28 | #import "SwiftTryCatch.h"
29 |
30 | @implementation SwiftTryCatch
31 |
32 | /**
33 | Provides try catch functionality for swift by wrapping around Objective-C
34 | */
35 | + (void)tryBlock:(void(^)())tryBlock catchBlock:(void(^)(NSException*exception))catchBlock finallyBlock:(void(^)())finallyBlock {
36 | @try {
37 | tryBlock ? tryBlock() : nil;
38 | }
39 |
40 | @catch (NSException *exception) {
41 | catchBlock ? catchBlock(exception) : nil;
42 | }
43 | @finally {
44 | finallyBlock ? finallyBlock() : nil;
45 | }
46 | }
47 |
48 | + (void)throwString:(NSString*)s
49 | {
50 | @throw [NSException exceptionWithName:s reason:s userInfo:nil];
51 | }
52 |
53 | + (void)throwException:(NSException*)e
54 | {
55 | @throw e;
56 | }
57 |
58 | @end
59 |
--------------------------------------------------------------------------------
/PersistentStorageSerializable/Classes/UserDefaultsStorage.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UserDefaultsStorage.swift
3 | // Pods
4 | //
5 | // Created by Ivan Rublev on 4/5/17.
6 | //
7 | //
8 |
9 | import Foundation
10 |
11 | /**
12 | Interface protocol to UserDefaults object
13 | */
14 | public protocol UserDefaultsStorageSystemUserDefaults {
15 | static var standard: UserDefaults { get }
16 | func register(defaults registrationDictionary: [String : Any])
17 | func object(forKey defaultName: String) -> Any?
18 | func set(_ value: Any?, forKey defaultName: String)
19 | func removeObject(forKey defaultName: String)
20 | func synchronize() -> Bool
21 | }
22 |
23 | extension UserDefaults: UserDefaultsStorageSystemUserDefaults {}
24 |
25 | /**
26 | Class to persist data in User Defaults storage.
27 | */
28 | open class UserDefaultsStorage {
29 | /// Shared defaults storage
30 | open static let standard: PersistentStorage = UserDefaultsStorage()
31 | /// Bridge to defaults object
32 | var defaults: UserDefaultsStorageSystemUserDefaults {
33 | return UserDefaults.standard
34 | }
35 | }
36 |
37 | // MARK: - Adopt PersistentStorage
38 | extension UserDefaultsStorage: PersistentStorage {
39 | open func beginTransaction() throws {
40 | precondition(Thread.isMainThread)
41 | let _ = defaults.synchronize()
42 | }
43 |
44 | open func register(defaultValues: [String : Any]) {
45 | precondition(Thread.isMainThread)
46 | defaults.register(defaults: defaultValues)
47 | }
48 |
49 | open func get(valueOf key: String) -> Any? {
50 | precondition(Thread.isMainThread)
51 | return defaults.object(forKey: key)
52 | }
53 |
54 | open func set(value: Any?, for key: String) throws {
55 | precondition(Thread.isMainThread)
56 | if let value = value {
57 | defaults.set(value, forKey: key)
58 | }
59 | else {
60 | defaults.removeObject(forKey: key)
61 | }
62 | }
63 |
64 | open func finishTransaction() throws {
65 | precondition(Thread.isMainThread)
66 | let _ = defaults.synchronize()
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/_Pods.xcodeproj:
--------------------------------------------------------------------------------
1 | Example/Pods/Pods.xcodeproj
--------------------------------------------------------------------------------