├── readme.png ├── Pods ├── Headers │ ├── Private │ │ └── Snap.swift │ │ │ └── Snap.h │ └── Public │ │ ├── Snap.swift │ │ └── Snap.h │ │ └── Snap_swift │ │ ├── Snap.swift.modulemap │ │ └── Snap.swift-umbrella.h ├── Snap.swift │ ├── Snap │ │ └── Core │ │ │ ├── Domain │ │ │ └── Model │ │ │ │ ├── Reference.swift │ │ │ │ ├── Device.swift │ │ │ │ ├── TestTarget.swift │ │ │ │ └── TestTarget+Reference.swift │ │ │ ├── Application │ │ │ ├── Recordable │ │ │ │ ├── Recordable.swift │ │ │ │ └── Recordable+XCTestCase.swift │ │ │ ├── Snap │ │ │ │ └── Snap.swift │ │ │ ├── Matcher │ │ │ │ ├── Matcher.swift │ │ │ │ ├── SnapshotLayerMatcher.swift │ │ │ │ └── SnapshotViewMatcher.swift │ │ │ ├── Expectation │ │ │ │ ├── SnapshotLayerExpectation.swift │ │ │ │ └── SnapshotViewExpectation.swift │ │ │ └── Actions │ │ │ │ ├── AddAttachment.swift │ │ │ │ ├── SaveImageToDisk.swift │ │ │ │ ├── ExtractViewImage.swift │ │ │ │ └── CompareImages.swift │ │ │ └── Infrastructure │ │ │ ├── Utils │ │ │ ├── Environment │ │ │ │ ├── Environment.swift │ │ │ │ └── ApplicationEnvironment.swift │ │ │ └── Path │ │ │ │ └── Path.swift │ │ │ ├── Assembly │ │ │ ├── Assembly.swift │ │ │ ├── Assembly+Utils.swift │ │ │ ├── Assembly+Actions.swift │ │ │ └── Assembly+Matchers.swift │ │ │ ├── Extension │ │ │ ├── CALayer │ │ │ │ └── CALayer+Image.swift │ │ │ ├── Device │ │ │ │ ├── AllDevices+All.swift │ │ │ │ └── Device+Size.swift │ │ │ ├── UIImage │ │ │ │ ├── UIImage+Normalized.swift │ │ │ │ ├── UIImage+Context.swift │ │ │ │ ├── UIImage+Diff.swift │ │ │ │ └── UIImage+Compare.swift │ │ │ └── UIView │ │ │ │ └── UIView+Render.swift │ │ │ └── Interoperability │ │ │ ├── Snap.h │ │ │ └── Interoperability.swift │ ├── LICENSE │ └── README.md ├── Target Support Files │ ├── Pods-Tests │ │ ├── Pods-Tests.modulemap │ │ ├── Pods-Tests-dummy.m │ │ ├── Pods-Tests-umbrella.h │ │ ├── Pods-Tests.debug.xcconfig │ │ ├── Pods-Tests.release.xcconfig │ │ ├── Pods-Tests-acknowledgements.markdown │ │ ├── Pods-Tests-acknowledgements.plist │ │ ├── Pods-Tests-resources.sh │ │ └── Pods-Tests-frameworks.sh │ ├── Snap.swift │ │ ├── Snap.swift-dummy.m │ │ ├── Snap.swift-prefix.pch │ │ └── Snap.swift.xcconfig │ └── Pods-DropdownTitleView │ │ ├── Pods-DropdownTitleView-acknowledgements.markdown │ │ ├── Pods-DropdownTitleView-dummy.m │ │ ├── Pods-DropdownTitleView.debug.xcconfig │ │ ├── Pods-DropdownTitleView.release.xcconfig │ │ ├── Pods-DropdownTitleView-acknowledgements.plist │ │ └── Pods-DropdownTitleView-resources.sh ├── Manifest.lock └── Pods.xcodeproj │ └── project.pbxproj ├── Source ├── Assets.xcassets │ ├── Contents.json │ └── chevron-down-small.imageset │ │ ├── chevron-down-small@2x.png │ │ ├── chevron-down-small@3x.png │ │ └── Contents.json ├── DropdownTitleView.h ├── Info.plist └── DropdownTitleView.swift ├── Tests ├── snapshots │ └── Snap │ │ └── SnapshotTests │ │ ├── reference_test_withtitle@3x.png │ │ ├── reference_test_withuiappearance@3x.png │ │ ├── reference_test_withtitle_withchevron@3x.png │ │ ├── reference_test_withtitle_withsubtitle@3x.png │ │ ├── reference_test_withnavigationcontroller@3x.png │ │ ├── reference_test_withnavigationcontroller_withautoresizingtitle@3x.png │ │ ├── reference_test_withtitle_withsubtitle_withchevron_withtruncatingtitle@3x.png │ │ ├── reference_test_withnavigationcontroller_withbaritem_withtruncatingtitle@3x.png │ │ ├── reference_test_withtitle_withsubtitle_withchevron_withautoresizingtitle@3x.png │ │ ├── reference_test_withtitle_withsubtitle_withchevron_withtruncatingsubtitle@3x.png │ │ ├── reference_test_withnavigationcontroller_withbaritem_withtruncatingsubtitle@3x.png │ │ ├── reference_test_withnavigationcontroller_withitems_withautoresizingsubtitle@3x.png │ │ ├── reference_test_withtitle_withsubtitle_withchevron_withautoresizingsubtitle@3x.png │ │ ├── reference_test_withtitle_withsubtitle_withchevron_withbackgrounds_whensizetofit@3x.png │ │ ├── reference_test_withtitle_withsubtitle_withchevron_withbackgrounds_whensettingframe@3x.png │ │ └── reference_test_withtitle_withsubtitle_withchevron_withchevrontint_withfonts_withtextcolors@3x.png ├── Info.plist └── SnapshotTests.swift ├── Podfile ├── DropdownTitleView.xcodeproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── xcshareddata │ └── xcschemes │ │ └── DropdownTitleView.xcscheme └── project.pbxproj ├── .travis.yml ├── DropdownTitleView.xcworkspace ├── xcshareddata │ └── IDEWorkspaceChecks.plist └── contents.xcworkspacedata ├── Podfile.lock ├── DropdownTitleView.podspec ├── LICENSE ├── .gitignore └── README.md /readme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitHawkApp/DropdownTitleView/HEAD/readme.png -------------------------------------------------------------------------------- /Pods/Headers/Private/Snap.swift/Snap.h: -------------------------------------------------------------------------------- 1 | ../../../Snap.swift/Snap/Core/Infrastructure/Interoperability/Snap.h -------------------------------------------------------------------------------- /Pods/Headers/Public/Snap.swift/Snap.h: -------------------------------------------------------------------------------- 1 | ../../../Snap.swift/Snap/Core/Infrastructure/Interoperability/Snap.h -------------------------------------------------------------------------------- /Source/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Domain/Model/Reference.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | struct Reference { 4 | let directory: URL 5 | let path: URL 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Application/Recordable/Recordable.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | public protocol Recordable { 4 | var isRecording: Bool { get set } 5 | } 6 | -------------------------------------------------------------------------------- /Pods/Headers/Public/Snap_swift/Snap.swift.modulemap: -------------------------------------------------------------------------------- 1 | module Snap_swift { 2 | umbrella header "Snap.swift-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Infrastructure/Utils/Environment/Environment.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | protocol Environment { 4 | func get(_ key: String) -> String? 5 | } 6 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Infrastructure/Utils/Path/Path.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | struct Path { 4 | static let referenceImage = "SNAP_REFERENCE_IMAGE_PATH" 5 | } 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Tests/Pods-Tests.modulemap: -------------------------------------------------------------------------------- 1 | module Pods_Tests { 2 | umbrella header "Pods-Tests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Tests/snapshots/Snap/SnapshotTests/reference_test_withtitle@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitHawkApp/DropdownTitleView/HEAD/Tests/snapshots/Snap/SnapshotTests/reference_test_withtitle@3x.png -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Tests/Pods-Tests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Tests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Tests 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Snap.swift/Snap.swift-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Snap_swift : NSObject 3 | @end 4 | @implementation PodsDummy_Snap_swift 5 | @end 6 | -------------------------------------------------------------------------------- /Tests/snapshots/Snap/SnapshotTests/reference_test_withuiappearance@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitHawkApp/DropdownTitleView/HEAD/Tests/snapshots/Snap/SnapshotTests/reference_test_withuiappearance@3x.png -------------------------------------------------------------------------------- /Source/Assets.xcassets/chevron-down-small.imageset/chevron-down-small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitHawkApp/DropdownTitleView/HEAD/Source/Assets.xcassets/chevron-down-small.imageset/chevron-down-small@2x.png -------------------------------------------------------------------------------- /Source/Assets.xcassets/chevron-down-small.imageset/chevron-down-small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitHawkApp/DropdownTitleView/HEAD/Source/Assets.xcassets/chevron-down-small.imageset/chevron-down-small@3x.png -------------------------------------------------------------------------------- /Tests/snapshots/Snap/SnapshotTests/reference_test_withtitle_withchevron@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitHawkApp/DropdownTitleView/HEAD/Tests/snapshots/Snap/SnapshotTests/reference_test_withtitle_withchevron@3x.png -------------------------------------------------------------------------------- /Tests/snapshots/Snap/SnapshotTests/reference_test_withtitle_withsubtitle@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitHawkApp/DropdownTitleView/HEAD/Tests/snapshots/Snap/SnapshotTests/reference_test_withtitle_withsubtitle@3x.png -------------------------------------------------------------------------------- /Tests/snapshots/Snap/SnapshotTests/reference_test_withnavigationcontroller@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitHawkApp/DropdownTitleView/HEAD/Tests/snapshots/Snap/SnapshotTests/reference_test_withnavigationcontroller@3x.png -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DropdownTitleView/Pods-DropdownTitleView-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DropdownTitleView/Pods-DropdownTitleView-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_DropdownTitleView : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_DropdownTitleView 5 | @end 6 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | source 'https://github.com/CocoaPods/Specs.git' 2 | inhibit_all_warnings! 3 | 4 | workspace 'DropdownTitleView' 5 | 6 | target 'DropdownTitleView' do 7 | end 8 | 9 | target 'Tests' do 10 | pod 'Snap.swift', '0.3.0' 11 | end 12 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Infrastructure/Assembly/Assembly.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | final class Assembly { 4 | fileprivate static let shared = Assembly() 5 | } 6 | 7 | var resolver: Assembly { 8 | return Assembly.shared 9 | } 10 | -------------------------------------------------------------------------------- /DropdownTitleView.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Tests/snapshots/Snap/SnapshotTests/reference_test_withnavigationcontroller_withautoresizingtitle@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitHawkApp/DropdownTitleView/HEAD/Tests/snapshots/Snap/SnapshotTests/reference_test_withnavigationcontroller_withautoresizingtitle@3x.png -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Infrastructure/Utils/Environment/ApplicationEnvironment.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | struct ApplicationEnvironment: Environment { 4 | 5 | func get(_ key: String) -> String? { 6 | return ProcessInfo.processInfo.environment[key] 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: swift 2 | osx_image: xcode10 3 | script: 4 | - xcodebuild clean test -workspace DropdownTitleView.xcworkspace -scheme DropdownTitleView -destination "platform=iOS Simulator,name=iPhone X,OS=latest" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO ONLY_ACTIVE_ARCH=NO -------------------------------------------------------------------------------- /Tests/snapshots/Snap/SnapshotTests/reference_test_withtitle_withsubtitle_withchevron_withtruncatingtitle@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitHawkApp/DropdownTitleView/HEAD/Tests/snapshots/Snap/SnapshotTests/reference_test_withtitle_withsubtitle_withchevron_withtruncatingtitle@3x.png -------------------------------------------------------------------------------- /Tests/snapshots/Snap/SnapshotTests/reference_test_withnavigationcontroller_withbaritem_withtruncatingtitle@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitHawkApp/DropdownTitleView/HEAD/Tests/snapshots/Snap/SnapshotTests/reference_test_withnavigationcontroller_withbaritem_withtruncatingtitle@3x.png -------------------------------------------------------------------------------- /Tests/snapshots/Snap/SnapshotTests/reference_test_withtitle_withsubtitle_withchevron_withautoresizingtitle@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitHawkApp/DropdownTitleView/HEAD/Tests/snapshots/Snap/SnapshotTests/reference_test_withtitle_withsubtitle_withchevron_withautoresizingtitle@3x.png -------------------------------------------------------------------------------- /Tests/snapshots/Snap/SnapshotTests/reference_test_withtitle_withsubtitle_withchevron_withtruncatingsubtitle@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitHawkApp/DropdownTitleView/HEAD/Tests/snapshots/Snap/SnapshotTests/reference_test_withtitle_withsubtitle_withchevron_withtruncatingsubtitle@3x.png -------------------------------------------------------------------------------- /Tests/snapshots/Snap/SnapshotTests/reference_test_withnavigationcontroller_withbaritem_withtruncatingsubtitle@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitHawkApp/DropdownTitleView/HEAD/Tests/snapshots/Snap/SnapshotTests/reference_test_withnavigationcontroller_withbaritem_withtruncatingsubtitle@3x.png -------------------------------------------------------------------------------- /Tests/snapshots/Snap/SnapshotTests/reference_test_withnavigationcontroller_withitems_withautoresizingsubtitle@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitHawkApp/DropdownTitleView/HEAD/Tests/snapshots/Snap/SnapshotTests/reference_test_withnavigationcontroller_withitems_withautoresizingsubtitle@3x.png -------------------------------------------------------------------------------- /Tests/snapshots/Snap/SnapshotTests/reference_test_withtitle_withsubtitle_withchevron_withautoresizingsubtitle@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitHawkApp/DropdownTitleView/HEAD/Tests/snapshots/Snap/SnapshotTests/reference_test_withtitle_withsubtitle_withchevron_withautoresizingsubtitle@3x.png -------------------------------------------------------------------------------- /Tests/snapshots/Snap/SnapshotTests/reference_test_withtitle_withsubtitle_withchevron_withbackgrounds_whensizetofit@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitHawkApp/DropdownTitleView/HEAD/Tests/snapshots/Snap/SnapshotTests/reference_test_withtitle_withsubtitle_withchevron_withbackgrounds_whensizetofit@3x.png -------------------------------------------------------------------------------- /Tests/snapshots/Snap/SnapshotTests/reference_test_withtitle_withsubtitle_withchevron_withbackgrounds_whensettingframe@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitHawkApp/DropdownTitleView/HEAD/Tests/snapshots/Snap/SnapshotTests/reference_test_withtitle_withsubtitle_withchevron_withbackgrounds_whensettingframe@3x.png -------------------------------------------------------------------------------- /Pods/Target Support Files/Snap.swift/Snap.swift-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Tests/snapshots/Snap/SnapshotTests/reference_test_withtitle_withsubtitle_withchevron_withchevrontint_withfonts_withtextcolors@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitHawkApp/DropdownTitleView/HEAD/Tests/snapshots/Snap/SnapshotTests/reference_test_withtitle_withsubtitle_withchevron_withchevrontint_withfonts_withtextcolors@3x.png -------------------------------------------------------------------------------- /DropdownTitleView.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /DropdownTitleView.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /DropdownTitleView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Infrastructure/Assembly/Assembly+Utils.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | extension Assembly { 4 | var environment: Environment { 5 | return ApplicationEnvironment() 6 | } 7 | } 8 | 9 | // MARK: - Foundation 10 | 11 | extension Assembly { 12 | var fileManager: FileManager { 13 | return .default 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Application/Snap/Snap.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public struct Snap { 4 | public static let config = Config() 5 | } 6 | 7 | public final class Config { 8 | /// Enable Kaleidoscope ksdiff command line utils to show the difference between failed image and reference one 9 | public var enableKaleidoscope = false 10 | } 11 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Snap.swift (0.3.0) 3 | 4 | DEPENDENCIES: 5 | - Snap.swift (= 0.3.0) 6 | 7 | SPEC REPOS: 8 | https://github.com/cocoapods/specs.git: 9 | - Snap.swift 10 | 11 | SPEC CHECKSUMS: 12 | Snap.swift: 7c9e859c279c252acd47ae283bd0d5ce7a6ed837 13 | 14 | PODFILE CHECKSUM: 8e8d45079b429479f476378ad8b41f82cc1974c1 15 | 16 | COCOAPODS: 1.5.3 17 | -------------------------------------------------------------------------------- /Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Snap.swift (0.3.0) 3 | 4 | DEPENDENCIES: 5 | - Snap.swift (= 0.3.0) 6 | 7 | SPEC REPOS: 8 | https://github.com/cocoapods/specs.git: 9 | - Snap.swift 10 | 11 | SPEC CHECKSUMS: 12 | Snap.swift: 7c9e859c279c252acd47ae283bd0d5ce7a6ed837 13 | 14 | PODFILE CHECKSUM: 8e8d45079b429479f476378ad8b41f82cc1974c1 15 | 16 | COCOAPODS: 1.5.3 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Tests/Pods-Tests-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_TestsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_TestsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Headers/Public/Snap_swift/Snap.swift-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "Snap.h" 14 | 15 | FOUNDATION_EXPORT double Snap_swiftVersionNumber; 16 | FOUNDATION_EXPORT const unsigned char Snap_swiftVersionString[]; 17 | 18 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Application/Recordable/Recordable+XCTestCase.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import ObjectiveC 3 | 4 | private var recordingPointer: UInt8 = 0 5 | 6 | extension XCTestCase: Recordable { 7 | public var isRecording: Bool { 8 | get { 9 | return (objc_getAssociatedObject(self, &recordingPointer) as? Bool) ?? false 10 | } 11 | set { 12 | objc_setAssociatedObject(self, &recordingPointer, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Infrastructure/Extension/CALayer/CALayer+Image.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | extension CALayer { 4 | /// Extract image from CALayer 5 | func image() -> UIImage? { 6 | defer { 7 | UIGraphicsEndImageContext() 8 | } 9 | UIGraphicsBeginImageContextWithOptions(bounds.size, isOpaque, contentsScale) 10 | guard let context = UIGraphicsGetCurrentContext() else { return nil } 11 | render(in: context) 12 | return UIGraphicsGetImageFromCurrentImageContext() 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Infrastructure/Extension/Device/AllDevices+All.swift: -------------------------------------------------------------------------------- 1 | extension AllDevices { 2 | var all: [Device] { 3 | return [ 4 | .iPhone5, .iPhone8, .iPhone8Plus, .iPhoneX, 5 | .iPadMini, .iPadAir, .iPadPro105, .iPadPro129 6 | ] 7 | } 8 | var iphone: [Device] { 9 | return [ 10 | .iPhone5, .iPhone8, .iPhone8Plus, .iPhoneX 11 | ] 12 | } 13 | var ipad: [Device] { 14 | return [ 15 | .iPadMini, .iPadAir, .iPadPro105, .iPadPro129 16 | ] 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Source/Assets.xcassets/chevron-down-small.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "chevron-down-small@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "chevron-down-small@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Application/Matcher/Matcher.swift: -------------------------------------------------------------------------------- 1 | // MARK: - Matcher 2 | 3 | public protocol Matcher: Nameable { 4 | func toMatchSnapshot() 5 | } 6 | 7 | public protocol ViewMatcher: Matcher, DeviceMatcher {} 8 | public protocol LayerMatcher: Matcher {} 9 | 10 | // MARK: - Matcher extensions 11 | 12 | public protocol Nameable { 13 | func toMatchSnapshot(named: String?) 14 | } 15 | 16 | public protocol DeviceMatcher { 17 | func toMatchSnapshot(`for` devices: [Device]) 18 | func toMatchSnapshot(`for` allDevices: AllDevices) 19 | } 20 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DropdownTitleView/Pods-DropdownTitleView.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Snap.swift" 3 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Snap.swift" 4 | OTHER_LDFLAGS = $(inherited) -ObjC 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DropdownTitleView/Pods-DropdownTitleView.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Snap.swift" 3 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Snap.swift" 4 | OTHER_LDFLAGS = $(inherited) -ObjC 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Application/Expectation/SnapshotLayerExpectation.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import XCTest 3 | 4 | // MARK: - XCTestCase + CALayer Expectation 5 | 6 | extension XCTestCase { 7 | public func expect(_ layer: CALayer, function: String = #function, file: String = #file ) -> LayerMatcher { 8 | let testTarget = TestTarget( 9 | function: function, 10 | file: file 11 | ) 12 | layer.layoutIfNeeded() 13 | 14 | return resolver.makeMatcher( 15 | with: layer, 16 | isRecording: isRecording, 17 | tesTarget: testTarget 18 | ) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Infrastructure/Extension/UIImage/UIImage+Normalized.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | extension UIImage { 4 | var normalizedImage: Data? { 5 | defer { 6 | UIGraphicsEndImageContext() 7 | } 8 | 9 | let pixelSize = CGSize(width: size.width * scale, height: size.height * scale) 10 | UIGraphicsBeginImageContext(pixelSize) 11 | 12 | draw(in: CGRect(x: 0, y: 0, width: pixelSize.width, height: pixelSize.height)) 13 | 14 | guard let drawnImage = UIGraphicsGetImageFromCurrentImageContext() else { return nil } 15 | return UIImagePNGRepresentation(drawnImage) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Domain/Model/Device.swift: -------------------------------------------------------------------------------- 1 | public enum Device: String { 2 | case iPhone5 // iPhone 5, SE, 5C, 5S, iPod Touch 5g 3 | case iPhone8 // iPhone 6, iPhone 6s, iPhone 7, iPhone 8 4 | case iPhone8Plus // iPhone 6 Plus, iPhone 6s Plus, iPhone 7 Plus 5 | case iPhoneX 6 | case iPadMini // iPad Mini 2, iPad Mini 3, iPad Mini 4 7 | case iPadAir // iPad 3, iPad 4, iPad Air, iPad Air 2, 9.7-inch iPad Pro 8 | case iPadPro105 9 | case iPadPro129 // 12.9-inch iPad Pro 10 | } 11 | 12 | public enum AllDevices { 13 | case allDevices 14 | case iPhoneDevices 15 | case iPadDevices 16 | } 17 | -------------------------------------------------------------------------------- /Source/DropdownTitleView.h: -------------------------------------------------------------------------------- 1 | // 2 | // DropdownTitleView.h 3 | // DropdownTitleView 4 | // 5 | // Created by Ryan Nystrom on 10/21/18. 6 | // Copyright © 2018 Ryan Nystrom. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for DropdownTitleView. 12 | FOUNDATION_EXPORT double DropdownTitleViewVersionNumber; 13 | 14 | //! Project version string for DropdownTitleView. 15 | FOUNDATION_EXPORT const unsigned char DropdownTitleViewVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Infrastructure/Extension/UIImage/UIImage+Context.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | extension UIImage { 4 | /// Try to create a context from a given image 5 | func context(for image: UIImage) -> CGContext? { 6 | let imageSize = CGSize(width: image.cgImage!.width, height: image.cgImage!.height) 7 | return CGContext( 8 | data: nil, 9 | width: Int(imageSize.width), 10 | height: Int(imageSize.height), 11 | bitsPerComponent: image.cgImage!.bitsPerComponent, 12 | bytesPerRow: image.cgImage!.bytesPerRow, 13 | space: image.cgImage!.colorSpace!, 14 | bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue 15 | ) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /DropdownTitleView.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |spec| 2 | spec.name = 'DropdownTitleView' 3 | spec.version = '0.1.0' 4 | spec.license = { :type => 'MIT' } 5 | spec.homepage = 'https://github.com/GitHawkApp/DropdownTitleView' 6 | spec.authors = { 'Ryan Nystrom' => 'rnystrom@whoisryannystrom.com' } 7 | spec.summary = 'Navigation item title view with subtitle and chevron.' 8 | spec.source = { :git => 'https://github.com/GitHawkApp/DropdownTitleView.git', :tag => spec.version.to_s } 9 | spec.source_files = 'Source/*.swift' 10 | spec.resources = "Source/Assets.xcassets" 11 | spec.platform = :ios, '10.0' 12 | spec.swift_version = '4.0' 13 | end 14 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Infrastructure/Extension/Device/Device+Size.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | extension Device { 4 | var size: CGSize { 5 | switch self { 6 | case .iPhone5: return CGSize(width: 320, height: 568) 7 | case .iPhone8: return CGSize(width: 375, height: 667) 8 | case .iPhone8Plus: return CGSize(width: 414, height: 736) 9 | case .iPhoneX: return CGSize(width: 375, height: 812) 10 | case .iPadMini: return CGSize(width: 768, height: 1024) 11 | case .iPadAir: return CGSize(width: 788, height: 1024) 12 | case .iPadPro105: return CGSize(width: 834, height: 1112) 13 | case .iPadPro129: return CGSize(width: 1024, height: 1366) 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Application/Actions/AddAttachment.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import XCTest 3 | 4 | struct AddAttachment { 5 | func execute(with image: UIImage, type: Type) { 6 | XCTContext.runActivity(named: type.named) { activity in 7 | let attachment = XCTAttachment(image: image) 8 | attachment.name = type.name 9 | activity.add(attachment) 10 | } 11 | } 12 | } 13 | 14 | fileprivate extension Type { 15 | var named: String { 16 | return "\(name) image)" 17 | } 18 | 19 | var name: String { 20 | switch self { 21 | case .reference: 22 | return "Reference" 23 | case .failed: 24 | return "Failed" 25 | case .diff: 26 | return "Diff" 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 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 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Application/Expectation/SnapshotViewExpectation.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import XCTest 3 | 4 | // MARK: - XCTestCase + View Expectation 5 | 6 | extension XCTestCase { 7 | public func expect(_ view: UIView, function: String = #function, file: String = #file ) -> ViewMatcher { 8 | let testTarget = TestTarget( 9 | function: function, 10 | file: file 11 | ) 12 | view.layoutIfNeeded() 13 | 14 | return resolver.makeMatcher( 15 | with: view, 16 | isRecording: isRecording, 17 | tesTarget: testTarget 18 | ) 19 | } 20 | 21 | public func expect(_ viewController: UIViewController, function: String = #function, file: String = #file ) -> ViewMatcher { 22 | return self.expect(viewController.view, function: function, file: file) 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Source/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 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 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Infrastructure/Interoperability/Snap.h: -------------------------------------------------------------------------------- 1 | #define verifyView(view) \ 2 | if (![view isKindOfClass: [UIView class]]) { \ 3 | @throw[NSException exceptionWithName: @"Invalid view" reason: [NSString stringWithFormat: @"View is invalid, you must provider a UIView subclass instead of %@", [view class]] userInfo: nil]; \ 4 | }\ 5 | [self verifyWithView:view function:NSStringFromSelector(_cmd) file:[NSString stringWithFormat:@"%s", __FILE__]]; 6 | 7 | #define verifyLayer(layer) \ 8 | if (![layer isKindOfClass: [CALayer class]]) { \ 9 | @throw[NSException exceptionWithName: @"Invalid layer" reason: [NSString stringWithFormat: @"Layer is invalid, you must provider a CALayer subclass instead of %@", [view class]] userInfo: nil]; \ 10 | }\ 11 | [self verifyWithLayer:layer function:NSStringFromSelector(_cmd) file:[NSString stringWithFormat:@"%s", __FILE__]]; 12 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Infrastructure/Interoperability/Interoperability.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import XCTest 3 | 4 | public extension XCTestCase { 5 | @objc 6 | public func verify(view: UIView, function: String = #function, file: String = #file) { 7 | let testTarget = TestTarget( 8 | function: function, 9 | file: file 10 | ) 11 | return resolver.makeMatcher( 12 | with: view, 13 | isRecording: isRecording, 14 | tesTarget: testTarget 15 | ).toMatchSnapshot() 16 | } 17 | 18 | @objc 19 | public func verify(layer: CALayer, function: String = #function, file: String = #file) { 20 | let testTarget = TestTarget( 21 | function: function, 22 | file: file 23 | ) 24 | return resolver.makeMatcher( 25 | with: layer, 26 | isRecording: isRecording, 27 | tesTarget: testTarget 28 | ).toMatchSnapshot() 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Infrastructure/Assembly/Assembly+Actions.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | extension Assembly { 4 | var extractViewImage: ExtractViewImage { 5 | return ExtractViewImage( 6 | saveImageToDisk: saveImageToDisk, 7 | addAttachment: addAttachment 8 | ) 9 | } 10 | 11 | private var saveImageToDisk: SaveImageToDisk { 12 | return SaveImageToDisk( 13 | environment: environment, 14 | fileManager: fileManager 15 | ) 16 | } 17 | 18 | var compareImages: CompareImages { 19 | return CompareImages( 20 | fileManager: fileManager, 21 | config: snapConfig, 22 | addAttachment: addAttachment, 23 | saveImageToDisk: saveImageToDisk 24 | ) 25 | } 26 | 27 | private var addAttachment: AddAttachment { 28 | return AddAttachment() 29 | } 30 | 31 | private var snapConfig: Config { 32 | return Snap.config 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Infrastructure/Assembly/Assembly+Matchers.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | // MARK: - SnapshotViewMatcherProvider 4 | 5 | extension Assembly: SnapshotViewMatcherProvider { 6 | func makeMatcher(with view: UIView, isRecording: Bool, tesTarget: TestTarget) -> ViewMatcher { 7 | return SnapshotViewMatcher( 8 | view: view, 9 | isRecording: isRecording, 10 | testTarget: tesTarget, 11 | extractViewImage: extractViewImage, 12 | compareImages: compareImages 13 | ) 14 | } 15 | } 16 | 17 | // MARK: - SnapshotLayerMatcherProvider 18 | 19 | extension Assembly: SnapshotLayerMatcherProvider { 20 | func makeMatcher(with layer: CALayer, isRecording: Bool, tesTarget: TestTarget) -> LayerMatcher { 21 | return SnapshotLayerMatcher( 22 | layer: layer, 23 | isRecording: isRecording, 24 | testTarget: tesTarget, 25 | viewMatcherProvider: self 26 | ) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Domain/Model/TestTarget.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | struct TestTarget { 4 | 5 | let function: String 6 | let file: String 7 | let named: String? 8 | let device: Device? 9 | let fileManager: FileManager 10 | let environment: Environment 11 | 12 | init(function: String, 13 | file: String, 14 | named: String? = nil, 15 | device: Device? = nil, 16 | fileManager: FileManager = resolver.fileManager, 17 | environment: Environment = resolver.environment) 18 | { 19 | self.function = function 20 | self.file = file 21 | self.named = named 22 | self.device = device 23 | self.fileManager = fileManager 24 | self.environment = environment 25 | } 26 | } 27 | 28 | extension TestTarget { 29 | func named(_ named: String?, with device: Device? = nil) -> TestTarget { 30 | return TestTarget(function: function, file: file, named: named, device: device) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Snap.swift/Snap.swift.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Snap.swift 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Snap.swift" "${PODS_ROOT}/Headers/Public" 5 | OTHER_LDFLAGS = -framework "CoreGraphics" -framework "UIKit" -framework "XCTest" 6 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" "-suppress-warnings" -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_ROOT = ${SRCROOT} 10 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Snap.swift 11 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 12 | SKIP_INSTALL = YES 13 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Application/Actions/SaveImageToDisk.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | struct SaveImageToDisk { 4 | 5 | private let environment: Environment 6 | private let fileManager: FileManager 7 | 8 | init(environment: Environment, 9 | fileManager: FileManager) 10 | { 11 | self.environment = environment 12 | self.fileManager = fileManager 13 | } 14 | 15 | func execute(with image: UIImage, with reference: Reference) { 16 | let referenceImage = UIImagePNGRepresentation(image) 17 | 18 | do { 19 | try fileManager.createDirectory(atPath: reference.directory.path, withIntermediateDirectories: true) 20 | } catch { 21 | fatalError("🚨 Error creating reference image directory ['\(reference.directory)']") 22 | } 23 | guard fileManager.createFile(atPath: reference.path.path, contents: referenceImage) else { 24 | fatalError("🚨 Error saving reference image into ['\(reference.path)']") 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Application/Actions/ExtractViewImage.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import XCTest 3 | 4 | struct ExtractViewImage { 5 | 6 | private let saveImageToDisk: SaveImageToDisk 7 | private let addAttachment: AddAttachment 8 | 9 | init(saveImageToDisk: SaveImageToDisk, 10 | addAttachment: AddAttachment) 11 | { 12 | self.saveImageToDisk = saveImageToDisk 13 | self.addAttachment = addAttachment 14 | } 15 | 16 | func execute(with view: UIView, testTarget: TestTarget) { 17 | guard let image = view.render() else { 18 | fatalError("🖼 Can not extract image from view") 19 | } 20 | saveImageToDisk.execute(with: image, with: testTarget.reference(for: .reference)) 21 | addAttachment.execute(with: image, type: .reference) 22 | 23 | XCTFail("⚠️ Test ran in record mode, reference image has been saved to \(testTarget.reference(for: .reference).path.path), now remove `isRecording` in order to perform the snapshot comparsion.") 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Infrastructure/Extension/UIView/UIView+Render.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | extension UIView { 4 | /// Extract image data with the whole hierarchy from `UIView` 5 | func render() -> UIImage? { 6 | if #available(iOS 10.0, *) { 7 | let imageRendererFormat = UIGraphicsImageRendererFormat.default() 8 | imageRendererFormat.opaque = true 9 | let renderer = UIGraphicsImageRenderer( 10 | bounds: bounds 11 | ) 12 | return renderer.image { context in 13 | drawHierarchy(in: bounds, afterScreenUpdates: true) 14 | layer.render(in: context.cgContext) 15 | } 16 | } 17 | 18 | defer { 19 | UIGraphicsEndImageContext() 20 | } 21 | UIGraphicsBeginImageContextWithOptions(bounds.size, false, 0.0) 22 | 23 | let context = UIGraphicsGetCurrentContext()! 24 | drawHierarchy(in: bounds, afterScreenUpdates: true) 25 | layer.render(in: context) 26 | return UIGraphicsGetImageFromCurrentImageContext() 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DropdownTitleView/Pods-DropdownTitleView-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2017 Ryan Nystrom http://whoisryannystrom.com/ 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 13 | all 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 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /Pods/Snap.swift/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017-Present Oscar Antonio Duran Grillo 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. -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Tests/Pods-Tests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Snap.swift" 5 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Snap.swift" 6 | OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Snap.swift/Snap_swift.modulemap" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Snap.swift" 7 | OTHER_LDFLAGS = $(inherited) -ObjC -l"Snap.swift" -framework "CoreGraphics" -framework "UIKit" -framework "XCTest" 8 | OTHER_SWIFT_FLAGS = $(inherited) -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Snap.swift/Snap_swift.modulemap" $(inherited) "-D" "COCOAPODS" 9 | PODS_BUILD_DIR = ${BUILD_DIR} 10 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 11 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 12 | PODS_ROOT = ${SRCROOT}/Pods 13 | SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Snap.swift" 14 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Tests/Pods-Tests.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Snap.swift" 5 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Snap.swift" 6 | OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Snap.swift/Snap_swift.modulemap" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Snap.swift" 7 | OTHER_LDFLAGS = $(inherited) -ObjC -l"Snap.swift" -framework "CoreGraphics" -framework "UIKit" -framework "XCTest" 8 | OTHER_SWIFT_FLAGS = $(inherited) -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Snap.swift/Snap_swift.modulemap" $(inherited) "-D" "COCOAPODS" 9 | PODS_BUILD_DIR = ${BUILD_DIR} 10 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 11 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 12 | PODS_ROOT = ${SRCROOT}/Pods 13 | SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Snap.swift" 14 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Application/Matcher/SnapshotLayerMatcher.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | protocol SnapshotLayerMatcherProvider { 4 | func makeMatcher(with layer: CALayer, isRecording: Bool, tesTarget: TestTarget) -> LayerMatcher 5 | } 6 | 7 | struct SnapshotLayerMatcher: LayerMatcher { 8 | 9 | private let layer: CALayer 10 | private let isRecording: Bool 11 | private let testTarget: TestTarget 12 | private let viewMatcherProvider: SnapshotViewMatcherProvider 13 | 14 | init(layer: CALayer, 15 | isRecording: Bool, 16 | testTarget: TestTarget, 17 | viewMatcherProvider: SnapshotViewMatcherProvider) 18 | { 19 | self.layer = layer 20 | self.isRecording = isRecording 21 | self.testTarget = testTarget 22 | self.viewMatcherProvider = viewMatcherProvider 23 | } 24 | 25 | func toMatchSnapshot() { 26 | toMatchSnapshot(named: nil) 27 | } 28 | 29 | func toMatchSnapshot(named: String?) { 30 | let view = UIView(frame: layer.frame) 31 | view.layer.insertSublayer(layer, at: 0) 32 | 33 | viewMatcherProvider.makeMatcher( 34 | with: view, 35 | isRecording: isRecording, 36 | tesTarget: testTarget 37 | ).toMatchSnapshot(named: named) 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Tests/Pods-Tests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## Snap.swift 5 | 6 | MIT License 7 | 8 | Copyright (c) 2017-Present Oscar Antonio Duran Grillo 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | Generated by CocoaPods - https://cocoapods.org 28 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Infrastructure/Extension/UIImage/UIImage+Diff.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | extension UIImage { 4 | /// Get the difference between two images by applying a blend mode on top 5 | /// [Original source](https://github.com/facebookarchive/ios-snapshot-test-case/blob/master/FBSnapshotTestCase/Categories/UIImage%2BDiff.m) 6 | func diff(with image: UIImage) -> UIImage? { 7 | guard let oldImageContext = context(for: self) else { return nil } 8 | let rect = getMaximumRect(with: image) 9 | 10 | // Draw old image 11 | oldImageContext.draw(cgImage!, in: rect) 12 | 13 | // Set alpha for drawing the new image on top of the old 14 | oldImageContext.setAlpha(0.5) 15 | oldImageContext.beginTransparencyLayer(auxiliaryInfo: nil) 16 | 17 | // Draw new image with blend mode set `difference` 18 | oldImageContext.draw(image.cgImage!, in: rect) 19 | oldImageContext.setBlendMode(.difference) 20 | oldImageContext.setFillColor(UIColor.white.cgColor) 21 | oldImageContext.fill(rect) 22 | oldImageContext.endTransparencyLayer() 23 | 24 | guard let diffedCgImage = oldImageContext.makeImage() else { return nil } 25 | return UIImage(cgImage: diffedCgImage) 26 | } 27 | 28 | private func getMaximumRect(with image: UIImage) -> CGRect { 29 | return CGRect(x: 0, y: 0, width: max(cgImage!.width, image.cgImage!.width), height: max(cgImage!.height, image.cgImage!.width)) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## OSX 6 | .DS_Store 7 | 8 | ## Build generated 9 | build/ 10 | DerivedData/ 11 | 12 | ## Various settings 13 | *.pbxuser 14 | !default.pbxuser 15 | *.mode1v3 16 | !default.mode1v3 17 | *.mode2v3 18 | !default.mode2v3 19 | *.perspectivev3 20 | !default.perspectivev3 21 | xcuserdata/ 22 | 23 | ## Other 24 | *.moved-aside 25 | *.xccheckout 26 | *.xcscmblueprint 27 | 28 | ## Obj-C/Swift specific 29 | *.hmap 30 | *.ipa 31 | *.dSYM.zip 32 | *.dSYM 33 | 34 | ## Playgrounds 35 | timeline.xctimeline 36 | playground.xcworkspace 37 | 38 | # Swift Package Manager 39 | # 40 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 41 | # Packages/ 42 | # Package.pins 43 | .build/ 44 | 45 | # CocoaPods 46 | # 47 | # We recommend against adding the Pods directory to your .gitignore. However 48 | # you should judge for yourself, the pros and cons are mentioned at: 49 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 50 | # 51 | # Pods/ 52 | 53 | # Carthage 54 | # 55 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 56 | # Carthage/Checkouts 57 | 58 | Carthage/Build 59 | 60 | # fastlane 61 | # 62 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 63 | # screenshots whenever they are needed. 64 | # For more information about the recommended setup visit: 65 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 66 | 67 | fastlane/report.xml 68 | fastlane/Preview.html 69 | fastlane/screenshots 70 | fastlane/test_output 71 | node_modules 72 | 73 | # Jekyll 74 | _site/ 75 | .sass-cache/ 76 | .jekyll-metadata 77 | 78 | # secrets 79 | Resources/*.xcconfig 80 | *Secrets.swift* 81 | 82 | 83 | # FBSnapshotTestCase Failure Diffs 84 | FailureDiffs/ 85 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Domain/Model/TestTarget+Reference.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | enum Type: String { 4 | case reference 5 | case failed 6 | case diff 7 | } 8 | 9 | extension TestTarget { 10 | func reference(for type: Type) -> Reference { 11 | // There should be a better way to handle with this ⚠️ 12 | let classFile = file.components(separatedBy: "/").last?.components(separatedBy: ".").first ?? "" 13 | let functionName = function.replacingOccurrences(of: "()", with: "").lowercased() 14 | let path = "\(self.path(for: type))\(classFile)/" 15 | let directory = url.appendingPathComponent(path) 16 | let name = (named ?? functionName).replacingOccurrences(of: " ", with: "_") 17 | 18 | var partialPath = "\(type.rawValue)_" 19 | if let deviceName = device?.rawValue { 20 | partialPath = "\(partialPath)\(deviceName.lowercased())_" 21 | } 22 | let pathUrl = directory.appendingPathComponent("\(partialPath)\(name)\(scale).png") 23 | return Reference( 24 | directory: directory, 25 | path: pathUrl 26 | ) 27 | } 28 | 29 | private var scale: String { 30 | let scale = Int(UIScreen.main.scale) 31 | guard scale == 1 else { return "@\(scale)x" } 32 | return "" 33 | } 34 | 35 | private var url: URL { 36 | guard let referenceImagePath = environment.get(Path.referenceImage) else { 37 | fatalError("🚧 You need to configure the reference image path environment variable `\(Path.referenceImage)`") 38 | } 39 | let fileURL = URL(fileURLWithPath: referenceImagePath) 40 | var isDir: ObjCBool = true 41 | let referenceImagePathExists = fileManager.fileExists(atPath: fileURL.path, isDirectory: &isDir) 42 | 43 | guard referenceImagePathExists else { 44 | fatalError("🚫 Provided path ['\(referenceImagePath)'] for `\(Path.referenceImage)` is invalid") 45 | } 46 | return fileURL 47 | } 48 | 49 | private func path(for type: Type) -> String { 50 | switch type { 51 | case .reference: 52 | return "Snap/" 53 | case .failed: 54 | return "Snap/Failed/" 55 | case .diff: 56 | return "Snap/Diff/" 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DropdownTitleView 2 | 3 | A simple and configurable "dropdown" view built for `UINavigationItem.titleView`. 4 | 5 | ## Installation 6 | 7 | Just add `DropdownTitleView` to your Podfile and pod install. Done! 8 | 9 | ``` 10 | pod 'DropdownTitleView' 11 | ``` 12 | 13 | ## Usage 14 | 15 | Create an instance of `DropdownTitleView`, configure it, and set it as a `UINavigationItem`'s `titleView`: 16 | 17 | ```swift 18 | func viewDidLoad() { 19 | super.viewDidLoad() 20 | let titleView = DropdownTitleView() 21 | titleView.configure(title: "Hello world!", subtitle: "Is this thing on?") 22 | navigationItem.titleView = titleView 23 | } 24 | ``` 25 | 26 | ![Example](readme.png) 27 | 28 | Add touch handling like you would any other `UIControl`: 29 | 30 | ```swift 31 | func viewDidLoad() { 32 | super.viewDidLoad() 33 | // setup and set titleView 34 | titleView.addTarget( 35 | self, 36 | action: #selector(onTitle), 37 | for: .touchUpInside 38 | ) 39 | } 40 | 41 | @objc func onTitle() { 42 | print("do something") 43 | } 44 | ``` 45 | 46 | ### Configuration 47 | 48 | `DropdownTitleView` has several appearance options: 49 | 50 | - `titleFont` and `titleColor` - `UIFont` and `UIColor` of the top title label 51 | - `subtitleFont` and `subtitleColor` - `UIFont` and `UIColor` of the bottom subtitle label 52 | - `chevronTintColor` - `UIColor` tint of the chevron image 53 | 54 | All of these values are configurable via `UIAppearance` as well! 55 | 56 | ```swift 57 | DropdownTitleView.appearance().chevronTintColor = .blue 58 | DropdownTitleView.appearance().titleColor = .black 59 | DropdownTitleView.appearance().subtitleColor = .lightGray 60 | DropdownTitleView.appearance().titleFont = .systemFontOfSize(18) 61 | DropdownTitleView.appearance().subtitleFont = .systemFontOfSize(13) 62 | ``` 63 | 64 | You can also control the features of the view with params in `configure(...)` function: 65 | 66 | - `subtitle` - Leave `nil` to remove the subtitle and vertically center the title 67 | - `chevronEnabled` - Set to `false` to remove the chevron 68 | - `accessibilityLabel` and `accessibilityHint` - Set Accessibility features on the control 69 | 70 | ## Acknowledgements 71 | 72 | - Created with ❤️ by [Ryan Nystrom](https://twitter.com/_ryannystrom) 73 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Application/Matcher/SnapshotViewMatcher.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | protocol SnapshotViewMatcherProvider { 4 | func makeMatcher(with view: UIView, isRecording: Bool, tesTarget: TestTarget) -> ViewMatcher 5 | } 6 | 7 | struct SnapshotViewMatcher: ViewMatcher { 8 | 9 | private let view: UIView 10 | private let isRecording: Bool 11 | private let testTarget: TestTarget 12 | private let extractViewImage: ExtractViewImage 13 | private let compareImages: CompareImages 14 | 15 | init(view: UIView, 16 | isRecording: Bool = false, 17 | testTarget: TestTarget, 18 | extractViewImage: ExtractViewImage, 19 | compareImages: CompareImages) 20 | { 21 | self.view = view 22 | self.isRecording = isRecording 23 | self.testTarget = testTarget 24 | self.extractViewImage = extractViewImage 25 | self.compareImages = compareImages 26 | } 27 | 28 | func toMatchSnapshot() { 29 | toMatchSnapshot(named: nil) 30 | } 31 | 32 | func toMatchSnapshot(for devices: [Device]) { 33 | devices.forEach { device in 34 | self.toMatchSnapshot(named: nil, with: device) 35 | } 36 | } 37 | 38 | func toMatchSnapshot(for allDevices: AllDevices) { 39 | var deviceList = [Device]() 40 | 41 | switch allDevices { 42 | case .allDevices: 43 | deviceList = allDevices.all 44 | case .iPhoneDevices: 45 | deviceList = allDevices.iphone 46 | case .iPadDevices: 47 | deviceList = allDevices.ipad 48 | } 49 | 50 | deviceList.forEach { device in 51 | self.toMatchSnapshot(named: nil, with: device) 52 | } 53 | } 54 | 55 | func toMatchSnapshot(named: String?) { 56 | toMatchSnapshot(named: named, with: nil) 57 | } 58 | 59 | private func toMatchSnapshot(named: String?, 60 | with device: Device? = nil) 61 | { 62 | let updatedTestTarget = testTarget.named(named, with: device) 63 | let updatedView = self.view 64 | if let device = updatedTestTarget.device { 65 | updatedView.frame = CGRect(origin: .zero, size: device.size) 66 | updatedView.layoutIfNeeded() 67 | } 68 | guard isRecording else { 69 | compareImages.compare(with: updatedView, testTarget: updatedTestTarget) 70 | return 71 | } 72 | extractViewImage.execute(with: updatedView, testTarget: updatedTestTarget) 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Tests/Pods-Tests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | MIT License 18 | 19 | Copyright (c) 2017-Present Oscar Antonio Duran Grillo 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in all 29 | copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | SOFTWARE. 38 | License 39 | MIT 40 | Title 41 | Snap.swift 42 | Type 43 | PSGroupSpecifier 44 | 45 | 46 | FooterText 47 | Generated by CocoaPods - https://cocoapods.org 48 | Title 49 | 50 | Type 51 | PSGroupSpecifier 52 | 53 | 54 | StringsTable 55 | Acknowledgements 56 | Title 57 | Acknowledgements 58 | 59 | 60 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Infrastructure/Extension/UIImage/UIImage+Compare.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import CoreGraphics 3 | 4 | enum CompareError: Error { 5 | case invalidReferenceImage 6 | case invalidImageSize 7 | case notEqualSize(referenceSize: CGSize, comparedSize: CGSize) 8 | case notEquals 9 | case notEqualMetadata 10 | } 11 | 12 | extension UIImage { 13 | /// Compare two images using different approaches (size, metadata, bytes) 14 | /// - Warning: This methods throws **CompareError** 15 | func compare(with image: UIImage) throws { 16 | guard let cgImage = cgImage else { throw CompareError.invalidReferenceImage } 17 | let referenceImageSize = CGSize(width: cgImage.width, height: cgImage.height) 18 | let imageSize = CGSize(width: image.cgImage!.width, height: image.cgImage!.height) 19 | 20 | let imagesAreTheSameSize = referenceImageSize == imageSize 21 | guard imagesAreTheSameSize else { 22 | throw CompareError.notEqualSize(referenceSize: size, comparedSize: image.size) 23 | } 24 | 25 | let imagesHaveZeroSize = (size != .zero) && (image.size != .zero) 26 | guard imagesHaveZeroSize else { 27 | throw CompareError.invalidImageSize 28 | } 29 | 30 | guard let referenceImageContext = context(for: self), 31 | let imageContext = context(for: image) else { 32 | fatalError("👾 Cannot create image context") 33 | } 34 | 35 | referenceImageContext.draw(cgImage, in: CGRect(x: 0, y: 0, width: Int(referenceImageSize.width), height: Int(referenceImageContext.height))) 36 | imageContext.draw(image.cgImage!, in: CGRect(x: 0, y: 0, width: Int(imageSize.width), height: Int(imageSize.height))) 37 | 38 | try compareMetadata(from: referenceImageContext, matches: imageContext) 39 | 40 | let minBytesPerRow = min(cgImage.bytesPerRow, image.cgImage!.bytesPerRow) 41 | let referenceImageSizeBytes = Int(referenceImageSize.height) * minBytesPerRow 42 | 43 | // Do a lexicographically comparsion using the object representations, not the object values (byte array check) 44 | // @Shameless copied from https://github.com/facebookarchive/ios-snapshot-test-case/blob/da629211c17a4c507e2e866e8a19ed3122af770b/FBSnapshotTestCase/Categories/UIImage%2BCompare.m#L101 45 | let equals = memcmp(referenceImageContext.data!, imageContext.data!, referenceImageSizeBytes) 46 | 47 | let imagesAreEqual = normalizedImage! == image.normalizedImage! && equals == 0 48 | if !imagesAreEqual { 49 | throw CompareError.notEquals 50 | } 51 | } 52 | 53 | private func compareMetadata(from context1: CGContext, matches context2: CGContext) throws { 54 | let haveEqualWidth = (context1.width == context2.width) 55 | let haveEqualHeight = (context1.height == context2.height) 56 | let haveEqualBitsPerComponent = (context1.bitsPerComponent == context2.bitsPerComponent) 57 | let haveEqualBytesPerRow = (context1.bytesPerRow == context2.bytesPerRow) 58 | let haveEqualColorSpace = (context1.colorSpace == context2.colorSpace) 59 | let imagesHaveEqualMetadata = haveEqualWidth && haveEqualHeight && 60 | haveEqualBitsPerComponent && haveEqualBytesPerRow && haveEqualColorSpace 61 | 62 | guard imagesHaveEqualMetadata else { 63 | throw CompareError.notEqualMetadata 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /Pods/Snap.swift/Snap/Core/Application/Actions/CompareImages.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import XCTest 3 | 4 | struct CompareImages { 5 | 6 | private let fileManager: FileManager 7 | private let config: Config 8 | private let addAttachment: AddAttachment 9 | private let saveImageToDisk: SaveImageToDisk 10 | 11 | init(fileManager: FileManager, 12 | config: Config, 13 | addAttachment: AddAttachment, 14 | saveImageToDisk: SaveImageToDisk) 15 | { 16 | self.fileManager = fileManager 17 | self.config = config 18 | self.addAttachment = addAttachment 19 | self.saveImageToDisk = saveImageToDisk 20 | } 21 | 22 | func compare(with view: UIView, testTarget: TestTarget) { 23 | guard let image = view.render() else { 24 | fatalError("🖼 Can not extract image from view") 25 | } 26 | 27 | let reference = testTarget.reference(for: .reference).path 28 | guard fileManager.fileExists(atPath: reference.path) else { 29 | XCTFail("🚫 Reference image not found [`\(reference.path)`]") 30 | return 31 | } 32 | 33 | guard let referenceImage = UIImage(contentsOfFile: reference.path) else { 34 | XCTFail("🚫 Error loading reference image [`\(reference.path)`]") 35 | return 36 | } 37 | 38 | guard let pngImage = UIImagePNGRepresentation(image), let processedImage = UIImage(data: pngImage) else { 39 | XCTFail("🚫 Cannot process view image") 40 | return 41 | } 42 | 43 | addAttachment.execute(with: referenceImage, type: .reference) 44 | 45 | do { 46 | try referenceImage.compare(with: processedImage) 47 | } catch CompareError.notEqualSize(let referenceSize, let comparedSize) { 48 | self.process(failedImage: processedImage, reference: referenceImage, testTarget: testTarget) 49 | XCTFail("📏 Image sizes should be equals, reference image size: \(referenceSize), compared image size: \(comparedSize)") 50 | } catch CompareError.invalidImageSize { 51 | self.process(failedImage: processedImage, reference: referenceImage, testTarget: testTarget) 52 | XCTFail("📏 One of the images has 0 size") 53 | } catch CompareError.notEquals { 54 | self.process(failedImage: processedImage, reference: referenceImage, testTarget: testTarget) 55 | XCTFail("≠ Images are not equal") 56 | } catch CompareError.notEqualMetadata { 57 | self.process(failedImage: processedImage, reference: referenceImage, testTarget: testTarget) 58 | XCTFail("👾 Images have different metadata information") 59 | } catch CompareError.invalidReferenceImage { 60 | self.process(failedImage: processedImage, reference: referenceImage, testTarget: testTarget) 61 | XCTFail("👾 Invalid reference image") 62 | } catch { 63 | self.process(failedImage: processedImage, reference: referenceImage, testTarget: testTarget) 64 | XCTFail("🚫 Unknown error") 65 | } 66 | } 67 | 68 | private func process(failedImage: UIImage, reference: UIImage, testTarget: TestTarget) { 69 | addAttachment.execute(with: failedImage, type: .failed) 70 | saveImageToDisk.execute(with: failedImage, with: testTarget.reference(for: .failed)) 71 | 72 | guard let diffedImage = reference.diff(with: failedImage) else { return } 73 | addAttachment.execute(with: diffedImage, type: .diff) 74 | saveImageToDisk.execute(with: diffedImage, with: testTarget.reference(for: .diff)) 75 | 76 | if config.enableKaleidoscope { 77 | let referencePath = testTarget.reference(for: .reference).path 78 | let failedPath = testTarget.reference(for: .failed).path 79 | 80 | print("🌈 Execute this command to see image diff on Kaleidoscope: ksdiff \(referencePath.path) \(failedPath.path)") 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /DropdownTitleView.xcodeproj/xcshareddata/xcschemes/DropdownTitleView.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 65 | 71 | 72 | 73 | 74 | 78 | 79 | 80 | 81 | 82 | 83 | 89 | 90 | 96 | 97 | 98 | 99 | 101 | 102 | 105 | 106 | 107 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Tests/Pods-Tests-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then 7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # resources to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 13 | 14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 15 | > "$RESOURCES_TO_COPY" 16 | 17 | XCASSET_FILES=() 18 | 19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 22 | 23 | case "${TARGETED_DEVICE_FAMILY:-}" in 24 | 1,2) 25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 26 | ;; 27 | 1) 28 | TARGET_DEVICE_ARGS="--target-device iphone" 29 | ;; 30 | 2) 31 | TARGET_DEVICE_ARGS="--target-device ipad" 32 | ;; 33 | 3) 34 | TARGET_DEVICE_ARGS="--target-device tv" 35 | ;; 36 | 4) 37 | TARGET_DEVICE_ARGS="--target-device watch" 38 | ;; 39 | *) 40 | TARGET_DEVICE_ARGS="--target-device mac" 41 | ;; 42 | esac 43 | 44 | install_resource() 45 | { 46 | if [[ "$1" = /* ]] ; then 47 | RESOURCE_PATH="$1" 48 | else 49 | RESOURCE_PATH="${PODS_ROOT}/$1" 50 | fi 51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 52 | cat << EOM 53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 54 | EOM 55 | exit 1 56 | fi 57 | case $RESOURCE_PATH in 58 | *.storyboard) 59 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 60 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 61 | ;; 62 | *.xib) 63 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 64 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 65 | ;; 66 | *.framework) 67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 71 | ;; 72 | *.xcdatamodel) 73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 75 | ;; 76 | *.xcdatamodeld) 77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 79 | ;; 80 | *.xcmappingmodel) 81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 83 | ;; 84 | *.xcassets) 85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 87 | ;; 88 | *) 89 | echo "$RESOURCE_PATH" || true 90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 91 | ;; 92 | esac 93 | } 94 | 95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 100 | fi 101 | rm -f "$RESOURCES_TO_COPY" 102 | 103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] 104 | then 105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 107 | while read line; do 108 | if [[ $line != "${PODS_ROOT}*" ]]; then 109 | XCASSET_FILES+=("$line") 110 | fi 111 | done <<<"$OTHER_XCASSETS" 112 | 113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then 114 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 115 | else 116 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" 117 | fi 118 | fi 119 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DropdownTitleView/Pods-DropdownTitleView-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then 7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # resources to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 13 | 14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 15 | > "$RESOURCES_TO_COPY" 16 | 17 | XCASSET_FILES=() 18 | 19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 22 | 23 | case "${TARGETED_DEVICE_FAMILY:-}" in 24 | 1,2) 25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 26 | ;; 27 | 1) 28 | TARGET_DEVICE_ARGS="--target-device iphone" 29 | ;; 30 | 2) 31 | TARGET_DEVICE_ARGS="--target-device ipad" 32 | ;; 33 | 3) 34 | TARGET_DEVICE_ARGS="--target-device tv" 35 | ;; 36 | 4) 37 | TARGET_DEVICE_ARGS="--target-device watch" 38 | ;; 39 | *) 40 | TARGET_DEVICE_ARGS="--target-device mac" 41 | ;; 42 | esac 43 | 44 | install_resource() 45 | { 46 | if [[ "$1" = /* ]] ; then 47 | RESOURCE_PATH="$1" 48 | else 49 | RESOURCE_PATH="${PODS_ROOT}/$1" 50 | fi 51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 52 | cat << EOM 53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 54 | EOM 55 | exit 1 56 | fi 57 | case $RESOURCE_PATH in 58 | *.storyboard) 59 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 60 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 61 | ;; 62 | *.xib) 63 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 64 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 65 | ;; 66 | *.framework) 67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 71 | ;; 72 | *.xcdatamodel) 73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 75 | ;; 76 | *.xcdatamodeld) 77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 79 | ;; 80 | *.xcmappingmodel) 81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 83 | ;; 84 | *.xcassets) 85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 87 | ;; 88 | *) 89 | echo "$RESOURCE_PATH" || true 90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 91 | ;; 92 | esac 93 | } 94 | 95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 100 | fi 101 | rm -f "$RESOURCES_TO_COPY" 102 | 103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] 104 | then 105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 107 | while read line; do 108 | if [[ $line != "${PODS_ROOT}*" ]]; then 109 | XCASSET_FILES+=("$line") 110 | fi 111 | done <<<"$OTHER_XCASSETS" 112 | 113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then 114 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 115 | else 116 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" 117 | fi 118 | fi 119 | -------------------------------------------------------------------------------- /Pods/Snap.swift/README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 |

Snap.swift - Snapshot testing in a snap 🎨

5 |

6 | 7 | 8 | 9 | Carthage compatible 10 | 11 | 12 | Twitter: @skyweb07 13 | 14 | 15 | License 16 | 17 |

18 | 19 | `Snap.swift` is a snapshot testing library to facilitate the UI testing of your views. 20 | 21 | ### 🤖 Requirements 22 | 23 | * iOS 9.0+ 24 | * tvOS 10.0+ 25 | * Xcode 9.0+ 26 | * Swift / Objective-C 27 | 28 | ### 🎨 Why test the UI? 29 | You want to make sure that every time you touch any of your UI elements everything stays as they way they were meant to be, also this kind of integration test help you achieve the pixel perfect views and make your designers happy by having design reference images that they can see even in your pull requests. 30 | 31 | ### ⚡️ How does it work? 32 | Works by generating a reference image that gets stored in your repository and then comparing each new test case with the `reference image` to check if there are any differences. If test found any differences it will add an attachment into your test case and you'll be able to check what changed 33 | 34 | ![Project attachment](.art/xcode_attachment.png) 35 | 36 | ### 🛠 Configuration 37 | 38 | In order to configure the snapshot test folder, we need to add a new environment variable to the project with name `SNAP_REFERENCE_IMAGE_PATH` and value `$(SOURCE_ROOT)/$(PROJECT_NAME)Tests/` so `Snap.swift` can find the folder to store the reference images. 39 | 40 | It is also very important that the "Shared" checkbox at the very bottom is activated, so those settings are tracked in your repo and shared with your team. 41 | 42 | If the configuration was correctly set the project should look like this: 43 | 44 | ![Project attachment](.art/xcode_project_environment_variable.png) 45 | 46 | > Errored images and diffed one's are stored into `$PATH/Snap/Failed` and `$PATH/Snap/Diff`, if you want you can add those paths into `.gitignore` as these are not needed for `Snap.swift` to work. 47 | 48 | ### 🎯 Installation 49 | 50 | Snap.swift is available through [CocoaPods](http://cocoapods.org). To install 51 | it, simply add the following line to your Podfile: 52 | 53 | ```ruby 54 | pod 'Snap.swift' 55 | ``` 56 | 57 | 58 | To install with [Carthage](https://github.com/Carthage/Carthage) add the following line to your `Cartfile`: 59 | ``` 60 | github "skyweb07/Snap.swift" 61 | ``` 62 | 63 | ### ✅ Creating our first test 64 | 65 | 1) We first need to record our reference images, in order to do so we have to first go into our test class and set the `isRecording` variable to be `true` so the library knows that we are in record mode and can extract the `reference images` 66 | 67 | > Swift 68 | 69 | ```swift 70 | import XCTest 71 | import Snap_swift 72 | 73 | class SnapTests: XCTestCase { 74 | 75 | override func setUp() { 76 | super.setUp() 77 | isRecording = true 78 | } 79 | 80 | func test_box_with_text_aligned_to_center() { 81 | let view = BoxWithTextAlignedToCenterView() 82 | 83 | expect(view).toMatchSnapshot() 84 | } 85 | } 86 | ``` 87 | 88 | > Objective-c 89 | ```objc 90 | @import XCTest; 91 | #import 92 | #import 93 | 94 | @interface SnapTests : XCTestCase 95 | @end 96 | 97 | @implementation SnapTests 98 | 99 | - (void)setUp { 100 | [super setUp]; 101 | self.isRecording = YES; 102 | } 103 | 104 | - (void)test_box_with_text_aligned_to_center { 105 | 106 | UIView *view = [BoxWithTextAlignedToCenterView new]; 107 | 108 | verifyView(view); 109 | } 110 | 111 | @end 112 | 113 | ``` 114 | 115 | 116 | After executing out test suite if everything was ok we should see that all of our tests failed with a warning similar to 117 | 118 | ```bash 119 | ⚠️ Test ran in record mode, reference image has been saved to $SNAP_REFERENCE_IMAGE_PATH/testcase.png, now remove `isRecording` in order to perform the snapshot comparison. 120 | 121 | ``` 122 | 123 | This is ok, it just means that our reference images were saved, we can inspect them in our `reference image` directory, we should normally add these into `git` so we can compare against them. 124 | 125 | #### ⚠️ Warning 126 | > *Remember to remove the `isRecording` flag after generating your reference images or you won't be able to do the image comparison* 127 | 128 | ### ☑ TODO: 129 | * [ ] Add tests for project 130 | * [ ] Make device agnostic screenshots 131 | 132 | ### 📝 Notes 133 | 134 | > As today, you can make assertions on `UIView` and `CALayer` classes. 135 | 136 | This project is highly inspired on `Facebook` [FBSnapshotTestCase](https://github.com/facebookarchive/ios-snapshot-test-case/) library, it seems that they had archived the library so I started this one to continue envolving the project and continue with mobile `snapshot-testing` 137 | 138 | ### 😬 Contributions 139 | - Open an [issue](https://github.com/skyweb07/Snap.swift/issues/new) 140 | - Add suggestions or fix [issues](https://github.com/skyweb07/Snap.swift/issues) by opening PR's 141 | - Send me a message via [Twitter](https://twitter.com/skyweb07) 142 | 143 | ### ⚖ License 144 | ```bash 145 | MIT License 146 | 147 | Copyright (c) 2017-Present Oscar Antonio Duran Grillo 148 | 149 | Permission is hereby granted, free of charge, to any person obtaining a copy 150 | of this software and associated documentation files (the "Software"), to deal 151 | in the Software without restriction, including without limitation the rights 152 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 153 | copies of the Software, and to permit persons to whom the Software is 154 | furnished to do so, subject to the following conditions: 155 | 156 | The above copyright notice and this permission notice shall be included in all 157 | copies or substantial portions of the Software. 158 | 159 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 160 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 161 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 162 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 163 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 164 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 165 | SOFTWARE. 166 | ``` 167 | -------------------------------------------------------------------------------- /Source/DropdownTitleView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NavigationTitleDropdownView.swift 3 | // Freetime 4 | // 5 | // Created by Ryan Nystrom on 1/13/18. 6 | // Copyright © 2018 Ryan Nystrom. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | open class DropdownTitleView: UIControl { 12 | 13 | internal let titleLabel = UILabel() 14 | internal let subtitleLabel = UILabel() 15 | internal let chevron = UIImageView(image: UIImage( 16 | named: "chevron-down-small", 17 | in: Bundle(for: DropdownTitleView.self), 18 | compatibleWith: nil 19 | )?.withRenderingMode(.alwaysTemplate) 20 | ) 21 | internal let horizontalStackView = UIStackView() 22 | internal let verticalStackView = UIStackView() 23 | 24 | public init() { 25 | super.init(frame: .zero) 26 | isAccessibilityElement = true 27 | accessibilityTraits |= UIAccessibilityTraitButton 28 | 29 | chevron.translatesAutoresizingMaskIntoConstraints = false 30 | chevron.setContentCompressionResistancePriority(.required, for: .horizontal) 31 | chevron.setContentCompressionResistancePriority(.required, for: .vertical) 32 | chevron.setContentHuggingPriority(.required, for: .horizontal) 33 | chevron.setContentHuggingPriority(.required, for: .vertical) 34 | 35 | titleLabel.translatesAutoresizingMaskIntoConstraints = false 36 | titleLabel.backgroundColor = .clear 37 | titleLabel.textAlignment = .center 38 | titleLabel.lineBreakMode = .byTruncatingHead 39 | titleLabel.adjustsFontSizeToFitWidth = true 40 | titleLabel.minimumScaleFactor = 0.75 41 | titleLabel.textColor = UIColor.darkText 42 | titleLabel.font = UIFont.boldSystemFont(ofSize: UIFont.systemFontSize) 43 | titleLabel.isAccessibilityElement = false 44 | 45 | subtitleLabel.translatesAutoresizingMaskIntoConstraints = false 46 | subtitleLabel.backgroundColor = .clear 47 | subtitleLabel.textAlignment = .center 48 | subtitleLabel.lineBreakMode = .byTruncatingHead 49 | subtitleLabel.adjustsFontSizeToFitWidth = true 50 | subtitleLabel.minimumScaleFactor = 0.75 51 | subtitleLabel.textColor = UIColor.darkGray 52 | subtitleLabel.font = UIFont.systemFont(ofSize: UIFont.smallSystemFontSize) 53 | subtitleLabel.isAccessibilityElement = false 54 | 55 | verticalStackView.isUserInteractionEnabled = false 56 | verticalStackView.translatesAutoresizingMaskIntoConstraints = false 57 | verticalStackView.alignment = .center 58 | verticalStackView.axis = .vertical 59 | verticalStackView.distribution = .equalCentering 60 | verticalStackView.addArrangedSubview(titleLabel) 61 | verticalStackView.addArrangedSubview(subtitleLabel) 62 | 63 | horizontalStackView.isUserInteractionEnabled = false 64 | horizontalStackView.translatesAutoresizingMaskIntoConstraints = false 65 | horizontalStackView.alignment = .center 66 | horizontalStackView.distribution = .equalCentering 67 | horizontalStackView.spacing = 4 68 | horizontalStackView.addArrangedSubview(verticalStackView) 69 | horizontalStackView.addArrangedSubview(chevron) 70 | 71 | addSubview(horizontalStackView) 72 | 73 | horizontalStackView.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true 74 | horizontalStackView.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true 75 | 76 | addConstraint(NSLayoutConstraint(item: horizontalStackView, attribute: .width, relatedBy: .lessThanOrEqual, toItem: self, attribute: .width, multiplier: 1, constant: 0)) 77 | addConstraint(NSLayoutConstraint(item: horizontalStackView, attribute: .height, relatedBy: .lessThanOrEqual, toItem: self, attribute: .height, multiplier: 1, constant: 0)) 78 | } 79 | 80 | required public init?(coder aDecoder: NSCoder) { 81 | fatalError("init(coder:) has not been implemented") 82 | } 83 | 84 | @objc dynamic open var chevronTintColor: UIColor? { 85 | get { 86 | return chevron.tintColor 87 | } 88 | set { 89 | chevron.tintColor = newValue 90 | } 91 | } 92 | 93 | @objc dynamic open var titleFont: UIFont { 94 | get { 95 | return titleLabel.font 96 | } 97 | set { 98 | titleLabel.font = newValue 99 | invalidateIntrinsicContentSize() 100 | } 101 | } 102 | 103 | @objc dynamic open var titleColor: UIColor { 104 | get { 105 | return titleLabel.textColor 106 | } 107 | set { 108 | titleLabel.textColor = newValue 109 | } 110 | } 111 | 112 | @objc dynamic open var subtitleFont: UIFont { 113 | get { 114 | return subtitleLabel.font 115 | } 116 | set { 117 | subtitleLabel.font = newValue 118 | invalidateIntrinsicContentSize() 119 | } 120 | } 121 | 122 | @objc dynamic open var subtitleColor: UIColor { 123 | get { 124 | return subtitleLabel.textColor 125 | } 126 | set { 127 | subtitleLabel.textColor = newValue 128 | } 129 | } 130 | 131 | override open func touchesBegan(_ touches: Set, with event: UIEvent?) { 132 | super.touchesBegan(touches, with: event) 133 | fadeControls(alpha: 0.5) 134 | } 135 | 136 | override open func touchesEnded(_ touches: Set, with event: UIEvent?) { 137 | super.touchesEnded(touches, with: event) 138 | fadeControls(alpha: 1) 139 | } 140 | 141 | override open func touchesCancelled(_ touches: Set, with event: UIEvent?) { 142 | super.touchesCancelled(touches, with: event) 143 | fadeControls(alpha: 1) 144 | } 145 | 146 | open override func sizeThatFits(_ size: CGSize) -> CGSize { 147 | return horizontalStackView.systemLayoutSizeFitting(size) 148 | } 149 | 150 | open override func systemLayoutSizeFitting(_ targetSize: CGSize) -> CGSize { 151 | return horizontalStackView.systemLayoutSizeFitting(targetSize) 152 | } 153 | 154 | override open var intrinsicContentSize: CGSize { 155 | return UILayoutFittingCompressedSize 156 | } 157 | 158 | // MARK: Public API 159 | 160 | open func configure( 161 | title: String, 162 | subtitle: String? = nil, 163 | chevronEnabled: Bool = true, 164 | accessibilityLabel: String? = nil, 165 | accessibilityHint: String? = nil 166 | ) { 167 | titleLabel.text = title 168 | subtitleLabel.text = subtitle 169 | self.accessibilityLabel = accessibilityLabel ?? title 170 | self.accessibilityHint = accessibilityHint 171 | 172 | chevron.isHidden = !chevronEnabled 173 | subtitleLabel.isHidden = !(subtitle?.isEmpty == false) 174 | 175 | invalidateIntrinsicContentSize() 176 | } 177 | 178 | // MARK: Private API 179 | 180 | internal var chevronEnabled: Bool { 181 | return chevron.superview != nil 182 | } 183 | 184 | internal func fadeControls(alpha: CGFloat) { 185 | guard chevronEnabled else { return } 186 | [titleLabel, subtitleLabel, chevron].forEach { $0.alpha = alpha } 187 | } 188 | 189 | } 190 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Tests/Pods-Tests-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 7 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # frameworks to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 13 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 14 | 15 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 16 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 17 | 18 | # Used as a return value for each invocation of `strip_invalid_archs` function. 19 | STRIP_BINARY_RETVAL=0 20 | 21 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 22 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 23 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 24 | 25 | # Copies and strips a vendored framework 26 | install_framework() 27 | { 28 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 29 | local source="${BUILT_PRODUCTS_DIR}/$1" 30 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 31 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 32 | elif [ -r "$1" ]; then 33 | local source="$1" 34 | fi 35 | 36 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 37 | 38 | if [ -L "${source}" ]; then 39 | echo "Symlinked..." 40 | source="$(readlink "${source}")" 41 | fi 42 | 43 | # Use filter instead of exclude so missing patterns don't throw errors. 44 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 45 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 46 | 47 | local basename 48 | basename="$(basename -s .framework "$1")" 49 | binary="${destination}/${basename}.framework/${basename}" 50 | if ! [ -r "$binary" ]; then 51 | binary="${destination}/${basename}" 52 | fi 53 | 54 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 55 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 56 | strip_invalid_archs "$binary" 57 | fi 58 | 59 | # Resign the code if required by the build settings to avoid unstable apps 60 | code_sign_if_enabled "${destination}/$(basename "$1")" 61 | 62 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 63 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 64 | local swift_runtime_libs 65 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 66 | for lib in $swift_runtime_libs; do 67 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 68 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 69 | code_sign_if_enabled "${destination}/${lib}" 70 | done 71 | fi 72 | } 73 | 74 | # Copies and strips a vendored dSYM 75 | install_dsym() { 76 | local source="$1" 77 | if [ -r "$source" ]; then 78 | # Copy the dSYM into a the targets temp dir. 79 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 80 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 81 | 82 | local basename 83 | basename="$(basename -s .framework.dSYM "$source")" 84 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 85 | 86 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 87 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 88 | strip_invalid_archs "$binary" 89 | fi 90 | 91 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 92 | # Move the stripped file into its final destination. 93 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 94 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 95 | else 96 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 97 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 98 | fi 99 | fi 100 | } 101 | 102 | # Signs a framework with the provided identity 103 | code_sign_if_enabled() { 104 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 105 | # Use the current code_sign_identitiy 106 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 107 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 108 | 109 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 110 | code_sign_cmd="$code_sign_cmd &" 111 | fi 112 | echo "$code_sign_cmd" 113 | eval "$code_sign_cmd" 114 | fi 115 | } 116 | 117 | # Strip invalid architectures 118 | strip_invalid_archs() { 119 | binary="$1" 120 | # Get architectures for current target binary 121 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 122 | # Intersect them with the architectures we are building for 123 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 124 | # If there are no archs supported by this binary then warn the user 125 | if [[ -z "$intersected_archs" ]]; then 126 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 127 | STRIP_BINARY_RETVAL=0 128 | return 129 | fi 130 | stripped="" 131 | for arch in $binary_archs; do 132 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 133 | # Strip non-valid architectures in-place 134 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 135 | stripped="$stripped $arch" 136 | fi 137 | done 138 | if [[ "$stripped" ]]; then 139 | echo "Stripped $binary of architectures:$stripped" 140 | fi 141 | STRIP_BINARY_RETVAL=1 142 | } 143 | 144 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 145 | wait 146 | fi 147 | -------------------------------------------------------------------------------- /Tests/SnapshotTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SnapshotTests.swift 3 | // Tests 4 | // 5 | // Created by Ryan Nystrom on 10/21/18. 6 | // Copyright © 2018 Ryan Nystrom. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | import Snap_swift 11 | @testable import DropdownTitleView 12 | 13 | class Tests: XCTestCase { 14 | 15 | override func setUp() { 16 | // isRecording = true 17 | } 18 | 19 | func test_withTitle_withSubtitle_withChevron_withBackgrounds_whenSettingFrame() { 20 | let view = DropdownTitleView() 21 | view.titleLabel.backgroundColor = .red 22 | view.subtitleLabel.backgroundColor = .purple 23 | view.chevron.backgroundColor = .green 24 | view.backgroundColor = .black 25 | view.configure(title: "Hello world!", subtitle: "Is this thing on?") 26 | view.frame = CGRect(x: 0, y: 0, width: 300, height: 200) 27 | expect(view).toMatchSnapshot() 28 | } 29 | 30 | func test_withTitle_withSubtitle_withChevron_withBackgrounds_whenSizeToFit() { 31 | let view = DropdownTitleView() 32 | view.titleLabel.backgroundColor = .red 33 | view.subtitleLabel.backgroundColor = .purple 34 | view.chevron.backgroundColor = .green 35 | view.backgroundColor = .black 36 | view.configure(title: "Hello world!", subtitle: "Is this thing on?") 37 | view.sizeToFit() 38 | expect(view).toMatchSnapshot() 39 | } 40 | 41 | func test_withTitle_withSubtitle_withChevron_withChevronTint_withFonts_withTextColors() { 42 | let view = DropdownTitleView() 43 | view.configure(title: "Hello world!", subtitle: "Is this thing on?") 44 | view.chevronTintColor = .red 45 | view.titleFont = UIFont.italicSystemFont(ofSize: 18) 46 | view.subtitleFont = UIFont.boldSystemFont(ofSize: 8) 47 | view.titleColor = .green 48 | view.subtitleColor = .purple 49 | view.sizeToFit() 50 | expect(view).toMatchSnapshot() 51 | } 52 | 53 | func test_withTitle_withSubtitle() { 54 | let view = DropdownTitleView() 55 | view.chevronTintColor = .red 56 | view.configure(title: "Hello world!", subtitle: "Is this thing on?", chevronEnabled: false) 57 | view.sizeToFit() 58 | expect(view).toMatchSnapshot() 59 | } 60 | 61 | func test_withTitle_withChevron() { 62 | let view = DropdownTitleView() 63 | view.chevronTintColor = .red 64 | view.configure(title: "Hello world!") 65 | view.sizeToFit() 66 | expect(view).toMatchSnapshot() 67 | } 68 | 69 | func test_withTitle() { 70 | let view = DropdownTitleView() 71 | view.chevronTintColor = .red 72 | view.configure(title: "Hello world!", chevronEnabled: false) 73 | view.sizeToFit() 74 | expect(view).toMatchSnapshot() 75 | } 76 | 77 | func test_withTitle_withSubtitle_WithChevron_withTruncatingSubtitle() { 78 | let view = DropdownTitleView() 79 | view.chevronTintColor = .red 80 | view.configure(title: "Hello world!", subtitle: "This is a really long subtitle that needs to truncate") 81 | view.frame = CGRect(x: 0, y: 0, width: 150, height: 100) 82 | expect(view).toMatchSnapshot() 83 | } 84 | 85 | func test_withTitle_withSubtitle_WithChevron_withTruncatingTitle() { 86 | let view = DropdownTitleView() 87 | view.chevronTintColor = .red 88 | view.configure(title: "This is a really long title that needs to truncate", subtitle: "Hello world!") 89 | view.frame = CGRect(x: 0, y: 0, width: 150, height: 100) 90 | expect(view).toMatchSnapshot() 91 | } 92 | 93 | func test_withTitle_withSubtitle_WithChevron_withAutoresizingTitle() { 94 | let view = DropdownTitleView() 95 | view.chevronTintColor = .red 96 | view.configure(title: "This is a longish title", subtitle: "Hello world!") 97 | view.frame = CGRect(x: 0, y: 0, width: 130, height: 100) 98 | expect(view).toMatchSnapshot() 99 | } 100 | 101 | func test_withTitle_withSubtitle_WithChevron_withAutoresizingSubtitle() { 102 | let view = DropdownTitleView() 103 | view.chevronTintColor = .red 104 | view.configure(title: "Hello world!", subtitle: "This is a longish subtitle") 105 | view.frame = CGRect(x: 0, y: 0, width: 130, height: 100) 106 | expect(view).toMatchSnapshot() 107 | } 108 | 109 | func test_withUIAppearance() { 110 | DropdownTitleView.appearance().chevronTintColor = .red 111 | DropdownTitleView.appearance().titleFont = UIFont.italicSystemFont(ofSize: 15) 112 | DropdownTitleView.appearance().subtitleFont = UIFont.italicSystemFont(ofSize: 12) 113 | DropdownTitleView.appearance().titleColor = .green 114 | DropdownTitleView.appearance().subtitleColor = .blue 115 | 116 | let view = DropdownTitleView() 117 | view.configure(title: "Hello world!", subtitle: "Is this thing on?") 118 | view.sizeToFit() 119 | expect(view).toMatchSnapshot() 120 | } 121 | 122 | func test_withNavigationController() { 123 | let view = DropdownTitleView() 124 | view.configure(title: "Hello world!", subtitle: "Is this thing on?") 125 | let controller = UIViewController() 126 | controller.view.backgroundColor = .white 127 | controller.navigationItem.titleView = view 128 | let nav = UINavigationController(rootViewController: controller) 129 | // required to layout/draw nav bar 130 | nav.navigationBar.snapshotView(afterScreenUpdates: true) 131 | expect(nav.view).toMatchSnapshot() 132 | } 133 | 134 | func test_withNavigationController_withItems_withAutoresizingSubtitle() { 135 | let view = DropdownTitleView() 136 | view.configure(title: "Hello world!", subtitle: "This is a longish subtitle that really needs to try to autoresize") 137 | let controller = UIViewController() 138 | controller.view.backgroundColor = .white 139 | controller.navigationItem.titleView = view 140 | let nav = UINavigationController(rootViewController: controller) 141 | // required to layout/draw nav bar 142 | nav.navigationBar.snapshotView(afterScreenUpdates: true) 143 | expect(nav.view).toMatchSnapshot() 144 | } 145 | 146 | func test_withNavigationController_withAutoresizingTitle() { 147 | let view = DropdownTitleView() 148 | view.configure(title: "This is a longish title that really needs to try to autoresize", subtitle: "Is this thing on?") 149 | let controller = UIViewController() 150 | controller.view.backgroundColor = .white 151 | controller.navigationItem.titleView = view 152 | let nav = UINavigationController(rootViewController: controller) 153 | // required to layout/draw nav bar 154 | nav.navigationBar.snapshotView(afterScreenUpdates: true) 155 | expect(nav.view).toMatchSnapshot() 156 | } 157 | 158 | func test_withNavigationController_withBarItem_withTruncatingSubtitle() { 159 | let view = DropdownTitleView() 160 | view.configure(title: "Hello world!", subtitle: "This is a really really REALLY long subtitle that is so really long that it has to truncate") 161 | let controller = UIViewController() 162 | controller.view.backgroundColor = .white 163 | controller.navigationItem.titleView = view 164 | controller.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: nil) 165 | let nav = UINavigationController(rootViewController: controller) 166 | // required to layout/draw nav bar 167 | nav.navigationBar.snapshotView(afterScreenUpdates: true) 168 | expect(nav.view).toMatchSnapshot() 169 | } 170 | 171 | func test_withNavigationController_withBarItem_withTruncatingTitle() { 172 | let view = DropdownTitleView() 173 | view.configure(title: "This is a really really long title that is so really long that it has to truncate", subtitle: "Is this thing on?") 174 | let controller = UIViewController() 175 | controller.view.backgroundColor = .white 176 | controller.navigationItem.titleView = view 177 | controller.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: nil) 178 | let nav = UINavigationController(rootViewController: controller) 179 | // required to layout/draw nav bar 180 | nav.navigationBar.snapshotView(afterScreenUpdates: true) 181 | expect(nav.view).toMatchSnapshot() 182 | } 183 | 184 | } 185 | -------------------------------------------------------------------------------- /DropdownTitleView.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 2917A422217CD435006DC123 /* DropdownTitleView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2917A420217CD435006DC123 /* DropdownTitleView.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11 | 2917A42F217CD46B006DC123 /* SnapshotTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2917A42E217CD46B006DC123 /* SnapshotTests.swift */; }; 12 | 2917A431217CD46B006DC123 /* DropdownTitleView.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2917A41D217CD435006DC123 /* DropdownTitleView.framework */; }; 13 | 2917A438217CD877006DC123 /* DropdownTitleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2917A437217CD877006DC123 /* DropdownTitleView.swift */; }; 14 | 2917A43C217CE4B3006DC123 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2917A43B217CE4B3006DC123 /* Assets.xcassets */; }; 15 | 4CD2E68332D6F27D5E4137D3 /* libPods-DropdownTitleView.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EE24F15C55126FAEA3B997F6 /* libPods-DropdownTitleView.a */; }; 16 | D6B1564375C8ADB36894FD5E /* libPods-Tests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E54EE157E14723BC6BAE0E7 /* libPods-Tests.a */; }; 17 | /* End PBXBuildFile section */ 18 | 19 | /* Begin PBXContainerItemProxy section */ 20 | 2917A432217CD46B006DC123 /* PBXContainerItemProxy */ = { 21 | isa = PBXContainerItemProxy; 22 | containerPortal = 2917A414217CD434006DC123 /* Project object */; 23 | proxyType = 1; 24 | remoteGlobalIDString = 2917A41C217CD435006DC123; 25 | remoteInfo = DropdownTitleView; 26 | }; 27 | /* End PBXContainerItemProxy section */ 28 | 29 | /* Begin PBXFileReference section */ 30 | 2917A41D217CD435006DC123 /* DropdownTitleView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DropdownTitleView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 31 | 2917A420217CD435006DC123 /* DropdownTitleView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DropdownTitleView.h; sourceTree = ""; }; 32 | 2917A421217CD435006DC123 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 33 | 2917A42C217CD46A006DC123 /* Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 34 | 2917A42E217CD46B006DC123 /* SnapshotTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SnapshotTests.swift; sourceTree = ""; }; 35 | 2917A430217CD46B006DC123 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 36 | 2917A437217CD877006DC123 /* DropdownTitleView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DropdownTitleView.swift; sourceTree = ""; }; 37 | 2917A43B217CE4B3006DC123 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 38 | 2E54EE157E14723BC6BAE0E7 /* libPods-Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 39 | 644EE6EA1918CD92ADA839D9 /* Pods-Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-Tests/Pods-Tests.release.xcconfig"; sourceTree = ""; }; 40 | 67B1BC4D4766CDC3B2BD8696 /* Pods-DropdownTitleView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DropdownTitleView.release.xcconfig"; path = "Pods/Target Support Files/Pods-DropdownTitleView/Pods-DropdownTitleView.release.xcconfig"; sourceTree = ""; }; 41 | 835C4BFFE5015A4E58C77A6B /* Pods-Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Tests/Pods-Tests.debug.xcconfig"; sourceTree = ""; }; 42 | EE24F15C55126FAEA3B997F6 /* libPods-DropdownTitleView.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-DropdownTitleView.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 43 | F31F7A04F1A0BF75611CBADA /* Pods-DropdownTitleView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DropdownTitleView.debug.xcconfig"; path = "Pods/Target Support Files/Pods-DropdownTitleView/Pods-DropdownTitleView.debug.xcconfig"; sourceTree = ""; }; 44 | /* End PBXFileReference section */ 45 | 46 | /* Begin PBXFrameworksBuildPhase section */ 47 | 2917A41A217CD435006DC123 /* Frameworks */ = { 48 | isa = PBXFrameworksBuildPhase; 49 | buildActionMask = 2147483647; 50 | files = ( 51 | 4CD2E68332D6F27D5E4137D3 /* libPods-DropdownTitleView.a in Frameworks */, 52 | ); 53 | runOnlyForDeploymentPostprocessing = 0; 54 | }; 55 | 2917A429217CD46A006DC123 /* Frameworks */ = { 56 | isa = PBXFrameworksBuildPhase; 57 | buildActionMask = 2147483647; 58 | files = ( 59 | 2917A431217CD46B006DC123 /* DropdownTitleView.framework in Frameworks */, 60 | D6B1564375C8ADB36894FD5E /* libPods-Tests.a in Frameworks */, 61 | ); 62 | runOnlyForDeploymentPostprocessing = 0; 63 | }; 64 | /* End PBXFrameworksBuildPhase section */ 65 | 66 | /* Begin PBXGroup section */ 67 | 2917A413217CD434006DC123 = { 68 | isa = PBXGroup; 69 | children = ( 70 | 2917A41F217CD435006DC123 /* Source */, 71 | 2917A42D217CD46B006DC123 /* Tests */, 72 | 2917A41E217CD435006DC123 /* Products */, 73 | 9B0D206400AF2375A7BB5ACF /* Pods */, 74 | 4CBC036663F70903DAA83FA1 /* Frameworks */, 75 | ); 76 | sourceTree = ""; 77 | }; 78 | 2917A41E217CD435006DC123 /* Products */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | 2917A41D217CD435006DC123 /* DropdownTitleView.framework */, 82 | 2917A42C217CD46A006DC123 /* Tests.xctest */, 83 | ); 84 | name = Products; 85 | sourceTree = ""; 86 | }; 87 | 2917A41F217CD435006DC123 /* Source */ = { 88 | isa = PBXGroup; 89 | children = ( 90 | 2917A43B217CE4B3006DC123 /* Assets.xcassets */, 91 | 2917A420217CD435006DC123 /* DropdownTitleView.h */, 92 | 2917A437217CD877006DC123 /* DropdownTitleView.swift */, 93 | 2917A421217CD435006DC123 /* Info.plist */, 94 | ); 95 | path = Source; 96 | sourceTree = ""; 97 | }; 98 | 2917A42D217CD46B006DC123 /* Tests */ = { 99 | isa = PBXGroup; 100 | children = ( 101 | 2917A42E217CD46B006DC123 /* SnapshotTests.swift */, 102 | 2917A430217CD46B006DC123 /* Info.plist */, 103 | ); 104 | path = Tests; 105 | sourceTree = ""; 106 | }; 107 | 4CBC036663F70903DAA83FA1 /* Frameworks */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | EE24F15C55126FAEA3B997F6 /* libPods-DropdownTitleView.a */, 111 | 2E54EE157E14723BC6BAE0E7 /* libPods-Tests.a */, 112 | ); 113 | name = Frameworks; 114 | sourceTree = ""; 115 | }; 116 | 9B0D206400AF2375A7BB5ACF /* Pods */ = { 117 | isa = PBXGroup; 118 | children = ( 119 | F31F7A04F1A0BF75611CBADA /* Pods-DropdownTitleView.debug.xcconfig */, 120 | 67B1BC4D4766CDC3B2BD8696 /* Pods-DropdownTitleView.release.xcconfig */, 121 | 835C4BFFE5015A4E58C77A6B /* Pods-Tests.debug.xcconfig */, 122 | 644EE6EA1918CD92ADA839D9 /* Pods-Tests.release.xcconfig */, 123 | ); 124 | name = Pods; 125 | sourceTree = ""; 126 | }; 127 | /* End PBXGroup section */ 128 | 129 | /* Begin PBXHeadersBuildPhase section */ 130 | 2917A418217CD435006DC123 /* Headers */ = { 131 | isa = PBXHeadersBuildPhase; 132 | buildActionMask = 2147483647; 133 | files = ( 134 | 2917A422217CD435006DC123 /* DropdownTitleView.h in Headers */, 135 | ); 136 | runOnlyForDeploymentPostprocessing = 0; 137 | }; 138 | /* End PBXHeadersBuildPhase section */ 139 | 140 | /* Begin PBXNativeTarget section */ 141 | 2917A41C217CD435006DC123 /* DropdownTitleView */ = { 142 | isa = PBXNativeTarget; 143 | buildConfigurationList = 2917A425217CD435006DC123 /* Build configuration list for PBXNativeTarget "DropdownTitleView" */; 144 | buildPhases = ( 145 | 116C9BE0BCE5680F2AA16709 /* [CP] Check Pods Manifest.lock */, 146 | 2917A418217CD435006DC123 /* Headers */, 147 | 2917A419217CD435006DC123 /* Sources */, 148 | 2917A41A217CD435006DC123 /* Frameworks */, 149 | 2917A41B217CD435006DC123 /* Resources */, 150 | ); 151 | buildRules = ( 152 | ); 153 | dependencies = ( 154 | ); 155 | name = DropdownTitleView; 156 | productName = DropdownTitleView; 157 | productReference = 2917A41D217CD435006DC123 /* DropdownTitleView.framework */; 158 | productType = "com.apple.product-type.framework"; 159 | }; 160 | 2917A42B217CD46A006DC123 /* Tests */ = { 161 | isa = PBXNativeTarget; 162 | buildConfigurationList = 2917A434217CD46B006DC123 /* Build configuration list for PBXNativeTarget "Tests" */; 163 | buildPhases = ( 164 | 4415112C37A71CA266AB9FE7 /* [CP] Check Pods Manifest.lock */, 165 | 2917A428217CD46A006DC123 /* Sources */, 166 | 2917A429217CD46A006DC123 /* Frameworks */, 167 | 2917A42A217CD46A006DC123 /* Resources */, 168 | ); 169 | buildRules = ( 170 | ); 171 | dependencies = ( 172 | 2917A433217CD46B006DC123 /* PBXTargetDependency */, 173 | ); 174 | name = Tests; 175 | productName = Tests; 176 | productReference = 2917A42C217CD46A006DC123 /* Tests.xctest */; 177 | productType = "com.apple.product-type.bundle.unit-test"; 178 | }; 179 | /* End PBXNativeTarget section */ 180 | 181 | /* Begin PBXProject section */ 182 | 2917A414217CD434006DC123 /* Project object */ = { 183 | isa = PBXProject; 184 | attributes = { 185 | LastSwiftUpdateCheck = 1000; 186 | LastUpgradeCheck = 1000; 187 | ORGANIZATIONNAME = "Ryan Nystrom"; 188 | TargetAttributes = { 189 | 2917A41C217CD435006DC123 = { 190 | CreatedOnToolsVersion = 10.0; 191 | LastSwiftMigration = 1000; 192 | }; 193 | 2917A42B217CD46A006DC123 = { 194 | CreatedOnToolsVersion = 10.0; 195 | }; 196 | }; 197 | }; 198 | buildConfigurationList = 2917A417217CD434006DC123 /* Build configuration list for PBXProject "DropdownTitleView" */; 199 | compatibilityVersion = "Xcode 9.3"; 200 | developmentRegion = en; 201 | hasScannedForEncodings = 0; 202 | knownRegions = ( 203 | en, 204 | ); 205 | mainGroup = 2917A413217CD434006DC123; 206 | productRefGroup = 2917A41E217CD435006DC123 /* Products */; 207 | projectDirPath = ""; 208 | projectRoot = ""; 209 | targets = ( 210 | 2917A41C217CD435006DC123 /* DropdownTitleView */, 211 | 2917A42B217CD46A006DC123 /* Tests */, 212 | ); 213 | }; 214 | /* End PBXProject section */ 215 | 216 | /* Begin PBXResourcesBuildPhase section */ 217 | 2917A41B217CD435006DC123 /* Resources */ = { 218 | isa = PBXResourcesBuildPhase; 219 | buildActionMask = 2147483647; 220 | files = ( 221 | 2917A43C217CE4B3006DC123 /* Assets.xcassets in Resources */, 222 | ); 223 | runOnlyForDeploymentPostprocessing = 0; 224 | }; 225 | 2917A42A217CD46A006DC123 /* Resources */ = { 226 | isa = PBXResourcesBuildPhase; 227 | buildActionMask = 2147483647; 228 | files = ( 229 | ); 230 | runOnlyForDeploymentPostprocessing = 0; 231 | }; 232 | /* End PBXResourcesBuildPhase section */ 233 | 234 | /* Begin PBXShellScriptBuildPhase section */ 235 | 116C9BE0BCE5680F2AA16709 /* [CP] Check Pods Manifest.lock */ = { 236 | isa = PBXShellScriptBuildPhase; 237 | buildActionMask = 2147483647; 238 | files = ( 239 | ); 240 | inputFileListPaths = ( 241 | ); 242 | inputPaths = ( 243 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 244 | "${PODS_ROOT}/Manifest.lock", 245 | ); 246 | name = "[CP] Check Pods Manifest.lock"; 247 | outputFileListPaths = ( 248 | ); 249 | outputPaths = ( 250 | "$(DERIVED_FILE_DIR)/Pods-DropdownTitleView-checkManifestLockResult.txt", 251 | ); 252 | runOnlyForDeploymentPostprocessing = 0; 253 | shellPath = /bin/sh; 254 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 255 | showEnvVarsInLog = 0; 256 | }; 257 | 4415112C37A71CA266AB9FE7 /* [CP] Check Pods Manifest.lock */ = { 258 | isa = PBXShellScriptBuildPhase; 259 | buildActionMask = 2147483647; 260 | files = ( 261 | ); 262 | inputFileListPaths = ( 263 | ); 264 | inputPaths = ( 265 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 266 | "${PODS_ROOT}/Manifest.lock", 267 | ); 268 | name = "[CP] Check Pods Manifest.lock"; 269 | outputFileListPaths = ( 270 | ); 271 | outputPaths = ( 272 | "$(DERIVED_FILE_DIR)/Pods-Tests-checkManifestLockResult.txt", 273 | ); 274 | runOnlyForDeploymentPostprocessing = 0; 275 | shellPath = /bin/sh; 276 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 277 | showEnvVarsInLog = 0; 278 | }; 279 | /* End PBXShellScriptBuildPhase section */ 280 | 281 | /* Begin PBXSourcesBuildPhase section */ 282 | 2917A419217CD435006DC123 /* Sources */ = { 283 | isa = PBXSourcesBuildPhase; 284 | buildActionMask = 2147483647; 285 | files = ( 286 | 2917A438217CD877006DC123 /* DropdownTitleView.swift in Sources */, 287 | ); 288 | runOnlyForDeploymentPostprocessing = 0; 289 | }; 290 | 2917A428217CD46A006DC123 /* Sources */ = { 291 | isa = PBXSourcesBuildPhase; 292 | buildActionMask = 2147483647; 293 | files = ( 294 | 2917A42F217CD46B006DC123 /* SnapshotTests.swift in Sources */, 295 | ); 296 | runOnlyForDeploymentPostprocessing = 0; 297 | }; 298 | /* End PBXSourcesBuildPhase section */ 299 | 300 | /* Begin PBXTargetDependency section */ 301 | 2917A433217CD46B006DC123 /* PBXTargetDependency */ = { 302 | isa = PBXTargetDependency; 303 | target = 2917A41C217CD435006DC123 /* DropdownTitleView */; 304 | targetProxy = 2917A432217CD46B006DC123 /* PBXContainerItemProxy */; 305 | }; 306 | /* End PBXTargetDependency section */ 307 | 308 | /* Begin XCBuildConfiguration section */ 309 | 2917A423217CD435006DC123 /* Debug */ = { 310 | isa = XCBuildConfiguration; 311 | buildSettings = { 312 | ALWAYS_SEARCH_USER_PATHS = NO; 313 | CLANG_ANALYZER_NONNULL = YES; 314 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 315 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 316 | CLANG_CXX_LIBRARY = "libc++"; 317 | CLANG_ENABLE_MODULES = YES; 318 | CLANG_ENABLE_OBJC_ARC = YES; 319 | CLANG_ENABLE_OBJC_WEAK = YES; 320 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 321 | CLANG_WARN_BOOL_CONVERSION = YES; 322 | CLANG_WARN_COMMA = YES; 323 | CLANG_WARN_CONSTANT_CONVERSION = YES; 324 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 325 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 326 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 327 | CLANG_WARN_EMPTY_BODY = YES; 328 | CLANG_WARN_ENUM_CONVERSION = YES; 329 | CLANG_WARN_INFINITE_RECURSION = YES; 330 | CLANG_WARN_INT_CONVERSION = YES; 331 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 332 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 333 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 334 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 335 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 336 | CLANG_WARN_STRICT_PROTOTYPES = YES; 337 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 338 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 339 | CLANG_WARN_UNREACHABLE_CODE = YES; 340 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 341 | CODE_SIGN_IDENTITY = "iPhone Developer"; 342 | COPY_PHASE_STRIP = NO; 343 | CURRENT_PROJECT_VERSION = 1; 344 | DEBUG_INFORMATION_FORMAT = dwarf; 345 | ENABLE_STRICT_OBJC_MSGSEND = YES; 346 | ENABLE_TESTABILITY = YES; 347 | GCC_C_LANGUAGE_STANDARD = gnu11; 348 | GCC_DYNAMIC_NO_PIC = NO; 349 | GCC_NO_COMMON_BLOCKS = YES; 350 | GCC_OPTIMIZATION_LEVEL = 0; 351 | GCC_PREPROCESSOR_DEFINITIONS = ( 352 | "DEBUG=1", 353 | "$(inherited)", 354 | ); 355 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 356 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 357 | GCC_WARN_UNDECLARED_SELECTOR = YES; 358 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 359 | GCC_WARN_UNUSED_FUNCTION = YES; 360 | GCC_WARN_UNUSED_VARIABLE = YES; 361 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 362 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 363 | MTL_FAST_MATH = YES; 364 | ONLY_ACTIVE_ARCH = YES; 365 | SDKROOT = iphoneos; 366 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 367 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 368 | SWIFT_VERSION = 4.0; 369 | VERSIONING_SYSTEM = "apple-generic"; 370 | VERSION_INFO_PREFIX = ""; 371 | }; 372 | name = Debug; 373 | }; 374 | 2917A424217CD435006DC123 /* Release */ = { 375 | isa = XCBuildConfiguration; 376 | buildSettings = { 377 | ALWAYS_SEARCH_USER_PATHS = NO; 378 | CLANG_ANALYZER_NONNULL = YES; 379 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 380 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 381 | CLANG_CXX_LIBRARY = "libc++"; 382 | CLANG_ENABLE_MODULES = YES; 383 | CLANG_ENABLE_OBJC_ARC = YES; 384 | CLANG_ENABLE_OBJC_WEAK = YES; 385 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 386 | CLANG_WARN_BOOL_CONVERSION = YES; 387 | CLANG_WARN_COMMA = YES; 388 | CLANG_WARN_CONSTANT_CONVERSION = YES; 389 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 390 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 391 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 392 | CLANG_WARN_EMPTY_BODY = YES; 393 | CLANG_WARN_ENUM_CONVERSION = YES; 394 | CLANG_WARN_INFINITE_RECURSION = YES; 395 | CLANG_WARN_INT_CONVERSION = YES; 396 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 397 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 398 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 399 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 400 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 401 | CLANG_WARN_STRICT_PROTOTYPES = YES; 402 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 403 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 404 | CLANG_WARN_UNREACHABLE_CODE = YES; 405 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 406 | CODE_SIGN_IDENTITY = "iPhone Developer"; 407 | COPY_PHASE_STRIP = NO; 408 | CURRENT_PROJECT_VERSION = 1; 409 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 410 | ENABLE_NS_ASSERTIONS = NO; 411 | ENABLE_STRICT_OBJC_MSGSEND = YES; 412 | GCC_C_LANGUAGE_STANDARD = gnu11; 413 | GCC_NO_COMMON_BLOCKS = YES; 414 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 415 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 416 | GCC_WARN_UNDECLARED_SELECTOR = YES; 417 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 418 | GCC_WARN_UNUSED_FUNCTION = YES; 419 | GCC_WARN_UNUSED_VARIABLE = YES; 420 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 421 | MTL_ENABLE_DEBUG_INFO = NO; 422 | MTL_FAST_MATH = YES; 423 | SDKROOT = iphoneos; 424 | SWIFT_COMPILATION_MODE = wholemodule; 425 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 426 | SWIFT_VERSION = 4.0; 427 | VALIDATE_PRODUCT = YES; 428 | VERSIONING_SYSTEM = "apple-generic"; 429 | VERSION_INFO_PREFIX = ""; 430 | }; 431 | name = Release; 432 | }; 433 | 2917A426217CD435006DC123 /* Debug */ = { 434 | isa = XCBuildConfiguration; 435 | baseConfigurationReference = F31F7A04F1A0BF75611CBADA /* Pods-DropdownTitleView.debug.xcconfig */; 436 | buildSettings = { 437 | CLANG_ENABLE_MODULES = YES; 438 | CODE_SIGN_IDENTITY = ""; 439 | CODE_SIGN_STYLE = Manual; 440 | DEFINES_MODULE = YES; 441 | DEVELOPMENT_TEAM = ""; 442 | DYLIB_COMPATIBILITY_VERSION = 1; 443 | DYLIB_CURRENT_VERSION = 1; 444 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 445 | INFOPLIST_FILE = Source/Info.plist; 446 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 447 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 448 | LD_RUNPATH_SEARCH_PATHS = ( 449 | "$(inherited)", 450 | "@executable_path/Frameworks", 451 | "@loader_path/Frameworks", 452 | ); 453 | PRODUCT_BUNDLE_IDENTIFIER = com.githawk.DropdownTitleView; 454 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 455 | PROVISIONING_PROFILE_SPECIFIER = ""; 456 | SKIP_INSTALL = YES; 457 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 458 | SWIFT_VERSION = 4.0; 459 | TARGETED_DEVICE_FAMILY = "1,2"; 460 | }; 461 | name = Debug; 462 | }; 463 | 2917A427217CD435006DC123 /* Release */ = { 464 | isa = XCBuildConfiguration; 465 | baseConfigurationReference = 67B1BC4D4766CDC3B2BD8696 /* Pods-DropdownTitleView.release.xcconfig */; 466 | buildSettings = { 467 | CLANG_ENABLE_MODULES = YES; 468 | CODE_SIGN_IDENTITY = ""; 469 | CODE_SIGN_STYLE = Manual; 470 | DEFINES_MODULE = YES; 471 | DEVELOPMENT_TEAM = ""; 472 | DYLIB_COMPATIBILITY_VERSION = 1; 473 | DYLIB_CURRENT_VERSION = 1; 474 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 475 | INFOPLIST_FILE = Source/Info.plist; 476 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 477 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 478 | LD_RUNPATH_SEARCH_PATHS = ( 479 | "$(inherited)", 480 | "@executable_path/Frameworks", 481 | "@loader_path/Frameworks", 482 | ); 483 | PRODUCT_BUNDLE_IDENTIFIER = com.githawk.DropdownTitleView; 484 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 485 | PROVISIONING_PROFILE_SPECIFIER = ""; 486 | SKIP_INSTALL = YES; 487 | SWIFT_VERSION = 4.0; 488 | TARGETED_DEVICE_FAMILY = "1,2"; 489 | }; 490 | name = Release; 491 | }; 492 | 2917A435217CD46B006DC123 /* Debug */ = { 493 | isa = XCBuildConfiguration; 494 | baseConfigurationReference = 835C4BFFE5015A4E58C77A6B /* Pods-Tests.debug.xcconfig */; 495 | buildSettings = { 496 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 497 | CODE_SIGN_STYLE = Manual; 498 | DEVELOPMENT_TEAM = ""; 499 | INFOPLIST_FILE = Tests/Info.plist; 500 | LD_RUNPATH_SEARCH_PATHS = ( 501 | "$(inherited)", 502 | "@executable_path/Frameworks", 503 | "@loader_path/Frameworks", 504 | ); 505 | PRODUCT_BUNDLE_IDENTIFIER = com.githawk.Tests; 506 | PRODUCT_NAME = "$(TARGET_NAME)"; 507 | PROVISIONING_PROFILE_SPECIFIER = ""; 508 | SWIFT_VERSION = 4.0; 509 | TARGETED_DEVICE_FAMILY = "1,2"; 510 | }; 511 | name = Debug; 512 | }; 513 | 2917A436217CD46B006DC123 /* Release */ = { 514 | isa = XCBuildConfiguration; 515 | baseConfigurationReference = 644EE6EA1918CD92ADA839D9 /* Pods-Tests.release.xcconfig */; 516 | buildSettings = { 517 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 518 | CODE_SIGN_STYLE = Manual; 519 | DEVELOPMENT_TEAM = ""; 520 | INFOPLIST_FILE = Tests/Info.plist; 521 | LD_RUNPATH_SEARCH_PATHS = ( 522 | "$(inherited)", 523 | "@executable_path/Frameworks", 524 | "@loader_path/Frameworks", 525 | ); 526 | PRODUCT_BUNDLE_IDENTIFIER = com.githawk.Tests; 527 | PRODUCT_NAME = "$(TARGET_NAME)"; 528 | PROVISIONING_PROFILE_SPECIFIER = ""; 529 | SWIFT_VERSION = 4.0; 530 | TARGETED_DEVICE_FAMILY = "1,2"; 531 | }; 532 | name = Release; 533 | }; 534 | /* End XCBuildConfiguration section */ 535 | 536 | /* Begin XCConfigurationList section */ 537 | 2917A417217CD434006DC123 /* Build configuration list for PBXProject "DropdownTitleView" */ = { 538 | isa = XCConfigurationList; 539 | buildConfigurations = ( 540 | 2917A423217CD435006DC123 /* Debug */, 541 | 2917A424217CD435006DC123 /* Release */, 542 | ); 543 | defaultConfigurationIsVisible = 0; 544 | defaultConfigurationName = Release; 545 | }; 546 | 2917A425217CD435006DC123 /* Build configuration list for PBXNativeTarget "DropdownTitleView" */ = { 547 | isa = XCConfigurationList; 548 | buildConfigurations = ( 549 | 2917A426217CD435006DC123 /* Debug */, 550 | 2917A427217CD435006DC123 /* Release */, 551 | ); 552 | defaultConfigurationIsVisible = 0; 553 | defaultConfigurationName = Release; 554 | }; 555 | 2917A434217CD46B006DC123 /* Build configuration list for PBXNativeTarget "Tests" */ = { 556 | isa = XCConfigurationList; 557 | buildConfigurations = ( 558 | 2917A435217CD46B006DC123 /* Debug */, 559 | 2917A436217CD46B006DC123 /* Release */, 560 | ); 561 | defaultConfigurationIsVisible = 0; 562 | defaultConfigurationName = Release; 563 | }; 564 | /* End XCConfigurationList section */ 565 | }; 566 | rootObject = 2917A414217CD434006DC123 /* Project object */; 567 | } 568 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 00C362EF01581946BE70F61BF4E2AFE9 /* SnapshotViewMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9362F5D6EF3DFBCB27A70F757F174F4 /* SnapshotViewMatcher.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 11 | 00F2EFD9F11C426E693EB14830DBB176 /* Pods-Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 878175681B1BB73E72221BB8D3238988 /* Pods-Tests-dummy.m */; }; 12 | 065289ED16FBE56AFD79312CF55B27DD /* Snap.h in Headers */ = {isa = PBXBuildFile; fileRef = 97811F570AC48F50E248990E749AE45F /* Snap.h */; settings = {ATTRIBUTES = (Project, ); }; }; 13 | 092C0F96C3321E05CD4B9E1D351F67A1 /* Device.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D7530F34867764A619B654840076D43 /* Device.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 14 | 0A6DCA8A0D63AFDE6D1498907AEF98A0 /* Pods-Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B9C8DB5B710B1C18290CCAD7D1C77F33 /* Pods-Tests-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; 15 | 0F422390F41C6D0B1FAC544D5936BA5E /* Recordable+XCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A633DA339F15F4FF23159D19B20D748 /* Recordable+XCTestCase.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 16 | 16A09359EC375246045883458D089096 /* UIView+Render.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B6339317D130D1B66226AD205C188BF /* UIView+Render.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 17 | 383C8835D83C08A38973C472AE37171B /* UIImage+Context.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37D5EE47696D5C5D36D69F64E2877271 /* UIImage+Context.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 18 | 3B341563D929D78FFEA376F375D5AF85 /* Matcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09CC8B4697ACF584D8061FC31A72BE52 /* Matcher.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 19 | 3C83C7645AF74C14AC0DBBF6D4FF500D /* Interoperability.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68BBD4F8E91DB6C3A61CA79180AA0C79 /* Interoperability.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 20 | 3E90DB3DF4256696FA409482873B37C4 /* SnapshotLayerExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CF2BB6C51AB529BD8CDAD63CCF595BF /* SnapshotLayerExpectation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 21 | 407A84C5CD9C9DAB6FA32F7D06D621A4 /* CALayer+Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3263EC04D4CCCED57056AD588F34099 /* CALayer+Image.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 22 | 40C1777236B258B664F9EAFE979EEFC8 /* SnapshotLayerMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2D7F15386D38F8B9B0ABA08FD04EAF2 /* SnapshotLayerMatcher.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 23 | 5A64F01C74E87162F3D3A7F6135A9B81 /* ExtractViewImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3A8D5681A13C396E51CC2148A430D62 /* ExtractViewImage.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 24 | 60E2C803B3A765A326C955BB26671A2D /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51C6071921B9C50335A2A1E918DC52B9 /* UIKit.framework */; }; 25 | 710F7D0FABA7B284A558DF20C1BCC7A3 /* Snap.swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8669EB0E9B9920FF1EC7E285B23CB1A8 /* Snap.swift-dummy.m */; }; 26 | 7B709A110DB140CA993B655297608509 /* TestTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F53D3A274D30BB2F55F66E7A8D1046B /* TestTarget.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 27 | 82E239ED263CE0058958C84D5EFA3871 /* Assembly+Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AB81BBFA29D55542B0A42A07D25FD26 /* Assembly+Utils.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 28 | 85228267472E4B784CE53B687A1E5B06 /* AllDevices+All.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF283E984CC99306DD9381DC188DA320 /* AllDevices+All.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 29 | 86BED9CD5A9244A84A2A0E087355B73B /* SaveImageToDisk.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23407561DF58273F0C6E297744D9A8B2 /* SaveImageToDisk.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 30 | 86EC553D269F75D0E59B69EAF21ACD69 /* Assembly+Matchers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2F19C5DE6DEDC00FF5CCAE511890DFD /* Assembly+Matchers.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 31 | 8E21160C7372DBBBA5BFCF82D7DD2B00 /* Snap.swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F6686794B1E480185716BC745F2A55D5 /* Snap.swift-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; 32 | 914822BC5BEE4BD544D674B498D8BE6C /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6901499F774A6B46617DB679CD83417B /* XCTest.framework */; }; 33 | 94ADD435D1276BD768CBF3785B306288 /* UIImage+Diff.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D51A86338A5C1CAFEDE2DDD303FD97F /* UIImage+Diff.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 34 | 99DE31BEB24C5DD72A7DEE172B5A6B50 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B272A60EF0C76ABB5E6BCD8C89047F05 /* CoreGraphics.framework */; }; 35 | 9EC904099502336B9B910B93CBC54279 /* TestTarget+Reference.swift in Sources */ = {isa = PBXBuildFile; fileRef = 370E079FC4C7625B5EAF62F279965525 /* TestTarget+Reference.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 36 | BAE95C32FE8C1EE785EC736A2133BEB8 /* ApplicationEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6A9EB8A4CDE881311A6DC811DE1E89C /* ApplicationEnvironment.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 37 | BD295D5E0657462ACFECFC128E68506C /* Assembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 281D7DAAF53E85D4A419330BFE9A8FD5 /* Assembly.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 38 | C2F23D27F20929398735B06D35AB57EB /* AddAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01F86B6B79C26EC5A4DC462D3EE4DCF2 /* AddAttachment.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 39 | C6BFFB4F0AA5AC73C522B744D9D5135B /* UIImage+Compare.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93CC8D25E063555A8EB16C8711A3E5FC /* UIImage+Compare.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 40 | CBF8AD24239D6E9A3B57447FF84CA532 /* UIImage+Normalized.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CED0B26BEC0DC4510E5DB1C02AE4825 /* UIImage+Normalized.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 41 | CE79688355FBEAFEA3E7200BA8D7095E /* Assembly+Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1964E397603826070C870EA50718153 /* Assembly+Actions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 42 | CF577E970AD72712E7892A999CF83C36 /* SnapshotViewExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6701F1DAB0491848F49C6CAB47AF9488 /* SnapshotViewExpectation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 43 | D1A042793EB6FCC95127DD8178DA16F5 /* Device+Size.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61FC5830A9475835A4C6EE53C8AC8B92 /* Device+Size.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 44 | D1E6D8B54CEED778D0C29E14AC456AE6 /* Reference.swift in Sources */ = {isa = PBXBuildFile; fileRef = 422BCF05A84F6676BAC74B22B3E41B31 /* Reference.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 45 | D8CD06673D14A24E2AD5B01BB182EA4D /* Snap.swift in Sources */ = {isa = PBXBuildFile; fileRef = D22430B43010A5D04C54F49CA01CECC5 /* Snap.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 46 | DE53E93285A49AE43598E19F9F9F04FD /* Path.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5A8D2AC4FE8A5C8FE41A7F5B31B6489 /* Path.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 47 | DF86BB70592283E9742EBD596CEE45D8 /* Pods-DropdownTitleView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CFDD6B98921D46DAE10C3DFD453557FA /* Pods-DropdownTitleView-dummy.m */; }; 48 | E269D018F20B62D077ABDBD71A72B53F /* CompareImages.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F5528633D15F73773B3125BFBB766FC /* CompareImages.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 49 | EBAE6101FC7DF41127E5DC5556A0C615 /* Environment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B446A2585116954F8E8C15227DA98B4 /* Environment.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 50 | FA22FEE34EFC8E14D450FB77EAC3B121 /* Recordable.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD8CD77F6A514F9814814E5C082EFFE5 /* Recordable.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 51 | /* End PBXBuildFile section */ 52 | 53 | /* Begin PBXContainerItemProxy section */ 54 | C770B33123A3D9C297D042AD85FEF999 /* PBXContainerItemProxy */ = { 55 | isa = PBXContainerItemProxy; 56 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 57 | proxyType = 1; 58 | remoteGlobalIDString = 52818D1A2ED5C27425AD7ECD5C9495F6; 59 | remoteInfo = Snap.swift; 60 | }; 61 | /* End PBXContainerItemProxy section */ 62 | 63 | /* Begin PBXFileReference section */ 64 | 01F86B6B79C26EC5A4DC462D3EE4DCF2 /* AddAttachment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AddAttachment.swift; path = Snap/Core/Application/Actions/AddAttachment.swift; sourceTree = ""; }; 65 | 09CC8B4697ACF584D8061FC31A72BE52 /* Matcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Matcher.swift; path = Snap/Core/Application/Matcher/Matcher.swift; sourceTree = ""; }; 66 | 0AB81BBFA29D55542B0A42A07D25FD26 /* Assembly+Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Assembly+Utils.swift"; path = "Snap/Core/Infrastructure/Assembly/Assembly+Utils.swift"; sourceTree = ""; }; 67 | 0B446A2585116954F8E8C15227DA98B4 /* Environment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Environment.swift; path = Snap/Core/Infrastructure/Utils/Environment/Environment.swift; sourceTree = ""; }; 68 | 23407561DF58273F0C6E297744D9A8B2 /* SaveImageToDisk.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SaveImageToDisk.swift; path = Snap/Core/Application/Actions/SaveImageToDisk.swift; sourceTree = ""; }; 69 | 281D7DAAF53E85D4A419330BFE9A8FD5 /* Assembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Assembly.swift; path = Snap/Core/Infrastructure/Assembly/Assembly.swift; sourceTree = ""; }; 70 | 2A633DA339F15F4FF23159D19B20D748 /* Recordable+XCTestCase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Recordable+XCTestCase.swift"; path = "Snap/Core/Application/Recordable/Recordable+XCTestCase.swift"; sourceTree = ""; }; 71 | 2DEAF5AD2155EDCCB237E5AC8A0F8BBB /* Pods-Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Tests-acknowledgements.plist"; sourceTree = ""; }; 72 | 2F53D3A274D30BB2F55F66E7A8D1046B /* TestTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestTarget.swift; path = Snap/Core/Domain/Model/TestTarget.swift; sourceTree = ""; }; 73 | 315B70836BA5F027362A0AC816A0AD24 /* Pods-DropdownTitleView-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-DropdownTitleView-acknowledgements.plist"; sourceTree = ""; }; 74 | 370E079FC4C7625B5EAF62F279965525 /* TestTarget+Reference.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "TestTarget+Reference.swift"; path = "Snap/Core/Domain/Model/TestTarget+Reference.swift"; sourceTree = ""; }; 75 | 37D5EE47696D5C5D36D69F64E2877271 /* UIImage+Context.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImage+Context.swift"; path = "Snap/Core/Infrastructure/Extension/UIImage/UIImage+Context.swift"; sourceTree = ""; }; 76 | 3D51A86338A5C1CAFEDE2DDD303FD97F /* UIImage+Diff.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImage+Diff.swift"; path = "Snap/Core/Infrastructure/Extension/UIImage/UIImage+Diff.swift"; sourceTree = ""; }; 77 | 3D7530F34867764A619B654840076D43 /* Device.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Device.swift; path = Snap/Core/Domain/Model/Device.swift; sourceTree = ""; }; 78 | 422BCF05A84F6676BAC74B22B3E41B31 /* Reference.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reference.swift; path = Snap/Core/Domain/Model/Reference.swift; sourceTree = ""; }; 79 | 4CED0B26BEC0DC4510E5DB1C02AE4825 /* UIImage+Normalized.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImage+Normalized.swift"; path = "Snap/Core/Infrastructure/Extension/UIImage/UIImage+Normalized.swift"; sourceTree = ""; }; 80 | 4D93A979B30C3FE12109982B5EC5EB7D /* Pods-DropdownTitleView-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-DropdownTitleView-acknowledgements.markdown"; sourceTree = ""; }; 81 | 4F5528633D15F73773B3125BFBB766FC /* CompareImages.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompareImages.swift; path = Snap/Core/Application/Actions/CompareImages.swift; sourceTree = ""; }; 82 | 51C6071921B9C50335A2A1E918DC52B9 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; 83 | 542EB3FAD92D002346677DB898C32A1B /* Pods-DropdownTitleView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DropdownTitleView.debug.xcconfig"; sourceTree = ""; }; 84 | 55E09119AD5E1FEA1577EA264AE15E91 /* Pods-DropdownTitleView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DropdownTitleView.release.xcconfig"; sourceTree = ""; }; 85 | 6083ED9A308DB5AF7BE1DBB11680E9CD /* Pods-Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Tests.modulemap"; sourceTree = ""; }; 86 | 61FC5830A9475835A4C6EE53C8AC8B92 /* Device+Size.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Device+Size.swift"; path = "Snap/Core/Infrastructure/Extension/Device/Device+Size.swift"; sourceTree = ""; }; 87 | 6701F1DAB0491848F49C6CAB47AF9488 /* SnapshotViewExpectation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SnapshotViewExpectation.swift; path = Snap/Core/Application/Expectation/SnapshotViewExpectation.swift; sourceTree = ""; }; 88 | 68BBD4F8E91DB6C3A61CA79180AA0C79 /* Interoperability.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Interoperability.swift; path = Snap/Core/Infrastructure/Interoperability/Interoperability.swift; sourceTree = ""; }; 89 | 6901499F774A6B46617DB679CD83417B /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 90 | 7B02E8952DF47D392F533107D60E46DF /* Pods-Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Tests-acknowledgements.markdown"; sourceTree = ""; }; 91 | 8669EB0E9B9920FF1EC7E285B23CB1A8 /* Snap.swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Snap.swift-dummy.m"; sourceTree = ""; }; 92 | 872D34A532E02774F6010FCF23BAE021 /* libPods-Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-Tests.a"; path = "libPods-Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 93 | 878175681B1BB73E72221BB8D3238988 /* Pods-Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Tests-dummy.m"; sourceTree = ""; }; 94 | 8B6339317D130D1B66226AD205C188BF /* UIView+Render.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Render.swift"; path = "Snap/Core/Infrastructure/Extension/UIView/UIView+Render.swift"; sourceTree = ""; }; 95 | 8CF2BB6C51AB529BD8CDAD63CCF595BF /* SnapshotLayerExpectation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SnapshotLayerExpectation.swift; path = Snap/Core/Application/Expectation/SnapshotLayerExpectation.swift; sourceTree = ""; }; 96 | 91E9CB385E141F73AFB9CE17A9377E41 /* Pods-Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Tests-resources.sh"; sourceTree = ""; }; 97 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 98 | 93CC8D25E063555A8EB16C8711A3E5FC /* UIImage+Compare.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIImage+Compare.swift"; path = "Snap/Core/Infrastructure/Extension/UIImage/UIImage+Compare.swift"; sourceTree = ""; }; 99 | 97811F570AC48F50E248990E749AE45F /* Snap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Snap.h; path = Snap/Core/Infrastructure/Interoperability/Snap.h; sourceTree = ""; }; 100 | 9954B2CF80F5D28AED5FE0F2CB6A9B97 /* Pods-Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Tests.release.xcconfig"; sourceTree = ""; }; 101 | 9ACF684C5D3834EB048CE7A571729DAE /* Snap.swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Snap.swift-prefix.pch"; sourceTree = ""; }; 102 | A3263EC04D4CCCED57056AD588F34099 /* CALayer+Image.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CALayer+Image.swift"; path = "Snap/Core/Infrastructure/Extension/CALayer/CALayer+Image.swift"; sourceTree = ""; }; 103 | A359DEF2CA1FB49C331B0EAEEABCCF53 /* Pods-Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Tests.debug.xcconfig"; sourceTree = ""; }; 104 | A9362F5D6EF3DFBCB27A70F757F174F4 /* SnapshotViewMatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SnapshotViewMatcher.swift; path = Snap/Core/Application/Matcher/SnapshotViewMatcher.swift; sourceTree = ""; }; 105 | AF283E984CC99306DD9381DC188DA320 /* AllDevices+All.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AllDevices+All.swift"; path = "Snap/Core/Infrastructure/Extension/Device/AllDevices+All.swift"; sourceTree = ""; }; 106 | B0BD0E69D8C9007B003D1C9DBC66CE2D /* libPods-DropdownTitleView.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-DropdownTitleView.a"; path = "libPods-DropdownTitleView.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 107 | B1418F248AC3A2EA41821B4CDEBC5524 /* Snap.swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = Snap.swift.modulemap; path = ../../Headers/Public/Snap_swift/Snap.swift.modulemap; sourceTree = ""; }; 108 | B272A60EF0C76ABB5E6BCD8C89047F05 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; 109 | B2D7F15386D38F8B9B0ABA08FD04EAF2 /* SnapshotLayerMatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SnapshotLayerMatcher.swift; path = Snap/Core/Application/Matcher/SnapshotLayerMatcher.swift; sourceTree = ""; }; 110 | B3A8D5681A13C396E51CC2148A430D62 /* ExtractViewImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExtractViewImage.swift; path = Snap/Core/Application/Actions/ExtractViewImage.swift; sourceTree = ""; }; 111 | B5A8D2AC4FE8A5C8FE41A7F5B31B6489 /* Path.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Path.swift; path = Snap/Core/Infrastructure/Utils/Path/Path.swift; sourceTree = ""; }; 112 | B9C8DB5B710B1C18290CCAD7D1C77F33 /* Pods-Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Tests-umbrella.h"; sourceTree = ""; }; 113 | BD10B78C8B26C312ABD83FD31804922F /* Pods-Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Tests-frameworks.sh"; sourceTree = ""; }; 114 | CFDD6B98921D46DAE10C3DFD453557FA /* Pods-DropdownTitleView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-DropdownTitleView-dummy.m"; sourceTree = ""; }; 115 | D22430B43010A5D04C54F49CA01CECC5 /* Snap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Snap.swift; path = Snap/Core/Application/Snap/Snap.swift; sourceTree = ""; }; 116 | D2F19C5DE6DEDC00FF5CCAE511890DFD /* Assembly+Matchers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Assembly+Matchers.swift"; path = "Snap/Core/Infrastructure/Assembly/Assembly+Matchers.swift"; sourceTree = ""; }; 117 | E98D16D10BD9C403518D9D42258E0AC9 /* Pods-DropdownTitleView-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-DropdownTitleView-resources.sh"; sourceTree = ""; }; 118 | EA884DF9A7AF6926CB45DF5AA560115C /* Snap.swift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Snap.swift.xcconfig; sourceTree = ""; }; 119 | F1964E397603826070C870EA50718153 /* Assembly+Actions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Assembly+Actions.swift"; path = "Snap/Core/Infrastructure/Assembly/Assembly+Actions.swift"; sourceTree = ""; }; 120 | F6686794B1E480185716BC745F2A55D5 /* Snap.swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Snap.swift-umbrella.h"; path = "../../Headers/Public/Snap_swift/Snap.swift-umbrella.h"; sourceTree = ""; }; 121 | F6A9EB8A4CDE881311A6DC811DE1E89C /* ApplicationEnvironment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ApplicationEnvironment.swift; path = Snap/Core/Infrastructure/Utils/Environment/ApplicationEnvironment.swift; sourceTree = ""; }; 122 | FD8CD77F6A514F9814814E5C082EFFE5 /* Recordable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Recordable.swift; path = Snap/Core/Application/Recordable/Recordable.swift; sourceTree = ""; }; 123 | FE55C4184A56F058F7393E763DCD1DAF /* libSnap.swift.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSnap.swift.a; path = libSnap.swift.a; sourceTree = BUILT_PRODUCTS_DIR; }; 124 | /* End PBXFileReference section */ 125 | 126 | /* Begin PBXFrameworksBuildPhase section */ 127 | 0194B482061F29A3E5A416DC50E142C3 /* Frameworks */ = { 128 | isa = PBXFrameworksBuildPhase; 129 | buildActionMask = 2147483647; 130 | files = ( 131 | ); 132 | runOnlyForDeploymentPostprocessing = 0; 133 | }; 134 | 01FD934802BDD3D8AB9CEF3C2ADA90BF /* Frameworks */ = { 135 | isa = PBXFrameworksBuildPhase; 136 | buildActionMask = 2147483647; 137 | files = ( 138 | 99DE31BEB24C5DD72A7DEE172B5A6B50 /* CoreGraphics.framework in Frameworks */, 139 | 60E2C803B3A765A326C955BB26671A2D /* UIKit.framework in Frameworks */, 140 | 914822BC5BEE4BD544D674B498D8BE6C /* XCTest.framework in Frameworks */, 141 | ); 142 | runOnlyForDeploymentPostprocessing = 0; 143 | }; 144 | B2EFB5873A7DD321B9B7386BBD5DEF9F /* Frameworks */ = { 145 | isa = PBXFrameworksBuildPhase; 146 | buildActionMask = 2147483647; 147 | files = ( 148 | ); 149 | runOnlyForDeploymentPostprocessing = 0; 150 | }; 151 | /* End PBXFrameworksBuildPhase section */ 152 | 153 | /* Begin PBXGroup section */ 154 | 06953A8BEE50FA44ECB8D10FAE2A3A0E /* Products */ = { 155 | isa = PBXGroup; 156 | children = ( 157 | B0BD0E69D8C9007B003D1C9DBC66CE2D /* libPods-DropdownTitleView.a */, 158 | 872D34A532E02774F6010FCF23BAE021 /* libPods-Tests.a */, 159 | FE55C4184A56F058F7393E763DCD1DAF /* libSnap.swift.a */, 160 | ); 161 | name = Products; 162 | sourceTree = ""; 163 | }; 164 | 122DA2E5084A4393C29BE363C764795C /* Frameworks */ = { 165 | isa = PBXGroup; 166 | children = ( 167 | FD2A306D79378C643D9A66796DFAED31 /* iOS */, 168 | ); 169 | name = Frameworks; 170 | sourceTree = ""; 171 | }; 172 | 7D54B0E4638B91017D23E4414A12F09D /* Pods-Tests */ = { 173 | isa = PBXGroup; 174 | children = ( 175 | 6083ED9A308DB5AF7BE1DBB11680E9CD /* Pods-Tests.modulemap */, 176 | 7B02E8952DF47D392F533107D60E46DF /* Pods-Tests-acknowledgements.markdown */, 177 | 2DEAF5AD2155EDCCB237E5AC8A0F8BBB /* Pods-Tests-acknowledgements.plist */, 178 | 878175681B1BB73E72221BB8D3238988 /* Pods-Tests-dummy.m */, 179 | BD10B78C8B26C312ABD83FD31804922F /* Pods-Tests-frameworks.sh */, 180 | 91E9CB385E141F73AFB9CE17A9377E41 /* Pods-Tests-resources.sh */, 181 | B9C8DB5B710B1C18290CCAD7D1C77F33 /* Pods-Tests-umbrella.h */, 182 | A359DEF2CA1FB49C331B0EAEEABCCF53 /* Pods-Tests.debug.xcconfig */, 183 | 9954B2CF80F5D28AED5FE0F2CB6A9B97 /* Pods-Tests.release.xcconfig */, 184 | ); 185 | name = "Pods-Tests"; 186 | path = "Target Support Files/Pods-Tests"; 187 | sourceTree = ""; 188 | }; 189 | 7DB346D0F39D3F0E887471402A8071AB = { 190 | isa = PBXGroup; 191 | children = ( 192 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 193 | 122DA2E5084A4393C29BE363C764795C /* Frameworks */, 194 | C3618770074ADFF5FAD20C52CC5C1644 /* Pods */, 195 | 06953A8BEE50FA44ECB8D10FAE2A3A0E /* Products */, 196 | C7B32D96362157FE7C65BE1C375CB731 /* Targets Support Files */, 197 | ); 198 | sourceTree = ""; 199 | }; 200 | 9708833BF02D009B29FF8B6252EAC859 /* Snap.swift */ = { 201 | isa = PBXGroup; 202 | children = ( 203 | 01F86B6B79C26EC5A4DC462D3EE4DCF2 /* AddAttachment.swift */, 204 | AF283E984CC99306DD9381DC188DA320 /* AllDevices+All.swift */, 205 | F6A9EB8A4CDE881311A6DC811DE1E89C /* ApplicationEnvironment.swift */, 206 | 281D7DAAF53E85D4A419330BFE9A8FD5 /* Assembly.swift */, 207 | F1964E397603826070C870EA50718153 /* Assembly+Actions.swift */, 208 | D2F19C5DE6DEDC00FF5CCAE511890DFD /* Assembly+Matchers.swift */, 209 | 0AB81BBFA29D55542B0A42A07D25FD26 /* Assembly+Utils.swift */, 210 | A3263EC04D4CCCED57056AD588F34099 /* CALayer+Image.swift */, 211 | 4F5528633D15F73773B3125BFBB766FC /* CompareImages.swift */, 212 | 3D7530F34867764A619B654840076D43 /* Device.swift */, 213 | 61FC5830A9475835A4C6EE53C8AC8B92 /* Device+Size.swift */, 214 | 0B446A2585116954F8E8C15227DA98B4 /* Environment.swift */, 215 | B3A8D5681A13C396E51CC2148A430D62 /* ExtractViewImage.swift */, 216 | 68BBD4F8E91DB6C3A61CA79180AA0C79 /* Interoperability.swift */, 217 | 09CC8B4697ACF584D8061FC31A72BE52 /* Matcher.swift */, 218 | B5A8D2AC4FE8A5C8FE41A7F5B31B6489 /* Path.swift */, 219 | FD8CD77F6A514F9814814E5C082EFFE5 /* Recordable.swift */, 220 | 2A633DA339F15F4FF23159D19B20D748 /* Recordable+XCTestCase.swift */, 221 | 422BCF05A84F6676BAC74B22B3E41B31 /* Reference.swift */, 222 | 23407561DF58273F0C6E297744D9A8B2 /* SaveImageToDisk.swift */, 223 | 97811F570AC48F50E248990E749AE45F /* Snap.h */, 224 | D22430B43010A5D04C54F49CA01CECC5 /* Snap.swift */, 225 | 8CF2BB6C51AB529BD8CDAD63CCF595BF /* SnapshotLayerExpectation.swift */, 226 | B2D7F15386D38F8B9B0ABA08FD04EAF2 /* SnapshotLayerMatcher.swift */, 227 | 6701F1DAB0491848F49C6CAB47AF9488 /* SnapshotViewExpectation.swift */, 228 | A9362F5D6EF3DFBCB27A70F757F174F4 /* SnapshotViewMatcher.swift */, 229 | 2F53D3A274D30BB2F55F66E7A8D1046B /* TestTarget.swift */, 230 | 370E079FC4C7625B5EAF62F279965525 /* TestTarget+Reference.swift */, 231 | 93CC8D25E063555A8EB16C8711A3E5FC /* UIImage+Compare.swift */, 232 | 37D5EE47696D5C5D36D69F64E2877271 /* UIImage+Context.swift */, 233 | 3D51A86338A5C1CAFEDE2DDD303FD97F /* UIImage+Diff.swift */, 234 | 4CED0B26BEC0DC4510E5DB1C02AE4825 /* UIImage+Normalized.swift */, 235 | 8B6339317D130D1B66226AD205C188BF /* UIView+Render.swift */, 236 | C461ECDD8FA60FB0F71B0E57F7D3C8EF /* Support Files */, 237 | ); 238 | name = Snap.swift; 239 | path = Snap.swift; 240 | sourceTree = ""; 241 | }; 242 | C3618770074ADFF5FAD20C52CC5C1644 /* Pods */ = { 243 | isa = PBXGroup; 244 | children = ( 245 | 9708833BF02D009B29FF8B6252EAC859 /* Snap.swift */, 246 | ); 247 | name = Pods; 248 | sourceTree = ""; 249 | }; 250 | C461ECDD8FA60FB0F71B0E57F7D3C8EF /* Support Files */ = { 251 | isa = PBXGroup; 252 | children = ( 253 | B1418F248AC3A2EA41821B4CDEBC5524 /* Snap.swift.modulemap */, 254 | EA884DF9A7AF6926CB45DF5AA560115C /* Snap.swift.xcconfig */, 255 | 8669EB0E9B9920FF1EC7E285B23CB1A8 /* Snap.swift-dummy.m */, 256 | 9ACF684C5D3834EB048CE7A571729DAE /* Snap.swift-prefix.pch */, 257 | F6686794B1E480185716BC745F2A55D5 /* Snap.swift-umbrella.h */, 258 | ); 259 | name = "Support Files"; 260 | path = "../Target Support Files/Snap.swift"; 261 | sourceTree = ""; 262 | }; 263 | C7B32D96362157FE7C65BE1C375CB731 /* Targets Support Files */ = { 264 | isa = PBXGroup; 265 | children = ( 266 | DE8A80894D9618570ADF0C4C9748E745 /* Pods-DropdownTitleView */, 267 | 7D54B0E4638B91017D23E4414A12F09D /* Pods-Tests */, 268 | ); 269 | name = "Targets Support Files"; 270 | sourceTree = ""; 271 | }; 272 | DE8A80894D9618570ADF0C4C9748E745 /* Pods-DropdownTitleView */ = { 273 | isa = PBXGroup; 274 | children = ( 275 | 4D93A979B30C3FE12109982B5EC5EB7D /* Pods-DropdownTitleView-acknowledgements.markdown */, 276 | 315B70836BA5F027362A0AC816A0AD24 /* Pods-DropdownTitleView-acknowledgements.plist */, 277 | CFDD6B98921D46DAE10C3DFD453557FA /* Pods-DropdownTitleView-dummy.m */, 278 | E98D16D10BD9C403518D9D42258E0AC9 /* Pods-DropdownTitleView-resources.sh */, 279 | 542EB3FAD92D002346677DB898C32A1B /* Pods-DropdownTitleView.debug.xcconfig */, 280 | 55E09119AD5E1FEA1577EA264AE15E91 /* Pods-DropdownTitleView.release.xcconfig */, 281 | ); 282 | name = "Pods-DropdownTitleView"; 283 | path = "Target Support Files/Pods-DropdownTitleView"; 284 | sourceTree = ""; 285 | }; 286 | FD2A306D79378C643D9A66796DFAED31 /* iOS */ = { 287 | isa = PBXGroup; 288 | children = ( 289 | B272A60EF0C76ABB5E6BCD8C89047F05 /* CoreGraphics.framework */, 290 | 51C6071921B9C50335A2A1E918DC52B9 /* UIKit.framework */, 291 | 6901499F774A6B46617DB679CD83417B /* XCTest.framework */, 292 | ); 293 | name = iOS; 294 | sourceTree = ""; 295 | }; 296 | /* End PBXGroup section */ 297 | 298 | /* Begin PBXHeadersBuildPhase section */ 299 | 541DD6735AABB0CADD316046B65574B6 /* Headers */ = { 300 | isa = PBXHeadersBuildPhase; 301 | buildActionMask = 2147483647; 302 | files = ( 303 | ); 304 | runOnlyForDeploymentPostprocessing = 0; 305 | }; 306 | 80ECBAECA00E7258F046279A62D01D0A /* Headers */ = { 307 | isa = PBXHeadersBuildPhase; 308 | buildActionMask = 2147483647; 309 | files = ( 310 | 0A6DCA8A0D63AFDE6D1498907AEF98A0 /* Pods-Tests-umbrella.h in Headers */, 311 | ); 312 | runOnlyForDeploymentPostprocessing = 0; 313 | }; 314 | EBFDCD10E36915D3192A3529E0DFC905 /* Headers */ = { 315 | isa = PBXHeadersBuildPhase; 316 | buildActionMask = 2147483647; 317 | files = ( 318 | 065289ED16FBE56AFD79312CF55B27DD /* Snap.h in Headers */, 319 | 8E21160C7372DBBBA5BFCF82D7DD2B00 /* Snap.swift-umbrella.h in Headers */, 320 | ); 321 | runOnlyForDeploymentPostprocessing = 0; 322 | }; 323 | /* End PBXHeadersBuildPhase section */ 324 | 325 | /* Begin PBXNativeTarget section */ 326 | 31800689F25F86B514CE6C0869230A6A /* Pods-Tests */ = { 327 | isa = PBXNativeTarget; 328 | buildConfigurationList = 97E5E85B21DFAE5044A3404D35274E33 /* Build configuration list for PBXNativeTarget "Pods-Tests" */; 329 | buildPhases = ( 330 | 80ECBAECA00E7258F046279A62D01D0A /* Headers */, 331 | 2E3862B706D6E1274D67C9A48E8F3108 /* Sources */, 332 | B2EFB5873A7DD321B9B7386BBD5DEF9F /* Frameworks */, 333 | ); 334 | buildRules = ( 335 | ); 336 | dependencies = ( 337 | 800D7D1C36E2C2D41C8CC7737251C796 /* PBXTargetDependency */, 338 | ); 339 | name = "Pods-Tests"; 340 | productName = "Pods-Tests"; 341 | productReference = 872D34A532E02774F6010FCF23BAE021 /* libPods-Tests.a */; 342 | productType = "com.apple.product-type.library.static"; 343 | }; 344 | 52818D1A2ED5C27425AD7ECD5C9495F6 /* Snap.swift */ = { 345 | isa = PBXNativeTarget; 346 | buildConfigurationList = 6314888CAAB2308BBEF0349290E16A21 /* Build configuration list for PBXNativeTarget "Snap.swift" */; 347 | buildPhases = ( 348 | EBFDCD10E36915D3192A3529E0DFC905 /* Headers */, 349 | 5BEB3B17BC1CDAAD38820C6B64C33AC3 /* Sources */, 350 | 01FD934802BDD3D8AB9CEF3C2ADA90BF /* Frameworks */, 351 | A17143F60D7D3BD71E6B4E0A068E3A53 /* Copy generated compatibility header */, 352 | ); 353 | buildRules = ( 354 | ); 355 | dependencies = ( 356 | ); 357 | name = Snap.swift; 358 | productName = Snap.swift; 359 | productReference = FE55C4184A56F058F7393E763DCD1DAF /* libSnap.swift.a */; 360 | productType = "com.apple.product-type.library.static"; 361 | }; 362 | 754805F2E66101607FE56367DC7CF356 /* Pods-DropdownTitleView */ = { 363 | isa = PBXNativeTarget; 364 | buildConfigurationList = 6E8B4BC34329869B0BF779DF9CB58900 /* Build configuration list for PBXNativeTarget "Pods-DropdownTitleView" */; 365 | buildPhases = ( 366 | 541DD6735AABB0CADD316046B65574B6 /* Headers */, 367 | EA6D5AA58FEE8B4D0BF4CAF9C369D749 /* Sources */, 368 | 0194B482061F29A3E5A416DC50E142C3 /* Frameworks */, 369 | ); 370 | buildRules = ( 371 | ); 372 | dependencies = ( 373 | ); 374 | name = "Pods-DropdownTitleView"; 375 | productName = "Pods-DropdownTitleView"; 376 | productReference = B0BD0E69D8C9007B003D1C9DBC66CE2D /* libPods-DropdownTitleView.a */; 377 | productType = "com.apple.product-type.library.static"; 378 | }; 379 | /* End PBXNativeTarget section */ 380 | 381 | /* Begin PBXProject section */ 382 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 383 | isa = PBXProject; 384 | attributes = { 385 | LastSwiftUpdateCheck = 0930; 386 | LastUpgradeCheck = 0930; 387 | }; 388 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 389 | compatibilityVersion = "Xcode 3.2"; 390 | developmentRegion = English; 391 | hasScannedForEncodings = 0; 392 | knownRegions = ( 393 | en, 394 | ); 395 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 396 | productRefGroup = 06953A8BEE50FA44ECB8D10FAE2A3A0E /* Products */; 397 | projectDirPath = ""; 398 | projectRoot = ""; 399 | targets = ( 400 | 754805F2E66101607FE56367DC7CF356 /* Pods-DropdownTitleView */, 401 | 31800689F25F86B514CE6C0869230A6A /* Pods-Tests */, 402 | 52818D1A2ED5C27425AD7ECD5C9495F6 /* Snap.swift */, 403 | ); 404 | }; 405 | /* End PBXProject section */ 406 | 407 | /* Begin PBXShellScriptBuildPhase section */ 408 | A17143F60D7D3BD71E6B4E0A068E3A53 /* Copy generated compatibility header */ = { 409 | isa = PBXShellScriptBuildPhase; 410 | buildActionMask = 2147483647; 411 | files = ( 412 | ); 413 | inputFileListPaths = ( 414 | ); 415 | inputPaths = ( 416 | "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", 417 | "${PODS_ROOT}/Headers/Public/Snap_swift/Snap.swift.modulemap", 418 | "${PODS_ROOT}/Headers/Public/Snap_swift/Snap.swift-umbrella.h", 419 | ); 420 | name = "Copy generated compatibility header"; 421 | outputFileListPaths = ( 422 | ); 423 | outputPaths = ( 424 | "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", 425 | "${BUILT_PRODUCTS_DIR}/Snap.swift-umbrella.h", 426 | "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", 427 | ); 428 | runOnlyForDeploymentPostprocessing = 0; 429 | shellPath = /bin/sh; 430 | shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/Snap_swift/Snap.swift.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/Snap_swift/Snap.swift-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; 431 | showEnvVarsInLog = 1; 432 | }; 433 | /* End PBXShellScriptBuildPhase section */ 434 | 435 | /* Begin PBXSourcesBuildPhase section */ 436 | 2E3862B706D6E1274D67C9A48E8F3108 /* Sources */ = { 437 | isa = PBXSourcesBuildPhase; 438 | buildActionMask = 2147483647; 439 | files = ( 440 | 00F2EFD9F11C426E693EB14830DBB176 /* Pods-Tests-dummy.m in Sources */, 441 | ); 442 | runOnlyForDeploymentPostprocessing = 0; 443 | }; 444 | 5BEB3B17BC1CDAAD38820C6B64C33AC3 /* Sources */ = { 445 | isa = PBXSourcesBuildPhase; 446 | buildActionMask = 2147483647; 447 | files = ( 448 | C2F23D27F20929398735B06D35AB57EB /* AddAttachment.swift in Sources */, 449 | 85228267472E4B784CE53B687A1E5B06 /* AllDevices+All.swift in Sources */, 450 | BAE95C32FE8C1EE785EC736A2133BEB8 /* ApplicationEnvironment.swift in Sources */, 451 | CE79688355FBEAFEA3E7200BA8D7095E /* Assembly+Actions.swift in Sources */, 452 | 86EC553D269F75D0E59B69EAF21ACD69 /* Assembly+Matchers.swift in Sources */, 453 | 82E239ED263CE0058958C84D5EFA3871 /* Assembly+Utils.swift in Sources */, 454 | BD295D5E0657462ACFECFC128E68506C /* Assembly.swift in Sources */, 455 | 407A84C5CD9C9DAB6FA32F7D06D621A4 /* CALayer+Image.swift in Sources */, 456 | E269D018F20B62D077ABDBD71A72B53F /* CompareImages.swift in Sources */, 457 | D1A042793EB6FCC95127DD8178DA16F5 /* Device+Size.swift in Sources */, 458 | 092C0F96C3321E05CD4B9E1D351F67A1 /* Device.swift in Sources */, 459 | EBAE6101FC7DF41127E5DC5556A0C615 /* Environment.swift in Sources */, 460 | 5A64F01C74E87162F3D3A7F6135A9B81 /* ExtractViewImage.swift in Sources */, 461 | 3C83C7645AF74C14AC0DBBF6D4FF500D /* Interoperability.swift in Sources */, 462 | 3B341563D929D78FFEA376F375D5AF85 /* Matcher.swift in Sources */, 463 | DE53E93285A49AE43598E19F9F9F04FD /* Path.swift in Sources */, 464 | 0F422390F41C6D0B1FAC544D5936BA5E /* Recordable+XCTestCase.swift in Sources */, 465 | FA22FEE34EFC8E14D450FB77EAC3B121 /* Recordable.swift in Sources */, 466 | D1E6D8B54CEED778D0C29E14AC456AE6 /* Reference.swift in Sources */, 467 | 86BED9CD5A9244A84A2A0E087355B73B /* SaveImageToDisk.swift in Sources */, 468 | D8CD06673D14A24E2AD5B01BB182EA4D /* Snap.swift in Sources */, 469 | 710F7D0FABA7B284A558DF20C1BCC7A3 /* Snap.swift-dummy.m in Sources */, 470 | 3E90DB3DF4256696FA409482873B37C4 /* SnapshotLayerExpectation.swift in Sources */, 471 | 40C1777236B258B664F9EAFE979EEFC8 /* SnapshotLayerMatcher.swift in Sources */, 472 | CF577E970AD72712E7892A999CF83C36 /* SnapshotViewExpectation.swift in Sources */, 473 | 00C362EF01581946BE70F61BF4E2AFE9 /* SnapshotViewMatcher.swift in Sources */, 474 | 9EC904099502336B9B910B93CBC54279 /* TestTarget+Reference.swift in Sources */, 475 | 7B709A110DB140CA993B655297608509 /* TestTarget.swift in Sources */, 476 | C6BFFB4F0AA5AC73C522B744D9D5135B /* UIImage+Compare.swift in Sources */, 477 | 383C8835D83C08A38973C472AE37171B /* UIImage+Context.swift in Sources */, 478 | 94ADD435D1276BD768CBF3785B306288 /* UIImage+Diff.swift in Sources */, 479 | CBF8AD24239D6E9A3B57447FF84CA532 /* UIImage+Normalized.swift in Sources */, 480 | 16A09359EC375246045883458D089096 /* UIView+Render.swift in Sources */, 481 | ); 482 | runOnlyForDeploymentPostprocessing = 0; 483 | }; 484 | EA6D5AA58FEE8B4D0BF4CAF9C369D749 /* Sources */ = { 485 | isa = PBXSourcesBuildPhase; 486 | buildActionMask = 2147483647; 487 | files = ( 488 | DF86BB70592283E9742EBD596CEE45D8 /* Pods-DropdownTitleView-dummy.m in Sources */, 489 | ); 490 | runOnlyForDeploymentPostprocessing = 0; 491 | }; 492 | /* End PBXSourcesBuildPhase section */ 493 | 494 | /* Begin PBXTargetDependency section */ 495 | 800D7D1C36E2C2D41C8CC7737251C796 /* PBXTargetDependency */ = { 496 | isa = PBXTargetDependency; 497 | name = Snap.swift; 498 | target = 52818D1A2ED5C27425AD7ECD5C9495F6 /* Snap.swift */; 499 | targetProxy = C770B33123A3D9C297D042AD85FEF999 /* PBXContainerItemProxy */; 500 | }; 501 | /* End PBXTargetDependency section */ 502 | 503 | /* Begin XCBuildConfiguration section */ 504 | 19575F4E87428757C72A3B649E3AAF56 /* Release */ = { 505 | isa = XCBuildConfiguration; 506 | baseConfigurationReference = 55E09119AD5E1FEA1577EA264AE15E91 /* Pods-DropdownTitleView.release.xcconfig */; 507 | buildSettings = { 508 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 509 | CLANG_ENABLE_OBJC_WEAK = NO; 510 | CODE_SIGN_IDENTITY = "iPhone Developer"; 511 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 512 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 513 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 514 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 515 | MACH_O_TYPE = staticlib; 516 | OTHER_LDFLAGS = ""; 517 | OTHER_LIBTOOLFLAGS = ""; 518 | PODS_ROOT = "$(SRCROOT)"; 519 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 520 | SDKROOT = iphoneos; 521 | SKIP_INSTALL = YES; 522 | TARGETED_DEVICE_FAMILY = "1,2"; 523 | VALIDATE_PRODUCT = YES; 524 | }; 525 | name = Release; 526 | }; 527 | 4AE48E44E6DEDD6B3B955C1C50A7B607 /* Debug */ = { 528 | isa = XCBuildConfiguration; 529 | baseConfigurationReference = A359DEF2CA1FB49C331B0EAEEABCCF53 /* Pods-Tests.debug.xcconfig */; 530 | buildSettings = { 531 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 532 | CLANG_ENABLE_OBJC_WEAK = NO; 533 | CODE_SIGN_IDENTITY = "iPhone Developer"; 534 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 535 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 536 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 537 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 538 | MACH_O_TYPE = staticlib; 539 | MODULEMAP_FILE = "Target Support Files/Pods-Tests/Pods-Tests.modulemap"; 540 | OTHER_LDFLAGS = ""; 541 | OTHER_LIBTOOLFLAGS = ""; 542 | PODS_ROOT = "$(SRCROOT)"; 543 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 544 | SDKROOT = iphoneos; 545 | SKIP_INSTALL = YES; 546 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 547 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 548 | TARGETED_DEVICE_FAMILY = "1,2"; 549 | }; 550 | name = Debug; 551 | }; 552 | 945E20D7301CEF73D11C89CAB5AD7677 /* Release */ = { 553 | isa = XCBuildConfiguration; 554 | baseConfigurationReference = 9954B2CF80F5D28AED5FE0F2CB6A9B97 /* Pods-Tests.release.xcconfig */; 555 | buildSettings = { 556 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 557 | CLANG_ENABLE_OBJC_WEAK = NO; 558 | CODE_SIGN_IDENTITY = "iPhone Developer"; 559 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 560 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 561 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 562 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 563 | MACH_O_TYPE = staticlib; 564 | MODULEMAP_FILE = "Target Support Files/Pods-Tests/Pods-Tests.modulemap"; 565 | OTHER_LDFLAGS = ""; 566 | OTHER_LIBTOOLFLAGS = ""; 567 | PODS_ROOT = "$(SRCROOT)"; 568 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 569 | SDKROOT = iphoneos; 570 | SKIP_INSTALL = YES; 571 | SWIFT_COMPILATION_MODE = wholemodule; 572 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 573 | TARGETED_DEVICE_FAMILY = "1,2"; 574 | VALIDATE_PRODUCT = YES; 575 | }; 576 | name = Release; 577 | }; 578 | 9707A29C81B92BD5EF43A1E74D8919BB /* Debug */ = { 579 | isa = XCBuildConfiguration; 580 | baseConfigurationReference = 542EB3FAD92D002346677DB898C32A1B /* Pods-DropdownTitleView.debug.xcconfig */; 581 | buildSettings = { 582 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 583 | CLANG_ENABLE_OBJC_WEAK = NO; 584 | CODE_SIGN_IDENTITY = "iPhone Developer"; 585 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 586 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 587 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 588 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 589 | MACH_O_TYPE = staticlib; 590 | OTHER_LDFLAGS = ""; 591 | OTHER_LIBTOOLFLAGS = ""; 592 | PODS_ROOT = "$(SRCROOT)"; 593 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 594 | SDKROOT = iphoneos; 595 | SKIP_INSTALL = YES; 596 | TARGETED_DEVICE_FAMILY = "1,2"; 597 | }; 598 | name = Debug; 599 | }; 600 | BA3E87DA0C77DD43CA5787347221286C /* Debug */ = { 601 | isa = XCBuildConfiguration; 602 | baseConfigurationReference = EA884DF9A7AF6926CB45DF5AA560115C /* Snap.swift.xcconfig */; 603 | buildSettings = { 604 | CODE_SIGN_IDENTITY = "iPhone Developer"; 605 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 606 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 607 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 608 | GCC_PREFIX_HEADER = "Target Support Files/Snap.swift/Snap.swift-prefix.pch"; 609 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 610 | MODULEMAP_FILE = Headers/Public/Snap_swift/Snap.swift.modulemap; 611 | OTHER_LDFLAGS = ""; 612 | OTHER_LIBTOOLFLAGS = ""; 613 | PRIVATE_HEADERS_FOLDER_PATH = ""; 614 | PRODUCT_MODULE_NAME = Snap_swift; 615 | PRODUCT_NAME = Snap.swift; 616 | PUBLIC_HEADERS_FOLDER_PATH = ""; 617 | SDKROOT = iphoneos; 618 | SKIP_INSTALL = YES; 619 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 620 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 621 | SWIFT_VERSION = 4.0; 622 | TARGETED_DEVICE_FAMILY = "1,2"; 623 | }; 624 | name = Debug; 625 | }; 626 | C92782E717C52E3633C9A5F211E7987A /* Debug */ = { 627 | isa = XCBuildConfiguration; 628 | buildSettings = { 629 | ALWAYS_SEARCH_USER_PATHS = NO; 630 | CLANG_ANALYZER_NONNULL = YES; 631 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 632 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 633 | CLANG_CXX_LIBRARY = "libc++"; 634 | CLANG_ENABLE_MODULES = YES; 635 | CLANG_ENABLE_OBJC_ARC = YES; 636 | CLANG_ENABLE_OBJC_WEAK = YES; 637 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 638 | CLANG_WARN_BOOL_CONVERSION = YES; 639 | CLANG_WARN_COMMA = YES; 640 | CLANG_WARN_CONSTANT_CONVERSION = YES; 641 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 642 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 643 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 644 | CLANG_WARN_EMPTY_BODY = YES; 645 | CLANG_WARN_ENUM_CONVERSION = YES; 646 | CLANG_WARN_INFINITE_RECURSION = YES; 647 | CLANG_WARN_INT_CONVERSION = YES; 648 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 649 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 650 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 651 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 652 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 653 | CLANG_WARN_STRICT_PROTOTYPES = YES; 654 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 655 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 656 | CLANG_WARN_UNREACHABLE_CODE = YES; 657 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 658 | CODE_SIGNING_ALLOWED = NO; 659 | CODE_SIGNING_REQUIRED = NO; 660 | COPY_PHASE_STRIP = NO; 661 | DEBUG_INFORMATION_FORMAT = dwarf; 662 | ENABLE_STRICT_OBJC_MSGSEND = YES; 663 | ENABLE_TESTABILITY = YES; 664 | GCC_C_LANGUAGE_STANDARD = gnu11; 665 | GCC_DYNAMIC_NO_PIC = NO; 666 | GCC_NO_COMMON_BLOCKS = YES; 667 | GCC_OPTIMIZATION_LEVEL = 0; 668 | GCC_PREPROCESSOR_DEFINITIONS = ( 669 | "POD_CONFIGURATION_DEBUG=1", 670 | "DEBUG=1", 671 | "$(inherited)", 672 | ); 673 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 674 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 675 | GCC_WARN_UNDECLARED_SELECTOR = YES; 676 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 677 | GCC_WARN_UNUSED_FUNCTION = YES; 678 | GCC_WARN_UNUSED_VARIABLE = YES; 679 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 680 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 681 | MTL_FAST_MATH = YES; 682 | ONLY_ACTIVE_ARCH = YES; 683 | PRODUCT_NAME = "$(TARGET_NAME)"; 684 | STRIP_INSTALLED_PRODUCT = NO; 685 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 686 | SYMROOT = "${SRCROOT}/../build"; 687 | }; 688 | name = Debug; 689 | }; 690 | EA8C7AF90938697605468604B2A17B9F /* Release */ = { 691 | isa = XCBuildConfiguration; 692 | buildSettings = { 693 | ALWAYS_SEARCH_USER_PATHS = NO; 694 | CLANG_ANALYZER_NONNULL = YES; 695 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 696 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 697 | CLANG_CXX_LIBRARY = "libc++"; 698 | CLANG_ENABLE_MODULES = YES; 699 | CLANG_ENABLE_OBJC_ARC = YES; 700 | CLANG_ENABLE_OBJC_WEAK = YES; 701 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 702 | CLANG_WARN_BOOL_CONVERSION = YES; 703 | CLANG_WARN_COMMA = YES; 704 | CLANG_WARN_CONSTANT_CONVERSION = YES; 705 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 706 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 707 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 708 | CLANG_WARN_EMPTY_BODY = YES; 709 | CLANG_WARN_ENUM_CONVERSION = YES; 710 | CLANG_WARN_INFINITE_RECURSION = YES; 711 | CLANG_WARN_INT_CONVERSION = YES; 712 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 713 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 714 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 715 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 716 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 717 | CLANG_WARN_STRICT_PROTOTYPES = YES; 718 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 719 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 720 | CLANG_WARN_UNREACHABLE_CODE = YES; 721 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 722 | CODE_SIGNING_ALLOWED = NO; 723 | CODE_SIGNING_REQUIRED = NO; 724 | COPY_PHASE_STRIP = NO; 725 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 726 | ENABLE_NS_ASSERTIONS = NO; 727 | ENABLE_STRICT_OBJC_MSGSEND = YES; 728 | GCC_C_LANGUAGE_STANDARD = gnu11; 729 | GCC_NO_COMMON_BLOCKS = YES; 730 | GCC_PREPROCESSOR_DEFINITIONS = ( 731 | "POD_CONFIGURATION_RELEASE=1", 732 | "$(inherited)", 733 | ); 734 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 735 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 736 | GCC_WARN_UNDECLARED_SELECTOR = YES; 737 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 738 | GCC_WARN_UNUSED_FUNCTION = YES; 739 | GCC_WARN_UNUSED_VARIABLE = YES; 740 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 741 | MTL_ENABLE_DEBUG_INFO = NO; 742 | MTL_FAST_MATH = YES; 743 | PRODUCT_NAME = "$(TARGET_NAME)"; 744 | STRIP_INSTALLED_PRODUCT = NO; 745 | SYMROOT = "${SRCROOT}/../build"; 746 | }; 747 | name = Release; 748 | }; 749 | F8AC8426B7917EDC2925D6D56EA8800A /* Release */ = { 750 | isa = XCBuildConfiguration; 751 | baseConfigurationReference = EA884DF9A7AF6926CB45DF5AA560115C /* Snap.swift.xcconfig */; 752 | buildSettings = { 753 | CODE_SIGN_IDENTITY = "iPhone Developer"; 754 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 755 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 756 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 757 | GCC_PREFIX_HEADER = "Target Support Files/Snap.swift/Snap.swift-prefix.pch"; 758 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 759 | MODULEMAP_FILE = Headers/Public/Snap_swift/Snap.swift.modulemap; 760 | OTHER_LDFLAGS = ""; 761 | OTHER_LIBTOOLFLAGS = ""; 762 | PRIVATE_HEADERS_FOLDER_PATH = ""; 763 | PRODUCT_MODULE_NAME = Snap_swift; 764 | PRODUCT_NAME = Snap.swift; 765 | PUBLIC_HEADERS_FOLDER_PATH = ""; 766 | SDKROOT = iphoneos; 767 | SKIP_INSTALL = YES; 768 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 769 | SWIFT_COMPILATION_MODE = wholemodule; 770 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 771 | SWIFT_VERSION = 4.0; 772 | TARGETED_DEVICE_FAMILY = "1,2"; 773 | VALIDATE_PRODUCT = YES; 774 | }; 775 | name = Release; 776 | }; 777 | /* End XCBuildConfiguration section */ 778 | 779 | /* Begin XCConfigurationList section */ 780 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 781 | isa = XCConfigurationList; 782 | buildConfigurations = ( 783 | C92782E717C52E3633C9A5F211E7987A /* Debug */, 784 | EA8C7AF90938697605468604B2A17B9F /* Release */, 785 | ); 786 | defaultConfigurationIsVisible = 0; 787 | defaultConfigurationName = Release; 788 | }; 789 | 6314888CAAB2308BBEF0349290E16A21 /* Build configuration list for PBXNativeTarget "Snap.swift" */ = { 790 | isa = XCConfigurationList; 791 | buildConfigurations = ( 792 | BA3E87DA0C77DD43CA5787347221286C /* Debug */, 793 | F8AC8426B7917EDC2925D6D56EA8800A /* Release */, 794 | ); 795 | defaultConfigurationIsVisible = 0; 796 | defaultConfigurationName = Release; 797 | }; 798 | 6E8B4BC34329869B0BF779DF9CB58900 /* Build configuration list for PBXNativeTarget "Pods-DropdownTitleView" */ = { 799 | isa = XCConfigurationList; 800 | buildConfigurations = ( 801 | 9707A29C81B92BD5EF43A1E74D8919BB /* Debug */, 802 | 19575F4E87428757C72A3B649E3AAF56 /* Release */, 803 | ); 804 | defaultConfigurationIsVisible = 0; 805 | defaultConfigurationName = Release; 806 | }; 807 | 97E5E85B21DFAE5044A3404D35274E33 /* Build configuration list for PBXNativeTarget "Pods-Tests" */ = { 808 | isa = XCConfigurationList; 809 | buildConfigurations = ( 810 | 4AE48E44E6DEDD6B3B955C1C50A7B607 /* Debug */, 811 | 945E20D7301CEF73D11C89CAB5AD7677 /* Release */, 812 | ); 813 | defaultConfigurationIsVisible = 0; 814 | defaultConfigurationName = Release; 815 | }; 816 | /* End XCConfigurationList section */ 817 | }; 818 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 819 | } 820 | --------------------------------------------------------------------------------