diff --git a/.gitignore b/.gitignore index 5f68e6a..2eb2b8d 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,5 @@ DerivedData *.swp .idea + +fastlane/report.xml diff --git a/Jeff.xcodeproj/project.pbxproj b/Jeff.xcodeproj/project.pbxproj index 197b6af..c14f560 100644 --- a/Jeff.xcodeproj/project.pbxproj +++ b/Jeff.xcodeproj/project.pbxproj @@ -7,11 +7,16 @@ objects = { /* Begin PBXBuildFile section */ - 8359322E52C5BFFB013B4AC7 /* JEFDropboxUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = 835935E41B797539819CFB36 /* JEFDropboxUploader.m */; }; + 77A2B0B8C294DBCED2A84EE3 /* libPods-JeffTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ECEE16058ADECD7238FD2B58 /* libPods-JeffTests.a */; }; 8359376F55CC63D6FE3DE740 /* JEFPopoverUploaderSetupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 83593B5EA5926018F6E2110D /* JEFPopoverUploaderSetupViewController.m */; }; - 83593B01FC89BA3C5EC32E7C /* JEFRecordingsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 83593370A12DC3B1E44F01F4 /* JEFRecordingsManager.m */; }; + 83593B01FC89BA3C5EC32E7C /* JEFDropboxRepository.m in Sources */ = {isa = PBXBuildFile; fileRef = 83593370A12DC3B1E44F01F4 /* JEFDropboxRepository.m */; }; 83593BA6023A48A43B1002E8 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 83593BD28BA68D2EAD12CF1C /* Localizable.strings */; }; + CA082AFF1A046377003913AD /* JEFRecordingsTableViewDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = CA082AFE1A046377003913AD /* JEFRecordingsTableViewDataSource.m */; }; + CA15EB0E1A046BFE00B017A6 /* JEFDropboxService.m in Sources */ = {isa = PBXBuildFile; fileRef = CA15EB0D1A046BFE00B017A6 /* JEFDropboxService.m */; }; + CA15EB141A0538AD00B017A6 /* JEFRecordingsController.m in Sources */ = {isa = PBXBuildFile; fileRef = CA15EB131A0538AD00B017A6 /* JEFRecordingsController.m */; }; + CA15EB1C1A05667B00B017A6 /* JEFDropboxRepositoryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CA15EB1B1A05667B00B017A6 /* JEFDropboxRepositoryTests.m */; }; CA1F990C192F0ACB00C3EF33 /* StartAtLoginController.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1F990B192F0ACB00C3EF33 /* StartAtLoginController.m */; }; + CA283ECD1BB3665300466106 /* NSError+Jeff.m in Sources */ = {isa = PBXBuildFile; fileRef = CA283ECC1BB3665300466106 /* NSError+Jeff.m */; }; CA455B2C18B83EB900F9A541 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA455B2B18B83EB900F9A541 /* Cocoa.framework */; }; CA455B3618B83EB900F9A541 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = CA455B3418B83EB900F9A541 /* InfoPlist.strings */; }; CA455B3818B83EB900F9A541 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CA455B3718B83EB900F9A541 /* main.m */; }; @@ -42,6 +47,7 @@ CA875EFC18B9974C009FC997 /* JEFSelectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = CA875EFB18B9974C009FC997 /* JEFSelectionView.m */; }; CA8B297419F0BE3A00351C9E /* Dropbox.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = CAC40811199C391900833FAB /* Dropbox.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; CAA79EAC192A725800A4299F /* JEFQuartzRecorder.m in Sources */ = {isa = PBXBuildFile; fileRef = CAA79EAB192A725800A4299F /* JEFQuartzRecorder.m */; }; + CAAC76981A16A39700FF8271 /* JEFConverterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CAAC76971A16A39700FF8271 /* JEFConverterTests.m */; }; CAB110D4192C6C61000A04C0 /* NSEvent+MouseClamped.m in Sources */ = {isa = PBXBuildFile; fileRef = CAB110D3192C6C61000A04C0 /* NSEvent+MouseClamped.m */; }; CAB45FD619FEB171002BC029 /* JEFHoverStateButton.m in Sources */ = {isa = PBXBuildFile; fileRef = CAB45FD519FEB171002BC029 /* JEFHoverStateButton.m */; }; CAB5E84D19FCA3CF00849330 /* NSSharingService+ActivityType.m in Sources */ = {isa = PBXBuildFile; fileRef = CAB5E84C19FCA3CF00849330 /* NSSharingService+ActivityType.m */; }; @@ -52,6 +58,7 @@ CAC8D92819FC5A27007BD04F /* RBLScrolling.m in Sources */ = {isa = PBXBuildFile; fileRef = CAC8D92519FC5A27007BD04F /* RBLScrolling.m */; }; CAC8D92919FC5A27007BD04F /* RBLTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = CAC8D92719FC5A27007BD04F /* RBLTableView.m */; }; CADF57B418C6F432006512E3 /* JEFRecording.m in Sources */ = {isa = PBXBuildFile; fileRef = CADF57B318C6F432006512E3 /* JEFRecording.m */; }; + CAE64D4E1A014F1900845E7B /* NSMutableArray+JEFSortedInsert.m in Sources */ = {isa = PBXBuildFile; fileRef = CAE64D4D1A014F1900845E7B /* NSMutableArray+JEFSortedInsert.m */; }; CAE64D701A02A9B500845E7B /* Auxiliary Binary.entitlements in Resources */ = {isa = PBXBuildFile; fileRef = CAE64D6F1A02A9B500845E7B /* Auxiliary Binary.entitlements */; }; CAE8F9C61991CBFF00F24D4C /* MIT-License.rtf in Resources */ = {isa = PBXBuildFile; fileRef = CAE8F9C31991CBFF00F24D4C /* MIT-License.rtf */; }; CAE8F9C71991CBFF00F24D4C /* RSVerticallyCenteredTextFieldCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CAE8F9C51991CBFF00F24D4C /* RSVerticallyCenteredTextFieldCell.m */; }; @@ -130,18 +137,29 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0ACCB37977B5E518B84DEC97 /* Pods-JeffTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JeffTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests.debug.xcconfig"; sourceTree = ""; }; + 2BFE03296FF7A1A8535A661C /* Pods-JeffTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JeffTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests.release.xcconfig"; sourceTree = ""; }; 552FC149DE814638B883B810 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 83593370A12DC3B1E44F01F4 /* JEFRecordingsManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JEFRecordingsManager.m; sourceTree = ""; }; - 835935E41B797539819CFB36 /* JEFDropboxUploader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JEFDropboxUploader.m; sourceTree = ""; }; + 83593370A12DC3B1E44F01F4 /* JEFDropboxRepository.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JEFDropboxRepository.m; sourceTree = ""; }; 835938D219B64AF401E6EAEE /* JEFPopoverUploaderSetupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JEFPopoverUploaderSetupViewController.h; sourceTree = ""; }; - 83593B4EEE534ED769A58AA8 /* JEFRecordingsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JEFRecordingsManager.h; sourceTree = ""; }; + 83593B4EEE534ED769A58AA8 /* JEFDropboxRepository.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JEFDropboxRepository.h; sourceTree = ""; }; 83593B5EA5926018F6E2110D /* JEFPopoverUploaderSetupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JEFPopoverUploaderSetupViewController.m; sourceTree = ""; }; 83593BB07DFAFBD9106DD41E /* en */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; - 83593E3E69C23122FB40765D /* JEFUploaderProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JEFUploaderProtocol.h; path = ../JEFUploaderProtocol.h; sourceTree = ""; }; - 83593F946B55E6E3610A19A4 /* JEFDropboxUploader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JEFDropboxUploader.h; sourceTree = ""; }; + CA082AFC1A045F5F003913AD /* JEFSyncingService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JEFSyncingService.h; sourceTree = ""; }; + CA082AFD1A046377003913AD /* JEFRecordingsTableViewDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JEFRecordingsTableViewDataSource.h; path = Models/JEFRecordingsTableViewDataSource.h; sourceTree = ""; }; + CA082AFE1A046377003913AD /* JEFRecordingsTableViewDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = JEFRecordingsTableViewDataSource.m; path = Models/JEFRecordingsTableViewDataSource.m; sourceTree = ""; }; + CA082B001A046478003913AD /* JEFRecordingsRepository.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JEFRecordingsRepository.h; path = Models/JEFRecordingsRepository.h; sourceTree = ""; }; + CA15EB0C1A046BFE00B017A6 /* JEFDropboxService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JEFDropboxService.h; sourceTree = ""; }; + CA15EB0D1A046BFE00B017A6 /* JEFDropboxService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JEFDropboxService.m; sourceTree = ""; }; + CA15EB121A0538AD00B017A6 /* JEFRecordingsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JEFRecordingsController.h; path = Controllers/JEFRecordingsController.h; sourceTree = ""; }; + CA15EB131A0538AD00B017A6 /* JEFRecordingsController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = JEFRecordingsController.m; path = Controllers/JEFRecordingsController.m; sourceTree = ""; }; + CA15EB181A05423D00B017A6 /* JEFRecordingsProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JEFRecordingsProvider.h; path = Models/JEFRecordingsProvider.h; sourceTree = ""; }; + CA15EB1B1A05667B00B017A6 /* JEFDropboxRepositoryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JEFDropboxRepositoryTests.m; sourceTree = ""; }; CA1F98FF192F0A5F00C3EF33 /* JeffLauncher.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = JeffLauncher.xcodeproj; path = JeffLauncher/JeffLauncher.xcodeproj; sourceTree = ""; }; CA1F990A192F0ACB00C3EF33 /* StartAtLoginController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StartAtLoginController.h; sourceTree = ""; }; CA1F990B192F0ACB00C3EF33 /* StartAtLoginController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StartAtLoginController.m; sourceTree = ""; }; + CA283ECB1BB3665300466106 /* NSError+Jeff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSError+Jeff.h"; path = "Categories/NSError+Jeff.h"; sourceTree = ""; }; + CA283ECC1BB3665300466106 /* NSError+Jeff.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSError+Jeff.m"; path = "Categories/NSError+Jeff.m"; sourceTree = ""; }; CA455B2818B83EB900F9A541 /* Jeff.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Jeff.app; sourceTree = BUILT_PRODUCTS_DIR; }; CA455B2B18B83EB900F9A541 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; CA455B2E18B83EB900F9A541 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; @@ -190,6 +208,7 @@ CA875EFB18B9974C009FC997 /* JEFSelectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JEFSelectionView.m; sourceTree = ""; }; CAA79EAA192A725800A4299F /* JEFQuartzRecorder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JEFQuartzRecorder.h; path = Recorders/JEFQuartzRecorder.h; sourceTree = ""; }; CAA79EAB192A725800A4299F /* JEFQuartzRecorder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = JEFQuartzRecorder.m; path = Recorders/JEFQuartzRecorder.m; sourceTree = ""; }; + CAAC76971A16A39700FF8271 /* JEFConverterTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JEFConverterTests.m; sourceTree = ""; }; CAB110D2192C6C61000A04C0 /* NSEvent+MouseClamped.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSEvent+MouseClamped.h"; path = "Categories/NSEvent+MouseClamped.h"; sourceTree = ""; }; CAB110D3192C6C61000A04C0 /* NSEvent+MouseClamped.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSEvent+MouseClamped.m"; path = "Categories/NSEvent+MouseClamped.m"; sourceTree = ""; }; CAB45FD419FEB171002BC029 /* JEFHoverStateButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JEFHoverStateButton.h; path = Views/JEFHoverStateButton.h; sourceTree = ""; }; @@ -209,6 +228,8 @@ CADF57B318C6F432006512E3 /* JEFRecording.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = JEFRecording.m; path = Models/JEFRecording.m; sourceTree = ""; }; CADF57B518C70081006512E3 /* Jeff.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = Jeff.entitlements; sourceTree = ""; }; CAE40E16196F6715002901BD /* JEFRecorder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JEFRecorder.h; path = Recorders/JEFRecorder.h; sourceTree = ""; }; + CAE64D4C1A014F1900845E7B /* NSMutableArray+JEFSortedInsert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSMutableArray+JEFSortedInsert.h"; path = "Categories/NSMutableArray+JEFSortedInsert.h"; sourceTree = ""; }; + CAE64D4D1A014F1900845E7B /* NSMutableArray+JEFSortedInsert.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSMutableArray+JEFSortedInsert.m"; path = "Categories/NSMutableArray+JEFSortedInsert.m"; sourceTree = ""; }; CAE64D6F1A02A9B500845E7B /* Auxiliary Binary.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "Auxiliary Binary.entitlements"; sourceTree = ""; }; CAE8F9C31991CBFF00F24D4C /* MIT-License.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; path = "MIT-License.rtf"; sourceTree = ""; }; CAE8F9C41991CBFF00F24D4C /* RSVerticallyCenteredTextFieldCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RSVerticallyCenteredTextFieldCell.h; sourceTree = ""; }; @@ -239,6 +260,7 @@ D636F9A5A7EBC69C14961DD4 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; E6C5AE497D011C67312AFC31 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; ECEE16058ADECD7238FD2B58 /* libPods-JeffTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-JeffTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + FE5FFFFDEB292A076F9221E4 /* Pods-JeffTests.beta release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JeffTests.beta release.xcconfig"; path = "Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests.beta release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -260,6 +282,7 @@ CA455B4C18B83EBA00F9A541 /* Cocoa.framework in Frameworks */, CA455B4B18B83EBA00F9A541 /* XCTest.framework in Frameworks */, CA4BB84819F0B52A00CA04FB /* Dropbox.framework in Frameworks */, + 77A2B0B8C294DBCED2A84EE3 /* libPods-JeffTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -272,20 +295,13 @@ D636F9A5A7EBC69C14961DD4 /* Pods.debug.xcconfig */, E6C5AE497D011C67312AFC31 /* Pods.release.xcconfig */, CE897CD97646331471ECA091 /* Pods.beta release.xcconfig */, + 0ACCB37977B5E518B84DEC97 /* Pods-JeffTests.debug.xcconfig */, + 2BFE03296FF7A1A8535A661C /* Pods-JeffTests.release.xcconfig */, + FE5FFFFDEB292A076F9221E4 /* Pods-JeffTests.beta release.xcconfig */, ); name = Pods; sourceTree = ""; }; - 83593406A410EF88B08D5442 /* Uploaders */ = { - isa = PBXGroup; - children = ( - 83593E3E69C23122FB40765D /* JEFUploaderProtocol.h */, - 835935E41B797539819CFB36 /* JEFDropboxUploader.m */, - 83593F946B55E6E3610A19A4 /* JEFDropboxUploader.h */, - ); - path = Uploaders; - sourceTree = ""; - }; 83593B9212B387F97DA9E104 /* Libraries */ = { isa = PBXGroup; children = ( @@ -307,6 +323,15 @@ path = Cells; sourceTree = ""; }; + CA15EB111A05389400B017A6 /* Controllers */ = { + isa = PBXGroup; + children = ( + CA15EB121A0538AD00B017A6 /* JEFRecordingsController.h */, + CA15EB131A0538AD00B017A6 /* JEFRecordingsController.m */, + ); + name = Controllers; + sourceTree = ""; + }; CA1F9900192F0A5F00C3EF33 /* Products */ = { isa = PBXGroup; children = ( @@ -378,12 +403,12 @@ CAE64D6F1A02A9B500845E7B /* Auxiliary Binary.entitlements */, CA571B191936E34D005E9C46 /* Windows */, CAF30B4118D3D73E00D7BC9D /* View Controllers */, + CA15EB111A05389400B017A6 /* Controllers */, CADF57B118C6F3E7006512E3 /* Models */, CA04CAA719F56509006C9D47 /* Cells */, CA455B7818B882A900F9A541 /* Categories */, CAF30B4F18D3E31D00D7BC9D /* Views */, CAA79EAD192A725D00A4299F /* Recorders */, - 83593406A410EF88B08D5442 /* Uploaders */, 83593B9212B387F97DA9E104 /* Libraries */, CA455B3D18B83EB900F9A541 /* JEFAppDelegate.h */, CA455B3E18B83EB900F9A541 /* JEFAppDelegate.m */, @@ -416,6 +441,8 @@ isa = PBXGroup; children = ( CA455B5518B83EBA00F9A541 /* JEFRecordingTests.m */, + CA15EB1B1A05667B00B017A6 /* JEFDropboxRepositoryTests.m */, + CAAC76971A16A39700FF8271 /* JEFConverterTests.m */, CA455B5018B83EBA00F9A541 /* Supporting Files */, ); path = JeffTests; @@ -450,6 +477,10 @@ CAC7AC1519F5784600F44010 /* NSColor+Darken.m */, CAB5E84B19FCA3CF00849330 /* NSSharingService+ActivityType.h */, CAB5E84C19FCA3CF00849330 /* NSSharingService+ActivityType.m */, + CAE64D4C1A014F1900845E7B /* NSMutableArray+JEFSortedInsert.h */, + CAE64D4D1A014F1900845E7B /* NSMutableArray+JEFSortedInsert.m */, + CA283ECB1BB3665300466106 /* NSError+Jeff.h */, + CA283ECC1BB3665300466106 /* NSError+Jeff.m */, ); name = Categories; sourceTree = ""; @@ -544,8 +575,15 @@ children = ( CADF57B218C6F432006512E3 /* JEFRecording.h */, CADF57B318C6F432006512E3 /* JEFRecording.m */, - 83593370A12DC3B1E44F01F4 /* JEFRecordingsManager.m */, - 83593B4EEE534ED769A58AA8 /* JEFRecordingsManager.h */, + 83593B4EEE534ED769A58AA8 /* JEFDropboxRepository.h */, + 83593370A12DC3B1E44F01F4 /* JEFDropboxRepository.m */, + CA082AFD1A046377003913AD /* JEFRecordingsTableViewDataSource.h */, + CA082AFE1A046377003913AD /* JEFRecordingsTableViewDataSource.m */, + CA15EB0C1A046BFE00B017A6 /* JEFDropboxService.h */, + CA15EB0D1A046BFE00B017A6 /* JEFDropboxService.m */, + CA082AFC1A045F5F003913AD /* JEFSyncingService.h */, + CA082B001A046478003913AD /* JEFRecordingsRepository.h */, + CA15EB181A05423D00B017A6 /* JEFRecordingsProvider.h */, ); name = Models; sourceTree = ""; @@ -652,10 +690,12 @@ isa = PBXNativeTarget; buildConfigurationList = CA455B5C18B83EBA00F9A541 /* Build configuration list for PBXNativeTarget "JeffTests" */; buildPhases = ( + C2FCCC6CD7F39E2D06050AFC /* Check Pods Manifest.lock */, CA455B4518B83EBA00F9A541 /* Sources */, CA455B4618B83EBA00F9A541 /* Frameworks */, CA455B4718B83EBA00F9A541 /* Resources */, CA8B297119F0BE2D00351C9E /* CopyFiles */, + 6C4217945EF4B931CD330C05 /* Copy Pods Resources */, ); buildRules = ( ); @@ -674,7 +714,7 @@ isa = PBXProject; attributes = { CLASSPREFIX = JEF; - LastUpgradeCheck = 0600; + LastUpgradeCheck = 0700; ORGANIZATIONNAME = "Brandon Evans"; TargetAttributes = { CA455B2718B83EB900F9A541 = { @@ -794,6 +834,36 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; showEnvVarsInLog = 0; }; + 6C4217945EF4B931CD330C05 /* Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + C2FCCC6CD7F39E2D06050AFC /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; CAE64D711A02A9F800845E7B /* Add Entitlements to Gifsicle */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -850,21 +920,25 @@ CAB110D4192C6C61000A04C0 /* NSEvent+MouseClamped.m in Sources */, CA571B1C1936E371005E9C46 /* JEFSelectionOverlayWindow.m in Sources */, CA455B6B18B848B700F9A541 /* JEFPopoverRecordingsViewController.m in Sources */, + CA15EB141A0538AD00B017A6 /* JEFRecordingsController.m in Sources */, CA81B09C197777DF00761ECC /* JEFScaleToFillImageView.m in Sources */, CA1F990C192F0ACB00C3EF33 /* StartAtLoginController.m in Sources */, CAF30B6118D5281100D7BC9D /* INPopoverController.m in Sources */, CAE8F9C71991CBFF00F24D4C /* RSVerticallyCenteredTextFieldCell.m in Sources */, + CA283ECD1BB3665300466106 /* NSError+Jeff.m in Sources */, CA4D988418D6D2A900EFE4FD /* JEFRecordingCellView.m in Sources */, CAC8D92819FC5A27007BD04F /* RBLScrolling.m in Sources */, CAF30B6418D5281100D7BC9D /* INPopoverWindowFrame.m in Sources */, + CAE64D4E1A014F1900845E7B /* NSMutableArray+JEFSortedInsert.m in Sources */, + CA15EB0E1A046BFE00B017A6 /* JEFDropboxService.m in Sources */, CAF3913619F566F4009D5D9A /* JEFColoredButton.m in Sources */, CAB77D4D19E5E2CF0049B6D8 /* JEFAppController.m in Sources */, + CA082AFF1A046377003913AD /* JEFRecordingsTableViewDataSource.m in Sources */, CA455B3818B83EB900F9A541 /* main.m in Sources */, - 8359322E52C5BFFB013B4AC7 /* JEFDropboxUploader.m in Sources */, CAC7AC1619F5784600F44010 /* NSColor+Darken.m in Sources */, CA6E31AF19E4D45E00C4B906 /* NSData+MPBase64.m in Sources */, 8359376F55CC63D6FE3DE740 /* JEFPopoverUploaderSetupViewController.m in Sources */, - 83593B01FC89BA3C5EC32E7C /* JEFRecordingsManager.m in Sources */, + 83593B01FC89BA3C5EC32E7C /* JEFDropboxRepository.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -872,7 +946,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + CA15EB1C1A05667B00B017A6 /* JEFDropboxRepositoryTests.m in Sources */, CA455B5618B83EBA00F9A541 /* JEFRecordingTests.m in Sources */, + CAAC76981A16A39700FF8271 /* JEFConverterTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -948,6 +1024,7 @@ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; @@ -1012,8 +1089,9 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; CODE_SIGN_ENTITLEMENTS = Jeff/Jeff.entitlements; - CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application: Robots and Pencils Inc. (PBH8V487HB)"; + CODE_SIGN_IDENTITY = "Developer ID Application"; COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 15; DROPBOX_CALLBACK_URI = "db-***REMOVED***"; DROPBOX_KEY = ***REMOVED***; DROPBOX_SECRET = ***REMOVED***; @@ -1029,11 +1107,14 @@ GCC_TREAT_WARNINGS_AS_ERRORS = NO; GCC_WARN_INHIBIT_ALL_WARNINGS = NO; GCC_WARN_SHADOW = YES; + HOCKEYAPP_ID = fc5eb937bcf6acbfd098ba02d7d633a8; INFOPLIST_FILE = "Jeff/Jeff-Info.plist"; MACOSX_DEPLOYMENT_TARGET = 10.10; MIXPANEL_TOKEN = ***REMOVED***; + PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_ID}"; PRODUCT_NAME = "$(TARGET_NAME)"; USER_HEADER_SEARCH_PATHS = "\"${PROJECT_DIR}/Pods\"/**"; + VERSIONING_SYSTEM = "apple-generic"; WARNING_CFLAGS = "-Wall"; WRAPPER_EXTENSION = app; }; @@ -1050,8 +1131,9 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; CODE_SIGN_ENTITLEMENTS = Jeff/Jeff.entitlements; - CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application: Robots and Pencils Inc. (PBH8V487HB)"; + CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application"; COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 15; DROPBOX_CALLBACK_URI = "db-***REMOVED***"; DROPBOX_KEY = ***REMOVED***; DROPBOX_SECRET = ***REMOVED***; @@ -1070,11 +1152,14 @@ GCC_TREAT_WARNINGS_AS_ERRORS = NO; GCC_WARN_INHIBIT_ALL_WARNINGS = NO; GCC_WARN_SHADOW = YES; + HOCKEYAPP_ID = ***REMOVED***; INFOPLIST_FILE = "Jeff/Jeff-Info.plist"; MACOSX_DEPLOYMENT_TARGET = 10.10; MIXPANEL_TOKEN = ***REMOVED***; + PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_ID}"; PRODUCT_NAME = "$(TARGET_NAME)"; USER_HEADER_SEARCH_PATHS = "\"${PROJECT_DIR}/Pods\"/**"; + VERSIONING_SYSTEM = "apple-generic"; WARNING_CFLAGS = "-Wall"; WRAPPER_EXTENSION = app; }; @@ -1082,6 +1167,7 @@ }; CA455B5D18B83EBA00F9A541 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 0ACCB37977B5E518B84DEC97 /* Pods-JeffTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Jeff.app/Contents/MacOS/Jeff"; CODE_SIGN_IDENTITY = ""; @@ -1098,6 +1184,7 @@ "$(inherited)", ); INFOPLIST_FILE = "JeffTests/JeffTests-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "ca.brandonevans.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUNDLE_LOADER)"; WRAPPER_EXTENSION = xctest; @@ -1106,6 +1193,7 @@ }; CA455B5E18B83EBA00F9A541 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 2BFE03296FF7A1A8535A661C /* Pods-JeffTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Jeff.app/Contents/MacOS/Jeff"; CODE_SIGN_IDENTITY = ""; @@ -1118,6 +1206,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Jeff/Jeff-Prefix.pch"; INFOPLIST_FILE = "JeffTests/JeffTests-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "ca.brandonevans.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUNDLE_LOADER)"; WRAPPER_EXTENSION = xctest; @@ -1167,8 +1256,9 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; CODE_SIGN_ENTITLEMENTS = Jeff/Jeff.entitlements; - CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application: Robots and Pencils Inc. (PBH8V487HB)"; + CODE_SIGN_IDENTITY = "Developer ID Application"; COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 15; DROPBOX_CALLBACK_URI = "db-***REMOVED***"; DROPBOX_KEY = ***REMOVED***; DROPBOX_SECRET = ***REMOVED***; @@ -1187,11 +1277,14 @@ GCC_TREAT_WARNINGS_AS_ERRORS = NO; GCC_WARN_INHIBIT_ALL_WARNINGS = NO; GCC_WARN_SHADOW = YES; + HOCKEYAPP_ID = fc5eb937bcf6acbfd098ba02d7d633a8; INFOPLIST_FILE = "Jeff/Jeff-Info.plist"; MACOSX_DEPLOYMENT_TARGET = 10.10; MIXPANEL_TOKEN = ***REMOVED***; + PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_ID}"; PRODUCT_NAME = "$(TARGET_NAME)"; USER_HEADER_SEARCH_PATHS = "\"${PROJECT_DIR}/Pods\"/**"; + VERSIONING_SYSTEM = "apple-generic"; WARNING_CFLAGS = "-Wall"; WRAPPER_EXTENSION = app; }; @@ -1199,6 +1292,7 @@ }; CA6E31A119E4CD3300C4B906 /* Beta Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = FE5FFFFDEB292A076F9221E4 /* Pods-JeffTests.beta release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Jeff.app/Contents/MacOS/Jeff"; CODE_SIGN_IDENTITY = ""; @@ -1211,6 +1305,7 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Jeff/Jeff-Prefix.pch"; INFOPLIST_FILE = "JeffTests/JeffTests-Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "ca.brandonevans.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUNDLE_LOADER)"; WRAPPER_EXTENSION = xctest; @@ -1228,7 +1323,7 @@ CA6E319F19E4CD3300C4B906 /* Beta Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug; }; CA455B5918B83EBA00F9A541 /* Build configuration list for PBXNativeTarget "Jeff" */ = { isa = XCConfigurationList; @@ -1238,7 +1333,7 @@ CA6E31A019E4CD3300C4B906 /* Beta Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug; }; CA455B5C18B83EBA00F9A541 /* Build configuration list for PBXNativeTarget "JeffTests" */ = { isa = XCConfigurationList; @@ -1248,7 +1343,7 @@ CA6E31A119E4CD3300C4B906 /* Beta Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug; }; /* End XCConfigurationList section */ }; diff --git a/Jeff.xcodeproj/xcshareddata/xcschemes/Jeff.xcscheme b/Jeff.xcodeproj/xcshareddata/xcschemes/Jeff.xcscheme index 4a9b8ae..74a2621 100644 --- a/Jeff.xcodeproj/xcshareddata/xcschemes/Jeff.xcscheme +++ b/Jeff.xcodeproj/xcshareddata/xcschemes/Jeff.xcscheme @@ -1,6 +1,6 @@ + codeCoverageEnabled = "YES"> @@ -48,17 +49,21 @@ ReferencedContainer = "container:Jeff.xcodeproj"> + + - + - + +#import + +@interface NSError (Jeff) + +@end + +@interface DBError (Jeff) + ++ (instancetype)fileCreationError; + +@end \ No newline at end of file diff --git a/Jeff/Categories/NSError+Jeff.m b/Jeff/Categories/NSError+Jeff.m new file mode 100644 index 0000000..7b4e939 --- /dev/null +++ b/Jeff/Categories/NSError+Jeff.m @@ -0,0 +1,21 @@ +// +// NSError+Jeff.m +// Jeff +// +// Created by Brandon Evans on 2015-09-23. +// Copyright (c) 2015 Brandon Evans. All rights reserved. +// + +#import "NSError+Jeff.h" + +@implementation NSError (Jeff) + +@end + +@implementation DBError (Jeff) + ++ (instancetype)fileCreationError { + return [[DBError alloc] initWithDomain:@"com.robotsandpencils.Jeff" code:1000 userInfo:@{ NSLocalizedDescriptionKey: NSLocalizedString(@"DBErrorFileCreation", nil) }]; +} + +@end \ No newline at end of file diff --git a/Jeff/Categories/NSMutableArray+JEFSortedInsert.h b/Jeff/Categories/NSMutableArray+JEFSortedInsert.h new file mode 100644 index 0000000..cf70a5e --- /dev/null +++ b/Jeff/Categories/NSMutableArray+JEFSortedInsert.h @@ -0,0 +1,15 @@ +// +// NSMutableArray+JEFSortedInsert.h +// Jeff +// +// Created by Brandon Evans on 2014-10-29. +// Copyright (c) 2014 Brandon Evans. All rights reserved. +// + +#import + +@interface NSMutableArray (JEFSortedInsert) + +- (void)jef_insertObject:(id)anObject sortedUsingDescriptors:(NSArray *)descriptors; + +@end diff --git a/Jeff/Categories/NSMutableArray+JEFSortedInsert.m b/Jeff/Categories/NSMutableArray+JEFSortedInsert.m new file mode 100644 index 0000000..ec6e68b --- /dev/null +++ b/Jeff/Categories/NSMutableArray+JEFSortedInsert.m @@ -0,0 +1,60 @@ +// +// NSMutableArray+JEFSortedInsert.m +// Jeff +// +// Created by Brandon Evans on 2014-10-29. +// Copyright (c) 2014 Brandon Evans. All rights reserved. +// + +#import "NSMutableArray+JEFSortedInsert.h" + +@implementation NSMutableArray (JEFSortedInsert) + +static IMP jef_compareObjectToObjectImp = NULL; +static IMP jef_ascendingImp = NULL; + ++ (void)initialize { + jef_compareObjectToObjectImp = [NSSortDescriptor instanceMethodForSelector:@selector(compareObject:toObject:)]; + jef_ascendingImp = [NSSortDescriptor instanceMethodForSelector:@selector(ascending)]; +} + +static NSComparisonResult cw_DescriptorCompare(id a, id b, void* descriptors) { + NSComparisonResult result = NSOrderedSame; + for (NSSortDescriptor* sortDescriptor in (__bridge NSArray*)descriptors) { + result = (NSComparisonResult)jef_compareObjectToObjectImp(sortDescriptor, @selector(compareObject:toObject:), a, b); + if (result != NSOrderedSame) { + if (!jef_ascendingImp(sortDescriptor, @selector(ascending))) { + result = 0 - result; + } + break; + } + } + return result; +} + +- (NSUInteger)indexForInsertingObject:(id)anObject sortedUsingfunction:(NSInteger (*)(id, id, void *))compare context:(void*)context { + NSUInteger index = 0; + NSUInteger topIndex = [self count]; + IMP objectAtIndexImp = [self methodForSelector:@selector(objectAtIndex:)]; + while (index < topIndex) { + NSUInteger midIndex = (index + topIndex) / 2; + id testObject = objectAtIndexImp(self, @selector(objectAtIndex:), midIndex); + if (compare(anObject, testObject, context) < 0) { + index = midIndex + 1; + } else { + topIndex = midIndex; + } + } + return index; +} + +- (NSUInteger)indexForInsertingObject:(id)anObject sortedUsingDescriptors:(NSArray*)descriptors { + return [self indexForInsertingObject:anObject sortedUsingfunction:&cw_DescriptorCompare context:(void *)descriptors]; +} + +- (void)jef_insertObject:(id)anObject sortedUsingDescriptors:(NSArray *)descriptors { + NSUInteger index = [self indexForInsertingObject:anObject sortedUsingDescriptors:descriptors]; + [self insertObject:anObject atIndex:index]; +} + +@end diff --git a/Jeff/Constants.h b/Jeff/Constants.h index 44a55a0..e31f21f 100644 --- a/Jeff/Constants.h +++ b/Jeff/Constants.h @@ -11,6 +11,17 @@ extern NSString *const JEFRecordScreenShortcutKey; extern NSString *const JEFRecordSelectionShortcutKey; +#pragma mark - Notifications + +extern NSString *const JEFRecordingWasSharedNotification; +extern NSString *const JEFSyncingServiceAccountStateChanged; +extern NSString *const JEFOpenPopoverNotification; +extern NSString *const JEFClosePopoverNotification; +extern NSString *const JEFStartRecordingNotification; +extern NSString *const JEFStopRecordingNotification; +extern NSString *const JEFSetStatusViewNotRecordingNotification; +extern NSString *const JEFSetStatusViewRecordingNotification; + static inline CGFloat constrain(CGFloat value, CGFloat min, CGFloat max) { return fmin(fmax(value, min), max); } \ No newline at end of file diff --git a/Jeff/Constants.m b/Jeff/Constants.m index 35fb92f..004c4b0 100644 --- a/Jeff/Constants.m +++ b/Jeff/Constants.m @@ -7,4 +7,13 @@ // NSString *const JEFRecordScreenShortcutKey = @"RecordScreenShortcut"; -NSString *const JEFRecordSelectionShortcutKey = @"RecordSelectionShortcut"; \ No newline at end of file +NSString *const JEFRecordSelectionShortcutKey = @"RecordSelectionShortcut"; + +NSString *const JEFRecordingWasSharedNotification = @"JEFRecordingWasSharedNotification"; +NSString *const JEFSyncingServiceAccountStateChanged = @"JEFSyncingServiceAccountStateChanged"; +NSString *const JEFOpenPopoverNotification = @"JEFOpenPopoverNotification"; +NSString *const JEFClosePopoverNotification = @"JEFClosePopoverNotification"; +NSString *const JEFStartRecordingNotification = @"JEFStartRecordingNotification"; +NSString *const JEFStopRecordingNotification = @"JEFStopRecordingNotification"; +NSString *const JEFSetStatusViewNotRecordingNotification = @"JEFSetStatusViewNotRecordingNotification"; +NSString *const JEFSetStatusViewRecordingNotification = @"JEFSetStatusViewRecordingNotification"; \ No newline at end of file diff --git a/Jeff/Controllers/JEFRecordingsController.h b/Jeff/Controllers/JEFRecordingsController.h new file mode 100644 index 0000000..d368dab --- /dev/null +++ b/Jeff/Controllers/JEFRecordingsController.h @@ -0,0 +1,28 @@ +// +// JEFRecordingsController.h +// Jeff +// +// Created by Brandon Evans on 2014-11-01. +// Copyright (c) 2014 Brandon Evans. All rights reserved. +// + +#import "JEFRecordingsProvider.h" + +@class JEFRecording; +@protocol JEFSyncingService; +@protocol JEFRecordingsRepository; + +@interface JEFRecordingsController : NSObject + +@property (nonatomic, strong, readonly) NSArray *recordings; +@property (nonatomic, assign, readonly) BOOL isDoingInitialSync; + +- (instancetype)initWithSyncingService:(id)syncingService recordingsRepo:(id)recordingsRepo; + +- (void)uploadNewGIFAtURL:(NSURL *)gifURL posterFrameURL:(NSURL *)posterFrameURL completion:(void (^)(JEFRecording *))completion; +- (void)removeRecording:(JEFRecording *)recording; + +- (void)copyURLStringToPasteboard:(JEFRecording *)recording completion:(void (^)())completion; +- (void)fetchPublicURLForRecording:(JEFRecording *)recording completion:(void (^)(NSURL *url))completion; + +@end diff --git a/Jeff/Controllers/JEFRecordingsController.m b/Jeff/Controllers/JEFRecordingsController.m new file mode 100644 index 0000000..8f40d9c --- /dev/null +++ b/Jeff/Controllers/JEFRecordingsController.m @@ -0,0 +1,150 @@ +// +// JEFRecordingsController.m +// Jeff +// +// Created by Brandon Evans on 2014-11-01. +// Copyright (c) 2014 Brandon Evans. All rights reserved. +// + +#import "JEFRecordingsController.h" + +#import + +#import "JEFRecording.h" +#import "JEFSyncingService.h" +#import "JEFRecordingsRepository.h" +#import "Constants.h" + +static void *JEFRecordingsControllerContext = &JEFRecordingsControllerContext; + +@interface JEFRecordingsController () + +@property (nonatomic, strong) id syncingService; +// NSObject * instead of id because self is added as an observer in initWith... +@property (nonatomic, strong) NSObject *recordingsRepo; +@property (nonatomic, strong, readwrite) NSArray *recordings; + +@end + +@implementation JEFRecordingsController + +#pragma mark - Lifecycle + +- (instancetype)initWithSyncingService:(id)syncingService recordingsRepo:(id)recordingsRepo { + self = [super init]; + if (!self) return nil; + + _syncingService = syncingService; + _syncingService.delegate = self; + _recordingsRepo = recordingsRepo; + + [NSUserNotificationCenter defaultUserNotificationCenter].delegate = self; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(displaySharedUserNotificationForRecording:) name:JEFRecordingWasSharedNotification object:nil]; + + [self.recordingsRepo addObserver:self forKeyPath:@keypath(self.recordingsRepo, recordings) options:NSKeyValueObservingOptionInitial context:JEFRecordingsControllerContext]; + + return self; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self name:JEFRecordingWasSharedNotification object:nil]; + [self.recordingsRepo removeObserver:self forKeyPath:@"recordings"]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + if (context != JEFRecordingsControllerContext) { + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + return; + } + + if ([keyPath isEqualToString:@keypath(self.recordingsRepo, recordings)]) { + NSKeyValueChange changeKind = [change[NSKeyValueChangeKindKey] integerValue]; + NSIndexSet *indexes = change[NSKeyValueChangeIndexesKey]; + switch (changeKind) { + case NSKeyValueChangeSetting: + self.recordings = [object valueForKeyPath:keyPath]; + break; + case NSKeyValueChangeReplacement: { + NSArray *objects = [[object valueForKeyPath:keyPath] objectsAtIndexes:indexes]; + [[self mutableArrayValueForKey:@"recordings"] replaceObjectsAtIndexes:indexes withObjects:objects]; + break; + } + case NSKeyValueChangeInsertion: { + NSArray *objects = [[object valueForKeyPath:keyPath] objectsAtIndexes:indexes]; + [[self mutableArrayValueForKey:@"recordings"] insertObjects:objects atIndexes:indexes]; + break; + } + case NSKeyValueChangeRemoval: { + [[self mutableArrayValueForKey:@"recordings"] removeObjectsAtIndexes:indexes]; + break; + } + } + } +} + +#pragma mark - Properties + +- (BOOL)isDoingInitialSync { + return self.recordingsRepo.isDoingInitialSync; +} + ++ (NSSet *)keyPathsForValuesAffectingIsDoingInitialSync { + return [NSSet setWithObject:@"recordingsRepo.isDoingInitialSync"]; +} + +#pragma mark - Public + +- (void)uploadNewGIFAtURL:(NSURL *)gifURL posterFrameURL:(NSURL *)posterFrameURL completion:(void (^)(JEFRecording *))completion { + [self.syncingService uploadNewRecordingWithGIFURL:gifURL posterFrameURL:posterFrameURL completion:completion]; +} + +- (void)removeRecording:(JEFRecording *)recording { + [self.recordingsRepo removeRecording:recording]; +} + +- (void)copyURLStringToPasteboard:(JEFRecording *)recording completion:(void (^)())completion { + [self.syncingService copyURLStringToPasteboard:recording completion:completion]; +} + +- (void)fetchPublicURLForRecording:(JEFRecording *)recording completion:(void (^)(NSURL *))completion { + [self.syncingService fetchPublicURLForRecording:recording completion:completion]; +} + +#pragma mark - NSUserNotificationCenterDelegate + +- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification { + return YES; +} + +- (void)userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification { + NSString *path = notification.identifier; + NSPredicate *recordingWithPathPredicate = [NSPredicate predicateWithFormat:@"path.stringValue == %@", path]; + JEFRecording *recording = [self.recordingsRepo.recordings filteredArrayUsingPredicate:recordingWithPathPredicate].firstObject; + if (!recording) return; + + [self.syncingService fetchPublicURLForRecording:recording completion:^(NSURL *url) { + [[NSWorkspace sharedWorkspace] openURL:url]; + }]; +} + +#pragma mark - JEFSyncingServiceDelegate + +- (void)syncingService:(id)syncingService addedRecording:(JEFRecording *)recording { + [self.recordingsRepo addRecording:recording]; +} + +#pragma mark - Notifications + +- (void)displaySharedUserNotificationForRecording:(NSNotification *)notification { + JEFRecording *recording = notification.object; + if (!recording) return; + + NSUserNotification *publishedNotification = [[NSUserNotification alloc] init]; + publishedNotification.title = NSLocalizedString(@"GIFSharedSuccessNotificationTitle", @"The title for the message that the recording was shared"); + publishedNotification.informativeText = NSLocalizedString(@"GIFPasteboardNotificationBody", nil); + publishedNotification.contentImage = recording.posterFrameImage; + publishedNotification.identifier = recording.path.stringValue; + [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:publishedNotification]; +} + +@end diff --git a/Jeff/JEFAppController.h b/Jeff/JEFAppController.h index 95ff00f..c41c930 100644 --- a/Jeff/JEFAppController.h +++ b/Jeff/JEFAppController.h @@ -6,14 +6,6 @@ // Copyright (c) 2014 Brandon Evans. All rights reserved. // -#import - -extern NSString *const JEFOpenPopoverNotification; -extern NSString *const JEFClosePopoverNotification; -extern NSString *const JEFSetStatusViewNotRecordingNotification; -extern NSString *const JEFSetStatusViewRecordingNotification; -extern NSString *const JEFStopRecordingNotification; - @interface JEFAppController : NSObject @end diff --git a/Jeff/JEFAppController.m b/Jeff/JEFAppController.m index 1a702fb..0e1adc8 100644 --- a/Jeff/JEFAppController.m +++ b/Jeff/JEFAppController.m @@ -6,19 +6,21 @@ // Copyright (c) 2014 Brandon Evans. All rights reserved. // -#import "JEFPopoverContentViewController.h" -#import "INPopoverController.h" #import "JEFAppController.h" -#import "JEFRecordingsManager.h" + #import #import +#import "INPopoverController.h" + +#import "JEFDropboxRepository.h" +#import "JEFPopoverContentViewController.h" #import "JEFQuartzRecorder.h" +#import "JEFDropboxService.h" +#import "JEFRecordingsController.h" +#import "JEFRecordingsRepository.h" +#import "JEFDropboxRepository.h" +#import "Constants.h" -NSString *const JEFOpenPopoverNotification = @"JEFOpenPopoverNotification"; -NSString *const JEFClosePopoverNotification = @"JEFClosePopoverNotification"; -NSString *const JEFSetStatusViewNotRecordingNotification = @"JEFSetStatusViewNotRecordingNotification"; -NSString *const JEFSetStatusViewRecordingNotification = @"JEFSetStatusViewRecordingNotification"; -NSString *const JEFStopRecordingNotification = @"JEFStopRecordingNotification"; CGFloat const JEFPopoverVerticalOffset = -3.0; @interface JEFAppController () @@ -27,7 +29,9 @@ @interface JEFAppController () @property (strong, nonatomic) INPopoverController *popover; @property (strong, nonatomic) id popoverTransiencyMonitor; @property (strong, nonatomic) NSMutableArray *observers; -@property (strong, nonatomic) JEFRecordingsManager *recordingsManager; +@property (strong, nonatomic) JEFRecordingsController *recordingsController; +@property (strong, nonatomic) NSObject *syncingService; +@property (strong, nonatomic) id recordingsRepository; @property (strong, nonatomic) JEFQuartzRecorder *recorder; @end @@ -39,7 +43,9 @@ - (instancetype)init { if (!self) return nil; _observers = [NSMutableArray array]; - _recordingsManager = [[JEFRecordingsManager alloc] init]; + _syncingService = [[JEFDropboxService alloc] init]; + _recordingsRepository = [[JEFDropboxRepository alloc] init]; + _recordingsController = [[JEFRecordingsController alloc] initWithSyncingService:_syncingService recordingsRepo:_recordingsRepository]; _recorder = [[JEFQuartzRecorder alloc] init]; [self setupStatusItem]; @@ -59,7 +65,7 @@ - (instancetype)init { [weakSelf setStatusItemActionRecord:YES]; }]]; - [self.recordingsManager addObserver:self forKeyPath:@keypath(self.recordingsManager, totalUploadProgress.fractionCompleted) options:0 context:NULL]; + [self.syncingService addObserver:self forKeyPath:@keypath(self.syncingService, totalUploadProgress.fractionCompleted) options:0 context:NULL]; // If Dropbox isn't set up yet, prompt the user by displaying the popover BOOL dropboxLinked = ([DBAccountManager sharedManager].linkedAccount != nil); @@ -77,12 +83,13 @@ - (void)dealloc { for (id observer in self.observers) { [[NSNotificationCenter defaultCenter] removeObserver:observer]; } + [self.syncingService removeObserver:self forKeyPath:@keypath(self.syncingService, totalUploadProgress.fractionCompleted)]; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - if (self.recordingsManager.totalUploadProgress && !self.recorder.isRecording) { + if (self.syncingService.totalUploadProgress && !self.recorder.isRecording) { // Images are sequenced 1-31 - NSInteger imageNumber = (NSInteger)floor(self.recordingsManager.totalUploadProgress.fractionCompleted * 30.0) + 1; + NSInteger imageNumber = (NSInteger)floor(self.syncingService.totalUploadProgress.fractionCompleted * 30.0) + 1; self.statusItem.button.image = [NSImage imageNamed:[NSString stringWithFormat:@"jeff_menu_ic_uploading_%ld", imageNumber]]; } else { @@ -101,7 +108,7 @@ - (void)setupPopover { self.popover = [[INPopoverController alloc] init]; JEFPopoverContentViewController *popoverController = [[NSStoryboard storyboardWithName:@"JEFPopoverStoryboard" bundle:nil] instantiateInitialController]; popoverController.recorder = self.recorder; - popoverController.recordingsManager = self.recordingsManager; + popoverController.recordingsController = self.recordingsController; self.popover.contentViewController = popoverController; self.popover.animates = NO; self.popover.closesWhenApplicationBecomesInactive = YES; diff --git a/Jeff/JEFAppDelegate.m b/Jeff/JEFAppDelegate.m index 21d3d79..b99fa32 100644 --- a/Jeff/JEFAppDelegate.m +++ b/Jeff/JEFAppDelegate.m @@ -14,7 +14,6 @@ #import #import "JEFAppController.h" -#import "JEFUploaderProtocol.h" #import "Constants.h" @interface JEFAppDelegate () @@ -70,7 +69,8 @@ - (void)setupMixpanel { } - (void)setupHockeyApp { - [[BITHockeyManager sharedHockeyManager] configureWithIdentifier:@"***REMOVED***"]; + NSString *hockeyAppIdentifier = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"HockeyApp Identifier"]; + [[BITHockeyManager sharedHockeyManager] configureWithIdentifier:hockeyAppIdentifier]; [[BITHockeyManager sharedHockeyManager] startManager]; [BITHockeyManager sharedHockeyManager].crashManager.autoSubmitCrashReport = YES; } @@ -86,8 +86,7 @@ - (void)setupDropbox { } - (void)registerDefaults { - [[NSUserDefaults standardUserDefaults] registerDefaults:@{ @"selectedUploader": @(JEFUploaderTypeDropbox), - JEFRecordScreenShortcutKey: [MASShortcut shortcutWithKeyCode:kVK_ANSI_6 modifierFlags:NSCommandKeyMask | NSShiftKeyMask].data, + [[NSUserDefaults standardUserDefaults] registerDefaults:@{ JEFRecordScreenShortcutKey: [MASShortcut shortcutWithKeyCode:kVK_ANSI_6 modifierFlags:NSCommandKeyMask | NSShiftKeyMask].data, JEFRecordSelectionShortcutKey: [MASShortcut shortcutWithKeyCode:kVK_ANSI_5 modifierFlags:NSCommandKeyMask | NSShiftKeyMask].data }]; } diff --git a/Jeff/JEFConverter.h b/Jeff/JEFConverter.h index 783e43a..16e84b1 100644 --- a/Jeff/JEFConverter.h +++ b/Jeff/JEFConverter.h @@ -6,10 +6,8 @@ // Copyright (c) 2014 Brandon Evans. All rights reserved. // -#import - @interface JEFConverter : NSObject -+ (void)convertFramesAtURL:(NSURL *)framesURL completion:(void (^)(NSURL *))completion; +- (void)convertFramesAtURL:(NSURL *)framesURL completion:(void (^)(NSURL *))completion; @end diff --git a/Jeff/JEFConverter.m b/Jeff/JEFConverter.m index 1ef4197..8f53c39 100644 --- a/Jeff/JEFConverter.m +++ b/Jeff/JEFConverter.m @@ -6,33 +6,129 @@ // Copyright (c) 2014 Brandon Evans. All rights reserved. // +#import #import "JEFConverter.h" #import "NSFileManager+Temporary.h" +@interface JEFConverter () + +@property (nonatomic, strong) dispatch_queue_t queue; + +@end + @implementation JEFConverter -+ (void)convertFramesAtURL:(NSURL *)framesURL completion:(void (^)(NSURL *))completion { +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.queue = dispatch_queue_create("com.robotsandpencils.Jeff.GIFConversion", dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_CONCURRENT, QOS_CLASS_USER_INITIATED, -1)); + + return self; +} + +- (void)convertFramesAtURL:(NSURL *)framesURL completion:(void (^)(NSURL *))completion { + NSInteger hundredthsOfASecondDelay = (NSInteger)floor(1.0/20.0 * 100); + + NSError *contentsOfDirectoryError; + NSArray *filenames = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:framesURL includingPropertiesForKeys:@[] options:NSDirectoryEnumerationSkipsHiddenFiles error:&contentsOfDirectoryError]; + if (!filenames) { + RBKLog(@"Error enumerating contents of still frame directory: %@", contentsOfDirectoryError); + } + // Sort files by numeric suffix + filenames = [filenames sortedArrayUsingComparator:^NSComparisonResult(NSURL *obj1, NSURL *obj2) { + return [obj1.absoluteString compare:obj2.absoluteString options:NSNumericSearch]; + }]; + filenames = [filenames valueForKeyPath:@"path"]; + + dispatch_async(self.queue, ^{ + NSDictionary *arguments = @{ @"delay": @(hundredthsOfASecondDelay).stringValue, @"loop": [NSNull null], @"colors": @(256).stringValue }; + NSURL *outputURL = [self launchGifsicleAtPath:framesURL.absoluteString arguments:arguments filenames:filenames]; + + NSString *temporaryGIFFilename = @"jeff_temp_gif.gif"; + NSURL *temporaryGIFURL = [framesURL URLByAppendingPathComponent:temporaryGIFFilename]; + + // In order for the second gifsicle task to have access to the temporary GIF it needs to be in a place with common sandbox permissions, which is in the main sandbox + NSError *error; + [[NSFileManager defaultManager] copyItemAtURL:outputURL toURL:temporaryGIFURL error:&error]; + if (error) { + RBKLog(@"Error copying GIF to temporary location: %@", error.localizedDescription); + } + outputURL = [self launchGifsicleAtPath:framesURL.absoluteString arguments:@{ @"optimize": @"3" } filenames:@[ temporaryGIFURL.path ]]; + + NSError *removeError; + [[NSFileManager defaultManager] removeItemAtURL:temporaryGIFURL error:&removeError]; + if (removeError) { + RBKLog(@"Error removing temporary GIF: %@", removeError); + } + + dispatch_async(dispatch_get_main_queue(), ^{ + if (completion) completion(outputURL); + }); + }); +} + +#pragma mark - Private + +- (NSURL *)launchGifsicleAtPath:(NSString *)path arguments:(NSDictionary *)arguments filenames:(NSArray *)filenames { NSURL *outputURL = [NSURL fileURLWithPath:[[NSFileManager defaultManager] jef_createTemporaryFileWithExtension:@"gif"]]; NSFileHandle *outputFileHandle = [NSFileHandle fileHandleForWritingToURL:outputURL error:nil]; - + NSTask *gifsicleTask = [[NSTask alloc] init]; gifsicleTask.launchPath = [[NSBundle mainBundle] pathForResource:@"gifsicle" ofType:nil]; - gifsicleTask.currentDirectoryPath = framesURL.absoluteString; - - NSInteger hundredthsOfASecondDelay = (NSInteger)floor(1.0/20.0 * 100); - NSMutableArray *arguments = [@[ [NSString stringWithFormat:@"--delay=%ld", hundredthsOfASecondDelay], @"--loop", @"--colors", @"256" ] mutableCopy]; - NSArray *filenames = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:framesURL.absoluteString error:NULL]; - filenames = [filenames sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { - return [obj1 compare:obj2 options:NSNumericSearch]; - }]; - [arguments addObjectsFromArray:filenames]; - - gifsicleTask.arguments = arguments; + + NSArray *argumentsArray = [self argumentsArrayFromDictionary:arguments]; + argumentsArray = [argumentsArray arrayByAddingObjectsFromArray:filenames]; + gifsicleTask.arguments = argumentsArray; + gifsicleTask.standardOutput = outputFileHandle; [gifsicleTask launch]; - gifsicleTask.terminationHandler = ^(NSTask *task) { - if (completion) completion(outputURL); + [gifsicleTask waitUntilExit]; + + return outputURL; +} + +- (NSArray *)argumentsArrayFromDictionary:(NSDictionary *)argumentsDictionary { + NSArray *arguments = [NSArray array]; + for (NSString *key in argumentsDictionary) { + id object = argumentsDictionary[key]; + NSString *value; + if (!RBKIsEmpty(object)) { + if ([object isKindOfClass:[NSString class]]) { + value = object; + } + else if ([object respondsToSelector:@selector(stringValue)]) { + value = [object stringValue]; + } + } + + NSString *fullArgumentKey = [@"--" stringByAppendingString:key]; + if ([self argumentRequiresEqualSign:key]) { + fullArgumentKey = [[fullArgumentKey stringByAppendingString:@"="] stringByAppendingString:value]; + arguments = [arguments arrayByAddingObject:fullArgumentKey]; + continue; + } + + arguments = [arguments arrayByAddingObject:fullArgumentKey]; + if (!RBKIsEmpty(value)) { + arguments = [arguments arrayByAddingObject:value]; + } + } + return arguments; +} + +// Some of gifsicle's arguments require an = between the name and value +// I've only added the ones that I need for now +// See http://www.lcdf.org/gifsicle/man.html +- (BOOL)argumentRequiresEqualSign:(NSString *)argument { + static NSDictionary *argumentMapping; + argumentMapping = @{ + @"optimize": @YES }; + + return [argumentMapping[argument] boolValue]; } @end diff --git a/Jeff/JEFDropboxRepository.h b/Jeff/JEFDropboxRepository.h new file mode 100644 index 0000000..f2d5c70 --- /dev/null +++ b/Jeff/JEFDropboxRepository.h @@ -0,0 +1,22 @@ +// +// Created by Brandon Evans on 14-10-20. +// Copyright (c) 2014 Brandon Evans. All rights reserved. +// + +#import "JEFRecordingsRepository.h" +#import "JEFRecordingsProvider.h" +#import "JEFSyncingService.h" + +@class JEFRecording; + +@interface JEFDropboxRepository : NSObject + +#pragma mark - JEFRecordingsRepository + +@property (nonatomic, strong, readonly) NSArray *recordings; +@property (nonatomic, assign, readonly) BOOL isDoingInitialSync; + +- (void)addRecording:(JEFRecording *)recording; +- (void)removeRecording:(JEFRecording *)recording; + +@end \ No newline at end of file diff --git a/Jeff/JEFDropboxRepository.m b/Jeff/JEFDropboxRepository.m new file mode 100644 index 0000000..d5b3827 --- /dev/null +++ b/Jeff/JEFDropboxRepository.m @@ -0,0 +1,112 @@ +// +// Created by Brandon Evans on 14-10-20. +// Copyright (c) 2014 Brandon Evans. All rights reserved. +// + +#import "JEFRecording.h" + +#import +#import + +#import "JEFDropboxRepository.h" +#import "RBKCommonUtils.h" +#import "NSMutableArray+JEFSortedInsert.h" +#import "Constants.h" + + +@interface JEFDropboxRepository () + +@property (nonatomic, strong, readwrite) NSArray *recordings; +@property (nonatomic, assign, readwrite) BOOL isDoingInitialSync; + +// In order to prevent a "deep-filter" when loading recordings in loadRecordings triggered by a FS change, we keep track of the file info objects that have been opened in order to prevent the DB SDK spewing errors about trying to open a file more than once. By deep-filter I mean, when we have a fileInfo object we'd like to open, if we didn't keep track of those in a set (for fast membership checks) specifically, then we'd need to iterate over all of the recordings and check equality with their file info objects to see if we should open it. +@property (nonatomic, strong) NSMutableSet *openRecordingPaths; + +@end + +@implementation JEFDropboxRepository + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + _recordings = @[ ]; + _openRecordingPaths = [NSMutableSet set]; + + [self setupDropboxFilesystem]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setupDropboxFilesystem) name:JEFSyncingServiceAccountStateChanged object:nil]; + + return self; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self name:JEFSyncingServiceAccountStateChanged object:nil]; + [[DBFilesystem sharedFilesystem] removeObserver:self]; +} + +#pragma mark - JEFRecordingsDataSource + +- (void)addRecording:(JEFRecording *)recording { + NSMutableArray *recordings = [self mutableArrayValueForKey:@keypath(self, recordings)]; + NSSortDescriptor *dateDescendingDescriptor = [[NSSortDescriptor alloc] initWithKey:@keypath(JEFRecording.new, createdAt) ascending:NO]; + [recordings jef_insertObject:recording sortedUsingDescriptors:@[ dateDescendingDescriptor ]]; + + [self.openRecordingPaths addObject:recording.path.stringValue]; +} + +- (void)removeRecording:(JEFRecording *)recording { + if (!recording) return; + + NSMutableArray *recordings = [self mutableArrayValueForKey:@keypath(self, recordings)]; + [recordings removeObject:recording]; + + if (!recording.path || RBKIsEmpty(recording.path.stringValue)) return; + [self.openRecordingPaths removeObject:recording.path.stringValue]; +} + +- (void)loadRecordings:(DBFilesystem *)filesystem { + BOOL isShutdown = filesystem.isShutDown; + BOOL notFinishedSyncing = !filesystem.completedFirstSync; + if (isShutdown || notFinishedSyncing) return; + + DBError *listError; + NSArray *files = [filesystem listFolder:[DBPath root] error:&listError]; + if (listError) { + RBKLog(@"Error listing files: %@", listError); + return; + } + for (DBFileInfo *fileInfo in files) { + // Skip files with trivially invalid paths + if (RBKIsEmpty(fileInfo.path.stringValue)) continue; + // Skip non-GIFs + if ([[[NSURL alloc] initFileURLWithPath:fileInfo.path.stringValue].pathExtension caseInsensitiveCompare:@"gif"] != NSOrderedSame) continue; + // Skip GIFs that are already open + if ([self.openRecordingPaths containsObject:fileInfo.path.stringValue]) continue; + + JEFRecording *newRecording = [JEFRecording recordingWithFileInfo:fileInfo]; + if (newRecording) { + [self addRecording:newRecording]; + } + } +} + +- (void)setupDropboxFilesystem { + DBAccount *account = [DBAccountManager sharedManager].linkedAccount; + BOOL alreadyHaveFilesystem = [[DBFilesystem sharedFilesystem].account isEqual:account]; + if (account && !alreadyHaveFilesystem) { + DBFilesystem *filesystem = [[DBFilesystem alloc] initWithAccount:account]; + [DBFilesystem setSharedFilesystem:filesystem]; + } + + __weak __typeof(self) weakSelf = self; + [[DBFilesystem sharedFilesystem] addObserver:self block:^{ + [weakSelf loadRecordings:[DBFilesystem sharedFilesystem]]; + + BOOL stateIsSyncing = [DBFilesystem sharedFilesystem].status.download.inProgress; + BOOL hasRecordings = weakSelf.recordings.count > 0; + weakSelf.isDoingInitialSync = stateIsSyncing && !hasRecordings; + }]; +} + +@end \ No newline at end of file diff --git a/Jeff/JEFDropboxService.h b/Jeff/JEFDropboxService.h new file mode 100644 index 0000000..4167fd0 --- /dev/null +++ b/Jeff/JEFDropboxService.h @@ -0,0 +1,30 @@ +// +// JEFDropboxService.h +// Jeff +// +// Created by Brandon Evans on 2014-10-31. +// Copyright (c) 2014 Brandon Evans. All rights reserved. +// + +#import "JEFSyncingService.h" + +@interface JEFDropboxService : NSObject + +#pragma mark - JEFSyncingService + +@property (nonatomic, strong, readonly) NSProgress *totalUploadProgress; +@property (nonatomic, weak) id delegate; + +- (void)uploadNewRecordingWithGIFURL:(NSURL *)gifURL posterFrameURL:(NSURL *)posterFrameURL completion:(void (^)(JEFRecording *))completion; + +/** +* If the recording is not finished uploading then the URL will be to Dropbox's public preview page instead of a direct link to the GIF +* +* @param recording The recording to fetch the public URL for +* @param completion Completion block that could be called on any thread +*/ +- (void)fetchPublicURLForRecording:(JEFRecording *)recording completion:(void (^)(NSURL *url))completion; + +- (void)copyURLStringToPasteboard:(JEFRecording *)recording completion:(void (^)())completion; + +@end diff --git a/Jeff/JEFDropboxService.m b/Jeff/JEFDropboxService.m new file mode 100644 index 0000000..af52618 --- /dev/null +++ b/Jeff/JEFDropboxService.m @@ -0,0 +1,215 @@ +// +// JEFDropboxService.m +// Jeff +// +// Created by Brandon Evans on 2014-10-31. +// Copyright (c) 2014 Brandon Evans. All rights reserved. +// + +#import "JEFDropboxService.h" + +#import +#import + +#import "NSError+Jeff.h" +#import "Constants.h" + +static void *JEFRecordingsManagerContext = &JEFRecordingsManagerContext; +typedef void (^JEFUploaderCompletionBlock)(BOOL, JEFRecording *, NSError *); + +@interface JEFDropboxService () + +@property (nonatomic, strong, readwrite) NSProgress *totalUploadProgress; +@property (nonatomic, strong) NSMutableDictionary *recordingUploadProgresses; +@property (nonatomic, assign, readwrite) BOOL isDoingInitialSync; +@property (nonatomic, strong) NSDateFormatter *dateFormatter; + +@end + +@implementation JEFDropboxService + +- (instancetype)init { + self = [super init]; + if (!self) return nil; + + _recordingUploadProgresses = [NSMutableDictionary dictionary]; + _dateFormatter = [[NSDateFormatter alloc] init]; + _dateFormatter.dateFormat = @"MMM d, yyyy, h.mm.ss.SS a"; + + [self addObserver:self forKeyPath:@keypath(self, totalUploadProgress.fractionCompleted) options:0 context:JEFRecordingsManagerContext]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deleteRecording:) name:@"JEFDeleteRecordingNotification" object:nil]; + + return self; +} + +- (void)dealloc { + [self removeObserver:self forKeyPath:@keypath(self, totalUploadProgress.fractionCompleted) context:JEFRecordingsManagerContext]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:@"JEFDeleteRecordingNotification" object:nil]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + if (context != JEFRecordingsManagerContext) { + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + return; + } + + if ([keyPath isEqualToString:@keypath(JEFRecording.new, progress)]) { + JEFRecording *recording = (JEFRecording *)object; + NSProgress *recordingProgress = self.recordingUploadProgresses[recording.path]; + if (recordingProgress) { + recordingProgress.completedUnitCount = (NSInteger)floor(recording.progress * 100.0); + } + } + else if ([keyPath isEqualToString:@keypath(self, totalUploadProgress.fractionCompleted)]) { + dispatch_async(dispatch_get_main_queue(), ^{ + if (self.totalUploadProgress.fractionCompleted == 1.0) { + [self.recordingUploadProgresses removeAllObjects]; + self.totalUploadProgress = nil; + } + }); + } +} + +- (void)uploadNewRecordingWithGIFURL:(NSURL *)gifURL posterFrameURL:(NSURL *)posterFrameURL completion:(void (^)(JEFRecording *))completion { + NSImage *posterFrameImage; + if ([[NSFileManager defaultManager] fileExistsAtPath:posterFrameURL.path]) { + posterFrameImage = [[NSImage alloc] initWithContentsOfFile:posterFrameURL.path]; + } + + [self uploadGIF:gifURL withName:[self gifFilenameForCurrentDateTime] completion:^(BOOL succeeded, JEFRecording *recording, NSError *error) { + if (error || !succeeded) { + dispatch_async(dispatch_get_main_queue(), ^{ + NSAlert *alert = [[NSAlert alloc] init]; + alert.messageText = NSLocalizedString(@"UploadFailedAlertTitle", @"The title for the message that the recording upload failed"); + [alert addButtonWithTitle:@"OK"]; + alert.informativeText = [NSString stringWithFormat:@"%@", error.localizedDescription]; + [alert runModal]; + }); + return; + } + + [[NSFileManager defaultManager] removeItemAtPath:gifURL.path error:nil]; + + recording.posterFrameImage = posterFrameImage; + + if ([self.delegate respondsToSelector:@selector(syncingService:addedRecording:)]) { + [self.delegate syncingService:self addedRecording:recording]; + } + + // Setup upload progress to be tracked overall, including multiple concurrent uploads + if (!self.totalUploadProgress) { + self.totalUploadProgress = [NSProgress progressWithTotalUnitCount:100]; + } + else { + self.totalUploadProgress.totalUnitCount += 100; + } + + [self.totalUploadProgress becomeCurrentWithPendingUnitCount:100]; + // Track double 0.0-1.0 as integer 0-100 work units + NSProgress *recordingProgress = [NSProgress progressWithTotalUnitCount:100]; + [recording addObserver:self forKeyPath:@keypath(recording, progress) options:0 context:JEFRecordingsManagerContext]; + self.recordingUploadProgresses[recording.path] = recordingProgress; + [self.totalUploadProgress resignCurrent]; + + __weak __typeof(self) weakSelf = self; + recording.uploadHandler = ^(JEFRecording *uploadedRecording) { + if (RBKIsEmpty(uploadedRecording.path.stringValue) || uploadedRecording.deleted) { + // Recording was deleted or cancelled + return; + } + + [weakSelf copyURLStringToPasteboard:uploadedRecording completion:^{ + [[NSNotificationCenter defaultCenter] postNotificationName:JEFRecordingWasSharedNotification object:uploadedRecording]; + }]; + if (completion) completion(uploadedRecording); + NSProgress *uploadedRecordingProgress = self.recordingUploadProgresses[uploadedRecording.path]; + if (uploadedRecordingProgress) { + [uploadedRecording removeObserver:weakSelf forKeyPath:@keypath(uploadedRecording, progress)]; + [weakSelf.recordingUploadProgresses removeObjectForKey:uploadedRecording.path]; + } + }; + }]; +} + +- (void)fetchPublicURLForRecording:(JEFRecording *)recording completion:(void (^)(NSURL *url))completion { + if (!recording) { + if (completion) completion(nil); + return; + } + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ + DBError *error; + NSString *link = [[DBFilesystem sharedFilesystem] fetchShareLinkForPath:recording.path shorten:NO error:&error]; + if (!link && error) { + if (completion) completion(nil); + } + + NSURL *directURL = [NSURL URLWithString:link]; + + // If file is not still uploading, convert public URL to direct URL + if (recording.state != DBFileStateUploading) { + NSMutableString *directLink = [link mutableCopy]; + [directLink replaceOccurrencesOfString:@"www.dropbox" withString:@"dl.dropboxusercontent" options:0 range:NSMakeRange(0, [directLink length])]; + directURL = [NSURL URLWithString:directLink]; + } + + if (completion) completion(directURL); + }); +} + +- (void)copyURLStringToPasteboard:(JEFRecording *)recording completion:(void (^)())completion { + [self fetchPublicURLForRecording:recording completion:^(NSURL *url) { + NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; + [pasteboard clearContents]; + [pasteboard setString:url.absoluteString forType:NSStringPboardType]; + + if (completion) completion(); + }]; +} + +#pragma mark Private + +- (void)uploadGIF:(NSURL *)url withName:(NSString *)name completion:(JEFUploaderCompletionBlock)completion { + DBPath *filePath = [[DBPath root] childPath:name]; + DBError *error; + DBFile *newFile = [[DBFilesystem sharedFilesystem] createFile:filePath error:&error]; + if (!newFile) { + if (!error) { + error = [DBError fileCreationError]; + } + if (completion) completion(NO, nil, error); + return; + } + + NSData *fileData = [NSData dataWithContentsOfURL:url]; + BOOL success = [newFile writeData:fileData error:&error]; + if (!success) { + if (completion) completion(NO, nil, error); + return; + } + + JEFRecording *recording = [JEFRecording recordingWithNewFile:newFile]; + if (completion) completion(YES, recording, nil); +} + +- (NSString *)gifFilenameForCurrentDateTime { + NSString *filename = [NSLocalizedString(@"RecordingFilenamePrefix", @"Prefix for new GIF filenames") stringByAppendingString:[[self.dateFormatter stringFromDate:[NSDate date]] stringByAppendingPathExtension:@"gif"]]; + return filename; +} + +- (void)deleteRecording:(NSNotification *)notification { + JEFRecording *recording = notification.object; + if (!recording) { + return; + } + + // Complete the upload progress and remove it + NSProgress *recordingProgress = self.recordingUploadProgresses[recording.path]; + if (recordingProgress) { + [recording removeObserver:self forKeyPath:@keypath(recording, progress) context:JEFRecordingsManagerContext]; + recordingProgress.completedUnitCount = recordingProgress.totalUnitCount; + [self.recordingUploadProgresses removeObjectForKey:recording.path]; + } +} + +@end diff --git a/Jeff/JEFPopoverRecordingsViewController.h b/Jeff/JEFPopoverRecordingsViewController.h index e86deb7..428c6ec 100644 --- a/Jeff/JEFPopoverRecordingsViewController.h +++ b/Jeff/JEFPopoverRecordingsViewController.h @@ -6,11 +6,15 @@ // Copyright (c) 2014 Brandon Evans. All rights reserved. // -@class JEFRecordingsManager; +#import "JEFRecordingsController.h" +#import "JEFRecordingsTableViewDataSource.h" + +@class JEFDropboxRepository; @interface JEFPopoverRecordingsViewController : NSViewController -@property (nonatomic, strong) JEFRecordingsManager *recordingsManager; +@property (nonatomic, strong) JEFRecordingsController *recordingsController; +@property (nonatomic, strong) JEFRecordingsTableViewDataSource *recordingsTableViewDataSource; @property (nonatomic, assign) NSEdgeInsets contentInsets; @end diff --git a/Jeff/JEFPopoverRecordingsViewController.m b/Jeff/JEFPopoverRecordingsViewController.m index 9d4980c..3daf2fc 100644 --- a/Jeff/JEFPopoverRecordingsViewController.m +++ b/Jeff/JEFPopoverRecordingsViewController.m @@ -7,7 +7,7 @@ // #import "JEFPopoverRecordingsViewController.h" -#import "JEFRecordingsManager.h" +#import "JEFDropboxRepository.h" #import #import @@ -21,6 +21,7 @@ #import "RBKCommonUtils.h" #import "NSFileManager+Temporary.h" #import "NSSharingService+ActivityType.h" +#import "JEFRecordingsTableViewDataSource.h" static void *PopoverContentViewControllerContext = &PopoverContentViewControllerContext; @@ -50,15 +51,18 @@ - (void)viewDidLoad { // Display the green + bubble cursor when dragging into something that accepts the drag [self.tableView setDraggingSourceOperationMask:NSDragOperationCopy forLocal:NO]; self.tableView.enclosingScrollView.contentInsets = self.contentInsets; + self.tableView.dataSource = self.recordingsTableViewDataSource; self.dropboxSyncingContainerView.layer.opacity = 0.0; [self.dropboxSyncingProgressIndicator startAnimation:nil]; // If we get the initial value for recordings then we end up getting the same initial value (with n initial recordings) as both a setting change and a insertion change, and that doesn't work when using insertRowsAtIndexes:withAnimation:, so we just rely on reloadData in viewDidAppear instead. - [self.recordingsManager addObserver:self forKeyPath:@keypath(self.recordingsManager, recordings) options:0 context:PopoverContentViewControllerContext]; - [self.recordingsManager addObserver:self forKeyPath:@keypath(self.recordingsManager, isDoingInitialSync) options:NSKeyValueObservingOptionInitial context:PopoverContentViewControllerContext]; + [self.recordingsController addObserver:self forKeyPath:@keypath(self.recordingsController, recordings) options:0 context:PopoverContentViewControllerContext]; + [self.recordingsController addObserver:self forKeyPath:@keypath(self.recordingsController, isDoingInitialSync) options:NSKeyValueObservingOptionInitial context:PopoverContentViewControllerContext]; [[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:[@"values." stringByAppendingString:JEFRecordScreenShortcutKey] options:NSKeyValueObservingOptionInitial context:PopoverContentViewControllerContext]; [[NSUserDefaultsController sharedUserDefaultsController] addObserver:self forKeyPath:[@"values." stringByAppendingString:JEFRecordSelectionShortcutKey] options:NSKeyValueObservingOptionInitial context:PopoverContentViewControllerContext]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deleteRecording:) name:@"JEFDeleteRecordingNotification" object:nil]; } - (void)viewDidAppear { @@ -69,9 +73,10 @@ - (void)viewDidAppear { - (void)dealloc { [[DBFilesystem sharedFilesystem] removeObserver:self]; - [self.recordingsManager removeObserver:self forKeyPath:@keypath(self.recordingsManager, recordings)]; + [self.recordingsController removeObserver:self forKeyPath:@keypath(self.recordingsController, recordings)]; [[NSUserDefaultsController sharedUserDefaultsController] removeObserver:self forKeyPath:[@"values." stringByAppendingString:JEFRecordScreenShortcutKey] context:PopoverContentViewControllerContext]; [[NSUserDefaultsController sharedUserDefaultsController] removeObserver:self forKeyPath:[@"values." stringByAppendingString:JEFRecordSelectionShortcutKey] context:PopoverContentViewControllerContext]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:@"JEFDeleteRecordingNotification" object:nil]; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { @@ -80,7 +85,7 @@ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(N return; } - if ([keyPath isEqualToString:@keypath(self.recordingsManager, recordings)]) { + if ([keyPath isEqualToString:@keypath(self.recordingsController, recordings)]) { dispatch_async(dispatch_get_main_queue(), ^{ [self updateEmptyStateView]; @@ -101,7 +106,7 @@ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(N }); } - if ([keyPath isEqualToString:@keypath(self.recordingsManager, isDoingInitialSync)]) { + if ([keyPath isEqualToString:@keypath(self.recordingsController, isDoingInitialSync)]) { BOOL isDoingInitialSync = [[object valueForKeyPath:keyPath] boolValue]; dispatch_async(dispatch_get_main_queue(), ^{ [self updateDropboxSyncingView:isDoingInitialSync]; @@ -121,13 +126,22 @@ - (IBAction)showShareMenu:(id)sender { NSButton *button = (NSButton *)sender; JEFRecording *recording = ((NSTableCellView *)button.superview.superview).objectValue; - [self.recordingsManager fetchPublicURLForRecording:recording completion:^(NSURL *url) { + [self.recordingsController fetchPublicURLForRecording:recording completion:^(NSURL *url) { dispatch_async(dispatch_get_main_queue(), ^{ NSString *path = [[NSFileManager defaultManager] jef_createTemporaryFileWithExtension:@"gif"]; [recording.data writeToFile:path atomically:YES]; NSURL *temporaryFileURL = [NSURL URLWithString:[@"file://" stringByAppendingString:path]]; - NSSharingServicePicker *sharePicker = [[NSSharingServicePicker alloc] initWithItems:@[ url, temporaryFileURL ]]; + // Be extra-sure that these are non-nil before adding to the array + NSMutableArray *items = [NSMutableArray new]; + if (url) { + [items addObject:url]; + } + if (temporaryFileURL) { + [items addObject:temporaryFileURL]; + } + + NSSharingServicePicker *sharePicker = [[NSSharingServicePicker alloc] initWithItems:[items copy]]; sharePicker.delegate = self; [sharePicker showRelativeToRect:button.bounds ofView:button preferredEdge:NSMinYEdge]; }); @@ -139,17 +153,15 @@ - (IBAction)copyLinkToPasteboard:(id)sender { JEFRecording *recording = ((NSTableCellView *)button.superview.superview).objectValue; __weak __typeof(self) weakSelf = self; - [self.recordingsManager copyURLStringToPasteboard:recording completion:^{ + [self.recordingsController copyURLStringToPasteboard:recording completion:^{ [weakSelf displayCopiedUserNotification]; }]; [[Mixpanel sharedInstance] track:@"Copy Link"]; } -- (IBAction)deleteRecording:(id)sender { - NSButton *button = (NSButton *)sender; - JEFRecording *recording = ((NSTableCellView *)button.superview.superview).objectValue; - +- (void)deleteRecording:(NSNotification *)notification { + JEFRecording *recording = notification.object; if (!recording || !recording.path || RBKIsEmpty(recording.path.stringValue)) { return; } @@ -160,9 +172,9 @@ - (IBAction)deleteRecording:(id)sender { RBKLog(@"Error deleting recording: %@", error); return; } + recording.deleted = YES; - NSInteger recordingIndex = [self.recordingsManager.recordings indexOfObject:recording]; - [self.recordingsManager removeRecordingAtIndex:recordingIndex]; + [self.recordingsController removeRecording:recording]; [[Mixpanel sharedInstance] track:@"Delete Recording"]; } @@ -170,10 +182,14 @@ - (IBAction)deleteRecording:(id)sender { #pragma mark - NSTableViewDelegate - (void)didDoubleClickRow:(NSTableView *)sender { - NSInteger clickedRow = sender.selectedRow; - JEFRecording *recording = self.recordingsManager.recordings[clickedRow]; + NSInteger clickedRow = sender.clickedRow; + if (clickedRow < 0 || clickedRow > self.recordingsController.recordings.count - 1) { + return; + } + + JEFRecording *recording = self.recordingsController.recordings[clickedRow]; - [self.recordingsManager fetchPublicURLForRecording:recording completion:^(NSURL *url) { + [self.recordingsController fetchPublicURLForRecording:recording completion:^(NSURL *url) { dispatch_async(dispatch_get_main_queue(), ^{ [[NSWorkspace sharedWorkspace] openURL:url]; }); @@ -195,36 +211,6 @@ - (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn return view; } -- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { - NSInteger count = self.recordingsManager.recordings.count; - return count; -} - -- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { - if (row > self.recordingsManager.recordings.count - 1) return nil; - return self.recordingsManager.recordings[row]; -} - -#pragma mark - NSTableView Drag and Drop - -- (BOOL)tableView:(NSTableView *)tableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard { - // Only one recording can be dragged/selected at a time - JEFRecording *draggedRecording = self.recordingsManager.recordings[rowIndexes.firstIndex]; - [pboard declareTypes:@[ NSCreateFileContentsPboardType(@"gif"), NSFilesPromisePboardType, NSPasteboardTypeString ] owner:self]; - [pboard setData:draggedRecording.data forType:NSCreateFileContentsPboardType(@"gif")]; - [pboard setPropertyList:@[ draggedRecording.path.stringValue.pathExtension ] forType:NSFilesPromisePboardType]; - [pboard setString:draggedRecording.path.stringValue forType:NSPasteboardTypeString]; - - return YES; -} - -- (NSArray *)tableView:(NSTableView *)tableView namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropDestination forDraggedRowsWithIndexes:(NSIndexSet *)indexSet { - JEFRecording *draggedRecording = self.recordingsManager.recordings[indexSet.firstIndex]; - [draggedRecording.data writeToFile:[dropDestination.path stringByAppendingPathComponent:draggedRecording.path.stringValue] atomically:YES]; - [[Mixpanel sharedInstance] track:@"Drag Recording"]; - return @[ draggedRecording.path.stringValue ]; -} - #pragma mark - Private - (void)displayCopiedUserNotification { @@ -263,7 +249,7 @@ - (void)updateTableViewEmptyStateText { } - (void)updateEmptyStateView { - BOOL hasRecordings = self.recordingsManager.recordings.count > 0; + BOOL hasRecordings = self.recordingsController.recordings.count > 0; POPSpringAnimation *anim = [self.emptyStateCenterXConstraint pop_animationForKey:@"centerX"]; if (anim) return; @@ -320,7 +306,6 @@ - (NSArray *)sharingServicePicker:(NSSharingServicePicker *)sharingServicePicker } - (void)sharingServicePicker:(NSSharingServicePicker *)sharingServicePicker didChooseSharingService:(NSSharingService *)service { - // rdar://18754049 This is getting called when the NSSharingServicePicker is dismissed without selecting a picker if (!service) return; NSString *title = (service.title && service.title.length > 0) ? service.title : @"Unknown"; RBKLog(@"%@", title); diff --git a/Jeff/JEFPopoverUploaderSetupViewController.m b/Jeff/JEFPopoverUploaderSetupViewController.m index 9d3a474..7650a10 100644 --- a/Jeff/JEFPopoverUploaderSetupViewController.m +++ b/Jeff/JEFPopoverUploaderSetupViewController.m @@ -11,6 +11,7 @@ #import #import "JEFAppController.h" +#import "Constants.h" @interface JEFPopoverUploaderSetupViewController () diff --git a/Jeff/JEFRecordingsManager.h b/Jeff/JEFRecordingsManager.h deleted file mode 100644 index 543aa1e..0000000 --- a/Jeff/JEFRecordingsManager.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// Created by Brandon Evans on 14-10-20. -// Copyright (c) 2014 Brandon Evans. All rights reserved. -// - -@class JEFRecording; - -@interface JEFRecordingsManager : NSObject - -@property (nonatomic, strong, readonly) NSArray *recordings; -@property (nonatomic, assign, readonly) BOOL isDoingInitialSync; -@property (nonatomic, strong, readonly) NSProgress *totalUploadProgress; - -- (void)setupDropboxFilesystem; - -- (void)removeRecordingAtIndex:(NSUInteger)recordingIndex; -- (void)uploadNewRecordingWithGIFURL:(NSURL *)gifURL posterFrameURL:(NSURL *)posterFrameURL completion:(void (^)(JEFRecording *))completion; - -- (void)fetchPublicURLForRecording:(JEFRecording *)recording completion:(void (^)(NSURL *url))completion; -- (void)copyURLStringToPasteboard:(JEFRecording *)recording completion:(void (^)())completion; -- (void)displaySharedUserNotificationForRecording:(JEFRecording *)recording; - -@end \ No newline at end of file diff --git a/Jeff/JEFRecordingsManager.m b/Jeff/JEFRecordingsManager.m deleted file mode 100644 index 8d7b108..0000000 --- a/Jeff/JEFRecordingsManager.m +++ /dev/null @@ -1,260 +0,0 @@ -// -// Created by Brandon Evans on 14-10-20. -// Copyright (c) 2014 Brandon Evans. All rights reserved. -// - -#import "JEFRecording.h" - -#import -#import - -#import "JEFRecordingsManager.h" -#import "JEFDropboxUploader.h" -#import "RBKCommonUtils.h" - -static void *JEFRecordingsManagerContext = &JEFRecordingsManagerContext; - -@interface JEFRecordingsManager () - -@property (nonatomic, strong, readwrite) NSArray *recordings; -@property (nonatomic, assign, readwrite) BOOL isDoingInitialSync; -// In order to prevent a "deep-filter" when loading recordings in loadRecordings triggered by a FS change, we keep track of the file info objects that have been opened in order to prevent the DB SDK spewing errors about trying to open a file more than once. By deep-filter I mean, when we have a fileInfo object we'd like to open, if we didn't keep track of those in a set (for fast membership checks) specifically, then we'd need to iterate over all of the recordings and check equality with their file info objects to see if we should open it. -@property (nonatomic, strong) NSMutableSet *openRecordingPaths; -@property (nonatomic, strong, readwrite) NSProgress *totalUploadProgress; -@property (nonatomic, strong) NSMutableDictionary *recordingUploadProgresses; - -@end - -@implementation JEFRecordingsManager - -- (instancetype)init { - self = [super init]; - if (!self) return nil; - - [NSUserNotificationCenter defaultUserNotificationCenter].delegate = self; - _recordings = @[ ]; - _openRecordingPaths = [NSMutableSet set]; - _recordingUploadProgresses = [NSMutableDictionary dictionary]; - - [self setupDropboxFilesystem]; - [self loadRecordings]; - - [self addObserver:self forKeyPath:@keypath(self, totalUploadProgress.fractionCompleted) options:0 context:JEFRecordingsManagerContext]; - - return self; -} - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - if (context != JEFRecordingsManagerContext) { - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - return; - } - - if ([keyPath isEqualToString:@keypath(JEFRecording.new, progress)]) { - JEFRecording *recording = (JEFRecording *)object; - NSProgress *recordingProgress = self.recordingUploadProgresses[recording.path]; - if (recordingProgress) { - recordingProgress.completedUnitCount = (NSInteger)floor(recording.progress * 100.0); - } - } - else if ([keyPath isEqualToString:@keypath(self, totalUploadProgress.fractionCompleted)]) { - dispatch_async(dispatch_get_main_queue(), ^{ - if (self.totalUploadProgress.fractionCompleted == 1.0) { - [self.recordingUploadProgresses removeAllObjects]; - self.totalUploadProgress = nil; - } - }); - } -} - -- (void)dealloc { - [[DBFilesystem sharedFilesystem] removeObserver:self]; -} - -#pragma mark Recordings - -- (void)removeRecordingAtIndex:(NSUInteger)recordingIndex { - NSMutableArray *recordings = [self mutableArrayValueForKey:@keypath(self, recordings)]; - JEFRecording *recording = recordings[recordingIndex]; - [recordings removeObjectAtIndex:recordingIndex]; - [self.openRecordingPaths removeObject:recording.path.stringValue]; -} - -- (void)uploadNewRecordingWithGIFURL:(NSURL *)gifURL posterFrameURL:(NSURL *)posterFrameURL completion:(void (^)(JEFRecording *))completion { - NSImage *posterFrameImage; - if ([[NSFileManager defaultManager] fileExistsAtPath:posterFrameURL.path]) { - posterFrameImage = [[NSImage alloc] initWithContentsOfFile:posterFrameURL.path]; - } - - [[self uploader] uploadGIF:gifURL withName:gifURL.path.lastPathComponent completion:^(BOOL succeeded, JEFRecording *recording, NSError *error) { - if (error || !succeeded) { - dispatch_async(dispatch_get_main_queue(), ^{ - NSAlert *alert = [[NSAlert alloc] init]; - alert.messageText = NSLocalizedString(@"UploadFailedAlertTitle", @"The title for the message that the recording upload failed"); - [alert addButtonWithTitle:@"OK"]; - alert.informativeText = [NSString stringWithFormat:@"%@", error.localizedDescription]; - [alert runModal]; - }); - return; - } - - [[NSFileManager defaultManager] removeItemAtPath:gifURL.path error:nil]; - - recording.posterFrameImage = posterFrameImage; - - [[self mutableArrayValueForKey:@keypath(self, recordings)] insertObject:recording atIndex:0]; - [self.openRecordingPaths addObject:recording.path.stringValue]; - - // Setup upload progress to be tracked overall, including multiple concurrent uploads - if (!self.totalUploadProgress) { - self.totalUploadProgress = [NSProgress progressWithTotalUnitCount:100]; - } - else { - self.totalUploadProgress.totalUnitCount += 100; - } - - [self.totalUploadProgress becomeCurrentWithPendingUnitCount:100]; - // Track double 0.0-1.0 as integer 0-100 work units - NSProgress *recordingProgress = [NSProgress progressWithTotalUnitCount:100]; - [recording addObserver:self forKeyPath:@keypath(recording, progress) options:0 context:JEFRecordingsManagerContext]; - self.recordingUploadProgresses[recording.path] = recordingProgress; - [self.totalUploadProgress resignCurrent]; - - __weak __typeof(self) weakSelf = self; - recording.uploadHandler = ^(JEFRecording *uploadedRecording) { - [weakSelf copyURLStringToPasteboard:uploadedRecording completion:^{ - [weakSelf displaySharedUserNotificationForRecording:uploadedRecording]; - }]; - if (completion) completion(uploadedRecording); - [uploadedRecording removeObserver:self forKeyPath:@keypath(uploadedRecording, progress)]; - [self.recordingUploadProgresses removeObjectForKey:uploadedRecording.path]; - }; - }]; -} - -- (void)loadRecordings { - DBFilesystem *sharedFilesystem = [DBFilesystem sharedFilesystem]; - BOOL isShutdown = sharedFilesystem.isShutDown; - BOOL notFinishedSyncing = !sharedFilesystem.completedFirstSync; - if (isShutdown || notFinishedSyncing) return; - - DBError *listError; - NSArray *files = [sharedFilesystem listFolder:[DBPath root] error:&listError]; - if (listError) { - RBKLog(@"Error listing files: %@", listError); - return; - } - NSMutableArray *recordings = [NSMutableArray array]; - for (DBFileInfo *fileInfo in files) { - if ([self.openRecordingPaths containsObject:fileInfo.path.stringValue]) continue; - JEFRecording *newRecording = [JEFRecording recordingWithFileInfo:fileInfo]; - if (newRecording) { - [recordings addObject:newRecording]; - [self.openRecordingPaths addObject:fileInfo.path.stringValue]; - } - } - - NSMutableArray *mutableRecordings = [self mutableArrayValueForKey:@keypath(self, recordings)]; - [mutableRecordings addObjectsFromArray:recordings]; - NSSortDescriptor *dateDescendingDescriptor = [[NSSortDescriptor alloc] initWithKey:@keypath(JEFRecording.new, createdAt) ascending:NO]; - [mutableRecordings sortUsingDescriptors:@[ dateDescendingDescriptor ]]; -} - -/** -* If the recording is not finished uploading then the URL will be to Dropbox's public preview page instead of a direct link to the GIF -* -* @param recording The recording to fetch the public URL for -* @param completion Completion block that could be called on any thread -*/ -- (void)fetchPublicURLForRecording:(JEFRecording *)recording completion:(void (^)(NSURL *url))completion { - if (!recording) { - if (completion) completion(nil); - return; - } - - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ - DBError *error; - NSString *link = [[DBFilesystem sharedFilesystem] fetchShareLinkForPath:recording.path shorten:NO error:&error]; - if (!link && error) { - if (completion) completion(nil); - } - - NSURL *directURL = [NSURL URLWithString:link]; - - // If file is not still uploading, convert public URL to direct URL - if (recording.state != DBFileStateUploading) { - NSMutableString *directLink = [link mutableCopy]; - [directLink replaceOccurrencesOfString:@"www.dropbox" withString:@"dl.dropboxusercontent" options:0 range:NSMakeRange(0, [directLink length])]; - directURL = [NSURL URLWithString:directLink]; - } - - if (completion) completion(directURL); - }); -} - -- (void)copyURLStringToPasteboard:(JEFRecording *)recording completion:(void (^)())completion { - [self fetchPublicURLForRecording:recording completion:^(NSURL *url) { - NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; - [pasteboard clearContents]; - [pasteboard setString:url.absoluteString forType:NSStringPboardType]; - - if (completion) completion(); - }]; -} - -- (void)displaySharedUserNotificationForRecording:(JEFRecording *)recording { - NSUserNotification *publishedNotification = [[NSUserNotification alloc] init]; - publishedNotification.title = NSLocalizedString(@"GIFSharedSuccessNotificationTitle", @"The title for the message that the recording was shared"); - publishedNotification.informativeText = NSLocalizedString(@"GIFPasteboardNotificationBody", nil); - publishedNotification.contentImage = recording.posterFrameImage; - publishedNotification.identifier = recording.path.stringValue; - [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:publishedNotification]; -} - -#pragma mark Private - -- (id )uploader { - enum JEFUploaderType uploaderType = (enum JEFUploaderType)[[NSUserDefaults standardUserDefaults] integerForKey:@"selectedUploader"]; - switch (uploaderType) { - case JEFUploaderTypeDropbox: - case JEFUploaderTypeDepositBox: - default: - return [JEFDropboxUploader uploader]; - } -} - -- (void)setupDropboxFilesystem { - DBAccount *account = [DBAccountManager sharedManager].linkedAccount; - BOOL alreadyHaveFilesystem = [[DBFilesystem sharedFilesystem].account isEqual:account]; - if (account && !alreadyHaveFilesystem) { - DBFilesystem *filesystem = [[DBFilesystem alloc] initWithAccount:account]; - [DBFilesystem setSharedFilesystem:filesystem]; - } - - [[DBFilesystem sharedFilesystem] addObserver:self block:^{ - [self loadRecordings]; - - BOOL stateIsSyncing = [DBFilesystem sharedFilesystem].status.download.inProgress; - BOOL hasRecordings = self.recordings.count > 0; - self.isDoingInitialSync = stateIsSyncing && !hasRecordings; - }]; -} - -#pragma mark - NSUserNotificationCenterDelegate - -- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification { - return YES; -} - -- (void)userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification { - NSString *path = notification.identifier; - NSPredicate *recordingWithPathPredicate = [NSPredicate predicateWithFormat:@"path.stringValue == %@", path]; - JEFRecording *recording = [self.recordings filteredArrayUsingPredicate:recordingWithPathPredicate].firstObject; - if (!recording) return; - - [self fetchPublicURLForRecording:recording completion:^(NSURL *url) { - [[NSWorkspace sharedWorkspace] openURL:url]; - }]; -} - -@end \ No newline at end of file diff --git a/Jeff/JEFSyncingService.h b/Jeff/JEFSyncingService.h new file mode 100644 index 0000000..53c46aa --- /dev/null +++ b/Jeff/JEFSyncingService.h @@ -0,0 +1,32 @@ +// +// JEFSyncingService.h +// Jeff +// +// Created by Brandon Evans on 2014-10-31. +// Copyright (c) 2014 Brandon Evans. All rights reserved. +// + +#import "JEFRecording.h" + +@protocol JEFSyncingServiceDelegate; + +@protocol JEFSyncingService + +@required +@property (nonatomic, strong, readonly) NSProgress *totalUploadProgress; + +- (void)uploadNewRecordingWithGIFURL:(NSURL *)gifURL posterFrameURL:(NSURL *)posterFrameURL completion:(void (^)(JEFRecording *))completion; +- (void)fetchPublicURLForRecording:(JEFRecording *)recording completion:(void (^)(NSURL *url))completion; +- (void)copyURLStringToPasteboard:(JEFRecording *)recording completion:(void (^)())completion; + +@optional +@property (nonatomic, weak) id delegate; + +@end + +@protocol JEFSyncingServiceDelegate + +@optional +- (void)syncingService:(id)syncingService addedRecording:(JEFRecording *)recording; + +@end \ No newline at end of file diff --git a/Jeff/JEFUploaderProtocol.h b/Jeff/JEFUploaderProtocol.h deleted file mode 100644 index 9f6407c..0000000 --- a/Jeff/JEFUploaderProtocol.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// JEFUploaderProtocol.h -// Jeff -// -// Created by brandon on 2014-03-14. -// Copyright (c) 2014 Robots and Pencils Inc. All rights reserved. -// - -#import "JEFRecording.h" - -typedef void (^JEFUploaderCompletionBlock)(BOOL, JEFRecording *, NSError *); - -NS_ENUM(NSInteger, JEFUploaderType) { - JEFUploaderTypeDepositBox = 0, - JEFUploaderTypeDropbox -}; - -@protocol JEFUploaderProtocol - -+ (id )uploader; - -- (void)uploadGIF:(NSURL *)url withName:(NSString *)name completion:(JEFUploaderCompletionBlock)completion; - -@end diff --git a/Jeff/Jeff-Info.plist b/Jeff/Jeff-Info.plist index 65e53d1..bf3c532 100644 --- a/Jeff/Jeff-Info.plist +++ b/Jeff/Jeff-Info.plist @@ -9,7 +9,7 @@ CFBundleIconFile CFBundleIdentifier - ${BUNDLE_ID} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.0 + 1.0.1 CFBundleSignature ???? CFBundleURLTypes @@ -34,7 +34,7 @@ CFBundleVersion - 13 + 15 Dropbox Key ${DROPBOX_KEY} Dropbox Secret @@ -47,6 +47,8 @@ Mixpanel Token ${MIXPANEL_TOKEN} + HockeyApp Identifier + ${HOCKEYAPP_ID} NSHumanReadableCopyright Copyright © 2014 Robots and Pencils. All rights reserved. NSMainNibFile diff --git a/Jeff/Libraries/INPopoverController/INPopoverControllerDefines.h b/Jeff/Libraries/INPopoverController/INPopoverControllerDefines.h index eff9504..17bb988 100755 --- a/Jeff/Libraries/INPopoverController/INPopoverControllerDefines.h +++ b/Jeff/Libraries/INPopoverController/INPopoverControllerDefines.h @@ -3,12 +3,12 @@ // Copyright 2011-2014 Indragie Karunaratne. All rights reserved. // -typedef NS_ENUM(NSRectEdge, INPopoverArrowDirection) { +typedef NS_ENUM(NSUInteger, INPopoverArrowDirection) { INPopoverArrowDirectionUndefined = 0, - INPopoverArrowDirectionLeft = NSMaxXEdge, - INPopoverArrowDirectionRight = NSMinXEdge, - INPopoverArrowDirectionUp = NSMaxYEdge, - INPopoverArrowDirectionDown = NSMinYEdge + INPopoverArrowDirectionLeft, + INPopoverArrowDirectionRight, + INPopoverArrowDirectionUp, + INPopoverArrowDirectionDown }; typedef NS_ENUM(NSInteger, INPopoverAnimationType) { diff --git a/Jeff/Libraries/StartAtLoginController/StartAtLoginController.m b/Jeff/Libraries/StartAtLoginController/StartAtLoginController.m index e6440d9..0a302e4 100755 --- a/Jeff/Libraries/StartAtLoginController/StartAtLoginController.m +++ b/Jeff/Libraries/StartAtLoginController/StartAtLoginController.m @@ -126,8 +126,12 @@ - (void)setStartAtLogin:(BOOL)flag { [self didChangeValueForKey:@keypath(self, startAtLogin)]; } +// clang warns that the _enabled ivar isn't referenced in this setter, which is correct. It does get set in setStartAtLogin: though, so the warning isn't helping and that's why it's being ignored. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-property-ivar" - (void)setEnabled:(BOOL)enabled { self.startAtLogin = enabled; } +#pragma clang diagnostic pop @end diff --git a/Jeff/Models/JEFRecording.h b/Jeff/Models/JEFRecording.h index 36107ec..7b0a17e 100644 --- a/Jeff/Models/JEFRecording.h +++ b/Jeff/Models/JEFRecording.h @@ -22,6 +22,7 @@ typedef void(^JEFRecordingUploadHandler)(JEFRecording *); @property (nonatomic, strong, readonly) NSDate *createdAt; @property (nonatomic, assign, readonly) BOOL isFetchingPosterFrame; @property (nonatomic, copy) JEFRecordingUploadHandler uploadHandler; +@property (nonatomic, assign) BOOL deleted; /** * readwrite so that a temporary thumbnail can be set on new recordings before they're finished syncing diff --git a/Jeff/Models/JEFRecordingsProvider.h b/Jeff/Models/JEFRecordingsProvider.h new file mode 100644 index 0000000..5469843 --- /dev/null +++ b/Jeff/Models/JEFRecordingsProvider.h @@ -0,0 +1,14 @@ +// +// JEFRecordingsProvider.h +// Jeff +// +// Created by Brandon Evans on 2014-11-01. +// Copyright (c) 2014 Brandon Evans. All rights reserved. +// + +@protocol JEFRecordingsProvider + +@required +@property (nonatomic, strong, readonly) NSArray *recordings; + +@end diff --git a/Jeff/Models/JEFRecordingsRepository.h b/Jeff/Models/JEFRecordingsRepository.h new file mode 100644 index 0000000..cd01620 --- /dev/null +++ b/Jeff/Models/JEFRecordingsRepository.h @@ -0,0 +1,20 @@ +// +// JEFRecordingsRepository.h +// Jeff +// +// Created by Brandon Evans on 2014-10-31. +// Copyright (c) 2014 Brandon Evans. All rights reserved. +// + +@class JEFRecording; +@protocol JEFRecordingsProvider; + +@protocol JEFRecordingsRepository + +@property (nonatomic, strong, readonly) NSArray *recordings; +@property (nonatomic, assign, readonly) BOOL isDoingInitialSync; + +- (void)addRecording:(JEFRecording *)recording; +- (void)removeRecording:(JEFRecording *)recording; + +@end diff --git a/Jeff/Models/JEFRecordingsTableViewDataSource.h b/Jeff/Models/JEFRecordingsTableViewDataSource.h new file mode 100644 index 0000000..3576eef --- /dev/null +++ b/Jeff/Models/JEFRecordingsTableViewDataSource.h @@ -0,0 +1,23 @@ +// +// JEFRecordingsTableViewDataSource.h +// Jeff +// +// Created by Brandon Evans on 2014-10-31. +// Copyright (c) 2014 Brandon Evans. All rights reserved. +// + +@protocol JEFRecordingsProvider; + +@interface JEFRecordingsTableViewDataSource : NSObject + +- (instancetype)initWithRecordingsProvider:(id)repo; + +- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView; +- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row; + +#pragma mark - Drag and Drop + +- (BOOL)tableView:(NSTableView *)tableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard; +- (NSArray *)tableView:(NSTableView *)tableView namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropDestination forDraggedRowsWithIndexes:(NSIndexSet *)indexSet; + +@end diff --git a/Jeff/Models/JEFRecordingsTableViewDataSource.m b/Jeff/Models/JEFRecordingsTableViewDataSource.m new file mode 100644 index 0000000..a0efb89 --- /dev/null +++ b/Jeff/Models/JEFRecordingsTableViewDataSource.m @@ -0,0 +1,61 @@ +// +// JEFRecordingsTableViewDataSource.m +// Jeff +// +// Created by Brandon Evans on 2014-10-31. +// Copyright (c) 2014 Brandon Evans. All rights reserved. +// + +#import "JEFRecordingsTableViewDataSource.h" + +#import "Mixpanel.h" +#import "JEFRecordingsProvider.h" +#import "JEFRecording.h" + +@interface JEFRecordingsTableViewDataSource () + +@property (nonatomic, strong) id provider; + +@end + +@implementation JEFRecordingsTableViewDataSource + +- (instancetype)initWithRecordingsProvider:(id)provider { + self = [super init]; + if (!self) return nil; + + self.provider = provider; + + return self; +} + +- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { + return self.provider.recordings.count; +} + +- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { + if (row > self.provider.recordings.count - 1 || row < 0) return nil; + return self.provider.recordings[row]; +} + +#pragma mark - Drag and Drop + +- (BOOL)tableView:(NSTableView *)tableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard { + // Only one recording can be dragged/selected at a time + JEFRecording *draggedRecording = self.provider.recordings[rowIndexes.firstIndex]; + [pboard declareTypes:@[ NSCreateFileContentsPboardType(@"gif"), NSFilesPromisePboardType, NSPasteboardTypeString ] owner:self]; + [pboard setData:draggedRecording.data forType:NSCreateFileContentsPboardType(@"gif")]; + [pboard setPropertyList:@[ draggedRecording.path.stringValue.pathExtension ] forType:NSFilesPromisePboardType]; + [pboard setString:draggedRecording.path.stringValue forType:NSPasteboardTypeString]; + + return YES; +} + +- (NSArray *)tableView:(NSTableView *)tableView namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropDestination forDraggedRowsWithIndexes:(NSIndexSet *)indexSet { + JEFRecording *draggedRecording = self.provider.recordings[indexSet.firstIndex]; + [draggedRecording.data writeToFile:[dropDestination.path stringByAppendingPathComponent:draggedRecording.path.stringValue] atomically:YES]; + [[Mixpanel sharedInstance] track:@"Drag Recording"]; + return @[ draggedRecording.path.stringValue ]; +} + +@end diff --git a/Jeff/Recorders/JEFQuartzRecorder.m b/Jeff/Recorders/JEFQuartzRecorder.m index 1ae3c83..41a7f25 100644 --- a/Jeff/Recorders/JEFQuartzRecorder.m +++ b/Jeff/Recorders/JEFQuartzRecorder.m @@ -87,7 +87,7 @@ - (void)finishRecording { self.captureTimer = nil; self.isRecording = NO; - if (self.completion) self.completion([NSURL URLWithString:self.path]); + if (self.completion) self.completion([NSURL fileURLWithPath:self.path]); } #pragma mark Private @@ -116,7 +116,7 @@ - (void)captureFrame { CGImageRef compositeImageRef = CGBitmapContextCreateImage(context); NSBitmapImageRep *imageRep = [[NSBitmapImageRep alloc] initWithCGImage:compositeImageRef]; - NSData *gifData = [imageRep representationUsingType:NSGIFFileType properties:nil]; + NSData *gifData = [imageRep representationUsingType:NSGIFFileType properties:@{}]; NSString *filename = [self.path stringByAppendingPathComponent:[NSString stringWithFormat:@"JeffFrame%ld.gif", self.frameCount]]; [gifData writeToFile:filename atomically:NO]; diff --git a/Jeff/Uploaders/JEFDropboxUploader.h b/Jeff/Uploaders/JEFDropboxUploader.h deleted file mode 100644 index 5a77038..0000000 --- a/Jeff/Uploaders/JEFDropboxUploader.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// JEFDropboxUploader -// Jeff -// -// Created by brandon on 2014-03-14. -// Copyright (c) 2014 Robots and Pencils Inc. All rights reserved. -// - -#import "JEFUploaderProtocol.h" - -@interface JEFDropboxUploader : NSObject - -@end diff --git a/Jeff/Uploaders/JEFDropboxUploader.m b/Jeff/Uploaders/JEFDropboxUploader.m deleted file mode 100644 index 461f755..0000000 --- a/Jeff/Uploaders/JEFDropboxUploader.m +++ /dev/null @@ -1,57 +0,0 @@ -// -// JEFDropboxUploader -// Jeff -// -// Created by brandon on 2014-03-14. -// Copyright (c) 2014 Robots and Pencils Inc. All rights reserved. -// - -#import "JEFDropboxUploader.h" - -@interface JEFDropboxUploader () - -@property (strong, nonatomic) NSMutableDictionary *filenameCompletionBlocks; - -@end - - -@implementation JEFDropboxUploader - -+ (instancetype)uploader { - static JEFDropboxUploader *uploader; - static dispatch_once_t token; - dispatch_once(&token, ^{ - uploader = [[JEFDropboxUploader alloc] init]; - }); - return uploader; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _filenameCompletionBlocks = [NSMutableDictionary dictionary]; - } - return self; -} - -- (void)uploadGIF:(NSURL *)url withName:(NSString *)name completion:(JEFUploaderCompletionBlock)completion { - DBPath *filePath = [[DBPath root] childPath:url.lastPathComponent]; - DBError *error; - DBFile *newFile = [[DBFilesystem sharedFilesystem] createFile:filePath error:&error]; - if (!newFile || error) { - if (completion) completion(NO, nil, error); - return; - } - - NSData *fileData = [NSData dataWithContentsOfURL:url]; - BOOL success = [newFile writeData:fileData error:&error]; - if (!success && error) { - if (completion) completion(NO, nil, error); - return; - } - - JEFRecording *recording = [JEFRecording recordingWithNewFile:newFile]; - if (completion) completion(YES, recording, nil); -} - -@end diff --git a/Jeff/View Controllers/JEFPopoverContentViewController.h b/Jeff/View Controllers/JEFPopoverContentViewController.h index 4e656e3..8cf1054 100644 --- a/Jeff/View Controllers/JEFPopoverContentViewController.h +++ b/Jeff/View Controllers/JEFPopoverContentViewController.h @@ -6,12 +6,12 @@ // Copyright (c) 2014 Brandon Evans. All rights reserved. // -@class JEFRecordingsManager; +@class JEFRecordingsController; @class JEFQuartzRecorder; @interface JEFPopoverContentViewController : NSViewController -@property (nonatomic, strong) JEFRecordingsManager *recordingsManager; +@property (nonatomic, strong) JEFRecordingsController *recordingsController; @property (nonatomic, strong) JEFQuartzRecorder *recorder; @end diff --git a/Jeff/View Controllers/JEFPopoverContentViewController.m b/Jeff/View Controllers/JEFPopoverContentViewController.m index 1fb381d..3a274ca 100644 --- a/Jeff/View Controllers/JEFPopoverContentViewController.m +++ b/Jeff/View Controllers/JEFPopoverContentViewController.m @@ -17,7 +17,7 @@ #import "JEFRecording.h" #import "JEFQuartzRecorder.h" -#import "JEFRecordingsManager.h" +#import "JEFRecordingsController.h" #import "JEFConverter.h" #import "JEFAppController.h" #import "JEFSelectionOverlayWindow.h" @@ -28,6 +28,7 @@ #import "Constants.h" #import "JEFColoredButton.h" #import "RBKCommonUtils.h" +#import "JEFRecordingsTableViewDataSource.h" typedef NS_ENUM(NSInteger, JEFPopoverContent) { JEFPopoverContentSetup = 0, @@ -59,6 +60,7 @@ @interface JEFPopoverContentViewController () @property (strong, nonatomic) NSMutableArray *overlayWindows; @property (assign, nonatomic, getter=isShowingSelection) BOOL showingSelection; @property (strong, nonatomic) id stopRecordingObserver; +@property (strong, nonatomic) JEFConverter *converter; @end @@ -71,6 +73,7 @@ - (void)viewDidLoad { // Initialize properties self.overlayWindows = [NSMutableArray array]; + self.converter = [[JEFConverter alloc] init]; // Setup observation [[DBAccountManager sharedManager] addObserver:self block:^(DBAccount *account) { @@ -95,12 +98,15 @@ - (void)viewDidLoad { self.recordSelectionButton.cornerRadius = CGRectGetHeight(self.recordSelectionButton.frame) / 2.0; [self setStyleForButton:self.recordSelectionButton]; + self.headerContainerView.material = NSVisualEffectMaterialTitlebar; + // Setup child view controllers self.uploaderSetupViewController = [[JEFPopoverUploaderSetupViewController alloc] init]; [self addChildViewController:self.uploaderSetupViewController]; self.recordingsViewController = [[JEFPopoverRecordingsViewController alloc] initWithNibName:@"JEFPopoverRecordingsView" bundle:nil]; - self.recordingsViewController.recordingsManager = self.recordingsManager; + self.recordingsViewController.recordingsController = self.recordingsController; + self.recordingsViewController.recordingsTableViewDataSource = [[JEFRecordingsTableViewDataSource alloc] initWithRecordingsProvider:self.recordingsController]; self.recordingsViewController.contentInsets = NSEdgeInsetsMake(CGRectGetHeight(self.headerContainerView.frame) - 20, 0, 0, 0); [self addChildViewController:self.recordingsViewController]; @@ -285,7 +291,7 @@ - (IBAction)recordScreen:(id)sender { __weak __typeof(self) weakSelf = self; [self.recorder recordScreen:[NSScreen mainScreen] completion:^(NSURL *framesURL) { - [JEFConverter convertFramesAtURL:framesURL completion:^(NSURL *gifURL) { + [self.converter convertFramesAtURL:framesURL completion:^(NSURL *gifURL) { NSError *framesError; NSArray *frames = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:framesURL includingPropertiesForKeys:nil options:0 error:&framesError]; if (!frames && framesError) { @@ -293,7 +299,7 @@ - (IBAction)recordScreen:(id)sender { } NSURL *firstFrameURL = frames.firstObject; - [weakSelf.recordingsManager uploadNewRecordingWithGIFURL:gifURL posterFrameURL:firstFrameURL completion:^(JEFRecording *recording) { + [weakSelf.recordingsController uploadNewGIFAtURL:gifURL posterFrameURL:firstFrameURL completion:^(JEFRecording *recording) { [[Mixpanel sharedInstance] track:@"Create Recording"]; [[Mixpanel sharedInstance].people increment:@"Recordings" by:@1]; }]; @@ -334,9 +340,8 @@ - (void)updateChildViewControllerForContentType:(JEFPopoverContent)targetPopover break; } - __weak __typeof(self) weakSelf = self; [self transitionFromViewController:currentChildViewController toViewController:self.recordingsViewController options:transition completionHandler:^() { - [weakSelf.recordingsManager setupDropboxFilesystem]; + [[NSNotificationCenter defaultCenter] postNotificationName:JEFSyncingServiceAccountStateChanged object:nil]; [self.recordingsViewController viewDidAppear]; // This shouldn't be called manually, but it's not called when it's shown. Need to investigate more to file a radar. }]; @@ -498,6 +503,18 @@ - (void)selectionView:(JEFSelectionView *)view didSelectRect:(NSRect)rect { [self.recorder recordRect:localQuartzRect screen:selectedScreen completion:^(NSURL *framesURL) { [self.overlayWindows makeObjectsPerformSelector:@selector(close)]; [self.overlayWindows removeAllObjects]; + + if (!framesURL) { + RBKLog(@"URL for recording frames is nil, bailing on conversion."); + dispatch_async(dispatch_get_main_queue(), ^{ + NSAlert *alert = [[NSAlert alloc] init]; + alert.messageText = NSLocalizedString(@"UploadFailedAlertTitle", @"The title for the message that the recording upload failed"); + [alert addButtonWithTitle:@"OK"]; + alert.informativeText = @"There was an issue saving the GIF frames that were recorded. Try restarting Jeff to fix this issue."; + [alert runModal]; + }); + return; + } NSError *framesError; NSArray *frames = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:framesURL includingPropertiesForKeys:nil options:0 error:&framesError]; @@ -506,8 +523,8 @@ - (void)selectionView:(JEFSelectionView *)view didSelectRect:(NSRect)rect { } NSURL *firstFrameURL = frames.firstObject; - [JEFConverter convertFramesAtURL:framesURL completion:^(NSURL *gifURL) { - [self.recordingsManager uploadNewRecordingWithGIFURL:gifURL posterFrameURL:firstFrameURL completion:^(JEFRecording *recording) { + [self.converter convertFramesAtURL:framesURL completion:^(NSURL *gifURL) { + [self.recordingsController uploadNewGIFAtURL:gifURL posterFrameURL:firstFrameURL completion:^(JEFRecording *recording) { [[Mixpanel sharedInstance] track:@"Create Recording"]; [[Mixpanel sharedInstance].people increment:@"Recordings" by:@1]; }]; diff --git a/Jeff/View Controllers/JEFPopoverRecordingsView.xib b/Jeff/View Controllers/JEFPopoverRecordingsView.xib index 1c3881d..4071761 100644 --- a/Jeff/View Controllers/JEFPopoverRecordingsView.xib +++ b/Jeff/View Controllers/JEFPopoverRecordingsView.xib @@ -1,7 +1,7 @@ - + - + @@ -28,9 +28,10 @@ + - + @@ -108,7 +109,7 @@ - + @@ -141,10 +142,22 @@ + + + @@ -164,6 +177,7 @@ + @@ -179,7 +193,6 @@ - @@ -259,5 +272,6 @@ + diff --git a/Jeff/View Controllers/JEFUploaderPreferencesViewController.m b/Jeff/View Controllers/JEFUploaderPreferencesViewController.m index 14458e1..b364113 100644 --- a/Jeff/View Controllers/JEFUploaderPreferencesViewController.m +++ b/Jeff/View Controllers/JEFUploaderPreferencesViewController.m @@ -141,7 +141,7 @@ - (IBAction)sendTweet:(id)sender { if (!twitterService || ![twitterService canPerformWithItems:nil]) return; twitterService.recipients = @[ @"jefftheapp" ]; - [twitterService performWithItems:nil]; + [twitterService performWithItems:@[]]; } - (IBAction)openOpenSourceAcknowledgements:(id)sender { diff --git a/Jeff/Views/JEFRecordingCellView.h b/Jeff/Views/JEFRecordingCellView.h index 137116d..0345539 100644 --- a/Jeff/Views/JEFRecordingCellView.h +++ b/Jeff/Views/JEFRecordingCellView.h @@ -10,13 +10,8 @@ @interface JEFRecordingCellView : NSTableCellView -@property (weak, nonatomic) IBOutlet NSVisualEffectView *infoContainerVisualEffectView; @property (weak, nonatomic) IBOutlet NSButton *linkButton; @property (weak, nonatomic) IBOutlet NSButton *shareButton; -@property (weak, nonatomic) IBOutlet NSTextField *statusLabel; -@property (weak, nonatomic) IBOutlet NSProgressIndicator *progressIndicator; -@property (weak, nonatomic) IBOutlet NSVisualEffectView *syncStatusContainerView; -@property (weak, nonatomic) IBOutlet NSLayoutConstraint *syncStatusLabelVerticalSpaceConstraint; - (void)setup; diff --git a/Jeff/Views/JEFRecordingCellView.m b/Jeff/Views/JEFRecordingCellView.m index f0b7e67..3ee99ef 100644 --- a/Jeff/Views/JEFRecordingCellView.m +++ b/Jeff/Views/JEFRecordingCellView.m @@ -14,6 +14,13 @@ @interface JEFRecordingCellView () +@property (nonatomic, weak) IBOutlet NSVisualEffectView *infoContainerVisualEffectView; +@property (nonatomic, weak) IBOutlet NSButton *cancelButton; +@property (nonatomic, weak) IBOutlet NSTextField *statusLabel; +@property (nonatomic, weak) IBOutlet NSProgressIndicator *progressIndicator; +@property (nonatomic, weak) IBOutlet NSVisualEffectView *syncStatusContainerView; +@property (nonatomic, weak) IBOutlet NSLayoutConstraint *syncStatusLabelVerticalSpaceConstraint; + @property (nonatomic, assign) BOOL isSetup; @end @@ -125,7 +132,14 @@ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(N self.progressIndicator.hidden = !isUploading; self.progressIndicator.doubleValue = progress; self.imageView.image = posterFrameImage; + self.cancelButton.hidden = !isUploading; }); } +#pragma mark - Actions + +- (IBAction)deleteRecording:(id)sender { + [[NSNotificationCenter defaultCenter] postNotificationName:@"JEFDeleteRecordingNotification" object:self.objectValue]; +} + @end diff --git a/Jeff/en.lproj/Localizable.strings b/Jeff/en.lproj/Localizable.strings index c4f2767..1cfc5e4 100644 --- a/Jeff/en.lproj/Localizable.strings +++ b/Jeff/en.lproj/Localizable.strings @@ -7,6 +7,8 @@ "GIFPasteboardNotificationBody" = "The direct URL is ready to be pasted."; "UploadFailedAlertTitle" = "Jeff couldn't upload your GIF"; +"DBErrorFileCreation" = "Something went wrong when Jeff tried to add your new recording to your Dropbox account."; + "RecordSelectionInfo" = "Click and drag over the part of the screen that you want Jeff to record."; "RecordButtonTitle" = "Record"; "StopButtonTitle" = "Stop"; @@ -22,4 +24,6 @@ "UserFacingVersionStringFormat" = "You've got version %@ (Build %@)"; -"TwitterByline" = "Recorded by @jefftheapp"; \ No newline at end of file +"TwitterByline" = "Recorded by @jefftheapp"; + +"RecordingFilenamePrefix" = "Jeff Recording - "; \ No newline at end of file diff --git a/JeffLauncher/JeffLauncher.xcodeproj/project.pbxproj b/JeffLauncher/JeffLauncher.xcodeproj/project.pbxproj index 6280545..166eba9 100644 --- a/JeffLauncher/JeffLauncher.xcodeproj/project.pbxproj +++ b/JeffLauncher/JeffLauncher.xcodeproj/project.pbxproj @@ -388,6 +388,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = JeffLauncher/JeffLauncher.entitlements; + CODE_SIGN_IDENTITY = "Developer ID Application"; COMBINE_HIDPI_IMAGES = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "JeffLauncher/JeffLauncher-Prefix.pch"; @@ -404,6 +405,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = JeffLauncher/JeffLauncher.entitlements; + CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application"; COMBINE_HIDPI_IMAGES = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "JeffLauncher/JeffLauncher-Prefix.pch"; @@ -465,7 +467,7 @@ CADB5F3418E3D71900832B7A /* Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug; }; CADB5F3518E3D71900832B7A /* Build configuration list for PBXNativeTarget "JeffLauncher" */ = { isa = XCConfigurationList; @@ -474,7 +476,7 @@ CADB5F3718E3D71900832B7A /* Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug; }; CADB5F3818E3D71900832B7A /* Build configuration list for PBXNativeTarget "JeffLauncherTests" */ = { isa = XCConfigurationList; @@ -483,7 +485,7 @@ CADB5F3A18E3D71900832B7A /* Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Debug; }; /* End XCConfigurationList section */ }; diff --git a/JeffTests/JEFConverterTests.m b/JeffTests/JEFConverterTests.m new file mode 100644 index 0000000..b86e9ef --- /dev/null +++ b/JeffTests/JEFConverterTests.m @@ -0,0 +1,50 @@ +// +// JEFConverterTests.m +// Jeff +// +// Created by Brandon Evans on 14-11-05. +// Copyright (c) 2014 Brandon Evans. All rights reserved. +// + +#import +#import +#import "JEFConverter.h" + +@interface JEFConverter (Private) + +- (NSArray *)argumentsArrayFromDictionary:(NSDictionary *)argumentsDictionary; + +@end + +@interface JEFConverterTests : XCTestCase + +@property (nonatomic, strong) JEFConverter *converter; + +@end + +@implementation JEFConverterTests + +- (void)setUp { + [super setUp]; + self.converter = [JEFConverter new]; +} + +- (void)testConvertsArgumentsDictionaryToArray { + NSDictionary *argumentsDictionary = @{ @"delay": @"0.2", @"loop": [NSNull null], @"colors": @"256" }; + NSArray *arguments = [self.converter argumentsArrayFromDictionary:argumentsDictionary]; + XCTAssertEqual(arguments.count, 5); + + argumentsDictionary = @{ @"colors": @256 }; + arguments = [self.converter argumentsArrayFromDictionary:argumentsDictionary]; + XCTAssertEqual(arguments.count, 2); + + argumentsDictionary = @{ @"colors": [NSObject new] }; + arguments = [self.converter argumentsArrayFromDictionary:argumentsDictionary]; + XCTAssertEqual(arguments.count, 1); + + argumentsDictionary = @{ @"optimize": @3 }; + arguments = [self.converter argumentsArrayFromDictionary:argumentsDictionary]; + XCTAssertEqual(arguments.count, 1); +} + +@end diff --git a/JeffTests/JEFDropboxRepositoryTests.m b/JeffTests/JEFDropboxRepositoryTests.m new file mode 100644 index 0000000..916db68 --- /dev/null +++ b/JeffTests/JEFDropboxRepositoryTests.m @@ -0,0 +1,42 @@ +// +// JEFDropboxRepositoryTests.m +// Jeff +// +// Created by Brandon Evans on 2014-11-01. +// Copyright (c) 2014 Brandon Evans. All rights reserved. +// + +#import +#import +#import +#import + +#import "JEFDropboxRepository.h" + +@interface JEFDropboxRepositoryTests : XCTestCase + +@property (nonatomic, strong) JEFDropboxRepository *dropboxRepository; + +@end + +@implementation JEFDropboxRepositoryTests + +- (void)setUp { + [super setUp]; + self.dropboxRepository = [[JEFDropboxRepository alloc] init]; +} + +- (void)testAddingAndRemovingRecordings { + JEFRecording *recording = [JEFRecording recordingWithNewFile:nil]; + id recordingMock = OCMPartialMock(recording); + DBPath *path = [[DBPath alloc] initWithString:@"lol.gif"]; + OCMStub([recordingMock path]).andReturn(path); + + XCTAssertEqual(self.dropboxRepository.recordings.count, 0, @""); + [self.dropboxRepository addRecording:recordingMock]; + XCTAssertEqual(self.dropboxRepository.recordings.count, 1, @""); + [self.dropboxRepository removeRecording:recordingMock]; + XCTAssertEqual(self.dropboxRepository.recordings.count, 0, @""); +} + +@end diff --git a/JeffTests/JEFRecordingTests.m b/JeffTests/JEFRecordingTests.m index 4a38397..6de1c78 100644 --- a/JeffTests/JEFRecordingTests.m +++ b/JeffTests/JEFRecordingTests.m @@ -9,37 +9,9 @@ #import #import #import -#import "JEFRecording.h" - -@implementation DBFileInfo (Mock) - -+ (void)load { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - Class class = [self class]; - [self swizzleMethods:class originalSelector:@selector(path) swizzledSelector:@selector(mock_path)]; - }); -} - -+ (void)swizzleMethods:(Class)class originalSelector:(SEL)originalSelector swizzledSelector:(SEL)swizzledSelector { - Method originalMethod = class_getInstanceMethod(class, originalSelector); - Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector); +#import - BOOL didAddMethod = class_addMethod(class, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod)); - if (didAddMethod) { - class_replaceMethod(class, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod)); - } else { - method_exchangeImplementations(originalMethod, swizzledMethod); - } -} - -static NSInteger pathCount = 0; -- (DBPath *)mock_path { - pathCount += 1; - return [[DBPath alloc] initWithString:[NSString stringWithFormat:@"/blah%ld.png", (long)pathCount]]; -} - -@end +#import "JEFRecording.h" @interface JEFRecordingTests : XCTestCase @@ -49,12 +21,16 @@ @implementation JEFRecordingTests - (void)testIsEqual { JEFRecording *recording = [JEFRecording recordingWithNewFile:nil]; + id recording1Mock = OCMPartialMock(recording); + OCMStub([recording1Mock path]).andReturn(@"/blah1.png"); JEFRecording *recording2 = [JEFRecording recordingWithNewFile:nil]; + id recording2Mock = OCMPartialMock(recording2); + OCMStub([recording2Mock path]).andReturn(@"/blah2.png"); - XCTAssertFalse([recording isEqual:nil]); - XCTAssertFalse([recording isEqual:@5]); - XCTAssertFalse([recording isEqual:recording2]); - XCTAssertTrue([recording isEqual:recording]); + XCTAssertFalse([recording1Mock isEqual:nil]); + XCTAssertFalse([recording1Mock isEqual:@5]); + XCTAssertFalse([recording1Mock isEqual:recording2Mock]); + XCTAssertTrue([recording1Mock isEqual:recording1Mock]); } @end \ No newline at end of file diff --git a/JeffTests/JeffTests-Info.plist b/JeffTests/JeffTests-Info.plist index d262f0f..b6ac84c 100644 --- a/JeffTests/JeffTests-Info.plist +++ b/JeffTests/JeffTests-Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - ca.brandonevans.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType @@ -17,6 +17,6 @@ CFBundleSignature ???? CFBundleVersion - 1 + 15 diff --git a/Podfile b/Podfile index e87c423..05ad8a1 100644 --- a/Podfile +++ b/Podfile @@ -3,8 +3,12 @@ platform :osx, '10.10' xcodeproj "Jeff", "Beta Release" => :release -pod 'HockeySDK-Mac', '~> 2.1.0' +pod 'HockeySDK-Mac', '~> 3.2.0' pod 'MASShortcut', :git => "git@github.com:RobotsAndPencils/MASShortcut.git", :branch => "Jeff" pod 'pop', '~> 1.0' pod 'RoboKit', :git => 'git@github.com:RobotsAndPencils/RoboKit.git' -pod 'libextobjc/EXTKeyPathCoding' \ No newline at end of file +pod 'libextobjc/EXTKeyPathCoding' + +target 'JeffTests' do + pod 'OCMock', '~> 3.1' +end \ No newline at end of file diff --git a/Podfile.lock b/Podfile.lock index 21353dd..5cf9514 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,16 +1,18 @@ PODS: - - HockeySDK-Mac (2.1.0) + - HockeySDK-Mac (3.2.0) - libextobjc/EXTKeyPathCoding (0.4.1): - libextobjc/RuntimeExtensions - libextobjc/RuntimeExtensions (0.4.1) - MASShortcut (1.2.3) - - pop (1.0.7) - - RoboKit (0.3.3) + - OCMock (3.1.1) + - pop (1.0.8) + - RoboKit (0.3.6) DEPENDENCIES: - - HockeySDK-Mac (~> 2.1.0) + - HockeySDK-Mac (~> 3.2.0) - libextobjc/EXTKeyPathCoding - MASShortcut (from `git@github.com:RobotsAndPencils/MASShortcut.git`, branch `Jeff`) + - OCMock (~> 3.1) - pop (~> 1.0) - RoboKit (from `git@github.com:RobotsAndPencils/RoboKit.git`) @@ -21,11 +23,17 @@ EXTERNAL SOURCES: RoboKit: :git: git@github.com:RobotsAndPencils/RoboKit.git +CHECKOUT OPTIONS: + RoboKit: + :commit: 6429cba42397ab61b592aa4152573c10862d17b0 + :git: git@github.com:RobotsAndPencils/RoboKit.git + SPEC CHECKSUMS: - HockeySDK-Mac: b833b385b4fb66932d760fbcb47733a1544d867c - libextobjc: d6146fce3ebea986b7f75fcb4c967639200b88b0 - MASShortcut: e67441d037a95c1978fae7405e5dae7f54afc2bd - pop: 2f14a1ea61339767af9e66741b418c831b3844df - RoboKit: e5ab6328a12bc9795bcde2d5f0f30bc1556718d4 + HockeySDK-Mac: f3a064ac3118a30144cef628a78ef39fb9d29923 + libextobjc: a650fc1bf489a3d3a9bc2e621efa3e1006fc5471 + MASShortcut: baaf44a587b4c5fed4d68d9457c4aa02218ec64c + OCMock: a73f69963a8a542b0b343e2617650e4dca0cbbc2 + pop: bb773ae2c791ca2629de13b347e7a8b450fa6a57 + RoboKit: 15aea97275f20477ded4a7c76433fecdd3b6322a -COCOAPODS: 0.34.4 +COCOAPODS: 0.38.2 diff --git a/Pods/Headers/Private/MASShortcut/MASShortcut+Monitoring.h b/Pods/Headers/Private/MASShortcut/MASShortcut+Monitoring.h new file mode 120000 index 0000000..f1f413d --- /dev/null +++ b/Pods/Headers/Private/MASShortcut/MASShortcut+Monitoring.h @@ -0,0 +1 @@ +../../../MASShortcut/MASShortcut+Monitoring.h \ No newline at end of file diff --git a/Pods/Headers/Private/MASShortcut/MASShortcut+UserDefaults.h b/Pods/Headers/Private/MASShortcut/MASShortcut+UserDefaults.h new file mode 120000 index 0000000..2faf894 --- /dev/null +++ b/Pods/Headers/Private/MASShortcut/MASShortcut+UserDefaults.h @@ -0,0 +1 @@ +../../../MASShortcut/MASShortcut+UserDefaults.h \ No newline at end of file diff --git a/Pods/Headers/Private/MASShortcut/MASShortcut.h b/Pods/Headers/Private/MASShortcut/MASShortcut.h new file mode 120000 index 0000000..9709ad3 --- /dev/null +++ b/Pods/Headers/Private/MASShortcut/MASShortcut.h @@ -0,0 +1 @@ +../../../MASShortcut/MASShortcut.h \ No newline at end of file diff --git a/Pods/Headers/Private/MASShortcut/MASShortcutView+UserDefaults.h b/Pods/Headers/Private/MASShortcut/MASShortcutView+UserDefaults.h new file mode 120000 index 0000000..5c2ad97 --- /dev/null +++ b/Pods/Headers/Private/MASShortcut/MASShortcutView+UserDefaults.h @@ -0,0 +1 @@ +../../../MASShortcut/MASShortcutView+UserDefaults.h \ No newline at end of file diff --git a/Pods/Headers/Private/MASShortcut/MASShortcutView.h b/Pods/Headers/Private/MASShortcut/MASShortcutView.h new file mode 120000 index 0000000..6d77f9d --- /dev/null +++ b/Pods/Headers/Private/MASShortcut/MASShortcutView.h @@ -0,0 +1 @@ +../../../MASShortcut/MASShortcutView.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/NSInvocation+OCMAdditions.h b/Pods/Headers/Private/OCMock/NSInvocation+OCMAdditions.h new file mode 120000 index 0000000..84f94f3 --- /dev/null +++ b/Pods/Headers/Private/OCMock/NSInvocation+OCMAdditions.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/NSInvocation+OCMAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/NSMethodSignature+OCMAdditions.h b/Pods/Headers/Private/OCMock/NSMethodSignature+OCMAdditions.h new file mode 120000 index 0000000..87ac967 --- /dev/null +++ b/Pods/Headers/Private/OCMock/NSMethodSignature+OCMAdditions.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/NSMethodSignature+OCMAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/NSNotificationCenter+OCMAdditions.h b/Pods/Headers/Private/OCMock/NSNotificationCenter+OCMAdditions.h new file mode 120000 index 0000000..9f46678 --- /dev/null +++ b/Pods/Headers/Private/OCMock/NSNotificationCenter+OCMAdditions.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/NSNotificationCenter+OCMAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/NSObject+OCMAdditions.h b/Pods/Headers/Private/OCMock/NSObject+OCMAdditions.h new file mode 120000 index 0000000..6fc84fd --- /dev/null +++ b/Pods/Headers/Private/OCMock/NSObject+OCMAdditions.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/NSObject+OCMAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/NSValue+OCMAdditions.h b/Pods/Headers/Private/OCMock/NSValue+OCMAdditions.h new file mode 120000 index 0000000..d031ef4 --- /dev/null +++ b/Pods/Headers/Private/OCMock/NSValue+OCMAdditions.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/NSValue+OCMAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCClassMockObject.h b/Pods/Headers/Private/OCMock/OCClassMockObject.h new file mode 120000 index 0000000..2f1f96b --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCClassMockObject.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCClassMockObject.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMArg.h b/Pods/Headers/Private/OCMock/OCMArg.h new file mode 120000 index 0000000..1090895 --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMArg.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMArg.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMBlockCaller.h b/Pods/Headers/Private/OCMock/OCMBlockCaller.h new file mode 120000 index 0000000..2510e82 --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMBlockCaller.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMBlockCaller.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMBoxedReturnValueProvider.h b/Pods/Headers/Private/OCMock/OCMBoxedReturnValueProvider.h new file mode 120000 index 0000000..c412f8d --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMBoxedReturnValueProvider.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMBoxedReturnValueProvider.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMConstraint.h b/Pods/Headers/Private/OCMock/OCMConstraint.h new file mode 120000 index 0000000..3089b8c --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMConstraint.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMConstraint.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMExceptionReturnValueProvider.h b/Pods/Headers/Private/OCMock/OCMExceptionReturnValueProvider.h new file mode 120000 index 0000000..e0dbaec --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMExceptionReturnValueProvider.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMExceptionReturnValueProvider.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMExpectationRecorder.h b/Pods/Headers/Private/OCMock/OCMExpectationRecorder.h new file mode 120000 index 0000000..1da432a --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMExpectationRecorder.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMExpectationRecorder.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMFunctions.h b/Pods/Headers/Private/OCMock/OCMFunctions.h new file mode 120000 index 0000000..6a9606f --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMFunctions.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMFunctions.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMIndirectReturnValueProvider.h b/Pods/Headers/Private/OCMock/OCMIndirectReturnValueProvider.h new file mode 120000 index 0000000..e4a0f66 --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMIndirectReturnValueProvider.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMIndirectReturnValueProvider.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMInvocationExpectation.h b/Pods/Headers/Private/OCMock/OCMInvocationExpectation.h new file mode 120000 index 0000000..ae7bd23 --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMInvocationExpectation.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMInvocationExpectation.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMInvocationMatcher.h b/Pods/Headers/Private/OCMock/OCMInvocationMatcher.h new file mode 120000 index 0000000..e178d64 --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMInvocationMatcher.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMInvocationMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMInvocationStub.h b/Pods/Headers/Private/OCMock/OCMInvocationStub.h new file mode 120000 index 0000000..5ab5a9c --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMInvocationStub.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMInvocationStub.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMLocation.h b/Pods/Headers/Private/OCMock/OCMLocation.h new file mode 120000 index 0000000..25c8f0e --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMLocation.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMLocation.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMMacroState.h b/Pods/Headers/Private/OCMock/OCMMacroState.h new file mode 120000 index 0000000..c8f3dd0 --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMMacroState.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMMacroState.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMNotificationPoster.h b/Pods/Headers/Private/OCMock/OCMNotificationPoster.h new file mode 120000 index 0000000..f879942 --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMNotificationPoster.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMNotificationPoster.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMObserverRecorder.h b/Pods/Headers/Private/OCMock/OCMObserverRecorder.h new file mode 120000 index 0000000..f0dfa86 --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMObserverRecorder.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMObserverRecorder.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMPassByRefSetter.h b/Pods/Headers/Private/OCMock/OCMPassByRefSetter.h new file mode 120000 index 0000000..687a294 --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMPassByRefSetter.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMPassByRefSetter.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMRealObjectForwarder.h b/Pods/Headers/Private/OCMock/OCMRealObjectForwarder.h new file mode 120000 index 0000000..c22a73b --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMRealObjectForwarder.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMRealObjectForwarder.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMRecorder.h b/Pods/Headers/Private/OCMock/OCMRecorder.h new file mode 120000 index 0000000..75eb259 --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMRecorder.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMRecorder.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMReturnValueProvider.h b/Pods/Headers/Private/OCMock/OCMReturnValueProvider.h new file mode 120000 index 0000000..d5d857d --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMReturnValueProvider.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMReturnValueProvider.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMStubRecorder.h b/Pods/Headers/Private/OCMock/OCMStubRecorder.h new file mode 120000 index 0000000..23f5e6c --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMStubRecorder.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMStubRecorder.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMVerifier.h b/Pods/Headers/Private/OCMock/OCMVerifier.h new file mode 120000 index 0000000..2f36326 --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMVerifier.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMVerifier.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMock.h b/Pods/Headers/Private/OCMock/OCMock.h new file mode 120000 index 0000000..17e2e68 --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMock.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMock.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCMockObject.h b/Pods/Headers/Private/OCMock/OCMockObject.h new file mode 120000 index 0000000..5645aaa --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCMockObject.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMockObject.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCObserverMockObject.h b/Pods/Headers/Private/OCMock/OCObserverMockObject.h new file mode 120000 index 0000000..73f73ef --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCObserverMockObject.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCObserverMockObject.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCPartialMockObject.h b/Pods/Headers/Private/OCMock/OCPartialMockObject.h new file mode 120000 index 0000000..b76a341 --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCPartialMockObject.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCPartialMockObject.h \ No newline at end of file diff --git a/Pods/Headers/Private/OCMock/OCProtocolMockObject.h b/Pods/Headers/Private/OCMock/OCProtocolMockObject.h new file mode 120000 index 0000000..ebe84d5 --- /dev/null +++ b/Pods/Headers/Private/OCMock/OCProtocolMockObject.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCProtocolMockObject.h \ No newline at end of file diff --git a/Pods/Headers/Private/RoboKit/NSArray+RoboKit.h b/Pods/Headers/Private/RoboKit/NSArray+RoboKit.h new file mode 120000 index 0000000..20ec24c --- /dev/null +++ b/Pods/Headers/Private/RoboKit/NSArray+RoboKit.h @@ -0,0 +1 @@ +../../../RoboKit/Classes/Extensions/NSArray+RoboKit.h \ No newline at end of file diff --git a/Pods/Headers/Private/RoboKit/NSData+Base64.h b/Pods/Headers/Private/RoboKit/NSData+Base64.h new file mode 120000 index 0000000..54edc0d --- /dev/null +++ b/Pods/Headers/Private/RoboKit/NSData+Base64.h @@ -0,0 +1 @@ +../../../RoboKit/Classes/Extensions/NSData+Base64.h \ No newline at end of file diff --git a/Pods/Headers/Private/RoboKit/NSData+RoboKit.h b/Pods/Headers/Private/RoboKit/NSData+RoboKit.h new file mode 120000 index 0000000..3b7f679 --- /dev/null +++ b/Pods/Headers/Private/RoboKit/NSData+RoboKit.h @@ -0,0 +1 @@ +../../../RoboKit/Classes/Extensions/NSData+RoboKit.h \ No newline at end of file diff --git a/Pods/Headers/Private/RoboKit/NSDate+Holidays.h b/Pods/Headers/Private/RoboKit/NSDate+Holidays.h new file mode 120000 index 0000000..fde193c --- /dev/null +++ b/Pods/Headers/Private/RoboKit/NSDate+Holidays.h @@ -0,0 +1 @@ +../../../RoboKit/Classes/Extensions/NSDate+Holidays.h \ No newline at end of file diff --git a/Pods/Headers/Private/RoboKit/NSDate+RoboKit.h b/Pods/Headers/Private/RoboKit/NSDate+RoboKit.h new file mode 120000 index 0000000..97ad844 --- /dev/null +++ b/Pods/Headers/Private/RoboKit/NSDate+RoboKit.h @@ -0,0 +1 @@ +../../../RoboKit/Classes/Extensions/NSDate+RoboKit.h \ No newline at end of file diff --git a/Pods/Headers/Private/RoboKit/NSDate-Utilities.h b/Pods/Headers/Private/RoboKit/NSDate-Utilities.h new file mode 120000 index 0000000..ab85b0a --- /dev/null +++ b/Pods/Headers/Private/RoboKit/NSDate-Utilities.h @@ -0,0 +1 @@ +../../../RoboKit/Classes/Extensions/NSDate-Utilities.h \ No newline at end of file diff --git a/Pods/Headers/Private/RoboKit/NSMutableArray+RoboKit.h b/Pods/Headers/Private/RoboKit/NSMutableArray+RoboKit.h new file mode 120000 index 0000000..4eb5da3 --- /dev/null +++ b/Pods/Headers/Private/RoboKit/NSMutableArray+RoboKit.h @@ -0,0 +1 @@ +../../../RoboKit/Classes/Extensions/NSMutableArray+RoboKit.h \ No newline at end of file diff --git a/Pods/Headers/Private/RoboKit/NSObject+CancelableScheduledBlock.h b/Pods/Headers/Private/RoboKit/NSObject+CancelableScheduledBlock.h new file mode 120000 index 0000000..28864fb --- /dev/null +++ b/Pods/Headers/Private/RoboKit/NSObject+CancelableScheduledBlock.h @@ -0,0 +1 @@ +../../../RoboKit/Classes/Extensions/NSObject+CancelableScheduledBlock.h \ No newline at end of file diff --git a/Pods/Headers/Private/RoboKit/NSString+CSV.h b/Pods/Headers/Private/RoboKit/NSString+CSV.h new file mode 120000 index 0000000..98d316d --- /dev/null +++ b/Pods/Headers/Private/RoboKit/NSString+CSV.h @@ -0,0 +1 @@ +../../../RoboKit/Classes/Extensions/NSString+CSV.h \ No newline at end of file diff --git a/Pods/Headers/Private/RoboKit/NSString+RoboKit.h b/Pods/Headers/Private/RoboKit/NSString+RoboKit.h new file mode 120000 index 0000000..1d841d5 --- /dev/null +++ b/Pods/Headers/Private/RoboKit/NSString+RoboKit.h @@ -0,0 +1 @@ +../../../RoboKit/Classes/Extensions/NSString+RoboKit.h \ No newline at end of file diff --git a/Pods/Headers/Private/RoboKit/RBKAppKitUtils.h b/Pods/Headers/Private/RoboKit/RBKAppKitUtils.h new file mode 120000 index 0000000..19b2eae --- /dev/null +++ b/Pods/Headers/Private/RoboKit/RBKAppKitUtils.h @@ -0,0 +1 @@ +../../../RoboKit/OSX/RBKAppKitUtils.h \ No newline at end of file diff --git a/Pods/Headers/Private/RoboKit/RBKCommonUtils.h b/Pods/Headers/Private/RoboKit/RBKCommonUtils.h new file mode 120000 index 0000000..42d4885 --- /dev/null +++ b/Pods/Headers/Private/RoboKit/RBKCommonUtils.h @@ -0,0 +1 @@ +../../../RoboKit/Classes/Headers/RBKCommonUtils.h \ No newline at end of file diff --git a/Pods/Headers/Private/RoboKit/RBKHTTPStatusCodes.h b/Pods/Headers/Private/RoboKit/RBKHTTPStatusCodes.h new file mode 120000 index 0000000..8d7214e --- /dev/null +++ b/Pods/Headers/Private/RoboKit/RBKHTTPStatusCodes.h @@ -0,0 +1 @@ +../../../RoboKit/Classes/RBKHTTPStatusCodes.h \ No newline at end of file diff --git a/Pods/Headers/Private/libextobjc/EXTKeyPathCoding.h b/Pods/Headers/Private/libextobjc/EXTKeyPathCoding.h new file mode 120000 index 0000000..b047ab0 --- /dev/null +++ b/Pods/Headers/Private/libextobjc/EXTKeyPathCoding.h @@ -0,0 +1 @@ +../../../libextobjc/extobjc/EXTKeyPathCoding.h \ No newline at end of file diff --git a/Pods/Headers/Private/libextobjc/EXTRuntimeExtensions.h b/Pods/Headers/Private/libextobjc/EXTRuntimeExtensions.h new file mode 120000 index 0000000..26f4caf --- /dev/null +++ b/Pods/Headers/Private/libextobjc/EXTRuntimeExtensions.h @@ -0,0 +1 @@ +../../../libextobjc/extobjc/EXTRuntimeExtensions.h \ No newline at end of file diff --git a/Pods/Headers/Private/libextobjc/metamacros.h b/Pods/Headers/Private/libextobjc/metamacros.h new file mode 120000 index 0000000..0f88901 --- /dev/null +++ b/Pods/Headers/Private/libextobjc/metamacros.h @@ -0,0 +1 @@ +../../../libextobjc/extobjc/metamacros.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/FloatConversion.h b/Pods/Headers/Private/pop/FloatConversion.h new file mode 120000 index 0000000..aea012a --- /dev/null +++ b/Pods/Headers/Private/pop/FloatConversion.h @@ -0,0 +1 @@ +../../../pop/pop/WebCore/FloatConversion.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POP.h b/Pods/Headers/Private/pop/POP.h new file mode 120000 index 0000000..dd15660 --- /dev/null +++ b/Pods/Headers/Private/pop/POP.h @@ -0,0 +1 @@ +../../../pop/pop/POP.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPAction.h b/Pods/Headers/Private/pop/POPAction.h new file mode 120000 index 0000000..78f9372 --- /dev/null +++ b/Pods/Headers/Private/pop/POPAction.h @@ -0,0 +1 @@ +../../../pop/pop/POPAction.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPAnimatableProperty.h b/Pods/Headers/Private/pop/POPAnimatableProperty.h new file mode 120000 index 0000000..48fd8c4 --- /dev/null +++ b/Pods/Headers/Private/pop/POPAnimatableProperty.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimatableProperty.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPAnimation.h b/Pods/Headers/Private/pop/POPAnimation.h new file mode 120000 index 0000000..dfe8a85 --- /dev/null +++ b/Pods/Headers/Private/pop/POPAnimation.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimation.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPAnimationEvent.h b/Pods/Headers/Private/pop/POPAnimationEvent.h new file mode 120000 index 0000000..5d40492 --- /dev/null +++ b/Pods/Headers/Private/pop/POPAnimationEvent.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimationEvent.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPAnimationEventInternal.h b/Pods/Headers/Private/pop/POPAnimationEventInternal.h new file mode 120000 index 0000000..8263df6 --- /dev/null +++ b/Pods/Headers/Private/pop/POPAnimationEventInternal.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimationEventInternal.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPAnimationExtras.h b/Pods/Headers/Private/pop/POPAnimationExtras.h new file mode 120000 index 0000000..3a1bc7e --- /dev/null +++ b/Pods/Headers/Private/pop/POPAnimationExtras.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimationExtras.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPAnimationInternal.h b/Pods/Headers/Private/pop/POPAnimationInternal.h new file mode 120000 index 0000000..6aebf45 --- /dev/null +++ b/Pods/Headers/Private/pop/POPAnimationInternal.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimationInternal.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPAnimationPrivate.h b/Pods/Headers/Private/pop/POPAnimationPrivate.h new file mode 120000 index 0000000..ea5956d --- /dev/null +++ b/Pods/Headers/Private/pop/POPAnimationPrivate.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimationPrivate.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPAnimationRuntime.h b/Pods/Headers/Private/pop/POPAnimationRuntime.h new file mode 120000 index 0000000..0651d06 --- /dev/null +++ b/Pods/Headers/Private/pop/POPAnimationRuntime.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimationRuntime.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPAnimationTracer.h b/Pods/Headers/Private/pop/POPAnimationTracer.h new file mode 120000 index 0000000..64fff66 --- /dev/null +++ b/Pods/Headers/Private/pop/POPAnimationTracer.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimationTracer.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPAnimationTracerInternal.h b/Pods/Headers/Private/pop/POPAnimationTracerInternal.h new file mode 120000 index 0000000..b76b731 --- /dev/null +++ b/Pods/Headers/Private/pop/POPAnimationTracerInternal.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimationTracerInternal.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPAnimator.h b/Pods/Headers/Private/pop/POPAnimator.h new file mode 120000 index 0000000..89707ea --- /dev/null +++ b/Pods/Headers/Private/pop/POPAnimator.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimator.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPAnimatorPrivate.h b/Pods/Headers/Private/pop/POPAnimatorPrivate.h new file mode 120000 index 0000000..89650c6 --- /dev/null +++ b/Pods/Headers/Private/pop/POPAnimatorPrivate.h @@ -0,0 +1 @@ +../../../pop/pop/POPAnimatorPrivate.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPBasicAnimation.h b/Pods/Headers/Private/pop/POPBasicAnimation.h new file mode 120000 index 0000000..50184f2 --- /dev/null +++ b/Pods/Headers/Private/pop/POPBasicAnimation.h @@ -0,0 +1 @@ +../../../pop/pop/POPBasicAnimation.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPBasicAnimationInternal.h b/Pods/Headers/Private/pop/POPBasicAnimationInternal.h new file mode 120000 index 0000000..fa8cb0b --- /dev/null +++ b/Pods/Headers/Private/pop/POPBasicAnimationInternal.h @@ -0,0 +1 @@ +../../../pop/pop/POPBasicAnimationInternal.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPCGUtils.h b/Pods/Headers/Private/pop/POPCGUtils.h new file mode 120000 index 0000000..d050fb4 --- /dev/null +++ b/Pods/Headers/Private/pop/POPCGUtils.h @@ -0,0 +1 @@ +../../../pop/pop/POPCGUtils.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPCustomAnimation.h b/Pods/Headers/Private/pop/POPCustomAnimation.h new file mode 120000 index 0000000..5025bd6 --- /dev/null +++ b/Pods/Headers/Private/pop/POPCustomAnimation.h @@ -0,0 +1 @@ +../../../pop/pop/POPCustomAnimation.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPDecayAnimation.h b/Pods/Headers/Private/pop/POPDecayAnimation.h new file mode 120000 index 0000000..dba2796 --- /dev/null +++ b/Pods/Headers/Private/pop/POPDecayAnimation.h @@ -0,0 +1 @@ +../../../pop/pop/POPDecayAnimation.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPDecayAnimationInternal.h b/Pods/Headers/Private/pop/POPDecayAnimationInternal.h new file mode 120000 index 0000000..4d5c959 --- /dev/null +++ b/Pods/Headers/Private/pop/POPDecayAnimationInternal.h @@ -0,0 +1 @@ +../../../pop/pop/POPDecayAnimationInternal.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPDefines.h b/Pods/Headers/Private/pop/POPDefines.h new file mode 120000 index 0000000..4b10036 --- /dev/null +++ b/Pods/Headers/Private/pop/POPDefines.h @@ -0,0 +1 @@ +../../../pop/pop/POPDefines.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPGeometry.h b/Pods/Headers/Private/pop/POPGeometry.h new file mode 120000 index 0000000..9b29189 --- /dev/null +++ b/Pods/Headers/Private/pop/POPGeometry.h @@ -0,0 +1 @@ +../../../pop/pop/POPGeometry.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPLayerExtras.h b/Pods/Headers/Private/pop/POPLayerExtras.h new file mode 120000 index 0000000..e11f4c6 --- /dev/null +++ b/Pods/Headers/Private/pop/POPLayerExtras.h @@ -0,0 +1 @@ +../../../pop/pop/POPLayerExtras.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPMath.h b/Pods/Headers/Private/pop/POPMath.h new file mode 120000 index 0000000..cc52b21 --- /dev/null +++ b/Pods/Headers/Private/pop/POPMath.h @@ -0,0 +1 @@ +../../../pop/pop/POPMath.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPPropertyAnimation.h b/Pods/Headers/Private/pop/POPPropertyAnimation.h new file mode 120000 index 0000000..0fae4c5 --- /dev/null +++ b/Pods/Headers/Private/pop/POPPropertyAnimation.h @@ -0,0 +1 @@ +../../../pop/pop/POPPropertyAnimation.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPPropertyAnimationInternal.h b/Pods/Headers/Private/pop/POPPropertyAnimationInternal.h new file mode 120000 index 0000000..5783767 --- /dev/null +++ b/Pods/Headers/Private/pop/POPPropertyAnimationInternal.h @@ -0,0 +1 @@ +../../../pop/pop/POPPropertyAnimationInternal.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPSpringAnimation.h b/Pods/Headers/Private/pop/POPSpringAnimation.h new file mode 120000 index 0000000..152f663 --- /dev/null +++ b/Pods/Headers/Private/pop/POPSpringAnimation.h @@ -0,0 +1 @@ +../../../pop/pop/POPSpringAnimation.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPSpringAnimationInternal.h b/Pods/Headers/Private/pop/POPSpringAnimationInternal.h new file mode 120000 index 0000000..afdc982 --- /dev/null +++ b/Pods/Headers/Private/pop/POPSpringAnimationInternal.h @@ -0,0 +1 @@ +../../../pop/pop/POPSpringAnimationInternal.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPSpringSolver.h b/Pods/Headers/Private/pop/POPSpringSolver.h new file mode 120000 index 0000000..6ed1ee6 --- /dev/null +++ b/Pods/Headers/Private/pop/POPSpringSolver.h @@ -0,0 +1 @@ +../../../pop/pop/POPSpringSolver.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/POPVector.h b/Pods/Headers/Private/pop/POPVector.h new file mode 120000 index 0000000..73f01f9 --- /dev/null +++ b/Pods/Headers/Private/pop/POPVector.h @@ -0,0 +1 @@ +../../../pop/pop/POPVector.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/TransformationMatrix.h b/Pods/Headers/Private/pop/TransformationMatrix.h new file mode 120000 index 0000000..f1232b9 --- /dev/null +++ b/Pods/Headers/Private/pop/TransformationMatrix.h @@ -0,0 +1 @@ +../../../pop/pop/WebCore/TransformationMatrix.h \ No newline at end of file diff --git a/Pods/Headers/Private/pop/UnitBezier.h b/Pods/Headers/Private/pop/UnitBezier.h new file mode 120000 index 0000000..fbd11a0 --- /dev/null +++ b/Pods/Headers/Private/pop/UnitBezier.h @@ -0,0 +1 @@ +../../../pop/pop/WebCore/UnitBezier.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/BITCrashExceptionApplication.h b/Pods/Headers/Public/HockeySDK-Mac/BITCrashExceptionApplication.h deleted file mode 120000 index 66843a8..0000000 --- a/Pods/Headers/Public/HockeySDK-Mac/BITCrashExceptionApplication.h +++ /dev/null @@ -1 +0,0 @@ -../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITCrashExceptionApplication.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/BITCrashManager.h b/Pods/Headers/Public/HockeySDK-Mac/BITCrashManager.h deleted file mode 120000 index 8892469..0000000 --- a/Pods/Headers/Public/HockeySDK-Mac/BITCrashManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITCrashManager.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/BITCrashManagerDelegate.h b/Pods/Headers/Public/HockeySDK-Mac/BITCrashManagerDelegate.h deleted file mode 120000 index b702991..0000000 --- a/Pods/Headers/Public/HockeySDK-Mac/BITCrashManagerDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITCrashManagerDelegate.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/BITFeedbackManager.h b/Pods/Headers/Public/HockeySDK-Mac/BITFeedbackManager.h deleted file mode 120000 index 4d0777d..0000000 --- a/Pods/Headers/Public/HockeySDK-Mac/BITFeedbackManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITFeedbackManager.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/BITFeedbackWindowController.h b/Pods/Headers/Public/HockeySDK-Mac/BITFeedbackWindowController.h deleted file mode 120000 index dec3b6d..0000000 --- a/Pods/Headers/Public/HockeySDK-Mac/BITFeedbackWindowController.h +++ /dev/null @@ -1 +0,0 @@ -../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITFeedbackWindowController.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/BITHockeyBaseManager.h b/Pods/Headers/Public/HockeySDK-Mac/BITHockeyBaseManager.h deleted file mode 120000 index fa061e1..0000000 --- a/Pods/Headers/Public/HockeySDK-Mac/BITHockeyBaseManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITHockeyBaseManager.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/BITHockeyManager.h b/Pods/Headers/Public/HockeySDK-Mac/BITHockeyManager.h deleted file mode 120000 index e6f7f0d..0000000 --- a/Pods/Headers/Public/HockeySDK-Mac/BITHockeyManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITHockeyManager.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/BITHockeyManagerDelegate.h b/Pods/Headers/Public/HockeySDK-Mac/BITHockeyManagerDelegate.h deleted file mode 120000 index e5746f3..0000000 --- a/Pods/Headers/Public/HockeySDK-Mac/BITHockeyManagerDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITHockeyManagerDelegate.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/BITSystemProfile.h b/Pods/Headers/Public/HockeySDK-Mac/BITSystemProfile.h deleted file mode 120000 index 1bf598d..0000000 --- a/Pods/Headers/Public/HockeySDK-Mac/BITSystemProfile.h +++ /dev/null @@ -1 +0,0 @@ -../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITSystemProfile.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/HockeySDK.h b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK.h deleted file mode 120000 index e54d53d..0000000 --- a/Pods/Headers/Public/HockeySDK-Mac/HockeySDK.h +++ /dev/null @@ -1 +0,0 @@ -../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/HockeySDK.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITCrashDetails.h b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITCrashDetails.h new file mode 120000 index 0000000..cb0bfdb --- /dev/null +++ b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITCrashDetails.h @@ -0,0 +1 @@ +../../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITCrashDetails.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITCrashExceptionApplication.h b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITCrashExceptionApplication.h new file mode 120000 index 0000000..37396e8 --- /dev/null +++ b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITCrashExceptionApplication.h @@ -0,0 +1 @@ +../../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITCrashExceptionApplication.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITCrashManager.h b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITCrashManager.h new file mode 120000 index 0000000..4b86003 --- /dev/null +++ b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITCrashManager.h @@ -0,0 +1 @@ +../../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITCrashManager.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITCrashManagerDelegate.h b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITCrashManagerDelegate.h new file mode 120000 index 0000000..00c8a82 --- /dev/null +++ b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITCrashManagerDelegate.h @@ -0,0 +1 @@ +../../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITCrashManagerDelegate.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITCrashMetaData.h b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITCrashMetaData.h new file mode 120000 index 0000000..7596587 --- /dev/null +++ b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITCrashMetaData.h @@ -0,0 +1 @@ +../../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITCrashMetaData.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITFeedbackManager.h b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITFeedbackManager.h new file mode 120000 index 0000000..eff7ab9 --- /dev/null +++ b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITFeedbackManager.h @@ -0,0 +1 @@ +../../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITFeedbackManager.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITFeedbackWindowController.h b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITFeedbackWindowController.h new file mode 120000 index 0000000..76f72db --- /dev/null +++ b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITFeedbackWindowController.h @@ -0,0 +1 @@ +../../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITFeedbackWindowController.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITHockeyAttachment.h b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITHockeyAttachment.h new file mode 120000 index 0000000..82731ae --- /dev/null +++ b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITHockeyAttachment.h @@ -0,0 +1 @@ +../../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITHockeyAttachment.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITHockeyBaseManager.h b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITHockeyBaseManager.h new file mode 120000 index 0000000..ad60f34 --- /dev/null +++ b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITHockeyBaseManager.h @@ -0,0 +1 @@ +../../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITHockeyBaseManager.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITHockeyManager.h b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITHockeyManager.h new file mode 120000 index 0000000..79fcc4b --- /dev/null +++ b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITHockeyManager.h @@ -0,0 +1 @@ +../../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITHockeyManager.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITHockeyManagerDelegate.h b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITHockeyManagerDelegate.h new file mode 120000 index 0000000..4508ba7 --- /dev/null +++ b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITHockeyManagerDelegate.h @@ -0,0 +1 @@ +../../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITHockeyManagerDelegate.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITSystemProfile.h b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITSystemProfile.h new file mode 120000 index 0000000..958f2f4 --- /dev/null +++ b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/BITSystemProfile.h @@ -0,0 +1 @@ +../../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITSystemProfile.h \ No newline at end of file diff --git a/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/HockeySDK.h b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/HockeySDK.h new file mode 120000 index 0000000..f177652 --- /dev/null +++ b/Pods/Headers/Public/HockeySDK-Mac/HockeySDK/HockeySDK.h @@ -0,0 +1 @@ +../../../../HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/HockeySDK.h \ No newline at end of file diff --git a/Pods/Headers/Public/OCMock/NSNotificationCenter+OCMAdditions.h b/Pods/Headers/Public/OCMock/NSNotificationCenter+OCMAdditions.h new file mode 120000 index 0000000..9f46678 --- /dev/null +++ b/Pods/Headers/Public/OCMock/NSNotificationCenter+OCMAdditions.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/NSNotificationCenter+OCMAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Public/OCMock/OCMArg.h b/Pods/Headers/Public/OCMock/OCMArg.h new file mode 120000 index 0000000..1090895 --- /dev/null +++ b/Pods/Headers/Public/OCMock/OCMArg.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMArg.h \ No newline at end of file diff --git a/Pods/Headers/Public/OCMock/OCMConstraint.h b/Pods/Headers/Public/OCMock/OCMConstraint.h new file mode 120000 index 0000000..3089b8c --- /dev/null +++ b/Pods/Headers/Public/OCMock/OCMConstraint.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMConstraint.h \ No newline at end of file diff --git a/Pods/Headers/Public/OCMock/OCMLocation.h b/Pods/Headers/Public/OCMock/OCMLocation.h new file mode 120000 index 0000000..25c8f0e --- /dev/null +++ b/Pods/Headers/Public/OCMock/OCMLocation.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMLocation.h \ No newline at end of file diff --git a/Pods/Headers/Public/OCMock/OCMMacroState.h b/Pods/Headers/Public/OCMock/OCMMacroState.h new file mode 120000 index 0000000..c8f3dd0 --- /dev/null +++ b/Pods/Headers/Public/OCMock/OCMMacroState.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMMacroState.h \ No newline at end of file diff --git a/Pods/Headers/Public/OCMock/OCMRecorder.h b/Pods/Headers/Public/OCMock/OCMRecorder.h new file mode 120000 index 0000000..75eb259 --- /dev/null +++ b/Pods/Headers/Public/OCMock/OCMRecorder.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMRecorder.h \ No newline at end of file diff --git a/Pods/Headers/Public/OCMock/OCMStubRecorder.h b/Pods/Headers/Public/OCMock/OCMStubRecorder.h new file mode 120000 index 0000000..23f5e6c --- /dev/null +++ b/Pods/Headers/Public/OCMock/OCMStubRecorder.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMStubRecorder.h \ No newline at end of file diff --git a/Pods/Headers/Public/OCMock/OCMock.h b/Pods/Headers/Public/OCMock/OCMock.h new file mode 120000 index 0000000..17e2e68 --- /dev/null +++ b/Pods/Headers/Public/OCMock/OCMock.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMock.h \ No newline at end of file diff --git a/Pods/Headers/Public/OCMock/OCMockObject.h b/Pods/Headers/Public/OCMock/OCMockObject.h new file mode 120000 index 0000000..5645aaa --- /dev/null +++ b/Pods/Headers/Public/OCMock/OCMockObject.h @@ -0,0 +1 @@ +../../../OCMock/Source/OCMock/OCMockObject.h \ No newline at end of file diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework.dSYM/Contents/Info.plist b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework.dSYM/Contents/Info.plist index bee2397..a757fd4 100644 --- a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework.dSYM/Contents/Info.plist +++ b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework.dSYM/Contents/Info.plist @@ -13,8 +13,8 @@ CFBundleSignature ???? CFBundleShortVersionString - 2.1.0 + 3.2.0 CFBundleVersion - 24 + 30 diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework.dSYM/Contents/Resources/DWARF/HockeySDK b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework.dSYM/Contents/Resources/DWARF/HockeySDK index 033cd06..88f9da0 100644 Binary files a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework.dSYM/Contents/Resources/DWARF/HockeySDK and b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework.dSYM/Contents/Resources/DWARF/HockeySDK differ diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Modules b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Modules new file mode 120000 index 0000000..5736f31 --- /dev/null +++ b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Modules @@ -0,0 +1 @@ +Versions/Current/Modules \ No newline at end of file diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITCrashDetails.h b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITCrashDetails.h new file mode 100644 index 0000000..e3f77e6 --- /dev/null +++ b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITCrashDetails.h @@ -0,0 +1,96 @@ +/* + * Author: Andreas Linde + * + * Copyright (c) 2012-2014 HockeyApp, Bit Stadium GmbH. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#import + +/** + * Provides details about the crash that occured in the previous app session + */ +@interface BITCrashDetails : NSObject + +/** + * UUID for the crash report + */ +@property (nonatomic, readonly, strong) NSString *incidentIdentifier; + +/** + * UUID for the app installation on the device + */ +@property (nonatomic, readonly, strong) NSString *reporterKey; + +/** + * Signal that caused the crash + */ +@property (nonatomic, readonly, strong) NSString *signal; + +/** + * Exception name that triggered the crash, nil if the crash was not caused by an exception + */ +@property (nonatomic, readonly, strong) NSString *exceptionName; + +/** + * Exception reason, nil if the crash was not caused by an exception + */ +@property (nonatomic, readonly, strong) NSString *exceptionReason; + +/** + * Date and time the app started, nil if unknown + */ +@property (nonatomic, readonly, strong) NSDate *appStartTime; + +/** + * Date and time the crash occured, nil if unknown + */ +@property (nonatomic, readonly, strong) NSDate *crashTime; + +/** + * Operation System version string the app was running on when it crashed. + */ +@property (nonatomic, readonly, strong) NSString *osVersion; + +/** + * Operation System build string the app was running on when it crashed + * + * This may be unavailable. + */ +@property (nonatomic, readonly, strong) NSString *osBuild; + +/** + * CFBundleShortVersionString value of the app that crashed + * + * Can be `nil` if the crash was captured with an older version of the SDK + * or if the app doesn't set the value. + */ +@property (nonatomic, readonly, strong) NSString *appVersion; + +/** + * CFBundleVersion value of the app that crashed + */ +@property (nonatomic, readonly, strong) NSString *appBuild; + +@end diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITCrashManager.h b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITCrashManager.h index 45bdc0d..a4be16c 100644 --- a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITCrashManager.h +++ b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITCrashManager.h @@ -43,9 +43,67 @@ @protocol BITCrashManagerDelegate; - +@class BITCrashDetails; +@class BITCrashMetaData; @class BITCrashReportUI; -@class BITPLCrashReporter; + + +/** + * Custom block that handles the alert that prompts the user whether he wants to send crash reports + * + * @param crashReportText The textual representation of the crash report + * @param applicationLog The application log that will be attached to the crash report + */ +typedef void(^BITCustomCrashReportUIHandler)(NSString *crashReportText, NSString *applicationLog); + + +/** + * Prototype of a callback function used to execute additional user code. Called upon completion of crash + * handling, after the crash report has been written to disk. + * + * @param context The API client's supplied context value. + * + * @see `BITCrashManagerCallbacks` + * @see `[BITCrashManager setCrashCallbacks:]` + */ +typedef void (*BITCrashManagerPostCrashSignalCallback)(void *context); + +/** + * This structure contains callbacks supported by `BITCrashManager` to allow the host application to perform + * additional tasks prior to program termination after a crash has occured. + * + * @see `BITCrashManagerPostCrashSignalCallback` + * @see `[BITCrashManager setCrashCallbacks:]` + */ +typedef struct BITCrashManagerCallbacks { + /** An arbitrary user-supplied context value. This value may be NULL. */ + void *context; + + /** + * The callback used to report caught signal information. + */ + BITCrashManagerPostCrashSignalCallback handleSignal; +} BITCrashManagerCallbacks; + +/** + * Crash Manager alert user input + */ +typedef NS_ENUM(NSUInteger, BITCrashManagerUserInput) { + /** + * User chose not to send the crash report + */ + BITCrashManagerUserInputDontSend = 0, + /** + * User wants the crash report to be sent + */ + BITCrashManagerUserInputSend = 1, + /** + * User chose to always send crash reports + */ + BITCrashManagerUserInputAlwaysSend = 2 + +}; + /** * The crash reporting module. @@ -78,50 +136,7 @@ * * @warning If you start the app with the Xcode debugger attached, detecting crashes will _NOT_ be enabled! */ -@interface BITCrashManager : BITHockeyBaseManager { -@private - NSFileManager *_fileManager; - - BOOL _crashIdenticalCurrentVersion; - BOOL _crashManagerActivated; - - NSTimeInterval _timeintervalCrashInLastSessionOccured; - NSTimeInterval _maxTimeIntervalOfCrashForReturnMainApplicationDelay; - - NSInteger _statusCode; - NSURLConnection *_urlConnection; - NSMutableData *_responseData; - - id _delegate; - - BOOL _autoSubmitCrashReport; - BOOL _askUserDetails; - - NSMutableArray *_crashFiles; - NSString *_crashesDir; - NSString *_settingsFile; - NSString *_analyzerInProgressFile; - - BOOL _enableMachExceptionHandler; - NSUncaughtExceptionHandler *_plcrExceptionHandler; - BITPLCrashReporter *_plCrashReporter; - - BITCrashReportUI *_crashReportUI; - - BOOL _didCrashInLastSession; - NSMutableDictionary *_approvedCrashReports; - - NSMutableDictionary *_dictOfLastSessionCrash; - - BOOL _invokedReturnToMainApplication; -} - -///----------------------------------------------------------------------------- -/// @name Delegate -///----------------------------------------------------------------------------- - -// delegate is required -@property (nonatomic, assign) id delegate; +@interface BITCrashManager : BITHockeyBaseManager ///----------------------------------------------------------------------------- @@ -129,7 +144,7 @@ ///----------------------------------------------------------------------------- /** - * Defines if the user interface should ask for name and email + * Defines if the build in crash report UI should ask for name and email * * Default: _YES_ */ @@ -137,23 +152,31 @@ /** - * Trap fatal signals via a Mach exception server. + * Trap fatal signals via a Mach exception server. This is now used by default! * - * By default the SDK is using the safe and proven in-process BSD Signals for catching crashes. - * This option provides an option to enable catching fatal signals via a Mach exception server - * instead. + * Default: _YES_ * - * We strongly advice _NOT_ to enable Mach exception handler in release versions of your apps! + * @deprecated Mach Exception Handler is now enabled by default! + */ +@property (nonatomic, assign, getter=isMachExceptionHandlerEnabled) BOOL enableMachExceptionHandler __attribute__((deprecated("Mach Exceptions are now enabled by default. If you want to disable them, please use the new property disableMachExceptionHandler"))); + + +/** + * Disable trap fatal signals via a Mach exception server. + * + * By default the SDK is catching fatal signals via a Mach exception server. + * This option allows you to use in-process BSD Signals for catching crashes instead. * * Default: _NO_ * * @warning The Mach exception handler executes in-process, and will interfere with debuggers when * they attempt to suspend all active threads (which will include the Mach exception handler). * Mach-based handling should _NOT_ be used when a debugger is attached. The SDK will not - * enabled catching exceptions if the app is started with the debugger running. If you attach - * the debugger during runtime, this may cause issues the Mach exception handler is enabled! + * enable catching exceptions if the app is started with the debugger running. If you attach + * the debugger during runtime, this may cause issues if it is not disabled! */ -@property (nonatomic, assign, getter=isMachExceptionHandlerEnabled) BOOL enableMachExceptionHandler; +@property (nonatomic, assign, getter=isMachExceptionHandlerDisabled) BOOL disableMachExceptionHandler; + /** * Submit crash reports without asking the user @@ -166,22 +189,31 @@ @property (nonatomic, assign, getter=isAutoSubmitCrashReport) BOOL autoSubmitCrashReport; /** - * Time between startup and a crash within which sending a crash will be send synchronously + * Set the callbacks that will be executed prior to program termination after a crash has occurred * - * By default crash reports are being send asynchronously, since otherwise it may block the - * app from startup, e.g. while the network is down and the crash report can not be send until - * the timeout occurs. + * PLCrashReporter provides support for executing an application specified function in the context + * of the crash reporter's signal handler, after the crash report has been written to disk. * - * But especially crashes during app startup could be frequent to the affected user and if the app - * would continue to startup normally it might crash right away again, resulting in the crash reports - * never to arrive. + * Writing code intended for execution inside of a signal handler is exceptionally difficult, and is _NOT_ recommended! * - * This property allows to specify the time between app start and crash within which the crash report - * should be send synchronously instead to improve the probability of the crash report being send successfully. + * _Program Flow and Signal Handlers_ * - * Default: _5_ + * When the signal handler is called the normal flow of the program is interrupted, and your program is an unknown state. Locks may be held, the heap may be corrupt (or in the process of being updated), and your signal handler may invoke a function that was being executed at the time of the signal. This may result in deadlocks, data corruption, and program termination. + * + * _Async-Safe Functions_ + * + * A subset of functions are defined to be async-safe by the OS, and are safely callable from within a signal handler. If you do implement a custom post-crash handler, it must be async-safe. A table of POSIX-defined async-safe functions and additional information is available from the [CERT programming guide - SIG30-C](https://www.securecoding.cert.org/confluence/display/seccode/SIG30-C.+Call+only+asynchronous-safe+functions+within+signal+handlers). + * + * Most notably, the Objective-C runtime itself is not async-safe, and Objective-C may not be used within a signal handler. + * + * Documentation taken from PLCrashReporter: https://www.plcrashreporter.org/documentation/api/v1.2-rc2/async_safety.html + * + * @see BITCrashManagerPostCrashSignalCallback + * @see BITCrashManagerCallbacks + * + * @param callbacks A pointer to an initialized PLCrashReporterCallback structure, see https://www.plcrashreporter.org/documentation/api/v1.2-rc2/struct_p_l_crash_reporter_callbacks.html */ -@property (nonatomic, readwrite) NSTimeInterval maxTimeIntervalOfCrashForReturnMainApplicationDelay; +- (void)setCrashCallbacks: (BITCrashManagerCallbacks *) callbacks; ///----------------------------------------------------------------------------- @@ -200,6 +232,43 @@ */ @property (nonatomic, readonly) BOOL didCrashInLastSession; +/** + Provides an interface to pass user input from a custom alert to a crash report + + @param userInput Defines the users action wether to send, always send, or not to send the crash report. + @param userProvidedMetaData The content of this optional BITCrashMetaData instance will be attached to the crash report and allows to ask the user for e.g. additional comments or info. + + @return Returns YES if the input is a valid option and successfully triggered further processing of the crash report + + @see BITCrashManagerUserInput + @see BITCrashMetaData + */ +- (BOOL)handleUserInput:(BITCrashManagerUserInput)userInput withUserProvidedMetaData:(BITCrashMetaData *)userProvidedMetaData; + +/** + Lets you set a custom block which handles showing a custom UI and asking the user + whether he wants to send the crash report. + + This replaces the default alert the SDK would show! + + You can use this to present any kind of user interface which asks the user for additional information, + e.g. what they did in the app before the app crashed. + + In addition to this you should always ask your users if they agree to send crash reports, send them + always or not and return the result when calling `handleUserInput:withUserProvidedCrashDescription`. + + @param crashReportUIHandler A block that is responsible for loading, presenting and and dismissing your custom user interface which prompts the user if he wants to send crash reports. The block is also responsible for triggering further processing of the crash reports. + + @warning Block needs to call the `[BITCrashManager handleUserInput:withUserProvidedMetaData:]` method! + + @warning This needs to be set before calling `[BITHockeyManager startManager]`! + */ +- (void)setCrashReportUIHandler:(BITCustomCrashReportUIHandler)crashReportUIHandler; + +/** + * Provides details about the crash that occured in the last app session + */ +@property (nonatomic, readonly) BITCrashDetails *lastSessionCrashDetails; /** * Provides the time between startup and crash in seconds diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITCrashManagerDelegate.h b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITCrashManagerDelegate.h index 2911444..a200597 100644 --- a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITCrashManagerDelegate.h +++ b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITCrashManagerDelegate.h @@ -25,6 +25,8 @@ #import +@class BITHockeyAttachment; + /** * The `BITCrashManagerDelegate` formal protocol defines methods further configuring * the behaviour of `BITCrashManager`. @@ -34,11 +36,14 @@ @optional /** - * Invoked once the user interface asking for crash details and if the data should be send is dismissed + * Not used any longer! + * + * In previous SDK versions this invoked once the user interface asking for crash details and if the data should be send is dismissed * * @param crashManager The `BITCrashManager` instance invoking the method + * @deprecated The default crash report UI is not shown modal any longer, so this delegate is not being used any more! */ -- (void) showMainApplicationWindowForCrashManager:(BITCrashManager *)crashManager; +- (void) showMainApplicationWindowForCrashManager:(BITCrashManager *)crashManager __attribute__((deprecated("The default crash report UI is not shown modal any longer, so this delegate is now called right away. We recommend to remove the implementation of this method."))); ///----------------------------------------------------------------------------- /// @name Additional meta data @@ -50,6 +55,27 @@ */ -(NSString *)applicationLogForCrashManager:(BITCrashManager *)crashManager; +/** Return a BITHockeyAttachment object providing an NSData object the crash report + being processed should contain + + Please limit your attachments to reasonable files to avoid high traffic costs for your users. + + Example implementation: + + - (BITHockeyAttachment *)attachmentForCrashManager:(BITCrashManager *)crashManager { + NSData *data = [NSData dataWithContentsOfURL:@"mydatafile"]; + + BITHockeyAttachment *attachment = [[BITHockeyAttachment alloc] initWithFilename:@"myfile.data" + hockeyAttachmentData:data + contentType:@"'application/octet-stream"]; + return attachment; + } + + @param crashManager The `BITCrashManager` instance invoking this delegate + @see applicationLogForCrashManager: + */ +-(BITHockeyAttachment *)attachmentForCrashManager:(BITCrashManager *)crashManager; + ///----------------------------------------------------------------------------- /// @name Alert ///----------------------------------------------------------------------------- diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITCrashMetaData.h b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITCrashMetaData.h new file mode 100644 index 0000000..a7c5a96 --- /dev/null +++ b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITCrashMetaData.h @@ -0,0 +1,57 @@ +/* + * Author: Andreas Linde + * + * Copyright (c) 2012-2014 HockeyApp, Bit Stadium GmbH. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#import + + +/** + * This class provides properties that can be attached to a crash report via a custom alert view flow + */ +@interface BITCrashMetaData : NSObject + +/** + * User provided description that should be attached to the crash report as plain text + */ +@property (nonatomic, copy) NSString *userDescription; + +/** + * User name that should be attached to the crash report + */ +@property (nonatomic, copy) NSString *userName; + +/** + * User email that should be attached to the crash report + */ +@property (nonatomic, copy) NSString *userEmail; + +/** + * User ID that should be attached to the crash report + */ +@property (nonatomic, copy) NSString *userID; + +@end diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITFeedbackManager.h b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITFeedbackManager.h index 87b7cd5..6ce3673 100644 --- a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITFeedbackManager.h +++ b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITFeedbackManager.h @@ -39,11 +39,23 @@ #define BITHockeyFeedbackMessagesLoadingFinished @"BITHockeyFeedbackMessagesLoadingFinished" -typedef enum { - BITFeedbackUserDataElementDontShow = 0, // don't ask for this user data element at all - BITFeedbackUserDataElementOptional = 1, // the user may provide it, but does not have to - BITFeedbackUserDataElementRequired = 2 // the user has to provide this to continue -} BITFeedbackUserDataElement; +/** + * Defines behavior of the user data field + */ +typedef NS_ENUM(NSInteger, BITFeedbackUserDataElement) { + /** + * don't ask for this user data element at all + */ + BITFeedbackUserDataElementDontShow = 0, + /** + * the user may provide it, but does not have to + */ + BITFeedbackUserDataElementOptional = 1, + /** + * the user has to provide this to continue + */ + BITFeedbackUserDataElementRequired = 2 +}; @class BITFeedbackMessage; @@ -80,33 +92,7 @@ typedef enum { feedback message. */ -@interface BITFeedbackManager : BITHockeyBaseManager { -@private - NSFileManager *_fileManager; - NSString *_feedbackDir; - NSString *_settingsFile; - - NSMutableArray *_feedbackList; - NSString *_token; - - BOOL _disableFeedbackManager; - BOOL _didAskUserData; - - BITFeedbackUserDataElement _requireUserName; - BITFeedbackUserDataElement _requireUserEmail; - BOOL _showAlertOnIncomingMessages; - - NSDate *_lastCheck; - NSNumber *_lastMessageID; - - NSDate *_lastRefreshDate; - - BITFeedbackWindowController *_feedbackWindowController; - - BOOL _didSetupDidBecomeActiveNotifications; - BOOL _networkRequestInProgress; -} - +@interface BITFeedbackManager : BITHockeyBaseManager ///----------------------------------------------------------------------------- /// @name General settings diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITFeedbackWindowController.h b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITFeedbackWindowController.h index 0f417f5..dfced66 100644 --- a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITFeedbackWindowController.h +++ b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITFeedbackWindowController.h @@ -30,35 +30,7 @@ @class BITFeedbackManager; -@interface BITFeedbackWindowController : NSWindowController { -@private - BITFeedbackManager *_manager; - NSDateFormatter *_lastUpdateDateFormatter; - - NSView *_userDataView; - NSTextField *_userNameTextField; - NSTextField *_userEmailTextField; - NSButton *_userDataContinueButton; - - NSString *_userName; - NSString *_userEmail; - - NSView *_feedbackView; - NSView *_feedbackEmptyView; - NSScrollView *_feedbackScrollView; - NSTableView *_feedbackTableView; - - NSTextView *_messageTextField; - NSAttributedString *_messageText; - - NSView *_statusBarComposeView; - NSButton *_sendMessageButton; - - NSView *_statusBarDefaultView; - NSProgressIndicator *_statusBarLoadingIndicator; - NSTextField *_statusBarTextField; - NSButton *_statusBarRefreshButton; -} +@interface BITFeedbackWindowController : NSWindowController - (id)initWithManager:(BITFeedbackManager *)feedbackManager; diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITHockeyAttachment.h b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITHockeyAttachment.h new file mode 100644 index 0000000..854fd82 --- /dev/null +++ b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITHockeyAttachment.h @@ -0,0 +1,66 @@ +/* + * Author: Andreas Linde + * + * Copyright (c) 2014 HockeyApp, Bit Stadium GmbH. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#import + +/** + Provides support to add binary attachments to crash reports + + This is used by `[BITCrashManagerDelegate attachmentForCrashManager:]` + */ +@interface BITHockeyAttachment : NSObject + +/** + The filename the attachment should get + */ +@property (nonatomic, readonly, strong) NSString *filename; + +/** + The attachment data as NSData object + */ +@property (nonatomic, readonly, strong) NSData *hockeyAttachmentData; + +/** + The content type of your data as MIME type + */ +@property (nonatomic, readonly, strong) NSString *contentType; + +/** + Create an BITHockeyAttachment instance with a given filename and NSData object + + @param filename The filename the attachment should get. If nil will get a automatically generated filename + @param hockeyAttachmentData The attachment data as NSData. The instance will be ignore if this is set to nil! + @param contentType The content type of your data as MIME type. If nil will be set to "application/octet-stream" + + @return An instsance of BITHockeyAttachment + */ +- (instancetype)initWithFilename:(NSString *)filename + hockeyAttachmentData:(NSData *)hockeyAttachmentData + contentType:(NSString *)contentType; + +@end diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITHockeyBaseManager.h b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITHockeyBaseManager.h index a76d52c..7ecb7c3 100644 --- a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITHockeyBaseManager.h +++ b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITHockeyBaseManager.h @@ -35,18 +35,7 @@ */ -@interface BITHockeyBaseManager : NSObject { -@private - NSDateFormatter *_rfc3339Formatter; - - NSString *_appIdentifier; - - NSString *_userID; - NSString *_userName; - NSString *_userEmail; - - NSString *_serverURL; -} +@interface BITHockeyBaseManager : NSObject ///----------------------------------------------------------------------------- /// @name Modules diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITHockeyManager.h b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITHockeyManager.h index 8904828..ce0218c 100644 --- a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITHockeyManager.h +++ b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/BITHockeyManager.h @@ -53,27 +53,7 @@ @warning You should **NOT** change any module configuration after calling `startManager`! */ -@interface BITHockeyManager : NSObject { -@private - NSString *_appIdentifier; - NSString *_serverURL; - - BOOL _validAppIdentifier; - - BOOL _startManagerIsInvoked; - - BITCrashManager *_crashManager; - id _delegate; - BOOL _disableCrashManager; - - BITFeedbackManager *_feedbackManager; - BOOL _disableFeedbackManager; - - BOOL _debugLogEnabled; - - NSInteger _statusCode; - NSURLConnection *_urlConnection; -} +@interface BITHockeyManager : NSObject #pragma mark - Public Methods @@ -205,7 +185,6 @@ Returns the BITFeedbackManager instance initialized by BITHockeyManager @see configureWithIdentifier:delegate: - @see configureWithBetaIdentifier:liveIdentifier:delegate: @see startManager @see disableFeedbackManager */ @@ -233,39 +212,81 @@ /** Set the userid that should used in the SDK components - Right now this is used by the `BITCrashMananger` to attach to a crash report and `BITFeedbackManager`. + Right now this is used by the `BITCrashManager` to attach to a crash report. + `BITFeedbackManager` uses it too for assigning the user to a discussion thread. - Note: the value is persisted in the keychain! To remove old values, call this setter with a `nil` value. + The value can be set at any time and will be stored in the keychain on the current + device only! To delete the value from the keychain set the value to `nil`. + + This property is optional and can be used as an alternative to the delegate. If you + want to define specific data for each component, use the delegate instead which does + overwrite the values set by this property. + + @warning When returning a non nil value, crash reports are not anonymous any more + and the crash alerts will not show the word "anonymous"! + + @warning This property needs to be set before calling `startManager` to be considered + for being added to crash reports as meta data. @see [BITHockeyManagerDelegate userIDForHockeyManager:componentManager:] @see setUserName: @see setUserEmail: + + @param userID NSString value for the userID */ - (void)setUserID:(NSString *)userID; /** Set the user name that should used in the SDK components - Right now this is used by the `BITCrashMananger` to attach to a crash report and `BITFeedbackManager`. + Right now this is used by the `BITCrashManager` to attach to a crash report. + `BITFeedbackManager` uses it too for assigning the user to a discussion thread. + + The value can be set at any time and will be stored in the keychain on the current + device only! To delete the value from the keychain set the value to `nil`. + + This property is optional and can be used as an alternative to the delegate. If you + want to define specific data for each component, use the delegate instead which does + overwrite the values set by this property. - Note: the value is persisted in the keychain! To remove old values, call this setter with a `nil` value. + @warning When returning a non nil value, crash reports are not anonymous any more + and the crash alerts will not show the word "anonymous"! + + @warning This property needs to be set before calling `startManager` to be considered + for being added to crash reports as meta data. @see [BITHockeyManagerDelegate userNameForHockeyManager:componentManager:] @see setUserID: @see setUserEmail: + + @param userName NSString value for the userName */ - (void)setUserName:(NSString *)userName; /** Set the users email address that should used in the SDK components - Right now this is used by the `BITCrashMananger` to attach to a crash report and `BITFeedbackManager`. + Right now this is used by the `BITCrashManager` to attach to a crash report. + `BITFeedbackManager` uses it too for assigning the user to a discussion thread. + + The value can be set at any time and will be stored in the keychain on the current + device only! To delete the value from the keychain set the value to `nil`. - Note: the value is persisted in the keychain! To remove old values, call this setter with a `nil` value. + This property is optional and can be used as an alternative to the delegate. If you + want to define specific data for each component, use the delegate instead which does + overwrite the values set by this property. + + @warning When returning a non nil value, crash reports are not anonymous any more + and the crash alerts will not show the word "anonymous"! + + @warning This property needs to be set before calling `startManager` to be considered + for being added to crash reports as meta data. @see [BITHockeyManagerDelegate userEmailForHockeyManager:componentManager:] @see setUserID: @see setUserName: + + @param userEmail NSString value for the userEmail */ - (void)setUserEmail:(NSString *)userEmail; diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/HockeySDK.h b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/HockeySDK.h index 1c3c571..16fded2 100644 --- a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/HockeySDK.h +++ b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Headers/HockeySDK.h @@ -22,11 +22,18 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +#import + #import #import +#import + #import #import +#import +#import +#import #import @@ -41,32 +48,70 @@ extern NSString *const __attribute__((unused)) kBITDefaultUserID; extern NSString *const __attribute__((unused)) kBITDefaultUserName; extern NSString *const __attribute__((unused)) kBITDefaultUserEmail; -// hockey crash reporting api error domain -typedef enum { +/** + * HockeySDK Crash Reporter error domain + */ +typedef NS_ENUM (NSInteger, BITCrashErrorReason) { + /** + * Unknown error + */ BITCrashErrorUnknown, + /** + * API Server rejected app version + */ BITCrashAPIAppVersionRejected, + /** + * API Server returned empty response + */ BITCrashAPIReceivedEmptyResponse, + /** + * Connection error with status code + */ BITCrashAPIErrorWithStatusCode -} BITCrashErrorReason; +}; extern NSString *const __attribute__((unused)) kBITCrashErrorDomain; -// hockey feedback api error domain -typedef enum { +/** + * HockeySDK Feedback error domain + */ +typedef NS_ENUM(NSInteger, BITFeedbackErrorReason) { + /** + * Unknown error + */ BITFeedbackErrorUnknown, + /** + * API Server returned invalid status + */ BITFeedbackAPIServerReturnedInvalidStatus, + /** + * API Server returned invalid data + */ BITFeedbackAPIServerReturnedInvalidData, + /** + * API Server returned empty response + */ BITFeedbackAPIServerReturnedEmptyResponse, + /** + * Authorization secret missing + */ BITFeedbackAPIClientAuthorizationMissingSecret, + /** + * No internet connection + */ BITFeedbackAPIClientCannotCreateConnection -} BITFeedbackErrorReason; +}; extern NSString *const __attribute__((unused)) kBITFeedbackErrorDomain; -// HockeySDK - -typedef enum { - BITHockeyErrorUnknown, - HockeyAPIClientMissingJSONLibrary -} BITHockeyErrorReason; +/** + * HockeySDK global error domain + */ +typedef NS_ENUM(NSInteger, BITHockeyErrorReason) { + /** + * Unknown error + */ + BITHockeyErrorUnknown +}; extern NSString *const __attribute__((unused)) kBITHockeyErrorDomain; +// HockeySDK diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/HockeySDK b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/HockeySDK index 3f84f81..68a15db 100755 Binary files a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/HockeySDK and b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/HockeySDK differ diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Modules/module.modulemap b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Modules/module.modulemap new file mode 100644 index 0000000..e6cbc2c --- /dev/null +++ b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module HockeySDK { + umbrella header "HockeySDK.h" + + export * + module * { export * } +} diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/BITCrashReportUI.nib b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/BITCrashReportUI.nib index 54c224f..0f04ce6 100644 Binary files a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/BITCrashReportUI.nib and b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/BITCrashReportUI.nib differ diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/BITFeedbackWindowController.nib b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/BITFeedbackWindowController.nib index 11c1212..522f8d1 100644 Binary files a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/BITFeedbackWindowController.nib and b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/BITFeedbackWindowController.nib differ diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/Info.plist b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/Info.plist index b01fb44..019551c 100644 --- a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/Info.plist +++ b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/Info.plist @@ -3,7 +3,7 @@ BuildMachineOSBuild - 13C64 + 14F27 CFBundleDevelopmentRegion English CFBundleExecutable @@ -17,25 +17,29 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.1.0 + 3.2.0 CFBundleSignature ???? + CFBundleSupportedPlatforms + + MacOSX + CFBundleVersion - 24 + 30 DTCompiler com.apple.compilers.llvm.clang.1_0 DTPlatformBuild - 5A3005 + 7A220 DTPlatformVersion GM DTSDKBuild - 13A595 + 15A278 DTSDKName - macosx10.9 + macosx10.11 DTXcode - 0502 + 0700 DTXcodeBuild - 5A3005 + 7A220 NSHumanReadableCopyright Copyright © 2012-2014 HockeyApp, Bit Stadium GmbH. All rights reserved. diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/de.lproj/HockeySDK.strings b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/de.lproj/HockeySDK.strings index f56aa07..4ff8423 100644 Binary files a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/de.lproj/HockeySDK.strings and b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/de.lproj/HockeySDK.strings differ diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/en.lproj/HockeySDK.strings b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/en.lproj/HockeySDK.strings index 09e2df0..1c5c83d 100644 Binary files a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/en.lproj/HockeySDK.strings and b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/en.lproj/HockeySDK.strings differ diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/fi.lproj/HockeySDK.strings b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/fi.lproj/HockeySDK.strings index f094632..96439e4 100644 Binary files a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/fi.lproj/HockeySDK.strings and b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/fi.lproj/HockeySDK.strings differ diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/fr.lproj/HockeySDK.strings b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/fr.lproj/HockeySDK.strings index 5091e65..e0a70b0 100644 Binary files a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/fr.lproj/HockeySDK.strings and b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/fr.lproj/HockeySDK.strings differ diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/it.lproj/HockeySDK.strings b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/it.lproj/HockeySDK.strings index 70b2015..95c873d 100644 Binary files a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/it.lproj/HockeySDK.strings and b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/it.lproj/HockeySDK.strings differ diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/ja.lproj/HockeySDK.strings b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/ja.lproj/HockeySDK.strings index 7b794a8..b5f5189 100644 Binary files a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/ja.lproj/HockeySDK.strings and b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/ja.lproj/HockeySDK.strings differ diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/nb.lproj/HockeySDK.strings b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/nb.lproj/HockeySDK.strings index 232088f..2f97268 100644 Binary files a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/nb.lproj/HockeySDK.strings and b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/nb.lproj/HockeySDK.strings differ diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/sv.lproj/HockeySDK.strings b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/sv.lproj/HockeySDK.strings index e7132a9..61ef531 100644 Binary files a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/sv.lproj/HockeySDK.strings and b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/Resources/sv.lproj/HockeySDK.strings differ diff --git a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/_CodeSignature/CodeResources b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/_CodeSignature/CodeResources index db28901..2224c22 100644 --- a/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/_CodeSignature/CodeResources +++ b/Pods/HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework/Versions/A/_CodeSignature/CodeResources @@ -6,21 +6,21 @@ Resources/BITCrashReportUI.nib - l9nFHkT9skEPnHX7X/5rY3fE7Nk= + 1DHQoAb7W3LWFBQ9wevg4wL5xYc= Resources/BITFeedbackWindowController.nib - jaH8GWYRq0LKIiF2zou6TI4P1yA= + ms3k3r2nFRz4Blh8ki1WgJlv7jQ= Resources/Info.plist - +SVoAmtDWErd3ZjyA90Qqt0bT5w= + ojimiDcGdSHD00L333deOu5MMc8= Resources/de.lproj/HockeySDK.strings hash - ky3CLs0GdzxNQ6IGu7E4PDqgUSc= + jo3EMuE0u4n2fAAoz4fIZAOmxg8= optional @@ -29,7 +29,7 @@ hash - DsKarsjo79pFj0WBUo+iPoledWg= + R6ZVr6oAsRFLBjlCUTaaDvXCUFM= optional @@ -38,7 +38,7 @@ hash - 9XXJTd3+QEjM2ERhexo51RQNtC0= + Lhr8Fik+QVvV84vnZke4YFVbBC0= optional @@ -47,7 +47,7 @@ hash - hdsHlH0+VHdFhbkPJa8Aln6O0T4= + eZTpQasOiXMeujIm+H+jy1cylcg= optional @@ -56,7 +56,7 @@ hash - 9+fVr4VMM82/V+x80BLdNlDkWik= + TCTZtvLwG07cqw2xoajSKHpLpq0= optional @@ -65,7 +65,7 @@ hash - Wic2wRJCU87hrpZVcQu+uXFI540= + 9L3urRuxyr0wZgk0neZGrJaQnFQ= optional @@ -74,7 +74,7 @@ hash - Bt6CnCeJ0Bzx441Ww4Fa8pA0CdU= + LpcWW+B4F6iR+2x2NAzDkhVjL30= optional @@ -83,7 +83,7 @@ hash - kb34OyuV0WE4dsn9LX3yAsMZNSs= + mc4S8tl/ei/+gv1fVyd/s3cCG5U= optional @@ -91,33 +91,45 @@ files2 + Headers/BITCrashDetails.h + + cGYeMZeFecsfUgHx/3MAe6Xr9wY= + Headers/BITCrashExceptionApplication.h TPNjCJ7UCcNT6fRxpjbCNF5Ndb0= Headers/BITCrashManager.h - 6VJQFDBpBmfbkL4rmJRfZG10OpI= + 0SUPkdixdAeZHB5vXbnszT3yfV0= Headers/BITCrashManagerDelegate.h - GSYEFnWlyc8STfRefMp+RqhAn+A= + xN+7cConK98qLbalHrbl8UJkdIQ= + + Headers/BITCrashMetaData.h + + 1v13IP1iJ9ba/1DJm8x7wOJ9oGI= Headers/BITFeedbackManager.h - E18EVtWftzzW+DaWA4+pgLr/5fI= + DJS4Hsr1JEcJ298c859vfXbZnjM= Headers/BITFeedbackWindowController.h - 2iQdR8PFVWYjyiXNdWwZF+/ZVrU= + pKTuBmNYXxlTGcL20xnFbM4hgik= + + Headers/BITHockeyAttachment.h + + kmTpG5GlHjyVDxDosUKS2CP9gKI= Headers/BITHockeyBaseManager.h - gmwjEH6gxn+KGW5wx/CajufVfvw= + 59dpaPGt54HnbsasfWC+CMNPa80= Headers/BITHockeyManager.h - AOqbYaOTh/jn7SSK9lOJrCIN+/k= + VoVC1TCB4Ys0xP75sPA80uEkRdo= Headers/BITHockeyManagerDelegate.h @@ -129,25 +141,29 @@ Headers/HockeySDK.h - neopxT2xBwPp3O+DVfd7sWseVvQ= + 018+LGCFaPOaiwvVQ8/IqObfaOI= + + Modules/module.modulemap + + XqNxHBjpNA+vmtw20+/D9PQwPx8= Resources/BITCrashReportUI.nib - l9nFHkT9skEPnHX7X/5rY3fE7Nk= + 1DHQoAb7W3LWFBQ9wevg4wL5xYc= Resources/BITFeedbackWindowController.nib - jaH8GWYRq0LKIiF2zou6TI4P1yA= + ms3k3r2nFRz4Blh8ki1WgJlv7jQ= Resources/Info.plist - +SVoAmtDWErd3ZjyA90Qqt0bT5w= + ojimiDcGdSHD00L333deOu5MMc8= Resources/de.lproj/HockeySDK.strings hash - ky3CLs0GdzxNQ6IGu7E4PDqgUSc= + jo3EMuE0u4n2fAAoz4fIZAOmxg8= optional @@ -156,7 +172,7 @@ hash - DsKarsjo79pFj0WBUo+iPoledWg= + R6ZVr6oAsRFLBjlCUTaaDvXCUFM= optional @@ -165,7 +181,7 @@ hash - 9XXJTd3+QEjM2ERhexo51RQNtC0= + Lhr8Fik+QVvV84vnZke4YFVbBC0= optional @@ -174,7 +190,7 @@ hash - hdsHlH0+VHdFhbkPJa8Aln6O0T4= + eZTpQasOiXMeujIm+H+jy1cylcg= optional @@ -183,7 +199,7 @@ hash - 9+fVr4VMM82/V+x80BLdNlDkWik= + TCTZtvLwG07cqw2xoajSKHpLpq0= optional @@ -192,7 +208,7 @@ hash - Wic2wRJCU87hrpZVcQu+uXFI540= + 9L3urRuxyr0wZgk0neZGrJaQnFQ= optional @@ -201,7 +217,7 @@ hash - Bt6CnCeJ0Bzx441Ww4Fa8pA0CdU= + LpcWW+B4F6iR+2x2NAzDkhVjL30= optional @@ -210,7 +226,7 @@ hash - kb34OyuV0WE4dsn9LX3yAsMZNSs= + mc4S8tl/ei/+gv1fVyd/s3cCG5U= optional diff --git a/Pods/Local Podspecs/MASShortcut.podspec b/Pods/Local Podspecs/MASShortcut.podspec deleted file mode 100644 index 22afc6b..0000000 --- a/Pods/Local Podspecs/MASShortcut.podspec +++ /dev/null @@ -1,13 +0,0 @@ -Pod::Spec.new do |s| - s.name = 'MASShortcut' - s.version = '1.2.3' - s.summary = 'Modern framework for managing global keyboard shortcuts compatible with Mac App Store' - s.homepage = 'https://github.com/sonoramac/MASShortcut' - s.authors = { 'Vadim Shpakovski' => 'vadim@shpakovski.com' } - s.license = 'BSD 2-clause' - - s.source = { :git => 'git@github.com:shpakovski/MASShortcut.git', :tag => '1.2.3' } - s.source_files = '*.{h,m}' - s.framework = 'Carbon' - s.requires_arc = true -end diff --git a/Pods/Local Podspecs/MASShortcut.podspec.json b/Pods/Local Podspecs/MASShortcut.podspec.json new file mode 100644 index 0000000..bfa98ef --- /dev/null +++ b/Pods/Local Podspecs/MASShortcut.podspec.json @@ -0,0 +1,17 @@ +{ + "name": "MASShortcut", + "version": "1.2.3", + "summary": "Modern framework for managing global keyboard shortcuts compatible with Mac App Store", + "homepage": "https://github.com/sonoramac/MASShortcut", + "authors": { + "Vadim Shpakovski": "vadim@shpakovski.com" + }, + "license": "BSD 2-clause", + "source": { + "git": "git@github.com:shpakovski/MASShortcut.git", + "tag": "1.2.3" + }, + "source_files": "*.{h,m}", + "frameworks": "Carbon", + "requires_arc": true +} diff --git a/Pods/Local Podspecs/RoboKit.podspec b/Pods/Local Podspecs/RoboKit.podspec deleted file mode 100644 index a0a06a2..0000000 --- a/Pods/Local Podspecs/RoboKit.podspec +++ /dev/null @@ -1,51 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Be sure to run `pod spec lint RoboKit.podspec' to ensure this is a -# valid spec. -# -# Remove all comments before submitting the spec. Optional attributes are commented. -# -# For details see: https://github.com/CocoaPods/CocoaPods/wiki/The-podspec-format -# -Pod::Spec.new do |s| - s.name = "RoboKit" - s.version = "0.3.3" - s.summary = "RoboKit is a small collection of utilities and categories." - s.homepage = "https://github.com/RobotsAndPencils/RoboKit" - s.license = { - :type => 'MIT', - :text => <<-LICENSE -Copyright (c) 2012 Robots and Pencils, Inc. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -"RoboKit" is a trademark of Robots and Pencils, Inc. and may not be used to endorse or promote products derived from this software without specific prior written permission. - -Neither the name of the Robots and Pencils, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - LICENSE - } - s.authors = { - "Dave Anderson" => "dave@robotsandpencils.com", - "Michael Beauregard" => "michael.beauregard@robotsandpencils.com", - "Cody Rayment" => "cody.rayment@robotsandpencils.com", - } - s.source = { :git => "https://github.com/RobotsAndPencils/RoboKit.git", :tag => s.version.to_s } - - s.osx.deployment_target = '10.9' - s.ios.deployment_target = '7.0' - - s.source_files = 'Classes/**/*.{h,m}' - s.ios.source_files = 'iOS/**/*.{h,m}' - s.ios.exclude_files = 'OSX/' - s.osx.source_files = 'OSX/**/*.{h,m}' - s.osx.exclude_files = 'iOS/' - - s.framework = 'Foundation' - s.ios.framework = 'UIKit' - s.osx.framework = 'Cocoa' - - s.requires_arc = true -end diff --git a/Pods/Local Podspecs/RoboKit.podspec.json b/Pods/Local Podspecs/RoboKit.podspec.json new file mode 100644 index 0000000..1bb5869 --- /dev/null +++ b/Pods/Local Podspecs/RoboKit.podspec.json @@ -0,0 +1,36 @@ +{ + "name": "RoboKit", + "version": "0.3.6", + "summary": "RoboKit is a small collection of utilities and categories.", + "homepage": "https://github.com/RobotsAndPencils/RoboKit", + "license": { + "type": "MIT", + "text": "Copyright (c) 2012 Robots and Pencils, Inc. All rights reserved.\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\n\"RoboKit\" is a trademark of Robots and Pencils, Inc. and may not be used to endorse or promote products derived from this software without specific prior written permission.\n\nNeither the name of the Robots and Pencils, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. \n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n" + }, + "authors": { + "Dave Anderson": "dave@robotsandpencils.com", + "Michael Beauregard": "michael.beauregard@robotsandpencils.com", + "Cody Rayment": "cody.rayment@robotsandpencils.com" + }, + "source": { + "git": "https://github.com/RobotsAndPencils/RoboKit.git", + "tag": "0.3.6" + }, + "platforms": { + "osx": "10.9", + "ios": "7.0" + }, + "source_files": "Classes/**/*.{h,m}", + "ios": { + "source_files": "iOS/**/*.{h,m}", + "exclude_files": "OSX/", + "frameworks": "UIKit" + }, + "osx": { + "source_files": "OSX/**/*.{h,m}", + "exclude_files": "iOS/", + "frameworks": "Cocoa" + }, + "frameworks": "Foundation", + "requires_arc": true +} diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index 21353dd..5cf9514 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -1,16 +1,18 @@ PODS: - - HockeySDK-Mac (2.1.0) + - HockeySDK-Mac (3.2.0) - libextobjc/EXTKeyPathCoding (0.4.1): - libextobjc/RuntimeExtensions - libextobjc/RuntimeExtensions (0.4.1) - MASShortcut (1.2.3) - - pop (1.0.7) - - RoboKit (0.3.3) + - OCMock (3.1.1) + - pop (1.0.8) + - RoboKit (0.3.6) DEPENDENCIES: - - HockeySDK-Mac (~> 2.1.0) + - HockeySDK-Mac (~> 3.2.0) - libextobjc/EXTKeyPathCoding - MASShortcut (from `git@github.com:RobotsAndPencils/MASShortcut.git`, branch `Jeff`) + - OCMock (~> 3.1) - pop (~> 1.0) - RoboKit (from `git@github.com:RobotsAndPencils/RoboKit.git`) @@ -21,11 +23,17 @@ EXTERNAL SOURCES: RoboKit: :git: git@github.com:RobotsAndPencils/RoboKit.git +CHECKOUT OPTIONS: + RoboKit: + :commit: 6429cba42397ab61b592aa4152573c10862d17b0 + :git: git@github.com:RobotsAndPencils/RoboKit.git + SPEC CHECKSUMS: - HockeySDK-Mac: b833b385b4fb66932d760fbcb47733a1544d867c - libextobjc: d6146fce3ebea986b7f75fcb4c967639200b88b0 - MASShortcut: e67441d037a95c1978fae7405e5dae7f54afc2bd - pop: 2f14a1ea61339767af9e66741b418c831b3844df - RoboKit: e5ab6328a12bc9795bcde2d5f0f30bc1556718d4 + HockeySDK-Mac: f3a064ac3118a30144cef628a78ef39fb9d29923 + libextobjc: a650fc1bf489a3d3a9bc2e621efa3e1006fc5471 + MASShortcut: baaf44a587b4c5fed4d68d9457c4aa02218ec64c + OCMock: a73f69963a8a542b0b343e2617650e4dca0cbbc2 + pop: bb773ae2c791ca2629de13b347e7a8b450fa6a57 + RoboKit: 15aea97275f20477ded4a7c76433fecdd3b6322a -COCOAPODS: 0.34.4 +COCOAPODS: 0.38.2 diff --git a/Pods/OCMock/README.md b/Pods/OCMock/README.md new file mode 100644 index 0000000..5011142 --- /dev/null +++ b/Pods/OCMock/README.md @@ -0,0 +1,12 @@ +OCMock +====== + +OCMock is an Objective-C implementation of mock objects. + +Github is used to store and manage the source code. + +For downloads, documentation, and support please visit [ocmock.org][]. + +[![Build Status](https://travis-ci.org/erikdoe/ocmock.png?branch=master)](https://travis-ci.org/erikdoe/ocmock) + + [ocmock.org]: http://ocmock.org/ diff --git a/Pods/OCMock/Source/License.txt b/Pods/OCMock/Source/License.txt new file mode 100644 index 0000000..f433b1a --- /dev/null +++ b/Pods/OCMock/Source/License.txt @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS diff --git a/Pods/OCMock/Source/OCMock/NSInvocation+OCMAdditions.h b/Pods/OCMock/Source/OCMock/NSInvocation+OCMAdditions.h new file mode 100644 index 0000000..894f632 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/NSInvocation+OCMAdditions.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2006-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + +@interface NSInvocation(OCMAdditions) + +- (BOOL)hasCharPointerArgument; + +- (id)getArgumentAtIndexAsObject:(NSInteger)argIndex; + +- (NSString *)invocationDescription; + +- (NSString *)argumentDescriptionAtIndex:(NSInteger)argIndex; + +- (NSString *)objectDescriptionAtIndex:(NSInteger)anInt; +- (NSString *)charDescriptionAtIndex:(NSInteger)anInt; +- (NSString *)unsignedCharDescriptionAtIndex:(NSInteger)anInt; +- (NSString *)intDescriptionAtIndex:(NSInteger)anInt; +- (NSString *)unsignedIntDescriptionAtIndex:(NSInteger)anInt; +- (NSString *)shortDescriptionAtIndex:(NSInteger)anInt; +- (NSString *)unsignedShortDescriptionAtIndex:(NSInteger)anInt; +- (NSString *)longDescriptionAtIndex:(NSInteger)anInt; +- (NSString *)unsignedLongDescriptionAtIndex:(NSInteger)anInt; +- (NSString *)longLongDescriptionAtIndex:(NSInteger)anInt; +- (NSString *)unsignedLongLongDescriptionAtIndex:(NSInteger)anInt; +- (NSString *)doubleDescriptionAtIndex:(NSInteger)anInt; +- (NSString *)floatDescriptionAtIndex:(NSInteger)anInt; +- (NSString *)structDescriptionAtIndex:(NSInteger)anInt; +- (NSString *)pointerDescriptionAtIndex:(NSInteger)anInt; +- (NSString *)cStringDescriptionAtIndex:(NSInteger)anInt; +- (NSString *)selectorDescriptionAtIndex:(NSInteger)anInt; + +@end diff --git a/Pods/OCMock/Source/OCMock/NSInvocation+OCMAdditions.m b/Pods/OCMock/Source/OCMock/NSInvocation+OCMAdditions.m new file mode 100644 index 0000000..94342c6 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/NSInvocation+OCMAdditions.m @@ -0,0 +1,380 @@ +/* + * Copyright (c) 2006-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "NSInvocation+OCMAdditions.h" +#import "OCMFunctions.h" + + +@implementation NSInvocation(OCMAdditions) + +- (BOOL)hasCharPointerArgument +{ + NSMethodSignature *signature = [self methodSignature]; + for(NSUInteger i = 0; i < [signature numberOfArguments]; i++) + { + const char *argType = OCMTypeWithoutQualifiers([signature getArgumentTypeAtIndex:i]); + if(strcmp(argType, "*") == 0) + return YES; + } + return NO; +} + + +- (id)getArgumentAtIndexAsObject:(NSInteger)argIndex +{ + const char *argType = OCMTypeWithoutQualifiers([[self methodSignature] getArgumentTypeAtIndex:(NSUInteger)argIndex]); + + if((strlen(argType) > 1) && (strchr("{^", argType[0]) == NULL) && (strcmp("@?", argType) != 0)) + [NSException raise:NSInvalidArgumentException format:@"Cannot handle argument type '%s'.", argType]; + + if(OCMIsObjectType(argType)) + { + id value; + [self getArgument:&value atIndex:argIndex]; + return value; + } + + switch(argType[0]) + { + case ':': + { + SEL s = (SEL)0; + [self getArgument:&s atIndex:argIndex]; + return [NSValue valueWithBytes:&s objCType:":"]; + } + case 'i': + { + int value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 's': + { + short value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 'l': + { + long value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 'q': + { + long long value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 'c': + { + char value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 'C': + { + unsigned char value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 'I': + { + unsigned int value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 'S': + { + unsigned short value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 'L': + { + unsigned long value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 'Q': + { + unsigned long long value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 'f': + { + float value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 'd': + { + double value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 'D': + { + long double value; + [self getArgument:&value atIndex:argIndex]; + return [NSValue valueWithBytes:&value objCType:@encode(typeof(value))]; + } + case 'B': + { + bool value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case '^': + case '*': + { + void *value = NULL; + [self getArgument:&value atIndex:argIndex]; + return [NSValue valueWithPointer:value]; + } + case '{': // structure + { + NSUInteger argSize; + NSGetSizeAndAlignment([[self methodSignature] getArgumentTypeAtIndex:(NSUInteger)argIndex], &argSize, NULL); + if(argSize == 0) // TODO: Can this happen? Is frameLength a good choice in that case? + argSize = [[self methodSignature] frameLength]; + NSMutableData *argumentData = [[[NSMutableData alloc] initWithLength:argSize] autorelease]; + [self getArgument:[argumentData mutableBytes] atIndex:argIndex]; + return [NSValue valueWithBytes:[argumentData bytes] objCType:argType]; + } + + } + [NSException raise:NSInvalidArgumentException format:@"Argument type '%s' not supported", argType]; + return nil; +} + +- (NSString *)invocationDescription +{ + NSMethodSignature *methodSignature = [self methodSignature]; + NSUInteger numberOfArgs = [methodSignature numberOfArguments]; + + if (numberOfArgs == 2) + return NSStringFromSelector([self selector]); + + NSArray *selectorParts = [NSStringFromSelector([self selector]) componentsSeparatedByString:@":"]; + NSMutableString *description = [[NSMutableString alloc] init]; + NSUInteger i; + for(i = 2; i < numberOfArgs; i++) + { + [description appendFormat:@"%@%@:", (i > 2 ? @" " : @""), [selectorParts objectAtIndex:(i - 2)]]; + [description appendString:[self argumentDescriptionAtIndex:(NSInteger)i]]; + } + + return [description autorelease]; +} + +- (NSString *)argumentDescriptionAtIndex:(NSInteger)argIndex +{ + const char *argType = OCMTypeWithoutQualifiers([[self methodSignature] getArgumentTypeAtIndex:(NSUInteger)argIndex]); + + switch(*argType) + { + case '@': return [self objectDescriptionAtIndex:argIndex]; + case 'B': return [self boolDescriptionAtIndex:argIndex]; + case 'c': return [self charDescriptionAtIndex:argIndex]; + case 'C': return [self unsignedCharDescriptionAtIndex:argIndex]; + case 'i': return [self intDescriptionAtIndex:argIndex]; + case 'I': return [self unsignedIntDescriptionAtIndex:argIndex]; + case 's': return [self shortDescriptionAtIndex:argIndex]; + case 'S': return [self unsignedShortDescriptionAtIndex:argIndex]; + case 'l': return [self longDescriptionAtIndex:argIndex]; + case 'L': return [self unsignedLongDescriptionAtIndex:argIndex]; + case 'q': return [self longLongDescriptionAtIndex:argIndex]; + case 'Q': return [self unsignedLongLongDescriptionAtIndex:argIndex]; + case 'd': return [self doubleDescriptionAtIndex:argIndex]; + case 'f': return [self floatDescriptionAtIndex:argIndex]; + case 'D': return [self longDoubleDescriptionAtIndex:argIndex]; + case '{': return [self structDescriptionAtIndex:argIndex]; + case '^': return [self pointerDescriptionAtIndex:argIndex]; + case '*': return [self cStringDescriptionAtIndex:argIndex]; + case ':': return [self selectorDescriptionAtIndex:argIndex]; + default: return [@""]; // avoid confusion with trigraphs... + } + +} + + +- (NSString *)objectDescriptionAtIndex:(NSInteger)anInt +{ + id object; + + [self getArgument:&object atIndex:anInt]; + if (object == nil) + return @"nil"; + else if(![object isProxy] && [object isKindOfClass:[NSString class]]) + return [NSString stringWithFormat:@"@\"%@\"", [object description]]; + else + // The description cannot be nil, if it is then replace it + return [object description] ?: @""; +} + +- (NSString *)boolDescriptionAtIndex:(NSInteger)anInt +{ + bool value; + [self getArgument:&value atIndex:anInt]; + return value? @"YES" : @"NO"; +} + +- (NSString *)charDescriptionAtIndex:(NSInteger)anInt +{ + unsigned char buffer[128]; + memset(buffer, 0x0, 128); + + [self getArgument:&buffer atIndex:anInt]; + + // If there's only one character in the buffer, and it's 0 or 1, then we have a BOOL + if (buffer[1] == '\0' && (buffer[0] == 0 || buffer[0] == 1)) + return (buffer[0] == 1 ? @"YES" : @"NO"); + else + return [NSString stringWithFormat:@"'%c'", *buffer]; +} + +- (NSString *)unsignedCharDescriptionAtIndex:(NSInteger)anInt +{ + unsigned char buffer[128]; + memset(buffer, 0x0, 128); + + [self getArgument:&buffer atIndex:anInt]; + return [NSString stringWithFormat:@"'%c'", *buffer]; +} + +- (NSString *)intDescriptionAtIndex:(NSInteger)anInt +{ + int intValue; + + [self getArgument:&intValue atIndex:anInt]; + return [NSString stringWithFormat:@"%d", intValue]; +} + +- (NSString *)unsignedIntDescriptionAtIndex:(NSInteger)anInt +{ + unsigned int intValue; + + [self getArgument:&intValue atIndex:anInt]; + return [NSString stringWithFormat:@"%d", intValue]; +} + +- (NSString *)shortDescriptionAtIndex:(NSInteger)anInt +{ + short shortValue; + + [self getArgument:&shortValue atIndex:anInt]; + return [NSString stringWithFormat:@"%hi", shortValue]; +} + +- (NSString *)unsignedShortDescriptionAtIndex:(NSInteger)anInt +{ + unsigned short shortValue; + + [self getArgument:&shortValue atIndex:anInt]; + return [NSString stringWithFormat:@"%hu", shortValue]; +} + +- (NSString *)longDescriptionAtIndex:(NSInteger)anInt +{ + long longValue; + + [self getArgument:&longValue atIndex:anInt]; + return [NSString stringWithFormat:@"%ld", longValue]; +} + +- (NSString *)unsignedLongDescriptionAtIndex:(NSInteger)anInt +{ + unsigned long longValue; + + [self getArgument:&longValue atIndex:anInt]; + return [NSString stringWithFormat:@"%lu", longValue]; +} + +- (NSString *)longLongDescriptionAtIndex:(NSInteger)anInt +{ + long long longLongValue; + + [self getArgument:&longLongValue atIndex:anInt]; + return [NSString stringWithFormat:@"%qi", longLongValue]; +} + +- (NSString *)unsignedLongLongDescriptionAtIndex:(NSInteger)anInt +{ + unsigned long long longLongValue; + + [self getArgument:&longLongValue atIndex:anInt]; + return [NSString stringWithFormat:@"%qu", longLongValue]; +} + +- (NSString *)doubleDescriptionAtIndex:(NSInteger)anInt +{ + double doubleValue; + + [self getArgument:&doubleValue atIndex:anInt]; + return [NSString stringWithFormat:@"%f", doubleValue]; +} + +- (NSString *)floatDescriptionAtIndex:(NSInteger)anInt +{ + float floatValue; + + [self getArgument:&floatValue atIndex:anInt]; + return [NSString stringWithFormat:@"%f", floatValue]; +} + +- (NSString *)longDoubleDescriptionAtIndex:(NSInteger)anInt +{ + long double longDoubleValue; + + [self getArgument:&longDoubleValue atIndex:anInt]; + return [NSString stringWithFormat:@"%Lf", longDoubleValue]; +} + +- (NSString *)structDescriptionAtIndex:(NSInteger)anInt +{ + return [NSString stringWithFormat:@"(%@)", [[self getArgumentAtIndexAsObject:anInt] description]]; +} + +- (NSString *)pointerDescriptionAtIndex:(NSInteger)anInt +{ + void *buffer; + + [self getArgument:&buffer atIndex:anInt]; + return [NSString stringWithFormat:@"%p", buffer]; +} + +- (NSString *)cStringDescriptionAtIndex:(NSInteger)anInt +{ + char buffer[104]; + char *cStringPtr; + + [self getArgument:&cStringPtr atIndex:anInt]; + strncpy(buffer, cStringPtr, 100); + strcpy(buffer + 100, "..."); + return [NSString stringWithFormat:@"\"%s\"", buffer]; +} + +- (NSString *)selectorDescriptionAtIndex:(NSInteger)anInt +{ + SEL selectorValue; + + [self getArgument:&selectorValue atIndex:anInt]; + return [NSString stringWithFormat:@"@selector(%@)", NSStringFromSelector(selectorValue)]; +} + +@end diff --git a/Pods/OCMock/Source/OCMock/NSMethodSignature+OCMAdditions.h b/Pods/OCMock/Source/OCMock/NSMethodSignature+OCMAdditions.h new file mode 100644 index 0000000..b183df9 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/NSMethodSignature+OCMAdditions.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + +@interface NSMethodSignature(PrivateAPI) + ++ (id)signatureWithObjCTypes:(const char *)types; + +@end + +@interface NSMethodSignature(OCMAdditions) + +- (BOOL)usesSpecialStructureReturn; +- (NSString *)fullTypeString; +- (const char *)fullObjCTypes; + +@end diff --git a/Pods/OCMock/Source/OCMock/NSMethodSignature+OCMAdditions.m b/Pods/OCMock/Source/OCMock/NSMethodSignature+OCMAdditions.m new file mode 100644 index 0000000..d60590d --- /dev/null +++ b/Pods/OCMock/Source/OCMock/NSMethodSignature+OCMAdditions.m @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "NSMethodSignature+OCMAdditions.h" +#import "OCMFunctions.h" +#import + + +@implementation NSMethodSignature(OCMAdditions) + +- (BOOL)usesSpecialStructureReturn +{ + const char *types = OCMTypeWithoutQualifiers([self methodReturnType]); + + if((types == NULL) || (types[0] != '{')) + return NO; + + /* In some cases structures are returned by ref. The rules are complex and depend on the + architecture, see: + + http://sealiesoftware.com/blog/archive/2008/10/30/objc_explain_objc_msgSend_stret.html + http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/LowLevelABI/000-Introduction/introduction.html + https://github.com/atgreen/libffi/blob/master/src/x86/ffi64.c + http://www.uclibc.org/docs/psABI-x86_64.pdf + http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042e/IHI0042E_aapcs.pdf + + NSMethodSignature knows the details but has no API to return it, though it is in + the debugDescription. Horribly kludgy. + */ + NSRange range = [[self debugDescription] rangeOfString:@"is special struct return? YES"]; + return range.length > 0; +} + +- (NSString *)fullTypeString +{ + NSMutableString *typeString = [NSMutableString string]; + [typeString appendFormat:@"%s", [self methodReturnType]]; + for (NSUInteger i=0; i<[self numberOfArguments]; i++) + [typeString appendFormat:@"%s", [self getArgumentTypeAtIndex:i]]; + return typeString; +} + +- (const char *)fullObjCTypes +{ + return [[self fullTypeString] UTF8String]; +} + +@end diff --git a/Pods/OCMock/Source/OCMock/NSNotificationCenter+OCMAdditions.h b/Pods/OCMock/Source/OCMock/NSNotificationCenter+OCMAdditions.h new file mode 100644 index 0000000..c20a9c2 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/NSNotificationCenter+OCMAdditions.h @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + +@class OCObserverMockObject; + + +@interface NSNotificationCenter(OCMAdditions) + +- (void)addMockObserver:(OCObserverMockObject *)notificationObserver name:(NSString *)notificationName object:(id)notificationSender; + +@end diff --git a/Pods/OCMock/Source/OCMock/NSNotificationCenter+OCMAdditions.m b/Pods/OCMock/Source/OCMock/NSNotificationCenter+OCMAdditions.m new file mode 100644 index 0000000..14ff7f7 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/NSNotificationCenter+OCMAdditions.m @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "NSNotificationCenter+OCMAdditions.h" +#import "OCObserverMockObject.h" + + +@implementation NSNotificationCenter(OCMAdditions) + +- (void)addMockObserver:(OCObserverMockObject *)notificationObserver name:(NSString *)notificationName object:(id)notificationSender +{ + [notificationObserver autoRemoveFromCenter:self]; + [self addObserver:notificationObserver selector:@selector(handleNotification:) name:notificationName object:notificationSender]; +} + +@end diff --git a/Pods/OCMock/Source/OCMock/NSObject+OCMAdditions.h b/Pods/OCMock/Source/OCMock/NSObject+OCMAdditions.h new file mode 100644 index 0000000..f7b9c5c --- /dev/null +++ b/Pods/OCMock/Source/OCMock/NSObject+OCMAdditions.h @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2013-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + +@interface NSObject(OCMAdditions) + ++ (IMP)instanceMethodForwarderForSelector:(SEL)aSelector; ++ (void)enumerateMethodsInClass:(Class)aClass usingBlock:(void (^)(Class cls, SEL sel))aBlock; + +@end diff --git a/Pods/OCMock/Source/OCMock/NSObject+OCMAdditions.m b/Pods/OCMock/Source/OCMock/NSObject+OCMAdditions.m new file mode 100644 index 0000000..e4e0aaa --- /dev/null +++ b/Pods/OCMock/Source/OCMock/NSObject+OCMAdditions.m @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "NSObject+OCMAdditions.h" +#import "NSMethodSignature+OCMAdditions.h" +#import + +@implementation NSObject(OCMAdditions) + +static NSMutableDictionary *_OCMReturnTypeCache; + ++ (IMP)instanceMethodForwarderForSelector:(SEL)aSelector +{ + // use sel_registerName() and not @selector to avoid warning + SEL selectorWithNoImplementation = sel_registerName("methodWhichMustNotExist::::"); + +#ifndef __arm64__ + if(_OCMReturnTypeCache == nil) + _OCMReturnTypeCache = [[NSMutableDictionary alloc] init]; + + BOOL needsStructureReturn; + void *rawCacheKey[2] = { (void *)self, aSelector }; + NSData *cacheKey = [NSData dataWithBytes:rawCacheKey length:sizeof(rawCacheKey)]; + NSNumber *cachedValue = [_OCMReturnTypeCache objectForKey:cacheKey]; + + if(cachedValue == nil) + { + NSMethodSignature *sig = [self instanceMethodSignatureForSelector:aSelector]; + needsStructureReturn = [sig usesSpecialStructureReturn]; + [_OCMReturnTypeCache setObject:@(needsStructureReturn) forKey:cacheKey]; + } + else + { + needsStructureReturn = [cachedValue boolValue]; + } + + if(needsStructureReturn) + return class_getMethodImplementation_stret([NSObject class], selectorWithNoImplementation); +#endif + + return class_getMethodImplementation([NSObject class], selectorWithNoImplementation); +} + + ++ (void)enumerateMethodsInClass:(Class)aClass usingBlock:(void (^)(Class cls, SEL sel))aBlock +{ + for(Class cls = aClass; cls != nil; cls = class_getSuperclass(cls)) + { + Method *methodList = class_copyMethodList(cls, NULL); + if(methodList == NULL) + continue; + + for(Method *mPtr = methodList; *mPtr != NULL; mPtr++) + { + SEL sel = method_getName(*mPtr); + aBlock(cls, sel); + } + free(methodList); + } +} + +@end diff --git a/Pods/OCMock/Source/OCMock/NSValue+OCMAdditions.h b/Pods/OCMock/Source/OCMock/NSValue+OCMAdditions.h new file mode 100644 index 0000000..1b79a30 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/NSValue+OCMAdditions.h @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + +@interface NSValue(OCMAdditions) + +- (BOOL)getBytes:(void *)outputBuf objCType:(const char *)targetType; + +@end \ No newline at end of file diff --git a/Pods/OCMock/Source/OCMock/NSValue+OCMAdditions.m b/Pods/OCMock/Source/OCMock/NSValue+OCMAdditions.m new file mode 100644 index 0000000..59f9ad4 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/NSValue+OCMAdditions.m @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "NSValue+OCMAdditions.h" + + +@implementation NSValue(OCMAdditions) + +static CFNumberType OCMNumberTypeForObjCType(const char *objcType) +{ + switch (objcType[0]) + { + case 'c': return kCFNumberCharType; + case 'C': return kCFNumberCharType; + case 'B': return kCFNumberCharType; + case 's': return kCFNumberShortType; + case 'S': return kCFNumberShortType; + case 'i': return kCFNumberIntType; + case 'I': return kCFNumberIntType; + case 'l': return kCFNumberLongType; + case 'L': return kCFNumberLongType; + case 'q': return kCFNumberLongLongType; + case 'Q': return kCFNumberLongLongType; + case 'f': return kCFNumberFloatType; + case 'd': return kCFNumberDoubleType; + default: return 0; + } +} + + +static NSNumber *OCMNumberForValue(NSValue *value) +{ +#define CREATE_NUM(_type) ({ _type _v; [value getValue:&_v]; @(_v); }) + switch([value objCType][0]) + { + case 'c': return CREATE_NUM(char); + case 'C': return CREATE_NUM(unsigned char); + case 'B': return CREATE_NUM(bool); + case 's': return CREATE_NUM(short); + case 'S': return CREATE_NUM(unsigned short); + case 'i': return CREATE_NUM(int); + case 'I': return CREATE_NUM(unsigned int); + case 'l': return CREATE_NUM(long); + case 'L': return CREATE_NUM(unsigned long); + case 'q': return CREATE_NUM(long long); + case 'Q': return CREATE_NUM(unsigned long long); + case 'f': return CREATE_NUM(float); + case 'd': return CREATE_NUM(double); + default: return nil; + } +} + + +- (BOOL)getBytes:(void *)outputBuf objCType:(const char *)targetType +{ + /* + * See if they are similar number types, and if we can convert losslessly between them. + * For the most part, we set things up to use CFNumberGetValue, which returns false if + * conversion will be lossy. + */ + CFNumberType inputType = OCMNumberTypeForObjCType([self objCType]); + CFNumberType outputType = OCMNumberTypeForObjCType(targetType); + + if(inputType == 0 || outputType == 0) // one or both are non-number types + return NO; + + NSNumber *inputNumber = [self isKindOfClass:[NSNumber class]] ? (NSNumber *)self : OCMNumberForValue(self); + + /* + * Due to some legacy, back-compatible requirements in CFNumber.c, CFNumberGetValue can return true for + * some conversions which should not be allowed (by reading source, conversions from integer types to + * 8-bit or 16-bit integer types). So, check ourselves. + */ + long long min; + long long max; + long long val = [inputNumber longLongValue]; + switch(targetType[0]) + { + case 'B': + case 'c': min = CHAR_MIN; max = CHAR_MAX; break; + case 'C': min = 0; max = UCHAR_MAX; break; + case 's': min = SHRT_MIN; max = SHRT_MAX; break; + case 'S': min = 0; max = USHRT_MAX; break; + default: min = LLONG_MIN; max = LLONG_MAX; break; + } + if(val < min || val > max) + return NO; + + /* Get the number, and return NO if the value was out of range or conversion was lossy */ + return CFNumberGetValue((CFNumberRef)inputNumber, outputType, outputBuf); +} + + +@end diff --git a/Pods/OCMock/Source/OCMock/OCClassMockObject.h b/Pods/OCMock/Source/OCMock/OCClassMockObject.h new file mode 100644 index 0000000..18190c7 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCClassMockObject.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2005-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + +@interface OCClassMockObject : OCMockObject +{ + Class mockedClass; + Class originalMetaClass; +} + +- (id)initWithClass:(Class)aClass; + +- (Class)mockedClass; +- (Class)mockObjectClass; // since -class returns the mockedClass + +@end diff --git a/Pods/OCMock/Source/OCMock/OCClassMockObject.m b/Pods/OCMock/Source/OCMock/OCClassMockObject.m new file mode 100644 index 0000000..8ed24cb --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCClassMockObject.m @@ -0,0 +1,276 @@ +/* + * Copyright (c) 2005-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import +#import "OCClassMockObject.h" +#import "NSObject+OCMAdditions.h" +#import "OCMFunctions.h" +#import "OCMInvocationStub.h" + +@implementation OCClassMockObject + +#pragma mark Initialisers, description, accessors, etc. + +- (id)initWithClass:(Class)aClass +{ + [super init]; + mockedClass = aClass; + [self prepareClassForClassMethodMocking]; + return self; +} + +- (void)dealloc +{ + [self stopMocking]; + [super dealloc]; +} + +- (NSString *)description +{ + return [NSString stringWithFormat:@"OCMockObject(%@)", NSStringFromClass(mockedClass)]; +} + +- (Class)mockedClass +{ + return mockedClass; +} + +#pragma mark Extending/overriding superclass behaviour + +- (void)stopMocking +{ + if(originalMetaClass != nil) + [self restoreMetaClass]; + [super stopMocking]; +} + +- (void)restoreMetaClass +{ + OCMSetAssociatedMockForClass(nil, mockedClass); + OCMSetIsa(mockedClass, originalMetaClass); + originalMetaClass = nil; +} + +- (void)addStub:(OCMInvocationStub *)aStub +{ + [super addStub:aStub]; + if([aStub recordedAsClassMethod]) + [self setupForwarderForClassMethodSelector:[[aStub recordedInvocation] selector]]; +} + + +#pragma mark Class method mocking + +- (void)prepareClassForClassMethodMocking +{ + /* haven't figured out how to work around runtime dependencies on NSString, so exclude it for now */ + /* also weird: [[NSString class] isKindOfClass:[NSString class]] is false, hence the additional clause */ + if([[mockedClass class] isKindOfClass:[NSString class]] || (mockedClass == [NSString class])) + return; + + /* if there is another mock for this exact class, stop it */ + id otherMock = OCMGetAssociatedMockForClass(mockedClass, NO); + if(otherMock != nil) + [otherMock restoreMetaClass]; + + OCMSetAssociatedMockForClass(self, mockedClass); + + /* dynamically create a subclass and use its meta class as the meta class for the mocked class */ + Class subclass = OCMCreateSubclass(mockedClass, mockedClass); + originalMetaClass = object_getClass(mockedClass); + id newMetaClass = object_getClass(subclass); + OCMSetIsa(mockedClass, OCMGetIsa(subclass)); + + /* point forwardInvocation: of the object to the implementation in the mock */ + Method myForwardMethod = class_getInstanceMethod([self mockObjectClass], @selector(forwardInvocationForClassObject:)); + IMP myForwardIMP = method_getImplementation(myForwardMethod); + class_addMethod(newMetaClass, @selector(forwardInvocation:), myForwardIMP, method_getTypeEncoding(myForwardMethod)); + + /* create a dummy initialize method */ + Method myDummyInitializeMethod = class_getInstanceMethod([self mockObjectClass], @selector(initializeForClassObject)); + const char *initializeTypes = method_getTypeEncoding(myDummyInitializeMethod); + IMP myDummyInitializeIMP = method_getImplementation(myDummyInitializeMethod); + class_addMethod(newMetaClass, @selector(initialize), myDummyInitializeIMP, initializeTypes); + + /* adding forwarder for most class methods (instance methods on meta class) to allow for verify after run */ + NSArray *methodBlackList = @[@"class", @"forwardingTargetForSelector:", @"methodSignatureForSelector:", @"forwardInvocation:", @"isBlock", + @"instanceMethodForwarderForSelector:", @"instanceMethodSignatureForSelector:"]; + [NSObject enumerateMethodsInClass:originalMetaClass usingBlock:^(Class cls, SEL sel) { + if((cls == object_getClass([NSObject class])) || (cls == [NSObject class]) || (cls == object_getClass(cls))) + return; + NSString *className = NSStringFromClass(cls); + NSString *selName = NSStringFromSelector(sel); + if(([className hasPrefix:@"NS"] || [className hasPrefix:@"UI"]) && + ([selName hasPrefix:@"_"] || [selName hasSuffix:@"_"])) + return; + if([methodBlackList containsObject:selName]) + return; + @try + { + [self setupForwarderForClassMethodSelector:sel]; + } + @catch(NSException *e) + { + // ignore for now + } + }]; +} + +- (void)setupForwarderForClassMethodSelector:(SEL)selector +{ + SEL aliasSelector = OCMAliasForOriginalSelector(selector); + if(class_getClassMethod(mockedClass, aliasSelector) != NULL) + return; + + Method originalMethod = class_getClassMethod(mockedClass, selector); + IMP originalIMP = method_getImplementation(originalMethod); + const char *types = method_getTypeEncoding(originalMethod); + + Class metaClass = object_getClass(mockedClass); + IMP forwarderIMP = [originalMetaClass instanceMethodForwarderForSelector:selector]; + class_replaceMethod(metaClass, selector, forwarderIMP, types); + class_addMethod(metaClass, aliasSelector, originalIMP, types); +} + + +- (void)forwardInvocationForClassObject:(NSInvocation *)anInvocation +{ + // in here "self" is a reference to the real class, not the mock + OCClassMockObject *mock = OCMGetAssociatedMockForClass((Class) self, YES); + if(mock == nil) + { + [NSException raise:NSInternalInconsistencyException format:@"No mock for class %@", NSStringFromClass((Class)self)]; + } + if([mock handleInvocation:anInvocation] == NO) + { + [anInvocation setSelector:OCMAliasForOriginalSelector([anInvocation selector])]; + [anInvocation invoke]; + } +} + +- (void)initializeForClassObject +{ + // we really just want to have an implementation so that the superclass's is not called +} + + +#pragma mark Proxy API + +- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector +{ + return [mockedClass instanceMethodSignatureForSelector:aSelector]; +} + +- (Class)mockObjectClass +{ + return [super class]; +} + +- (Class)class +{ + return mockedClass; +} + +- (BOOL)respondsToSelector:(SEL)selector +{ + return [mockedClass instancesRespondToSelector:selector]; +} + +- (BOOL)isKindOfClass:(Class)aClass +{ + return [mockedClass isSubclassOfClass:aClass]; +} + +- (BOOL)conformsToProtocol:(Protocol *)aProtocol +{ + return class_conformsToProtocol(mockedClass, aProtocol); +} + +@end + + +#pragma mark - + +/** + taken from: + `class-dump -f isNS /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk/System/Library/Frameworks/CoreFoundation.framework` + + @interface NSObject (__NSIsKinds) + - (_Bool)isNSValue__; + - (_Bool)isNSTimeZone__; + - (_Bool)isNSString__; + - (_Bool)isNSSet__; + - (_Bool)isNSOrderedSet__; + - (_Bool)isNSNumber__; + - (_Bool)isNSDictionary__; + - (_Bool)isNSDate__; + - (_Bool)isNSData__; + - (_Bool)isNSArray__; + */ + +@implementation OCClassMockObject(NSIsKindsImplementation) + +- (BOOL)isNSValue__ +{ + return [mockedClass isKindOfClass:[NSValue class]]; +} + +- (BOOL)isNSTimeZone__ +{ + return [mockedClass isKindOfClass:[NSTimeZone class]]; +} + +- (BOOL)isNSSet__ +{ + return [mockedClass isKindOfClass:[NSSet class]]; +} + +- (BOOL)isNSOrderedSet__ +{ + return [mockedClass isKindOfClass:[NSOrderedSet class]]; +} + +- (BOOL)isNSNumber__ +{ + return [mockedClass isKindOfClass:[NSNumber class]]; +} + +- (BOOL)isNSDate__ +{ + return [mockedClass isKindOfClass:[NSDate class]]; +} + +- (BOOL)isNSString__ +{ + return [mockedClass isKindOfClass:[NSString class]]; +} + +- (BOOL)isNSDictionary__ +{ + return [mockedClass isKindOfClass:[NSDictionary class]]; +} + +- (BOOL)isNSData__ +{ + return [mockedClass isKindOfClass:[NSData class]]; +} + +- (BOOL)isNSArray__ +{ + return [mockedClass isKindOfClass:[NSArray class]]; +} + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMArg.h b/Pods/OCMock/Source/OCMock/OCMArg.h new file mode 100644 index 0000000..d53437c --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMArg.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + +@interface OCMArg : NSObject + +// constraining arguments + ++ (id)any; ++ (SEL)anySelector; ++ (void *)anyPointer; ++ (id __autoreleasing *)anyObjectRef; ++ (id)isNil; ++ (id)isNotNil; ++ (id)isEqual:(id)value; ++ (id)isNotEqual:(id)value; ++ (id)isKindOfClass:(Class)cls; ++ (id)checkWithSelector:(SEL)selector onObject:(id)anObject; ++ (id)checkWithBlock:(BOOL (^)(id obj))block; + +// manipulating arguments + ++ (id *)setTo:(id)value; ++ (void *)setToValue:(NSValue *)value; + +// internal use only + ++ (id)resolveSpecialValues:(NSValue *)value; + +@end + +#define OCMOCK_ANY [OCMArg any] + +#if defined(__GNUC__) && !defined(__STRICT_ANSI__) + #define OCMOCK_VALUE(variable) \ + ({ __typeof__(variable) __v = (variable); [NSValue value:&__v withObjCType:@encode(__typeof__(__v))]; }) +#else + #define OCMOCK_VALUE(variable) [NSValue value:&variable withObjCType:@encode(__typeof__(variable))] +#endif diff --git a/Pods/OCMock/Source/OCMock/OCMArg.m b/Pods/OCMock/Source/OCMock/OCMArg.m new file mode 100644 index 0000000..06ec394 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMArg.m @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import +#import +#import +#import "OCMPassByRefSetter.h" + +@implementation OCMArg + ++ (id)any +{ + return [OCMAnyConstraint constraint]; +} + ++ (void *)anyPointer +{ + return (void *)0x01234567; +} + ++ (id __autoreleasing *)anyObjectRef +{ + return (id *)0x01234567; +} + ++ (SEL)anySelector +{ + return NSSelectorFromString(@"aSelectorThatMatchesAnySelector"); +} + ++ (id)isNil +{ + return [OCMIsNilConstraint constraint]; +} + ++ (id)isNotNil +{ + return [OCMIsNotNilConstraint constraint]; +} + ++ (id)isEqual:(id)value +{ + return value; +} + ++ (id)isNotEqual:(id)value +{ + OCMIsNotEqualConstraint *constraint = [OCMIsNotEqualConstraint constraint]; + constraint->testValue = value; + return constraint; +} + ++ (id)isKindOfClass:(Class)cls +{ + return [[[OCMBlockConstraint alloc] initWithConstraintBlock:^BOOL(id obj) { + return [obj isKindOfClass:cls]; + }] autorelease]; +} + ++ (id)checkWithSelector:(SEL)selector onObject:(id)anObject +{ + return [OCMConstraint constraintWithSelector:selector onObject:anObject]; +} + ++ (id)checkWithBlock:(BOOL (^)(id))block +{ + return [[[OCMBlockConstraint alloc] initWithConstraintBlock:block] autorelease]; +} + ++ (id *)setTo:(id)value +{ + return (id *)[[[OCMPassByRefSetter alloc] initWithValue:value] autorelease]; +} + ++ (void *)setToValue:(NSValue *)value +{ + return (id *)[[[OCMPassByRefSetter alloc] initWithValue:value] autorelease]; +} + ++ (id)resolveSpecialValues:(NSValue *)value +{ + const char *type = [value objCType]; + if(type[0] == '^') + { + void *pointer = [value pointerValue]; + if(pointer == (void *)0x01234567) + return [OCMArg any]; + if((pointer != NULL) && (object_getClass((id)pointer) == [OCMPassByRefSetter class])) + return (id)pointer; + } + else if(type[0] == ':') + { + SEL selector; + [value getValue:&selector]; + if(selector == NSSelectorFromString(@"aSelectorThatMatchesAnySelector")) + return [OCMArg any]; + } + return value; +} + + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMBlockCaller.h b/Pods/OCMock/Source/OCMock/OCMBlockCaller.h new file mode 100644 index 0000000..c0fe571 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMBlockCaller.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2010-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + + +@interface OCMBlockCaller : NSObject +{ + void (^block)(NSInvocation *); +} + +- (id)initWithCallBlock:(void (^)(NSInvocation *))theBlock; + +- (void)handleInvocation:(NSInvocation *)anInvocation; + +@end + diff --git a/Pods/OCMock/Source/OCMock/OCMBlockCaller.m b/Pods/OCMock/Source/OCMock/OCMBlockCaller.m new file mode 100644 index 0000000..5b1aec6 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMBlockCaller.m @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2010-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "OCMBlockCaller.h" + + +@implementation OCMBlockCaller + +-(id)initWithCallBlock:(void (^)(NSInvocation *))theBlock +{ + self = [super init]; + block = [theBlock copy]; + return self; +} + +-(void)dealloc +{ + [block release]; + [super dealloc]; +} + +- (void)handleInvocation:(NSInvocation *)anInvocation +{ + if (block != nil) + { + block(anInvocation); + } +} + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMBoxedReturnValueProvider.h b/Pods/OCMock/Source/OCMock/OCMBoxedReturnValueProvider.h new file mode 100644 index 0000000..467f691 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMBoxedReturnValueProvider.h @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "OCMReturnValueProvider.h" + +@interface OCMBoxedReturnValueProvider : OCMReturnValueProvider +{ +} + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMBoxedReturnValueProvider.m b/Pods/OCMock/Source/OCMock/OCMBoxedReturnValueProvider.m new file mode 100644 index 0000000..03ed54f --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMBoxedReturnValueProvider.m @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "OCMBoxedReturnValueProvider.h" +#import "OCMFunctions.h" +#import "NSValue+OCMAdditions.h" + +@implementation OCMBoxedReturnValueProvider + +- (void)handleInvocation:(NSInvocation *)anInvocation +{ + const char *returnType = [[anInvocation methodSignature] methodReturnType]; + NSUInteger returnTypeSize = [[anInvocation methodSignature] methodReturnLength]; + char valueBuffer[returnTypeSize]; + NSValue *returnValueAsNSValue = (NSValue *)returnValue; + + if([self isMethodReturnType:returnType compatibleWithValueType:[returnValueAsNSValue objCType]]) + { + [returnValueAsNSValue getValue:valueBuffer]; + [anInvocation setReturnValue:valueBuffer]; + } + else if([returnValueAsNSValue getBytes:valueBuffer objCType:returnType]) + { + [anInvocation setReturnValue:valueBuffer]; + } + else + { + [NSException raise:NSInvalidArgumentException + format:@"Return value cannot be used for method; method signature declares '%s' but value is '%s'.", returnType, [returnValueAsNSValue objCType]]; + } +} + + +- (BOOL)isMethodReturnType:(const char *)returnType compatibleWithValueType:(const char *)valueType +{ + /* Same types are obviously compatible */ + if(strcmp(returnType, valueType) == 0) + return YES; + + /* Allow void* for methods that return id, mainly to be able to handle nil */ + if(strcmp(returnType, @encode(id)) == 0 && strcmp(valueType, @encode(void *)) == 0) + return YES; + + return OCMEqualTypesAllowingOpaqueStructs(returnType, valueType); +} + + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMConstraint.h b/Pods/OCMock/Source/OCMock/OCMConstraint.h new file mode 100644 index 0000000..777966a --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMConstraint.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2007-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + + +@interface OCMConstraint : NSObject + ++ (instancetype)constraint; +- (BOOL)evaluate:(id)value; + +// if you are looking for any, isNil, etc, they have moved to OCMArg + +// try to use [OCMArg checkWith...] instead of the constraintWith... methods below + ++ (instancetype)constraintWithSelector:(SEL)aSelector onObject:(id)anObject; ++ (instancetype)constraintWithSelector:(SEL)aSelector onObject:(id)anObject withValue:(id)aValue; + + +@end + +@interface OCMAnyConstraint : OCMConstraint +@end + +@interface OCMIsNilConstraint : OCMConstraint +@end + +@interface OCMIsNotNilConstraint : OCMConstraint +@end + +@interface OCMIsNotEqualConstraint : OCMConstraint +{ + @public + id testValue; +} + +@end + +@interface OCMInvocationConstraint : OCMConstraint +{ + @public + NSInvocation *invocation; +} + +@end + +@interface OCMBlockConstraint : OCMConstraint +{ + BOOL (^block)(id); +} + +- (instancetype)initWithConstraintBlock:(BOOL (^)(id))block; + +@end + + +#define CONSTRAINT(aSelector) [OCMConstraint constraintWithSelector:aSelector onObject:self] +#define CONSTRAINTV(aSelector, aValue) [OCMConstraint constraintWithSelector:aSelector onObject:self withValue:(aValue)] diff --git a/Pods/OCMock/Source/OCMock/OCMConstraint.m b/Pods/OCMock/Source/OCMock/OCMConstraint.m new file mode 100644 index 0000000..5fbe949 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMConstraint.m @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2007-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + + +@implementation OCMConstraint + ++ (instancetype)constraint +{ + return [[[self alloc] init] autorelease]; +} + +- (BOOL)evaluate:(id)value +{ + return NO; +} + +- (id)copyWithZone:(struct _NSZone *)zone +{ + return [self retain]; +} + ++ (instancetype)constraintWithSelector:(SEL)aSelector onObject:(id)anObject +{ + OCMInvocationConstraint *constraint = [OCMInvocationConstraint constraint]; + NSMethodSignature *signature = [anObject methodSignatureForSelector:aSelector]; + if(signature == nil) + [NSException raise:NSInvalidArgumentException format:@"Unkown selector %@ used in constraint.", NSStringFromSelector(aSelector)]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; + [invocation setTarget:anObject]; + [invocation setSelector:aSelector]; + constraint->invocation = invocation; + return constraint; +} + ++ (instancetype)constraintWithSelector:(SEL)aSelector onObject:(id)anObject withValue:(id)aValue +{ + OCMInvocationConstraint *constraint = [self constraintWithSelector:aSelector onObject:anObject]; + if([[constraint->invocation methodSignature] numberOfArguments] < 4) + [NSException raise:NSInvalidArgumentException format:@"Constraint with value requires selector with two arguments."]; + [constraint->invocation setArgument:&aValue atIndex:3]; + return constraint; +} + + +@end + + + +#pragma mark - + +@implementation OCMAnyConstraint + +- (BOOL)evaluate:(id)value +{ + return YES; +} + +@end + + + +#pragma mark - + +@implementation OCMIsNilConstraint + +- (BOOL)evaluate:(id)value +{ + return value == nil; +} + +@end + + + +#pragma mark - + +@implementation OCMIsNotNilConstraint + +- (BOOL)evaluate:(id)value +{ + return value != nil; +} + +@end + + + +#pragma mark - + +@implementation OCMIsNotEqualConstraint + +- (BOOL)evaluate:(id)value +{ + return ![value isEqual:testValue]; +} + +@end + + + +#pragma mark - + +@implementation OCMInvocationConstraint + +- (BOOL)evaluate:(id)value +{ + [invocation setArgument:&value atIndex:2]; // should test if constraint takes arg + [invocation invoke]; + BOOL returnValue; + [invocation getReturnValue:&returnValue]; + return returnValue; +} + +@end + +#pragma mark - + +@implementation OCMBlockConstraint + +- (instancetype)initWithConstraintBlock:(BOOL (^)(id))aBlock +{ + self = [super init]; + block = [aBlock copy]; + return self; +} + +- (void)dealloc { + [block release]; + [super dealloc]; +} + +- (BOOL)evaluate:(id)value +{ + return block(value); +} + + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMExceptionReturnValueProvider.h b/Pods/OCMock/Source/OCMock/OCMExceptionReturnValueProvider.h new file mode 100644 index 0000000..8d2d2d6 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMExceptionReturnValueProvider.h @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "OCMReturnValueProvider.h" + +@interface OCMExceptionReturnValueProvider : OCMReturnValueProvider +{ +} + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMExceptionReturnValueProvider.m b/Pods/OCMock/Source/OCMock/OCMExceptionReturnValueProvider.m new file mode 100644 index 0000000..bb1f685 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMExceptionReturnValueProvider.m @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "OCMExceptionReturnValueProvider.h" + + +@implementation OCMExceptionReturnValueProvider + +- (void)handleInvocation:(NSInvocation *)anInvocation +{ + @throw returnValue; +} + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMExpectationRecorder.h b/Pods/OCMock/Source/OCMock/OCMExpectationRecorder.h new file mode 100644 index 0000000..fae5c4c --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMExpectationRecorder.h @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2004-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + +@interface OCMExpectationRecorder : OCMStubRecorder + +- (id)never; + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMExpectationRecorder.m b/Pods/OCMock/Source/OCMock/OCMExpectationRecorder.m new file mode 100644 index 0000000..c530ddf --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMExpectationRecorder.m @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2004-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "OCMExpectationRecorder.h" +#import "OCMInvocationExpectation.h" + +@implementation OCMExpectationRecorder + +#pragma mark Initialisers, description, accessors, etc. + +- (id)init +{ + self = [super init]; + [invocationMatcher release]; + invocationMatcher = [[OCMInvocationExpectation alloc] init]; + return self; +} + +- (OCMInvocationExpectation *)expectation +{ + return (OCMInvocationExpectation *)invocationMatcher; +} + + +#pragma mark Modifying the expectation + +- (id)never +{ + [[self expectation] setMatchAndReject:YES]; + return self; +} + + +#pragma mark Finishing recording + +- (void)forwardInvocation:(NSInvocation *)anInvocation +{ + [super forwardInvocation:anInvocation]; + [mockObject addExpectation:[self expectation]]; +} + + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMFunctions.h b/Pods/OCMock/Source/OCMock/OCMFunctions.h new file mode 100644 index 0000000..5d1d31c --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMFunctions.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + +@class OCMLocation; +@class OCClassMockObject; +@class OCPartialMockObject; + + +BOOL OCMIsObjectType(const char *objCType); +const char *OCMTypeWithoutQualifiers(const char *objCType); +BOOL OCMEqualTypesAllowingOpaqueStructs(const char *type1, const char *type2); + +Class OCMCreateSubclass(Class class, void *ref); + +void OCMSetIsa(id object, Class class); +Class OCMGetIsa(id object); + +BOOL OCMIsAliasSelector(SEL selector); +SEL OCMAliasForOriginalSelector(SEL selector); +SEL OCMOriginalSelectorForAlias(SEL selector); + +void OCMSetAssociatedMockForClass(OCClassMockObject *mock, Class aClass); +OCClassMockObject *OCMGetAssociatedMockForClass(Class aClass, BOOL includeSuperclasses); + +void OCMSetAssociatedMockForObject(OCClassMockObject *mock, id anObject); +OCPartialMockObject *OCMGetAssociatedMockForObject(id anObject); + +void OCMReportFailure(OCMLocation *loc, NSString *description); diff --git a/Pods/OCMock/Source/OCMock/OCMFunctions.m b/Pods/OCMock/Source/OCMock/OCMFunctions.m new file mode 100644 index 0000000..b7b6fb4 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMFunctions.m @@ -0,0 +1,292 @@ +/* + * Copyright (c) 2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import +#import "OCMFunctions.h" +#import "OCMLocation.h" +#import "OCClassMockObject.h" +#import "OCPartialMockObject.h" + + +#pragma mark Known private API + +@interface NSException(OCMKnownExceptionMethods) ++ (NSException *)failureInFile:(NSString *)file atLine:(int)line withDescription:(NSString *)formatString, ...; +@end + +@interface NSObject(OCMKnownTestCaseMethods) +- (void)recordFailureWithDescription:(NSString *)description inFile:(NSString *)file atLine:(NSUInteger)line expected:(BOOL)expected; +- (void)failWithException:(NSException *)exception; +@end + + +#pragma mark Functions related to ObjC type system + +BOOL OCMIsObjectType(const char *objCType) +{ + objCType = OCMTypeWithoutQualifiers(objCType); + + if(strcmp(objCType, @encode(id)) == 0 || strcmp(objCType, @encode(Class)) == 0) + return YES; + + // if the returnType is a typedef to an object, it has the form ^{OriginClass=#} + NSString *regexString = @"^\\^\\{(.*)=#.*\\}"; + NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regexString options:0 error:NULL]; + NSString *type = [NSString stringWithCString:objCType encoding:NSASCIIStringEncoding]; + if([regex numberOfMatchesInString:type options:0 range:NSMakeRange(0, type.length)] > 0) + return YES; + + // if the return type is a block we treat it like an object + // TODO: if the runtime were to encode the block's argument and/or return types, this test would not be sufficient + if(strcmp(objCType, @encode(void(^)())) == 0) + return YES; + + return NO; +} + + +const char *OCMTypeWithoutQualifiers(const char *objCType) +{ + while(strchr("rnNoORV", objCType[0]) != NULL) + objCType += 1; + return objCType; +} + + +/* + * Sometimes an external type is an opaque struct (which will have an @encode of "{structName}" + * or "{structName=}") but the actual method return type, or property type, will know the contents + * of the struct (so will have an objcType of say "{structName=iiSS}". This function will determine + * those are equal provided they have the same structure name, otherwise everything else will be + * compared textually. This can happen particularly for pointers to such structures, which still + * encode what is being pointed to. + * + * For some types some runtime functions throw exceptions, which is why we wrap this in an + * exception handler just below. + */ +static BOOL OCMEqualTypesAllowingOpaqueStructsInternal(const char *type1, const char *type2) +{ + type1 = OCMTypeWithoutQualifiers(type1); + type2 = OCMTypeWithoutQualifiers(type2); + + switch (type1[0]) + { + case '{': + case '(': + { + if (type2[0] != type1[0]) + return NO; + char endChar = type1[0] == '{'? '}' : ')'; + + const char *type1End = strchr(type1, endChar); + const char *type2End = strchr(type2, endChar); + const char *type1Equals = strchr(type1, '='); + const char *type2Equals = strchr(type2, '='); + + /* Opaque types either don't have an equals sign (just the name and the end brace), or + * empty content after the equals sign. + * We want that to compare the same as a type of the same name but with the content. + */ + BOOL type1Opaque = (type1Equals == NULL || (type1End < type1Equals) || type1Equals[1] == endChar); + BOOL type2Opaque = (type2Equals == NULL || (type2End < type2Equals) || type2Equals[1] == endChar); + const char *type1NameEnd = (type1Equals == NULL || (type1End < type1Equals)) ? type1End : type1Equals; + const char *type2NameEnd = (type1Equals == NULL || (type2End < type2Equals)) ? type2End : type2Equals; + intptr_t type1NameLen = type1NameEnd - type1; + intptr_t type2NameLen = type2NameEnd - type2; + + /* If the names are not equal, return NO */ + if (type1NameLen != type2NameLen || strncmp(type1, type2, type1NameLen)) + return NO; + + /* If the same name, and at least one is opaque, that is close enough. */ + if (type1Opaque || type2Opaque) + return YES; + + /* Otherwise, compare all the elements. Use NSGetSizeAndAlignment to walk through the struct elements. */ + type1 = type1Equals + 1; + type2 = type2Equals + 1; + while (type1[0] != endChar && type1[0] != '\0') + { + if (!OCMEqualTypesAllowingOpaqueStructs(type1, type2)) + return NO; + type1 = NSGetSizeAndAlignment(type1, NULL, NULL); + type2 = NSGetSizeAndAlignment(type2, NULL, NULL); + } + return YES; + } + case '^': + /* for a pointer, make sure the other is a pointer, then recursively compare the rest */ + if (type2[0] != type1[0]) + return NO; + return OCMEqualTypesAllowingOpaqueStructs(type1 + 1, type2 + 1); + + case '\0': + return type2[0] == '\0'; + + default: + { + // Move the type pointers past the current types, then compare that region + const char *afterType1 = NSGetSizeAndAlignment(type1, NULL, NULL); + const char *afterType2 = NSGetSizeAndAlignment(type2, NULL, NULL); + intptr_t type1Len = afterType1 - type1; + intptr_t type2Len = afterType2 - type2; + + return (type1Len == type2Len && (strncmp(type1, type2, type1Len) == 0)); + } + } +} + +BOOL OCMEqualTypesAllowingOpaqueStructs(const char *type1, const char *type2) +{ + @try + { + return OCMEqualTypesAllowingOpaqueStructsInternal(type1, type2); + } + @catch (NSException *e) + { + /* Probably a bitfield or something that NSGetSizeAndAlignment chokes on, oh well */ + return NO; + } +} + + +#pragma mark Creating classes + +Class OCMCreateSubclass(Class class, void *ref) +{ + const char *className = [[NSString stringWithFormat:@"%@-%p-%u", NSStringFromClass(class), ref, arc4random()] UTF8String]; + Class subclass = objc_allocateClassPair(class, className, 0); + objc_registerClassPair(subclass); + return subclass; +} + + +#pragma mark Directly manipulating the isa pointer (look away) + +void OCMSetIsa(id object, Class class) +{ + *((Class *)object) = class; +} + +Class OCMGetIsa(id object) +{ + return *((Class *)object); +} + + +#pragma mark Alias for renaming real methods + +NSString *OCMRealMethodAliasPrefix = @"ocmock_replaced_"; +const char *OCMRealMethodAliasPrefixCString = "ocmock_replaced_"; + +BOOL OCMIsAliasSelector(SEL selector) +{ + return [NSStringFromSelector(selector) hasPrefix:OCMRealMethodAliasPrefix]; +} + +SEL OCMAliasForOriginalSelector(SEL selector) +{ + char aliasName[2048]; + const char *originalName = sel_getName(selector); + strlcpy(aliasName, OCMRealMethodAliasPrefixCString, sizeof(aliasName)); + strlcat(aliasName, originalName, sizeof(aliasName)); + return sel_registerName(aliasName); +} + +SEL OCMOriginalSelectorForAlias(SEL selector) +{ + if(!OCMIsAliasSelector(selector)) + [NSException raise:NSInvalidArgumentException format:@"Not an alias selector; found %@", NSStringFromSelector(selector)]; + NSString *string = NSStringFromSelector(selector); + return NSSelectorFromString([string substringFromIndex:[OCMRealMethodAliasPrefix length]]); +} + + +#pragma mark Wrappers around associative references + +NSString *OCMClassMethodMockObjectKey = @"OCMClassMethodMockObjectKey"; + +void OCMSetAssociatedMockForClass(OCClassMockObject *mock, Class aClass) +{ + if((mock != nil) && (objc_getAssociatedObject(aClass, OCMClassMethodMockObjectKey) != nil)) + [NSException raise:NSInternalInconsistencyException format:@"Another mock is already associated with class %@", NSStringFromClass(aClass)]; + objc_setAssociatedObject(aClass, OCMClassMethodMockObjectKey, mock, OBJC_ASSOCIATION_ASSIGN); +} + +OCClassMockObject *OCMGetAssociatedMockForClass(Class aClass, BOOL includeSuperclasses) +{ + OCClassMockObject *mock = nil; + do + { + mock = objc_getAssociatedObject(aClass, OCMClassMethodMockObjectKey); + aClass = class_getSuperclass(aClass); + } + while((mock == nil) && (aClass != nil) && includeSuperclasses); + return mock; +} + +NSString *OCMPartialMockObjectKey = @"OCMPartialMockObjectKey"; + +void OCMSetAssociatedMockForObject(OCClassMockObject *mock, id anObject) +{ + if((mock != nil) && (objc_getAssociatedObject(anObject, OCMPartialMockObjectKey) != nil)) + [NSException raise:NSInternalInconsistencyException format:@"Another mock is already associated with object %@", anObject]; + objc_setAssociatedObject(anObject, OCMPartialMockObjectKey, mock, OBJC_ASSOCIATION_ASSIGN); +} + +OCPartialMockObject *OCMGetAssociatedMockForObject(id anObject) +{ + return objc_getAssociatedObject(anObject, OCMPartialMockObjectKey); +} + + +#pragma mark Functions related to IDE error reporting + +void OCMReportFailure(OCMLocation *loc, NSString *description) +{ + id testCase = [loc testCase]; + if((testCase != nil) && [testCase respondsToSelector:@selector(recordFailureWithDescription:inFile:atLine:expected:)]) + { + [testCase recordFailureWithDescription:description inFile:[loc file] atLine:[loc line] expected:NO]; + } + else if((testCase != nil) && [testCase respondsToSelector:@selector(failWithException:)]) + { + NSException *exception = nil; + if([NSException instancesRespondToSelector:@selector(failureInFile:atLine:withDescription:)]) + { + exception = [NSException failureInFile:[loc file] atLine:(int)[loc line] withDescription:description]; + } + else + { + NSString *reason = [NSString stringWithFormat:@"%@:%lu %@", [loc file], (unsigned long)[loc line], description]; + exception = [NSException exceptionWithName:@"OCMockTestFailure" reason:reason userInfo:nil]; + } + [testCase failWithException:exception]; + } + else if(loc != nil) + { + NSLog(@"%@:%lu %@", [loc file], (unsigned long)[loc line], description); + NSString *reason = [NSString stringWithFormat:@"%@:%lu %@", [loc file], (unsigned long)[loc line], description]; + [[NSException exceptionWithName:@"OCMockTestFailure" reason:reason userInfo:nil] raise]; + + } + else + { + NSLog(@"%@", description); + [[NSException exceptionWithName:@"OCMockTestFailure" reason:description userInfo:nil] raise]; + } + +} diff --git a/Pods/OCMock/Source/OCMock/OCMIndirectReturnValueProvider.h b/Pods/OCMock/Source/OCMock/OCMIndirectReturnValueProvider.h new file mode 100644 index 0000000..ce35a86 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMIndirectReturnValueProvider.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + +@interface OCMIndirectReturnValueProvider : NSObject +{ + id provider; + SEL selector; +} + +- (id)initWithProvider:(id)aProvider andSelector:(SEL)aSelector; + +- (void)handleInvocation:(NSInvocation *)anInvocation; + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMIndirectReturnValueProvider.m b/Pods/OCMock/Source/OCMock/OCMIndirectReturnValueProvider.m new file mode 100644 index 0000000..28b7c59 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMIndirectReturnValueProvider.m @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "NSMethodSignature+OCMAdditions.h" +#import "OCMIndirectReturnValueProvider.h" + + +@implementation OCMIndirectReturnValueProvider + +- (id)initWithProvider:(id)aProvider andSelector:(SEL)aSelector +{ + self = [super init]; + provider = [aProvider retain]; + selector = aSelector; + return self; +} + +- (void)dealloc +{ + [provider release]; + [super dealloc]; +} + +- (void)handleInvocation:(NSInvocation *)anInvocation +{ + [anInvocation setTarget:provider]; + [anInvocation setSelector:selector]; + [anInvocation invoke]; +} + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMInvocationExpectation.h b/Pods/OCMock/Source/OCMock/OCMInvocationExpectation.h new file mode 100644 index 0000000..8fcb85a --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMInvocationExpectation.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "OCMInvocationStub.h" + +@interface OCMInvocationExpectation : OCMInvocationStub +{ + BOOL matchAndReject; + BOOL isSatisfied; +} + +- (void)setMatchAndReject:(BOOL)flag; + +- (BOOL)isSatisfied; + +@end \ No newline at end of file diff --git a/Pods/OCMock/Source/OCMock/OCMInvocationExpectation.m b/Pods/OCMock/Source/OCMock/OCMInvocationExpectation.m new file mode 100644 index 0000000..856b4f1 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMInvocationExpectation.m @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "OCMInvocationExpectation.h" +#import "NSInvocation+OCMAdditions.h" + + +@implementation OCMInvocationExpectation + +- (void)setMatchAndReject:(BOOL)flag +{ + matchAndReject = flag; + if(matchAndReject) + isSatisfied = YES; +} + +- (BOOL)isSatisfied +{ + return isSatisfied; +} + +- (BOOL)handleInvocation:(NSInvocation *)anInvocation +{ + BOOL result = [super handleInvocation:anInvocation]; + if(result) + { + isSatisfied = !matchAndReject; + if(matchAndReject) + { + [NSException raise:NSInternalInconsistencyException format:@"%@: explicitly disallowed method invoked: %@", + [self description], [anInvocation invocationDescription]]; + } + } + return result; +} + +@end \ No newline at end of file diff --git a/Pods/OCMock/Source/OCMock/OCMInvocationMatcher.h b/Pods/OCMock/Source/OCMock/OCMInvocationMatcher.h new file mode 100644 index 0000000..ca3ccb2 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMInvocationMatcher.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + +@interface OCMInvocationMatcher : NSObject +{ + NSInvocation *recordedInvocation; + BOOL recordedAsClassMethod; + BOOL ignoreNonObjectArgs; +} + +- (void)setInvocation:(NSInvocation *)anInvocation; +- (NSInvocation *)recordedInvocation; + +- (void)setRecordedAsClassMethod:(BOOL)flag; +- (BOOL)recordedAsClassMethod; + +- (void)setIgnoreNonObjectArgs:(BOOL)flag; + +- (BOOL)matchesSelector:(SEL)aSelector; +- (BOOL)matchesInvocation:(NSInvocation *)anInvocation; + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMInvocationMatcher.m b/Pods/OCMock/Source/OCMock/OCMInvocationMatcher.m new file mode 100644 index 0000000..d9e18c0 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMInvocationMatcher.m @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import +#import +#import +#import "OCMPassByRefSetter.h" +#import "NSInvocation+OCMAdditions.h" +#import "OCMInvocationMatcher.h" +#import "OCClassMockObject.h" +#import "OCMFunctions.h" + + +@interface NSObject(HCMatcherDummy) +- (BOOL)matches:(id)item; +@end + + +@implementation OCMInvocationMatcher + +- (void)setInvocation:(NSInvocation *)anInvocation +{ + [recordedInvocation release]; + // When the method has a char* argument we do not retain the arguments. This makes it possible + // to match char* args literally and with anyPointer. Not retaining the argument means that + // in these cases tests that use their own autorelease pools may fail unexpectedly. + if(![anInvocation hasCharPointerArgument]) + [anInvocation retainArguments]; + recordedInvocation = [anInvocation retain]; +} + +- (void)setRecordedAsClassMethod:(BOOL)flag +{ + recordedAsClassMethod = flag; +} + +- (BOOL)recordedAsClassMethod +{ + return recordedAsClassMethod; +} + +- (void)setIgnoreNonObjectArgs:(BOOL)flag +{ + ignoreNonObjectArgs = flag; +} + +- (NSString *)description +{ + return [recordedInvocation invocationDescription]; +} + +- (NSInvocation *)recordedInvocation +{ + return recordedInvocation; +} + +- (BOOL)matchesSelector:(SEL)sel +{ + if(sel == [recordedInvocation selector]) + return YES; + if(OCMIsAliasSelector(sel) && + OCMOriginalSelectorForAlias(sel) == [recordedInvocation selector]) + return YES; + + return NO; +} + +- (BOOL)matchesInvocation:(NSInvocation *)anInvocation +{ + id target = [anInvocation target]; + BOOL isClassMethodInvocation = (target != nil) && (target == [target class]); + if(isClassMethodInvocation != recordedAsClassMethod) + return NO; + + if(![self matchesSelector:[anInvocation selector]]) + return NO; + + NSMethodSignature *signature = [recordedInvocation methodSignature]; + int n = (int)[signature numberOfArguments]; + for(int i = 2; i < n; i++) + { + if(ignoreNonObjectArgs && strcmp([signature getArgumentTypeAtIndex:i], @encode(id))) + { + continue; + } + + id recordedArg = [recordedInvocation getArgumentAtIndexAsObject:i]; + id passedArg = [anInvocation getArgumentAtIndexAsObject:i]; + + if([recordedArg isProxy]) + { + if(![recordedArg isEqual:passedArg]) + return NO; + continue; + } + + if([recordedArg isKindOfClass:[NSValue class]]) + recordedArg = [OCMArg resolveSpecialValues:recordedArg]; + + if([recordedArg isKindOfClass:[OCMConstraint class]]) + { + if([recordedArg evaluate:passedArg] == NO) + return NO; + } + else if([recordedArg isKindOfClass:[OCMPassByRefSetter class]]) + { + id valueToSet = [(OCMPassByRefSetter *)recordedArg value]; + // side effect but easier to do here than in handleInvocation + if(![valueToSet isKindOfClass:[NSValue class]]) + *(id *)[passedArg pointerValue] = valueToSet; + else + [(NSValue *)valueToSet getValue:[passedArg pointerValue]]; + } + else if([recordedArg conformsToProtocol:objc_getProtocol("HCMatcher")]) + { + if([recordedArg matches:passedArg] == NO) + return NO; + } + else + { + if(([recordedArg class] == [NSNumber class]) && + ([(NSNumber*)recordedArg compare:(NSNumber*)passedArg] != NSOrderedSame)) + return NO; + if(([recordedArg isEqual:passedArg] == NO) && + !((recordedArg == nil) && (passedArg == nil))) + return NO; + } + } + return YES; +} +@end diff --git a/Pods/OCMock/Source/OCMock/OCMInvocationStub.h b/Pods/OCMock/Source/OCMock/OCMInvocationStub.h new file mode 100644 index 0000000..d598798 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMInvocationStub.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "OCMInvocationMatcher.h" + +@interface OCMInvocationStub : OCMInvocationMatcher +{ + NSMutableArray *invocationActions; +} + +- (void)addInvocationAction:(id)anAction; +- (NSArray *)invocationActions; + +- (BOOL)handleInvocation:(NSInvocation *)anInvocation; + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMInvocationStub.m b/Pods/OCMock/Source/OCMock/OCMInvocationStub.m new file mode 100644 index 0000000..40a0fe9 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMInvocationStub.m @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "OCMInvocationStub.h" + +@implementation OCMInvocationStub + +- (id)init +{ + self = [super init]; + invocationActions = [[NSMutableArray alloc] init]; + return self; +} + +- (void)dealloc +{ + [invocationActions release]; + [super dealloc]; +} + + +- (void)addInvocationAction:(id)anAction +{ + [invocationActions addObject:anAction]; +} + +- (NSArray *)invocationActions +{ + return invocationActions; +} + + +- (BOOL)handleInvocation:(NSInvocation *)anInvocation +{ + if(![self matchesInvocation:anInvocation]) + return NO; + [invocationActions makeObjectsPerformSelector:@selector(handleInvocation:) withObject:anInvocation]; + return YES; +} + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMLocation.h b/Pods/OCMock/Source/OCMock/OCMLocation.h new file mode 100644 index 0000000..e510db7 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMLocation.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + +@interface OCMLocation : NSObject +{ + id testCase; + NSString *file; + NSUInteger line; +} + ++ (instancetype)locationWithTestCase:(id)aTestCase file:(NSString *)aFile line:(NSUInteger)aLine; + +- (instancetype)initWithTestCase:(id)aTestCase file:(NSString *)aFile line:(NSUInteger)aLine; + +- (id)testCase; +- (NSString *)file; +- (NSUInteger)line; + +@end + +extern OCMLocation *OCMMakeLocation(id testCase, const char *file, int line); diff --git a/Pods/OCMock/Source/OCMock/OCMLocation.m b/Pods/OCMock/Source/OCMock/OCMLocation.m new file mode 100644 index 0000000..9a3ae21 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMLocation.m @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "OCMLocation.h" + +@implementation OCMLocation + ++ (instancetype)locationWithTestCase:(id)aTestCase file:(NSString *)aFile line:(NSUInteger)aLine +{ + return [[[OCMLocation alloc] initWithTestCase:aTestCase file:aFile line:aLine] autorelease]; +} + +- (instancetype)initWithTestCase:(id)aTestCase file:(NSString *)aFile line:(NSUInteger)aLine +{ + self = [super init]; + testCase = aTestCase; + file = [aFile retain]; + line = aLine; + return self; +} + +- (void)dealloc +{ + [file release]; + [super dealloc]; +} + +- (id)testCase +{ + return testCase; +} + +- (NSString *)file +{ + return file; +} + +- (NSUInteger)line +{ + return line; +} + +@end + + +OCMLocation *OCMMakeLocation(id testCase, const char *fileCString, int line) +{ + return [OCMLocation locationWithTestCase:testCase file:[NSString stringWithUTF8String:fileCString] line:line]; +} + diff --git a/Pods/OCMock/Source/OCMock/OCMMacroState.h b/Pods/OCMock/Source/OCMock/OCMMacroState.h new file mode 100644 index 0000000..4b2d635 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMMacroState.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + +@class OCMLocation; +@class OCMRecorder; +@class OCMStubRecorder; +@class OCMockObject; + + +@interface OCMMacroState : NSObject +{ + OCMRecorder *recorder; +} + ++ (void)beginStubMacro; ++ (OCMStubRecorder *)endStubMacro; + ++ (void)beginExpectMacro; ++ (OCMStubRecorder *)endExpectMacro; + ++ (void)beginVerifyMacroAtLocation:(OCMLocation *)aLocation; ++ (void)endVerifyMacro; + ++ (OCMMacroState *)globalState; + +- (OCMRecorder *)recorder; + +- (void)switchToClassMethod; + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMMacroState.m b/Pods/OCMock/Source/OCMock/OCMMacroState.m new file mode 100644 index 0000000..43288bb --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMMacroState.m @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "OCMMacroState.h" +#import "OCMStubRecorder.h" +#import "OCMockObject.h" +#import "OCMExpectationRecorder.h" +#import "OCMVerifier.h" +#import "OCMInvocationMatcher.h" + + +@implementation OCMMacroState + +OCMMacroState *globalState; + +#pragma mark Methods to begin/end macros + ++ (void)beginStubMacro +{ + OCMStubRecorder *recorder = [[[OCMStubRecorder alloc] init] autorelease]; + globalState = [[[OCMMacroState alloc] initWithRecorder:recorder] autorelease]; +} + ++ (OCMStubRecorder *)endStubMacro +{ + OCMStubRecorder *recorder = (OCMStubRecorder *)[globalState recorder]; + globalState = nil; + return recorder; +} + + ++ (void)beginExpectMacro +{ + OCMExpectationRecorder *recorder = [[[OCMExpectationRecorder alloc] init] autorelease]; + globalState = [[[OCMMacroState alloc] initWithRecorder:recorder] autorelease]; +} + ++ (OCMStubRecorder *)endExpectMacro +{ + return [self endStubMacro]; +} + + ++ (void)beginVerifyMacroAtLocation:(OCMLocation *)aLocation +{ + OCMVerifier *recorder = [[[OCMVerifier alloc] init] autorelease]; + [recorder setLocation:aLocation]; + globalState = [[[OCMMacroState alloc] initWithRecorder:recorder] autorelease]; +} + ++ (void)endVerifyMacro +{ + globalState = nil; +} + + +#pragma mark Accessing global state + ++ (OCMMacroState *)globalState +{ + return globalState; +} + + +#pragma mark Init, dealloc, accessors + +- (id)initWithRecorder:(OCMRecorder *)aRecorder +{ + self = [super init]; + recorder = [aRecorder retain]; + return self; +} + +- (void)dealloc +{ + [recorder release]; + if(globalState == self) + globalState = nil; + [super dealloc]; +} + +- (OCMRecorder *)recorder +{ + return recorder; +} + + +#pragma mark Changing the recorder + +- (void)switchToClassMethod +{ + [recorder classMethod]; +} + + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMNotificationPoster.h b/Pods/OCMock/Source/OCMock/OCMNotificationPoster.h new file mode 100644 index 0000000..1c66550 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMNotificationPoster.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + +@interface OCMNotificationPoster : NSObject +{ + NSNotification *notification; +} + +- (id)initWithNotification:(id)aNotification; + +- (void)handleInvocation:(NSInvocation *)anInvocation; + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMNotificationPoster.m b/Pods/OCMock/Source/OCMock/OCMNotificationPoster.m new file mode 100644 index 0000000..e44ec0d --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMNotificationPoster.m @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "OCMNotificationPoster.h" + + +@implementation OCMNotificationPoster + +- (id)initWithNotification:(id)aNotification +{ + self = [super init]; + notification = [aNotification retain]; + return self; +} + +- (void)dealloc +{ + [notification release]; + [super dealloc]; +} + +- (void)handleInvocation:(NSInvocation *)anInvocation +{ + [[NSNotificationCenter defaultCenter] postNotification:notification]; +} + + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMObserverRecorder.h b/Pods/OCMock/Source/OCMock/OCMObserverRecorder.h new file mode 100644 index 0000000..5839cca --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMObserverRecorder.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + +@interface OCMObserverRecorder : NSObject +{ + NSNotification *recordedNotification; +} + +- (void)notificationWithName:(NSString *)name object:(id)sender; + +- (BOOL)matchesNotification:(NSNotification *)aNotification; + +- (BOOL)argument:(id)expectedArg matchesArgument:(id)observedArg; + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMObserverRecorder.m b/Pods/OCMock/Source/OCMock/OCMObserverRecorder.m new file mode 100644 index 0000000..66bef10 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMObserverRecorder.m @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import +#import +#import "NSInvocation+OCMAdditions.h" +#import "OCMObserverRecorder.h" + +@interface NSObject(HCMatcherDummy) +- (BOOL)matches:(id)item; +@end + +#pragma mark - + + +@implementation OCMObserverRecorder + +#pragma mark Initialisers, description, accessors, etc. + +- (void)dealloc +{ + [recordedNotification release]; + [super dealloc]; +} + + +#pragma mark Recording + +- (void)notificationWithName:(NSString *)name object:(id)sender +{ + recordedNotification = [[NSNotification notificationWithName:name object:sender] retain]; +} + +- (void)notificationWithName:(NSString *)name object:(id)sender userInfo:(NSDictionary *)userInfo +{ + recordedNotification = [[NSNotification notificationWithName:name object:sender userInfo:userInfo] retain]; +} + + +#pragma mark Verification + +- (BOOL)matchesNotification:(NSNotification *)aNotification +{ + return [self argument:[recordedNotification name] matchesArgument:[aNotification name]] && + [self argument:[recordedNotification object] matchesArgument:[aNotification object]] && + [self argument:[recordedNotification userInfo] matchesArgument:[aNotification userInfo]]; +} + +- (BOOL)argument:(id)expectedArg matchesArgument:(id)observedArg +{ + if([expectedArg isKindOfClass:[OCMConstraint class]]) + { + return [expectedArg evaluate:observedArg]; + } + else if([expectedArg conformsToProtocol:objc_getProtocol("HCMatcher")]) + { + return [expectedArg matches:observedArg]; + } + else if (expectedArg == observedArg) + { + return YES; + } + else if (expectedArg == nil || observedArg == nil) + { + return NO; + } + else + { + return [expectedArg isEqual:observedArg]; + } +} + + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMPassByRefSetter.h b/Pods/OCMock/Source/OCMock/OCMPassByRefSetter.h new file mode 100644 index 0000000..697881d --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMPassByRefSetter.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + +@interface OCMPassByRefSetter : NSObject +{ + id value; +} + +- (id)initWithValue:(id)value; + +- (id)value; + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMPassByRefSetter.m b/Pods/OCMock/Source/OCMock/OCMPassByRefSetter.m new file mode 100644 index 0000000..5cc15c5 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMPassByRefSetter.m @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "OCMPassByRefSetter.h" + + +@implementation OCMPassByRefSetter + +- (id)initWithValue:(id)aValue +{ + self = [super init]; + value = [aValue retain]; + return self; +} + +- (void)dealloc +{ + [value release]; + [super dealloc]; +} + +- (id)value +{ + return value; +} + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMRealObjectForwarder.h b/Pods/OCMock/Source/OCMock/OCMRealObjectForwarder.h new file mode 100644 index 0000000..9e35330 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMRealObjectForwarder.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2010-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + +@interface OCMRealObjectForwarder : NSObject +{ +} + +- (void)handleInvocation:(NSInvocation *)anInvocation; + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMRealObjectForwarder.m b/Pods/OCMock/Source/OCMock/OCMRealObjectForwarder.m new file mode 100644 index 0000000..e8caf17 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMRealObjectForwarder.m @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2010-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import +#import "OCPartialMockObject.h" +#import "OCMRealObjectForwarder.h" +#import "OCMFunctions.h" + + +@implementation OCMRealObjectForwarder + +- (void)handleInvocation:(NSInvocation *)anInvocation +{ + id invocationTarget = [anInvocation target]; + + [anInvocation setSelector:OCMAliasForOriginalSelector([anInvocation selector])]; + if ([invocationTarget isProxy]) + { + if (class_getInstanceMethod([invocationTarget mockObjectClass], @selector(realObject))) + { + // the method has been invoked on the mock, we need to change the target to the real object + [anInvocation setTarget:[(OCPartialMockObject *)invocationTarget realObject]]; + } + else + { + [NSException raise:NSInternalInconsistencyException + format:@"Method andForwardToRealObject can only be used with partial mocks and class methods."]; + } + } + + [anInvocation invoke]; +} + + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMRecorder.h b/Pods/OCMock/Source/OCMock/OCMRecorder.h new file mode 100644 index 0000000..f56d2ca --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMRecorder.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + +@class OCMockObject; +@class OCMInvocationMatcher; + + +@interface OCMRecorder : NSProxy +{ + OCMockObject *mockObject; + OCMInvocationMatcher *invocationMatcher; +} + +- (instancetype)init; +- (instancetype)initWithMockObject:(OCMockObject *)aMockObject; + +- (void)setMockObject:(OCMockObject *)aMockObject; + +- (OCMInvocationMatcher *)invocationMatcher; + +- (id)classMethod; +- (id)ignoringNonObjectArgs; + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMRecorder.m b/Pods/OCMock/Source/OCMock/OCMRecorder.m new file mode 100644 index 0000000..538b2f5 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMRecorder.m @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import +#import "OCMRecorder.h" +#import "OCMockObject.h" +#import "OCMInvocationMatcher.h" +#import "OCClassMockObject.h" + +@implementation OCMRecorder + +- (instancetype)init +{ + // no super, we're inheriting from NSProxy + return self; +} + +- (instancetype)initWithMockObject:(OCMockObject *)aMockObject +{ + [self init]; + [self setMockObject:aMockObject]; + return self; +} + +- (void)setMockObject:(OCMockObject *)aMockObject +{ + mockObject = aMockObject; +} + +- (void)dealloc +{ + [invocationMatcher release]; + [super dealloc]; +} + +- (NSString *)description +{ + return [invocationMatcher description]; +} + +- (OCMInvocationMatcher *)invocationMatcher +{ + return invocationMatcher; +} + + +#pragma mark Modifying the matcher + +- (id)classMethod +{ + // should we handle the case where this is called with a mock that isn't a class mock? + [invocationMatcher setRecordedAsClassMethod:YES]; + return self; +} + +- (id)ignoringNonObjectArgs +{ + [invocationMatcher setIgnoreNonObjectArgs:YES]; + return self; +} + + +#pragma mark Recording the actual invocation + +- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector +{ + if([invocationMatcher recordedAsClassMethod]) + return [[(OCClassMockObject *)mockObject mockedClass] methodSignatureForSelector:aSelector]; + + NSMethodSignature *signature = [mockObject methodSignatureForSelector:aSelector]; + if(signature == nil) + { + // if we're a working with a class mock and there is a class method, auto-switch + if(([object_getClass(mockObject) isSubclassOfClass:[OCClassMockObject class]]) && + ([[(OCClassMockObject *)mockObject mockedClass] respondsToSelector:aSelector])) + { + [self classMethod]; + signature = [self methodSignatureForSelector:aSelector]; + } + } + return signature; +} + +- (void)forwardInvocation:(NSInvocation *)anInvocation +{ + [anInvocation setTarget:nil]; + [invocationMatcher setInvocation:anInvocation]; +} + +- (void)doesNotRecognizeSelector:(SEL)aSelector +{ + [NSException raise:NSInvalidArgumentException format:@"%@: cannot stub/expect/verify method '%@' because no such method exists in the mocked class.", mockObject, NSStringFromSelector(aSelector)]; +} + + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMReturnValueProvider.h b/Pods/OCMock/Source/OCMock/OCMReturnValueProvider.h new file mode 100644 index 0000000..d52e384 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMReturnValueProvider.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + +@interface OCMReturnValueProvider : NSObject +{ + id returnValue; +} + +- (instancetype)initWithValue:(id)aValue; + +- (void)handleInvocation:(NSInvocation *)anInvocation; + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMReturnValueProvider.m b/Pods/OCMock/Source/OCMock/OCMReturnValueProvider.m new file mode 100644 index 0000000..ed26ac0 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMReturnValueProvider.m @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "NSMethodSignature+OCMAdditions.h" +#import "OCMReturnValueProvider.h" +#import "OCMFunctions.h" + + +@implementation OCMReturnValueProvider + +- (instancetype)initWithValue:(id)aValue +{ + self = [super init]; + returnValue = [aValue retain]; + return self; +} + +- (void)dealloc +{ + [returnValue release]; + [super dealloc]; +} + +- (void)handleInvocation:(NSInvocation *)anInvocation +{ + if(!OCMIsObjectType([[anInvocation methodSignature] methodReturnType])) + { + @throw [NSException exceptionWithName:NSInvalidArgumentException reason:@"Expected invocation with object return type. Did you mean to use andReturnValue: instead?" userInfo:nil]; + } + NSString *sel = NSStringFromSelector([anInvocation selector]); + if([sel hasPrefix:@"alloc"] || [sel hasPrefix:@"new"] || [sel hasPrefix:@"copy"] || [sel hasPrefix:@"mutableCopy"]) + { + // methods that "create" an object return it with an extra retain count + [returnValue retain]; + } + [anInvocation setReturnValue:&returnValue]; +} + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMStubRecorder.h b/Pods/OCMock/Source/OCMock/OCMStubRecorder.h new file mode 100644 index 0000000..73b401f --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMStubRecorder.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2004-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "OCMRecorder.h" + + +@interface OCMStubRecorder : OCMRecorder + +- (id)andReturn:(id)anObject; +- (id)andReturnValue:(NSValue *)aValue; +- (id)andThrow:(NSException *)anException; +- (id)andPost:(NSNotification *)aNotification; +- (id)andCall:(SEL)selector onObject:(id)anObject; +- (id)andDo:(void (^)(NSInvocation *invocation))block; +- (id)andForwardToRealObject; + +@end + + +@interface OCMStubRecorder (Properties) + +#define andReturn(aValue) _andReturn(({ typeof(aValue) _v = (aValue); [NSValue value:&_v withObjCType:@encode(typeof(_v))]; })) +@property (nonatomic, readonly) OCMStubRecorder *(^ _andReturn)(NSValue *); + +#define andThrow(anException) _andThrow(anException) +@property (nonatomic, readonly) OCMStubRecorder *(^ _andThrow)(NSException *); + +#define andPost(aNotification) _andPost(aNotification) +@property (nonatomic, readonly) OCMStubRecorder *(^ _andPost)(NSNotification *); + +#define andCall(anObject, aSelector) _andCall(anObject, aSelector) +@property (nonatomic, readonly) OCMStubRecorder *(^ _andCall)(id, SEL); + +#define andDo(aBlock) _andDo(aBlock) +@property (nonatomic, readonly) OCMStubRecorder *(^ _andDo)(void (^)(NSInvocation *)); + +#define andForwardToRealObject() _andForwardToRealObject() +@property (nonatomic, readonly) OCMStubRecorder *(^ _andForwardToRealObject)(void); + +@end + + + diff --git a/Pods/OCMock/Source/OCMock/OCMStubRecorder.m b/Pods/OCMock/Source/OCMock/OCMStubRecorder.m new file mode 100644 index 0000000..4ca2ebb --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMStubRecorder.m @@ -0,0 +1,187 @@ +/* + * Copyright (c) 2004-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "OCMStubRecorder.h" +#import "OCClassMockObject.h" +#import "OCMReturnValueProvider.h" +#import "OCMBoxedReturnValueProvider.h" +#import "OCMExceptionReturnValueProvider.h" +#import "OCMIndirectReturnValueProvider.h" +#import "OCMNotificationPoster.h" +#import "OCMBlockCaller.h" +#import "OCMRealObjectForwarder.h" +#import "OCMFunctions.h" +#import "OCMInvocationStub.h" + + +@implementation OCMStubRecorder + +#pragma mark Initialisers, description, accessors, etc. + +- (id)init +{ + self = [super init]; + invocationMatcher = [[OCMInvocationStub alloc] init]; + return self; +} + +- (OCMInvocationStub *)stub +{ + return (OCMInvocationStub *)invocationMatcher; +} + + +#pragma mark Recording invocation actions + +- (id)andReturn:(id)anObject +{ + [[self stub] addInvocationAction:[[[OCMReturnValueProvider alloc] initWithValue:anObject] autorelease]]; + return self; +} + +- (id)andReturnValue:(NSValue *)aValue +{ + [[self stub] addInvocationAction:[[[OCMBoxedReturnValueProvider alloc] initWithValue:aValue] autorelease]]; + return self; +} + +- (id)andThrow:(NSException *)anException +{ + [[self stub] addInvocationAction:[[[OCMExceptionReturnValueProvider alloc] initWithValue:anException] autorelease]]; + return self; +} + +- (id)andPost:(NSNotification *)aNotification +{ + [[self stub] addInvocationAction:[[[OCMNotificationPoster alloc] initWithNotification:aNotification] autorelease]]; + return self; +} + +- (id)andCall:(SEL)selector onObject:(id)anObject +{ + [[self stub] addInvocationAction:[[[OCMIndirectReturnValueProvider alloc] initWithProvider:anObject andSelector:selector] autorelease]]; + return self; +} + +- (id)andDo:(void (^)(NSInvocation *))aBlock +{ + [[self stub] addInvocationAction:[[[OCMBlockCaller alloc] initWithCallBlock:aBlock] autorelease]]; + return self; +} + +- (id)andForwardToRealObject +{ + [[self stub] addInvocationAction:[[[OCMRealObjectForwarder alloc] init] autorelease]]; + return self; +} + + +#pragma mark Finishing recording + +- (void)forwardInvocation:(NSInvocation *)anInvocation +{ + [super forwardInvocation:anInvocation]; + [mockObject addStub:[self stub]]; +} + + +@end + + +@implementation OCMStubRecorder (Properties) + +@dynamic _andReturn; + +- (OCMStubRecorder *(^)(NSValue *))_andReturn +{ + id (^theBlock)(id) = ^ (NSValue *aValue) + { + if(OCMIsObjectType([aValue objCType])) + { + NSValue *objValue = nil; + [aValue getValue:&objValue]; + return [self andReturn:objValue]; + } + else + { + return [self andReturnValue:aValue]; + } + }; + return [[theBlock copy] autorelease]; +} + + +@dynamic _andThrow; + +- (OCMStubRecorder *(^)(NSException *))_andThrow +{ + id (^theBlock)(id) = ^ (NSException * anException) + { + return [self andThrow:anException]; + }; + return [[theBlock copy] autorelease]; +} + + +@dynamic _andPost; + +- (OCMStubRecorder *(^)(NSNotification *))_andPost +{ + id (^theBlock)(id) = ^ (NSNotification * aNotification) + { + return [self andPost:aNotification]; + }; + return [[theBlock copy] autorelease]; +} + + +@dynamic _andCall; + +- (OCMStubRecorder *(^)(id, SEL))_andCall +{ + id (^theBlock)(id, SEL) = ^ (id anObject, SEL aSelector) + { + return [self andCall:aSelector onObject:anObject]; + }; + return [[theBlock copy] autorelease]; +} + + +@dynamic _andDo; + +- (OCMStubRecorder *(^)(void (^)(NSInvocation *)))_andDo +{ + id (^theBlock)(void (^)(NSInvocation *)) = ^ (void (^ blockToCall)(NSInvocation *)) + { + return [self andDo:blockToCall]; + }; + return [[theBlock copy] autorelease]; +} + + +@dynamic _andForwardToRealObject; + +- (OCMStubRecorder *(^)(void))_andForwardToRealObject +{ + id (^theBlock)(void) = ^ (void) + { + return [self andForwardToRealObject]; + }; + return [[theBlock copy] autorelease]; +} + + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMVerifier.h b/Pods/OCMock/Source/OCMock/OCMVerifier.h new file mode 100644 index 0000000..7c95b01 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMVerifier.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "OCMRecorder.h" +#import "OCMLocation.h" + + +@interface OCMVerifier : OCMRecorder + +@property(retain) OCMLocation *location; + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMVerifier.m b/Pods/OCMock/Source/OCMock/OCMVerifier.m new file mode 100644 index 0000000..8a1dcbe --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMVerifier.m @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import +#import "OCMVerifier.h" +#import "OCMockObject.h" +#import "OCMLocation.h" +#import "OCMInvocationMatcher.h" + + +@implementation OCMVerifier + +- (id)init +{ + self = [super init]; + invocationMatcher = [[OCMInvocationMatcher alloc] init]; + return self; +} + +- (void)forwardInvocation:(NSInvocation *)anInvocation +{ + [super forwardInvocation:anInvocation]; + [mockObject verifyInvocation:invocationMatcher atLocation:self.location]; +} + + +@end diff --git a/Pods/OCMock/Source/OCMock/OCMock.h b/Pods/OCMock/Source/OCMock/OCMock.h new file mode 100644 index 0000000..f0083b3 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMock.h @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2004-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import +#import +#import +#import +#import +#import +#import +#import + + +#define OCMClassMock(cls) [OCMockObject niceMockForClass:cls] + +#define OCMStrictClassMock(cls) [OCMockObject mockForClass:cls] + +#define OCMProtocolMock(protocol) [OCMockObject niceMockForProtocol:protocol] + +#define OCMStrictProtocolMock(protocol) [OCMockObject mockForProtocol:protocol] + +#define OCMPartialMock(obj) [OCMockObject partialMockForObject:obj] + +#define OCMObserverMock() [OCMockObject observerMock] + + +#define OCMStub(invocation) \ +({ \ + _OCMSilenceWarnings( \ + [OCMMacroState beginStubMacro]; \ + invocation; \ + [OCMMacroState endStubMacro]; \ + ); \ +}) + +#define OCMExpect(invocation) \ +({ \ + _OCMSilenceWarnings( \ + [OCMMacroState beginExpectMacro]; \ + invocation; \ + [OCMMacroState endExpectMacro]; \ + ); \ +}) + +#define ClassMethod(invocation) \ + _OCMSilenceWarnings( \ + [[OCMMacroState globalState] switchToClassMethod]; \ + invocation; \ + ); + + +#define OCMVerifyAll(mock) [mock verifyAtLocation:OCMMakeLocation(self, __FILE__, __LINE__)] + +#define OCMVerifyAllWithDelay(mock, delay) [mock verifyWithDelay:delay atLocation:OCMMakeLocation(self, __FILE__, __LINE__)] + +#define OCMVerify(invocation) \ +({ \ + _OCMSilenceWarnings( \ + [OCMMacroState beginVerifyMacroAtLocation:OCMMakeLocation(self, __FILE__, __LINE__)]; \ + invocation; \ + [OCMMacroState endVerifyMacro]; \ + ); \ +}) + +#define _OCMSilenceWarnings(macro) \ +({ \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wunused-value\"") \ + macro \ + _Pragma("clang diagnostic pop") \ +}) diff --git a/Pods/OCMock/Source/OCMock/OCMockObject.h b/Pods/OCMock/Source/OCMock/OCMockObject.h new file mode 100644 index 0000000..63f2bae --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMockObject.h @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2004-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + +@class OCMLocation; +@class OCMInvocationStub; +@class OCMStubRecorder; +@class OCMInvocationMatcher; +@class OCMInvocationExpectation; + + +@interface OCMockObject : NSProxy +{ + BOOL isNice; + BOOL expectationOrderMatters; + NSMutableArray *stubs; + NSMutableArray *expectations; + NSMutableArray *exceptions; + NSMutableArray *invocations; +} + ++ (id)mockForClass:(Class)aClass; ++ (id)mockForProtocol:(Protocol *)aProtocol; ++ (id)partialMockForObject:(NSObject *)anObject; + ++ (id)niceMockForClass:(Class)aClass; ++ (id)niceMockForProtocol:(Protocol *)aProtocol; + ++ (id)observerMock; + +- (instancetype)init; + +- (void)setExpectationOrderMatters:(BOOL)flag; + +- (id)stub; +- (id)expect; +- (id)reject; + +- (id)verify; +- (id)verifyAtLocation:(OCMLocation *)location; + +- (void)verifyWithDelay:(NSTimeInterval)delay; +- (void)verifyWithDelay:(NSTimeInterval)delay atLocation:(OCMLocation *)location; + +- (void)stopMocking; + +// internal use only + +- (void)addStub:(OCMInvocationStub *)aStub; +- (void)addExpectation:(OCMInvocationExpectation *)anExpectation; + +- (BOOL)handleInvocation:(NSInvocation *)anInvocation; +- (void)handleUnRecordedInvocation:(NSInvocation *)anInvocation; +- (BOOL)handleSelector:(SEL)sel; + +- (void)verifyInvocation:(OCMInvocationMatcher *)matcher; +- (void)verifyInvocation:(OCMInvocationMatcher *)matcher atLocation:(OCMLocation *)location; + +@end + diff --git a/Pods/OCMock/Source/OCMock/OCMockObject.m b/Pods/OCMock/Source/OCMock/OCMockObject.m new file mode 100644 index 0000000..932c8ef --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCMockObject.m @@ -0,0 +1,352 @@ +/* + * Copyright (c) 2004-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import +#import "OCClassMockObject.h" +#import "OCProtocolMockObject.h" +#import "OCPartialMockObject.h" +#import "OCObserverMockObject.h" +#import "OCMStubRecorder.h" +#import +#import "NSInvocation+OCMAdditions.h" +#import "OCMInvocationMatcher.h" +#import "OCMMacroState.h" +#import "OCMFunctions.h" +#import "OCMVerifier.h" +#import "OCMInvocationExpectation.h" +#import "OCMExpectationRecorder.h" + + +@implementation OCMockObject + +#pragma mark Class initialisation + ++ (void)initialize +{ + if([[NSInvocation class] instanceMethodSignatureForSelector:@selector(getArgumentAtIndexAsObject:)] == NULL) + [NSException raise:NSInternalInconsistencyException format:@"** Expected method not present; the method getArgumentAtIndexAsObject: is not implemented by NSInvocation. If you see this exception it is likely that you are using the static library version of OCMock and your project is not configured correctly to load categories from static libraries. Did you forget to add the -ObjC linker flag?"]; +} + + +#pragma mark Factory methods + ++ (id)mockForClass:(Class)aClass +{ + return [[[OCClassMockObject alloc] initWithClass:aClass] autorelease]; +} + ++ (id)mockForProtocol:(Protocol *)aProtocol +{ + return [[[OCProtocolMockObject alloc] initWithProtocol:aProtocol] autorelease]; +} + ++ (id)partialMockForObject:(NSObject *)anObject +{ + return [[[OCPartialMockObject alloc] initWithObject:anObject] autorelease]; +} + + ++ (id)niceMockForClass:(Class)aClass +{ + return [self _makeNice:[self mockForClass:aClass]]; +} + ++ (id)niceMockForProtocol:(Protocol *)aProtocol +{ + return [self _makeNice:[self mockForProtocol:aProtocol]]; +} + + ++ (id)_makeNice:(OCMockObject *)mock +{ + mock->isNice = YES; + return mock; +} + + ++ (id)observerMock +{ + return [[[OCObserverMockObject alloc] init] autorelease]; +} + + +#pragma mark Initialisers, description, accessors, etc. + +- (instancetype)init +{ + // no [super init], we're inheriting from NSProxy + expectationOrderMatters = NO; + stubs = [[NSMutableArray alloc] init]; + expectations = [[NSMutableArray alloc] init]; + exceptions = [[NSMutableArray alloc] init]; + invocations = [[NSMutableArray alloc] init]; + return self; +} + +- (void)dealloc +{ + [stubs release]; + [expectations release]; + [exceptions release]; + [invocations release]; + [super dealloc]; +} + +- (NSString *)description +{ + return @"OCMockObject"; +} + +- (void)addStub:(OCMInvocationStub *)aStub +{ + [stubs addObject:aStub]; +} + +- (void)addExpectation:(OCMInvocationExpectation *)anExpectation +{ + [expectations addObject:anExpectation]; +} + + +#pragma mark Public API + +- (void)setExpectationOrderMatters:(BOOL)flag +{ + expectationOrderMatters = flag; +} + +- (void)stopMocking +{ + // no-op for mock objects that are not class object or partial mocks +} + + +- (id)stub +{ + return [[[OCMStubRecorder alloc] initWithMockObject:self] autorelease]; +} + +- (id)expect +{ + return [[[OCMExpectationRecorder alloc] initWithMockObject:self] autorelease]; +} + +- (id)reject +{ + return [[self expect] never]; +} + + +- (id)verify +{ + return [self verifyAtLocation:nil]; +} + +- (id)verifyAtLocation:(OCMLocation *)location +{ + NSMutableArray *unsatisfiedExpectations = [NSMutableArray array]; + for(OCMInvocationExpectation *e in expectations) + { + if(![e isSatisfied]) + [unsatisfiedExpectations addObject:e]; + } + + if([unsatisfiedExpectations count] == 1) + { + NSString *description = [NSString stringWithFormat:@"%@: expected method was not invoked: %@", + [self description], [[unsatisfiedExpectations objectAtIndex:0] description]]; + OCMReportFailure(location, description); + } + else if([unsatisfiedExpectations count] > 0) + { + NSString *description = [NSString stringWithFormat:@"%@: %@ expected methods were not invoked: %@", + [self description], @([unsatisfiedExpectations count]), [self _stubDescriptions:YES]]; + OCMReportFailure(location, description); + } + + if([exceptions count] > 0) + { + NSString *description = [NSString stringWithFormat:@"%@: %@ (This is a strict mock failure that was ignored when it actually occured.)", + [self description], [[exceptions objectAtIndex:0] description]]; + OCMReportFailure(location, description); + } + + return [[[OCMVerifier alloc] initWithMockObject:self] autorelease]; +} + + +- (void)verifyWithDelay:(NSTimeInterval)delay +{ + [self verifyWithDelay:delay atLocation:nil]; +} + +- (void)verifyWithDelay:(NSTimeInterval)delay atLocation:(OCMLocation *)location +{ + NSTimeInterval step = 0.01; + while(delay > 0) + { + if([expectations count] == 0) + break; + [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:step]]; + delay -= step; + step *= 2; + } + [self verifyAtLocation:location]; +} + + +#pragma mark Verify after running + +- (void)verifyInvocation:(OCMInvocationMatcher *)matcher +{ + [self verifyInvocation:matcher atLocation:nil]; +} + +- (void)verifyInvocation:(OCMInvocationMatcher *)matcher atLocation:(OCMLocation *)location +{ + for(NSInvocation *invocation in invocations) + { + if([matcher matchesInvocation:invocation]) + return; + } + NSString *description = [NSString stringWithFormat:@"%@: Method %@ was not invoked.", + [self description], [matcher description]]; + + OCMReportFailure(location, description); +} + + +#pragma mark Handling invocations + +- (id)forwardingTargetForSelector:(SEL)aSelector +{ + if([OCMMacroState globalState] != nil) + { + OCMRecorder *recorder = [[OCMMacroState globalState] recorder]; + [recorder setMockObject:self]; + return recorder; + } + return nil; +} + + +- (BOOL)handleSelector:(SEL)sel +{ + for(OCMInvocationStub *recorder in stubs) + if([recorder matchesSelector:sel]) + return YES; + + return NO; +} + +- (void)forwardInvocation:(NSInvocation *)anInvocation +{ + @try + { + if([self handleInvocation:anInvocation] == NO) + [self handleUnRecordedInvocation:anInvocation]; + } + @catch(NSException *e) + { + [exceptions addObject:e]; + [e raise]; + } +} + +- (BOOL)handleInvocation:(NSInvocation *)anInvocation +{ + [invocations addObject:anInvocation]; + + OCMInvocationStub *stub = nil; + for(stub in stubs) + { + if([stub handleInvocation:anInvocation]) + break; + } + if(stub == nil) + return NO; + + if([expectations containsObject:stub]) + { + if(expectationOrderMatters && ([expectations objectAtIndex:0] != stub)) + { + [NSException raise:NSInternalInconsistencyException format:@"%@: unexpected method invoked: %@\n\texpected:\t%@", + [self description], [stub description], [[expectations objectAtIndex:0] description]]; + + } + if([(OCMInvocationExpectation *)stub isSatisfied]) + { + [expectations removeObject:stub]; + [stubs removeObject:stub]; + } + } + + return YES; +} + +- (void)handleUnRecordedInvocation:(NSInvocation *)anInvocation +{ + if(isNice == NO) + { + [NSException raise:NSInternalInconsistencyException format:@"%@: unexpected method invoked: %@ %@", + [self description], [anInvocation invocationDescription], [self _stubDescriptions:NO]]; + } +} + +- (void)doesNotRecognizeSelector:(SEL)aSelector __unused +{ + if([OCMMacroState globalState] != nil) + { + // we can't do anything clever with the macro state because we must raise an exception here + [NSException raise:NSInvalidArgumentException format:@"%@: Cannot stub/expect/verify method '%@' because no such method exists in the mocked class.", + [self description], NSStringFromSelector(aSelector)]; + } + else + { + [NSException raise:NSInvalidArgumentException format:@"-[%@ %@]: unrecognized selector sent to instance %p", + [self description], NSStringFromSelector(aSelector), (void *)self]; + } +} + + +#pragma mark Helper methods + +- (NSString *)_stubDescriptions:(BOOL)onlyExpectations +{ + NSMutableString *outputString = [NSMutableString string]; + for(OCMStubRecorder *stub in stubs) + { + NSString *prefix = @""; + + if(onlyExpectations) + { + if([expectations containsObject:stub] == NO) + continue; + } + else + { + if([expectations containsObject:stub]) + prefix = @"expected:\t"; + else + prefix = @"stubbed:\t"; + } + [outputString appendFormat:@"\n\t%@%@", prefix, [stub description]]; + } + return outputString; +} + + +@end diff --git a/Pods/OCMock/Source/OCMock/OCObserverMockObject.h b/Pods/OCMock/Source/OCMock/OCObserverMockObject.h new file mode 100644 index 0000000..444320e --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCObserverMockObject.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + +@class OCMLocation; + + +@interface OCObserverMockObject : NSObject +{ + BOOL expectationOrderMatters; + NSMutableArray *recorders; + NSMutableArray *centers; +} + +- (void)setExpectationOrderMatters:(BOOL)flag; + +- (id)expect; + +- (void)verify; +- (void)verifyAtLocation:(OCMLocation *)location; + +- (void)handleNotification:(NSNotification *)aNotification; + +// internal use + +- (void)autoRemoveFromCenter:(NSNotificationCenter *)aCenter; +- (void)notificationWithName:(NSString *)name object:(id)sender; + +@end diff --git a/Pods/OCMock/Source/OCMock/OCObserverMockObject.m b/Pods/OCMock/Source/OCMock/OCObserverMockObject.m new file mode 100644 index 0000000..7c0e9cd --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCObserverMockObject.m @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "OCObserverMockObject.h" +#import "OCMObserverRecorder.h" +#import "OCMLocation.h" +#import "OCMFunctions.h" + + +@implementation OCObserverMockObject + +#pragma mark Initialisers, description, accessors, etc. + +- (id)init +{ + self = [super init]; + recorders = [[NSMutableArray alloc] init]; + centers = [[NSMutableArray alloc] init]; + return self; +} + +- (id)retain +{ + return [super retain]; +} + +- (void)dealloc +{ + for(NSNotificationCenter *c in centers) + [c removeObserver:self]; + [centers release]; + [recorders release]; + [super dealloc]; +} + +- (NSString *)description +{ + return @"OCMockObserver"; +} + +- (void)setExpectationOrderMatters:(BOOL)flag +{ + expectationOrderMatters = flag; +} + +- (void)autoRemoveFromCenter:(NSNotificationCenter *)aCenter +{ + [centers addObject:aCenter]; +} + + +#pragma mark Public API + +- (id)expect +{ + OCMObserverRecorder *recorder = [[[OCMObserverRecorder alloc] init] autorelease]; + [recorders addObject:recorder]; + return recorder; +} + +- (void)verify +{ + [self verifyAtLocation:nil]; +} + +- (void)verifyAtLocation:(OCMLocation *)location +{ + if([recorders count] == 1) + { + NSString *description = [NSString stringWithFormat:@"%@: expected notification was not observed: %@", + [self description], [[recorders lastObject] description]]; + OCMReportFailure(location, description); + } + else if([recorders count] > 0) + { + NSString *description = [NSString stringWithFormat:@"%@ : %@ expected notifications were not observed.", + [self description], @([recorders count])]; + OCMReportFailure(location, description); + } +} + + +#pragma mark Receiving recording requests via macro + +- (void)notificationWithName:(NSString *)name object:(id)sender +{ + [[self expect] notificationWithName:name object:sender]; +} + + +#pragma mark Receiving notifications + +- (void)handleNotification:(NSNotification *)aNotification +{ + NSUInteger i, limit; + + limit = expectationOrderMatters ? 1 : [recorders count]; + for(i = 0; i < limit; i++) + { + if([[recorders objectAtIndex:i] matchesNotification:aNotification]) + { + [recorders removeObjectAtIndex:i]; + return; + } + } + [NSException raise:NSInternalInconsistencyException format:@"%@: unexpected notification observed: %@", [self description], + [aNotification description]]; +} + + +@end diff --git a/Pods/OCMock/Source/OCMock/OCPartialMockObject.h b/Pods/OCMock/Source/OCMock/OCPartialMockObject.h new file mode 100644 index 0000000..de4febb --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCPartialMockObject.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import "OCClassMockObject.h" + +@interface OCPartialMockObject : OCClassMockObject +{ + NSObject *realObject; +} + +- (id)initWithObject:(NSObject *)anObject; + +- (NSObject *)realObject; + +@end diff --git a/Pods/OCMock/Source/OCMock/OCPartialMockObject.m b/Pods/OCMock/Source/OCMock/OCPartialMockObject.m new file mode 100644 index 0000000..0fc8776 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCPartialMockObject.m @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2009-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import +#import "OCMockObject.h" +#import "OCPartialMockObject.h" +#import "NSMethodSignature+OCMAdditions.h" +#import "NSObject+OCMAdditions.h" +#import "OCMFunctions.h" +#import "OCMInvocationStub.h" + + +@implementation OCPartialMockObject + +#pragma mark Initialisers, description, accessors, etc. + +- (id)initWithObject:(NSObject *)anObject +{ + [self assertClassIsSupported:[anObject class]]; + [super initWithClass:[anObject class]]; + realObject = [anObject retain]; + [self prepareObjectForInstanceMethodMocking]; + return self; +} + +- (void)dealloc +{ + [self stopMocking]; + [super dealloc]; +} + +- (NSString *)description +{ + return [NSString stringWithFormat:@"OCPartialMockObject(%@)", NSStringFromClass(mockedClass)]; +} + +- (NSObject *)realObject +{ + return realObject; +} + +#pragma mark Helper methods + +- (void)assertClassIsSupported:(Class)class +{ + NSString *classname = NSStringFromClass(class); + NSString *reason = nil; + if([classname hasPrefix:@"__NSTagged"]) + reason = [NSString stringWithFormat:@"OCMock does not support partially mocking tagged classes; got %@", classname]; + else if([classname hasPrefix:@"__NSCF"]) + reason = [NSString stringWithFormat:@"OCMock does not support partially mocking toll-free bridged classes; got %@", classname]; + + if(reason != nil) + [[NSException exceptionWithName:NSInvalidArgumentException reason:reason userInfo:nil] raise]; +} + + +#pragma mark Extending/overriding superclass behaviour + +- (void)stopMocking +{ + if(realObject != nil) + { + OCMSetAssociatedMockForObject(nil, realObject); + object_setClass(realObject, [self mockedClass]); + [realObject release]; + realObject = nil; + } + [super stopMocking]; +} + +- (void)addStub:(OCMInvocationStub *)aStub +{ + [super addStub:aStub]; + if(![aStub recordedAsClassMethod]) + [self setupForwarderForSelector:[[aStub recordedInvocation] selector]]; +} + +- (void)handleUnRecordedInvocation:(NSInvocation *)anInvocation +{ + [anInvocation invokeWithTarget:realObject]; +} + + +#pragma mark Subclass management + +- (void)prepareObjectForInstanceMethodMocking +{ + OCMSetAssociatedMockForObject(self, realObject); + + /* dynamically create a subclass and set it as the class of the object */ + Class subclass = OCMCreateSubclass(mockedClass, realObject); + object_setClass(realObject, subclass); + + /* point forwardInvocation: of the object to the implementation in the mock */ + Method myForwardMethod = class_getInstanceMethod([self mockObjectClass], @selector(forwardInvocationForRealObject:)); + IMP myForwardIMP = method_getImplementation(myForwardMethod); + class_addMethod(subclass, @selector(forwardInvocation:), myForwardIMP, method_getTypeEncoding(myForwardMethod)); + + /* do the same for forwardingTargetForSelector, remember existing imp with alias selector */ + Method myForwardingTargetMethod = class_getInstanceMethod([self mockObjectClass], @selector(forwardingTargetForSelectorForRealObject:)); + IMP myForwardingTargetIMP = method_getImplementation(myForwardingTargetMethod); + IMP originalForwardingTargetIMP = [mockedClass instanceMethodForSelector:@selector(forwardingTargetForSelector:)]; + class_addMethod(subclass, @selector(forwardingTargetForSelector:), myForwardingTargetIMP, method_getTypeEncoding(myForwardingTargetMethod)); + class_addMethod(subclass, @selector(ocmock_replaced_forwardingTargetForSelector:), originalForwardingTargetIMP, method_getTypeEncoding(myForwardingTargetMethod)); + + /* We also override the -class method to return the original class */ + Method myObjectClassMethod = class_getInstanceMethod([self mockObjectClass], @selector(classForRealObject)); + const char *objectClassTypes = method_getTypeEncoding(myObjectClassMethod); + IMP myObjectClassImp = method_getImplementation(myObjectClassMethod); + class_addMethod(subclass, @selector(class), myObjectClassImp, objectClassTypes); + + /* Adding forwarder for most instance methods to allow for verify after run */ + NSArray *methodBlackList = @[@"class", @"forwardingTargetForSelector:", @"methodSignatureForSelector:", @"forwardInvocation:", + @"allowsWeakReference", @"retainWeakReference", @"isBlock"]; + [NSObject enumerateMethodsInClass:mockedClass usingBlock:^(Class cls, SEL sel) { + if((cls == [NSObject class]) || (cls == [NSProxy class])) + return; + NSString *className = NSStringFromClass(cls); + NSString *selName = NSStringFromSelector(sel); + if(([className hasPrefix:@"NS"] || [className hasPrefix:@"UI"]) && + ([selName hasPrefix:@"_"] || [selName hasSuffix:@"_"])) + return; + if([methodBlackList containsObject:selName]) + return; + @try + { + [self setupForwarderForSelector:sel]; + } + @catch(NSException *e) + { + // ignore for now + } + }]; +} + +- (void)setupForwarderForSelector:(SEL)sel +{ + SEL aliasSelector = OCMAliasForOriginalSelector(sel); + if(class_getInstanceMethod(object_getClass(realObject), aliasSelector) != NULL) + return; + + Method originalMethod = class_getInstanceMethod(mockedClass, sel); + IMP originalIMP = method_getImplementation(originalMethod); + const char *types = method_getTypeEncoding(originalMethod); + /* Might be NULL if the selector is forwarded to another class */ + // TODO: check the fallback implementation is actually sufficient + if(types == NULL) + types = ([[mockedClass instanceMethodSignatureForSelector:sel] fullObjCTypes]); + + Class subclass = object_getClass([self realObject]); + IMP forwarderIMP = [mockedClass instanceMethodForwarderForSelector:sel]; + class_replaceMethod(subclass, sel, forwarderIMP, types); + class_addMethod(subclass, aliasSelector, originalIMP, types); +} + + +// Implementation of the -class method; return the Class that was reported with [realObject class] prior to mocking +- (Class)classForRealObject +{ + // in here "self" is a reference to the real object, not the mock + OCPartialMockObject *mock = OCMGetAssociatedMockForObject(self); + if(mock == nil) + [NSException raise:NSInternalInconsistencyException format:@"No partial mock for object %p", self]; + return [mock mockedClass]; +} + + +- (id)forwardingTargetForSelectorForRealObject:(SEL)sel +{ + // in here "self" is a reference to the real object, not the mock + OCPartialMockObject *mock = OCMGetAssociatedMockForObject(self); + if(mock == nil) + [NSException raise:NSInternalInconsistencyException format:@"No partial mock for object %p", self]; + if([mock handleSelector:sel]) + return self; + + return [self ocmock_replaced_forwardingTargetForSelector:sel]; +} + +// Make the compiler happy in -forwardingTargetForSelectorForRealObject: because it can't find the message… +- (id)ocmock_replaced_forwardingTargetForSelector:(SEL)sel +{ + return nil; +} + + +- (void)forwardInvocationForRealObject:(NSInvocation *)anInvocation +{ + // in here "self" is a reference to the real object, not the mock + OCPartialMockObject *mock = OCMGetAssociatedMockForObject(self); + if(mock == nil) + [NSException raise:NSInternalInconsistencyException format:@"No partial mock for object %p", self]; + + if([mock handleInvocation:anInvocation] == NO) + { + [anInvocation setSelector:OCMAliasForOriginalSelector([anInvocation selector])]; + [anInvocation invoke]; + } +} + + +@end diff --git a/Pods/OCMock/Source/OCMock/OCProtocolMockObject.h b/Pods/OCMock/Source/OCMock/OCProtocolMockObject.h new file mode 100644 index 0000000..18cc38f --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCProtocolMockObject.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2005-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import + +@interface OCProtocolMockObject : OCMockObject +{ + Protocol *mockedProtocol; +} + +- (id)initWithProtocol:(Protocol *)aProtocol; + +@end + diff --git a/Pods/OCMock/Source/OCMock/OCProtocolMockObject.m b/Pods/OCMock/Source/OCMock/OCProtocolMockObject.m new file mode 100644 index 0000000..2538057 --- /dev/null +++ b/Pods/OCMock/Source/OCMock/OCProtocolMockObject.m @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2005-2014 Erik Doernenburg and contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use these files except in compliance with the License. You may obtain + * a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#import +#import "NSMethodSignature+OCMAdditions.h" +#import "OCProtocolMockObject.h" + +@implementation OCProtocolMockObject + +#pragma mark Initialisers, description, accessors, etc. + +- (id)initWithProtocol:(Protocol *)aProtocol +{ + [super init]; + mockedProtocol = aProtocol; + return self; +} + +- (NSString *)description +{ + const char* name = protocol_getName(mockedProtocol); + return [NSString stringWithFormat:@"OCMockObject(%s)", name]; +} + +#pragma mark Proxy API + +- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector +{ + struct objc_method_description methodDescription = protocol_getMethodDescription(mockedProtocol, aSelector, YES, YES); + if(methodDescription.name == NULL) + { + methodDescription = protocol_getMethodDescription(mockedProtocol, aSelector, NO, YES); + } + if(methodDescription.name == NULL) + { + return nil; + } + return [NSMethodSignature signatureWithObjCTypes:methodDescription.types]; +} + +- (BOOL)conformsToProtocol:(Protocol *)aProtocol +{ + return protocol_conformsToProtocol(mockedProtocol, aProtocol); +} + +- (BOOL)respondsToSelector:(SEL)selector +{ + return ([self methodSignatureForSelector:selector] != nil); +} + +@end diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 4ff3738..2a3fe4e 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -1,4978 +1,1916 @@ - - - - - archiveVersion - 1 - classes - - objectVersion - 46 - objects - - 00FA7EF7465805D087F63654 - - fileRef - 4E039432400320F80273ECD6 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 01C1A4BBC98B458545DA990C - - buildConfigurations - - 3A0DEF88B22B6A0F82270E69 - 20B7A57EAD8FFE954818E8C2 - D037F51C2049A074A5C52E53 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 032A24B9CE8BD2FCB4342862 - - fileRef - 5CD53EAD6362BFDE70ED9EA6 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - 0366692EBFBAC86FC26DCABC - - fileRef - 1245B3AEB2552B1C5A32C9E3 - isa - PBXBuildFile - - 036CF9E9A0C1826988C28D64 - - fileRef - C7C75F2F4B39FDDC2A6E2F4B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - 04F36850BE07F64A3CB578A0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - MASShortcut+Monitoring.m - sourceTree - <group> - - 06AEA9C1FDEFF7448355498A - - isa - PBXTargetDependency - target - 485A73EACEEED7FBD7FF5991 - targetProxy - B013A6F39D9A5DC4D015EFB9 - - 06D3DAC3F4BC1FA7D60C2B5E - - fileRef - F28D10DCC1CB1EFAFF00EDDE - isa - PBXBuildFile - - 07B5FD461548E768A272E9A5 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Pods-RoboKit-prefix.pch - sourceTree - <group> - - 0868B76B23DF3259F2AA1CFC - - children - - 1CA072749D28A351B9C1CBEE - 3C23FBCFA735493F1ABE0151 - C72A296CA8F9E8B1CDFA95C0 - 864DBA7844AE0DAC5BDA23BB - - isa - PBXGroup - name - Support Files - path - ../Target Support Files/Pods-libextobjc - sourceTree - <group> - - 089A1C738C697D8B798D1276 - - fileRef - 3935C77145A568052F804351 - isa - PBXBuildFile - - 08AA2653BE753D71EEBC659B - - baseConfigurationReference - 3C23FBCFA735493F1ABE0151 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COMBINE_HIDPI_IMAGES - YES - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_DYNAMIC_NO_PIC - NO - GCC_ENABLE_OBJC_EXCEPTIONS - YES - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-libextobjc/Pods-libextobjc-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - MACOSX_DEPLOYMENT_TARGET - 10.10 - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - SDKROOT - macosx - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - 094FEFB1FE37D9C72EC0B45D - - baseConfigurationReference - 0BD3166F05A463D4FC24F5BF - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COMBINE_HIDPI_IMAGES - YES - COPY_PHASE_STRIP - YES - DEBUG_INFORMATION_FORMAT - dwarf-with-dsym - DSTROOT - /tmp/xcodeproj.dst - GCC_ENABLE_OBJC_EXCEPTIONS - YES - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-HockeySDK-Mac/Pods-HockeySDK-Mac-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - MACOSX_DEPLOYMENT_TARGET - 10.10 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - SDKROOT - macosx - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Beta Release - - 0BD3166F05A463D4FC24F5BF - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-HockeySDK-Mac-Private.xcconfig - sourceTree - <group> - - 0BE5AC55181DC55029C266C7 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - MASShortcut.m - sourceTree - <group> - - 0C0678FA0F374E7313068CD1 - - fileRef - 73FC2B2DB80A814A90D7A0FD - isa - PBXBuildFile - - 0C34B5774C87BE2355CAB198 - - children - - CC0A3235A9781A6A222AAB15 - 0BE5AC55181DC55029C266C7 - 94DF83C42DC8C1CFD71C2DD0 - 04F36850BE07F64A3CB578A0 - 8F114FEC1F1377DCB2F79B5A - D84F1D8EF18387C1DD46BFC5 - EED199F673EB178F47F3C7CF - 5A9B89E3CEE8E18E2B5D8B9E - C3A973EDE480202DAAC5E0E8 - 851D690821CE667894CCB0B3 - CE3E86E4DD0AC5AA81B2F081 - - isa - PBXGroup - name - MASShortcut - path - MASShortcut - sourceTree - <group> - - 0C4ECBDCF70B830FEC706717 - - children - - 63AE502A6E664425FB78D96B - D17AEC4D2EC7BF48CEFE4F4C - 0868B76B23DF3259F2AA1CFC - - isa - PBXGroup - name - libextobjc - path - libextobjc - sourceTree - <group> - - 0D90481E1E195F81F9A2E07C - - isa - PBXTargetDependency - target - A298819E85AA5FEF6AB720F4 - targetProxy - 55157BB28A8E6EFD66BC349A - - 0DF64FC47D2FC9DD4A8FC7A7 - - fileRef - 851D690821CE667894CCB0B3 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - 0E4E3387B76224ACE59B61C8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPAnimatableProperty.h - path - pop/POPAnimatableProperty.h - sourceTree - <group> - - 0F051B668090AD43D6DCEA3C - - baseConfigurationReference - B7ABE822AE1B64ACFBADE2DA - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COMBINE_HIDPI_IMAGES - YES - COPY_PHASE_STRIP - YES - DEBUG_INFORMATION_FORMAT - dwarf-with-dsym - DSTROOT - /tmp/xcodeproj.dst - GCC_ENABLE_OBJC_EXCEPTIONS - YES - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - MACOSX_DEPLOYMENT_TARGET - 10.10 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - SDKROOT - macosx - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Release - - 1051AE1926DD59CF5885D47D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Pods-HockeySDK-Mac-prefix.pch - sourceTree - <group> - - 111EC02BD3F5E3E892EC5BDC - - includeInIndex - 1 - isa - PBXFileReference - name - POPPropertyAnimation.mm - path - pop/POPPropertyAnimation.mm - sourceTree - <group> - - 1245B3AEB2552B1C5A32C9E3 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPSpringAnimation.h - path - pop/POPSpringAnimation.h - sourceTree - <group> - - 136F61376898B49622382DB9 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPAnimatorPrivate.h - path - pop/POPAnimatorPrivate.h - sourceTree - <group> - - 15750A05D3A9CFA808EB6EDC - - fileRef - 2AA10CE6592C0D24872366DC - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - 1725501949E337D04AE0240F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPCGUtils.h - path - pop/POPCGUtils.h - sourceTree - <group> - - 17D62D5A2B7F9227AD9714C1 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSDate+Holidays.h - path - Classes/Extensions/NSDate+Holidays.h - sourceTree - <group> - - 189FB1A6820FEC6C73FEB0A1 - - fileRef - 6A9AECBE9D047408BA7DAB7B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - 18CC09D2F24880CFD02BA2D7 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPAnimationPrivate.h - path - pop/POPAnimationPrivate.h - sourceTree - <group> - - 1B0D9B87DDF76CBB05028569 - - fileRef - DE7916C8478B548D89A55459 - isa - PBXBuildFile - - 1B147EF1CC44EC391C644B54 - - fileRef - 2188B01AD739F0C7CA84DCF3 - isa - PBXBuildFile - - 1B3CD56B4243576581891B4D - - buildConfigurationList - 644FA9CC68049E7349018480 - buildPhases - - 43B6F17BC79A6B29D2389DED - 30FACB4952DB30DF84BF2519 - 9F4922ADF407E593F95FF356 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - Pods-RoboKit - productName - Pods-RoboKit - productReference - 1D923EF266EA998FD5965576 - productType - com.apple.product-type.library.static - - 1B4109E78D5B767027CB757C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPPropertyAnimation.h - path - pop/POPPropertyAnimation.h - sourceTree - <group> - - 1CA072749D28A351B9C1CBEE - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-libextobjc.xcconfig - sourceTree - <group> - - 1D1E21B888B4BA3C0EE43E18 - - fileRef - 7173168D4BBF20DFCB476FC7 - isa - PBXBuildFile - - 1D923EF266EA998FD5965576 - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-RoboKit.a - sourceTree - BUILT_PRODUCTS_DIR - - 1E4602E09EF8211B8FF03918 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSDate-Utilities.h - path - Classes/Extensions/NSDate-Utilities.h - sourceTree - <group> - - 1E84E0E64EA6EA2F36F5175C - - buildActionMask - 2147483647 - files - - 6198689E8E53866FE47499D4 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 20B7A57EAD8FFE954818E8C2 - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - NO - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES - COPY_PHASE_STRIP - YES - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - MACOSX_DEPLOYMENT_TARGET - 10.10 - ONLY_ACTIVE_ARCH - YES - STRIP_INSTALLED_PRODUCT - NO - - isa - XCBuildConfiguration - name - Debug - - 20DAEB7CB1C115267EBA8323 - - containerPortal - A0597AE421ED6B7FA455D313 - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 249F9909E30E7220AD168FE6 - remoteInfo - Pods-libextobjc - - 2188B01AD739F0C7CA84DCF3 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSDate+RoboKit.h - path - Classes/Extensions/NSDate+RoboKit.h - sourceTree - <group> - - 21CF1C77F5161C3D5B6414EE - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-pop.a - sourceTree - BUILT_PRODUCTS_DIR - - 22B82AB2AF75603874F46B24 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Pods-MASShortcut-prefix.pch - sourceTree - <group> - - 249F9909E30E7220AD168FE6 - - buildConfigurationList - 8CF11C8A248365F323E1B8F0 - buildPhases - - D8B5D97D333767F715257F2E - 62DD1E7152889B8D3E2F5208 - 9C2C4AD9B34A6EC81F019D89 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - Pods-libextobjc - productName - Pods-libextobjc - productReference - FB6512BCB2BAE048F0954EC1 - productType - com.apple.product-type.library.static - - 2678298EDCC43CDD5A332FDD - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPCustomAnimation.h - path - pop/POPCustomAnimation.h - sourceTree - <group> - - 27DBF19D33B5EF04AB030CE9 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSData+Base64.m - path - Classes/Extensions/NSData+Base64.m - sourceTree - <group> - - 293EB2716BA5D5C26D8773BD - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-HockeySDK-Mac-dummy.m - sourceTree - <group> - - 29486EE6B1182BB6DF9E7002 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPDefines.h - path - pop/POPDefines.h - sourceTree - <group> - - 2AA10CE6592C0D24872366DC - - includeInIndex - 1 - isa - PBXFileReference - name - POPSpringAnimation.mm - path - pop/POPSpringAnimation.mm - sourceTree - <group> - - 2BF111CE90ECC61A74597383 - - fileRef - A0654E92F024F0993EB4772A - isa - PBXBuildFile - - 2F76BB4E15AC016E7DC5EF40 - - fileRef - 0E4E3387B76224ACE59B61C8 - isa - PBXBuildFile - - 30290986D31E9A92F61EEA63 - - fileRef - 3CDE5D1099100A86706F60F7 - isa - PBXBuildFile - - 30FACB4952DB30DF84BF2519 - - buildActionMask - 2147483647 - files - - 8AA26A14800435D6000C5F3F - C845FED4130E5BB23A31A473 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 31543920A5409A9E85A9DF9B - - fileRef - 136F61376898B49622382DB9 - isa - PBXBuildFile - - 316FC6DAC51B01F5798D697D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPAnimationTracerInternal.h - path - pop/POPAnimationTracerInternal.h - sourceTree - <group> - - 319449D4A53AFB8AFDCE2328 - - fileRef - CDDC265964D7FDED36CB6F2E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 32819FC342EDE6732558C01F - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-HockeySDK-Mac.a - sourceTree - BUILT_PRODUCTS_DIR - - 344FAE1BBDDCAA3FFDFBA009 - - children - - 8B441CFA4ED3BBE9101BEDB3 - - isa - PBXGroup - name - Frameworks - sourceTree - <group> - - 351EE07CE8D0000D60F45D9C - - fileRef - EAE31E98316B2515C64B760D - isa - PBXBuildFile - - 355538AE638FA13F3958BF37 - - fileRef - 111EC02BD3F5E3E892EC5BDC - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - 355830C402A5F114B8175FB4 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSArray+RoboKit.h - path - Classes/Extensions/NSArray+RoboKit.h - sourceTree - <group> - - 36F2835EB6610B123E0EA1FD - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPGeometry.h - path - pop/POPGeometry.h - sourceTree - <group> - - 3935C77145A568052F804351 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - TransformationMatrix.h - path - pop/WebCore/TransformationMatrix.h - sourceTree - <group> - - 3A0DEF88B22B6A0F82270E69 - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - NO - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES - COPY_PHASE_STRIP - NO - ENABLE_NS_ASSERTIONS - NO - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PREPROCESSOR_DEFINITIONS - - BETA_RELEASE=1 - - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - MACOSX_DEPLOYMENT_TARGET - 10.10 - STRIP_INSTALLED_PRODUCT - NO - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Beta Release - - 3A2D139221B1F153E1D37073 - - children - - BB6A120B65BF10D0BCC8C4CC - 851AA860479BCD82E2B05D56 - F7288493915EF523A46272A9 - 0E4E3387B76224ACE59B61C8 - 9F6BE447498471DAB83ADFCF - F7E17A01F72933155D0E0B2B - D1E9C631F02D0DCE2C888976 - A0654E92F024F0993EB4772A - E2B3DB2CC7BBE92635774A55 - 3CDE5D1099100A86706F60F7 - 6F5461404D205DBE07CA153B - 6C0C9589CF1CDBF3E8934359 - D5B66BC0F17D5D583B768918 - 18CC09D2F24880CFD02BA2D7 - DE7916C8478B548D89A55459 - 5D2B3A7F8D16DF3B9A375976 - 7BD9E32C17ABDEC8D436CB20 - D9243E37C3E1A614C471856E - 316FC6DAC51B01F5798D697D - 5D4CE6270745C2A9D3A0BBF4 - 6A9AECBE9D047408BA7DAB7B - 136F61376898B49622382DB9 - C57D63C6798044E04A3B5A61 - 3EA76506B3093C11D42E7C7D - D1B2E5A13F2F818639ABBC45 - 1725501949E337D04AE0240F - C52847B511F521B13112BAE1 - 2678298EDCC43CDD5A332FDD - 9E38697023ABD6817035428D - 92C7EB48B5780D3B89FE4DDC - 54393726BB26CD77A5D19E32 - F06F2A9E27F3317434346969 - 29486EE6B1182BB6DF9E7002 - 36F2835EB6610B123E0EA1FD - 5DB0A4DD8581F4B035FA8050 - 6DF7C123ACB80AFEACE32074 - 7D6F2895F550D07AF86A5208 - D7FE2D0B45B5E6B79654F1EA - C7C75F2F4B39FDDC2A6E2F4B - 1B4109E78D5B767027CB757C - 111EC02BD3F5E3E892EC5BDC - E0E2BB09F2F5A6EB20C35D81 - 1245B3AEB2552B1C5A32C9E3 - 2AA10CE6592C0D24872366DC - E988299D84C0284C12A50A8F - D65C83520DAA5DFF8A27A9E2 - E0488966355AD09ADA659A70 - 968FC116C0921EA6FE4B9858 - 5CD53EAD6362BFDE70ED9EA6 - 3935C77145A568052F804351 - C0BF66C9D24C747E7D99C99E - 75278A1BD655F33CFB92097F - - isa - PBXGroup - name - pop - path - pop - sourceTree - <group> - - 3C0BF5F1A1A2FCD753C5D05B - - buildActionMask - 2147483647 - files - - 721BB50FC31AAFBC1D532510 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 3C23FBCFA735493F1ABE0151 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-libextobjc-Private.xcconfig - sourceTree - <group> - - 3CDE5D1099100A86706F60F7 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPAnimationEventInternal.h - path - pop/POPAnimationEventInternal.h - sourceTree - <group> - - 3D78D2E1E5C7AD23918628FC - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - Carbon.framework - path - Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/Carbon.framework - sourceTree - DEVELOPER_DIR - - 3E31C1B10EC81F8FFEBD7092 - - fileRef - E988299D84C0284C12A50A8F - isa - PBXBuildFile - - 3EA76506B3093C11D42E7C7D - - includeInIndex - 1 - isa - PBXFileReference - name - POPBasicAnimation.mm - path - pop/POPBasicAnimation.mm - sourceTree - <group> - - 3F3E74C378E96E3A43400D31 - - fileRef - 5D4CE6270745C2A9D3A0BBF4 - isa - PBXBuildFile - - 3F9B94FDB4086E44A538927F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - RBKCommonUtils.h - path - Classes/Headers/RBKCommonUtils.h - sourceTree - <group> - - 4139000AA387F71E5C39EC96 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Pods-pop-prefix.pch - sourceTree - <group> - - 428BC92A54B0FC2DE3BDD7A5 - - fileRef - F06F2A9E27F3317434346969 - isa - PBXBuildFile - - 43B6F17BC79A6B29D2389DED - - buildActionMask - 2147483647 - files - - 5252EAEF7C2F18AE0F15DC8F - 7D0F650365C164432F0D1FAB - CCAB3576BD70AE6D8DEF234F - B9BF063DECAC33A9EC46D3AA - 00FA7EF7465805D087F63654 - F7A97C781A846F30B334C050 - 6FC87743D1CFB4BE32BEAF23 - 319449D4A53AFB8AFDCE2328 - D56D8D6ABDFE44FCBFC765C3 - 528FD35B10C69EEC574DF3C4 - 1D1E21B888B4BA3C0EE43E18 - 9DA928FDC1D93874EA94F578 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 4420EB6BFF48C8140468064D - - baseConfigurationReference - 746366A22C327DA5E6149213 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COMBINE_HIDPI_IMAGES - YES - COPY_PHASE_STRIP - YES - DEBUG_INFORMATION_FORMAT - dwarf-with-dsym - DSTROOT - /tmp/xcodeproj.dst - GCC_ENABLE_OBJC_EXCEPTIONS - YES - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-pop/Pods-pop-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - MACOSX_DEPLOYMENT_TARGET - 10.10 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - SDKROOT - macosx - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Release - - 4442B0D21B3E7CC30E0585D0 - - fileRef - D84F1D8EF18387C1DD46BFC5 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - 4479BB5FF8CA944F38B2CF2C - - fileRef - 8F114FEC1F1377DCB2F79B5A - isa - PBXBuildFile - - 4710DBE04F63F7282AFEF7F0 - - fileRef - 7BD9E32C17ABDEC8D436CB20 - isa - PBXBuildFile - - 485A73EACEEED7FBD7FF5991 - - buildConfigurationList - CA8CD71DE292E3B3B81CF415 - buildPhases - - A005C0F44830CD55F246A9AF - D8354A66278C616AFFD3E0C1 - C81F4C8FB36E6781B7A39302 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - Pods-pop - productName - Pods-pop - productReference - 21CF1C77F5161C3D5B6414EE - productType - com.apple.product-type.library.static - - 4948C551B73794BEAFBCDF8D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSMutableArray+RoboKit.h - path - Classes/Extensions/NSMutableArray+RoboKit.h - sourceTree - <group> - - 498AA930625FEA8BA3103C5D - - fileRef - 89D9AE3A9CF532AA9819C6C2 - isa - PBXBuildFile - - 4A6ED301AF3BC7B6F5463D31 - - fileRef - 316FC6DAC51B01F5798D697D - isa - PBXBuildFile - - 4B721505C8D5518880783EAB - - fileRef - 5A9B89E3CEE8E18E2B5D8B9E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - 4CB8CF79FD2073E534DDFC90 - - fileRef - 3D78D2E1E5C7AD23918628FC - isa - PBXBuildFile - - 4CC238D2DACCBC09B7718004 - - fileRef - D1E9C631F02D0DCE2C888976 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - 4E039432400320F80273ECD6 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSDate+RoboKit.m - path - Classes/Extensions/NSDate+RoboKit.m - sourceTree - <group> - - 4E16B7FDF1AEB2AD91AABF46 - - fileRef - C57D63C6798044E04A3B5A61 - isa - PBXBuildFile - - 4F2740AAB56C40B7904EE0ED - - children - - 355830C402A5F114B8175FB4 - AB9D5303C1F0C057F2B13CED - 89D9AE3A9CF532AA9819C6C2 - 27DBF19D33B5EF04AB030CE9 - E026699F6A666513126D6E30 - A02F4A35883635E9AD9AA75A - 17D62D5A2B7F9227AD9714C1 - F6F74EB5FA34CBC01E2C1E55 - 2188B01AD739F0C7CA84DCF3 - 4E039432400320F80273ECD6 - 1E4602E09EF8211B8FF03918 - F10790957FA2470C5F9351C8 - 4948C551B73794BEAFBCDF8D - 9B0520A5C90472F46BABC1C5 - E44B7AA9C9A3C66EDC89602A - CDDC265964D7FDED36CB6F2E - 93130EB756BF02B48476A8E2 - 70A2A7B5B6C12F99D81374AA - EADEC8F1367F52927D38E817 - 8ECAD045C350F49711A6270D - 68A11E74BE2481E524FE1B07 - 3F9B94FDB4086E44A538927F - DAB8F1EA0467EAAB5D54EA9A - CB2AFA0ED4E4906CC2151504 - F5430E8A898E0A3680ED2D57 - - isa - PBXGroup - name - RoboKit - path - RoboKit - sourceTree - <group> - - 51A0B12C29899438BC0B7E10 - - fileRef - 1E4602E09EF8211B8FF03918 - isa - PBXBuildFile - - 523741741FF3DAB8FCAFF3B4 - - buildConfigurationList - E6CA3CD7262C04983FE5329D - buildPhases - - 9008B289D756750CCF0B1FA5 - 5F1069599999294113B794FD - - buildRules - - dependencies - - isa - PBXNativeTarget - name - Pods-HockeySDK-Mac - productName - Pods-HockeySDK-Mac - productReference - 32819FC342EDE6732558C01F - productType - com.apple.product-type.library.static - - 5252EAEF7C2F18AE0F15DC8F - - fileRef - AB9D5303C1F0C057F2B13CED - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 528FD35B10C69EEC574DF3C4 - - fileRef - 8ECAD045C350F49711A6270D - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 5311562CA95AB7691B6FD0DC - - fileRef - 6C0C9589CF1CDBF3E8934359 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - 540CD29A6D51A6234BB9328A - - fileRef - C52847B511F521B13112BAE1 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - 54393726BB26CD77A5D19E32 - - includeInIndex - 1 - isa - PBXFileReference - name - POPDecayAnimation.mm - path - pop/POPDecayAnimation.mm - sourceTree - <group> - - 55157BB28A8E6EFD66BC349A - - containerPortal - A0597AE421ED6B7FA455D313 - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - A298819E85AA5FEF6AB720F4 - remoteInfo - Pods-MASShortcut - - 5525C952B6959E24C8E1E483 - - fileRef - 94DF83C42DC8C1CFD71C2DD0 - isa - PBXBuildFile - - 56A9B0036E1796792BDDCB12 - - isa - PBXTargetDependency - target - 1B3CD56B4243576581891B4D - targetProxy - A375B3B957D4380A5E5C8E6E - - 57B6B1C7949B85BF4DC5EB4C - - fileRef - 968FC116C0921EA6FE4B9858 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - 5A9B89E3CEE8E18E2B5D8B9E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - MASShortcutView.m - sourceTree - <group> - - 5CD53EAD6362BFDE70ED9EA6 - - includeInIndex - 1 - isa - PBXFileReference - name - TransformationMatrix.cpp - path - pop/WebCore/TransformationMatrix.cpp - sourceTree - <group> - - 5CF2D428024296027497DEBE - - fileRef - E44B7AA9C9A3C66EDC89602A - isa - PBXBuildFile - - 5D2B3A7F8D16DF3B9A375976 - - includeInIndex - 1 - isa - PBXFileReference - name - POPAnimationRuntime.mm - path - pop/POPAnimationRuntime.mm - sourceTree - <group> - - 5D4CE6270745C2A9D3A0BBF4 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPAnimator.h - path - pop/POPAnimator.h - sourceTree - <group> - - 5DB0A4DD8581F4B035FA8050 - - includeInIndex - 1 - isa - PBXFileReference - name - POPGeometry.mm - path - pop/POPGeometry.mm - sourceTree - <group> - - 5F1069599999294113B794FD - - buildActionMask - 2147483647 - files - - D63D40D361D285E370BE0A46 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 5FB8075F83F1DE824A2A5B91 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-MASShortcut.xcconfig - sourceTree - <group> - - 6086BE34620E5285FB9C58B9 - - fileRef - 1B4109E78D5B767027CB757C - isa - PBXBuildFile - - 6198689E8E53866FE47499D4 - - fileRef - 73FC2B2DB80A814A90D7A0FD - isa - PBXBuildFile - - 6293EF85769F6BD25CD23D02 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.plist.xml - path - Pods-acknowledgements.plist - sourceTree - <group> - - 62DD1E7152889B8D3E2F5208 - - buildActionMask - 2147483647 - files - - 0C0678FA0F374E7313068CD1 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 6340D43714B2D8366E4DEC5A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - EXTRuntimeExtensions.m - path - extobjc/EXTRuntimeExtensions.m - sourceTree - <group> - - 6395EC7727CF0E5F65F0BB39 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-pop.xcconfig - sourceTree - <group> - - 63AE502A6E664425FB78D96B - - children - - F28D10DCC1CB1EFAFF00EDDE - - isa - PBXGroup - name - EXTKeyPathCoding - sourceTree - <group> - - 644FA9CC68049E7349018480 - - buildConfigurations - - ACFBD38822E518D5F785DA92 - 87E0C560AFBB55F7FE0CB9F5 - BA48C6298C84202E81263CAF - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 651F5B4B7D79B0FE119C5B58 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods.beta release.xcconfig - sourceTree - <group> - - 66759A7EDEB5E8232CBCA154 - - fileRef - BB6A120B65BF10D0BCC8C4CC - isa - PBXBuildFile - - 6771D37D19B38B8D81B52201 - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - HockeySDK.framework - path - HockeySDK-Mac/HockeySDK.framework - sourceTree - <group> - - 68A11E74BE2481E524FE1B07 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - RBKAppKitUtils.h - path - OSX/RBKAppKitUtils.h - sourceTree - <group> - - 6A9AECBE9D047408BA7DAB7B - - includeInIndex - 1 - isa - PBXFileReference - name - POPAnimator.mm - path - pop/POPAnimator.mm - sourceTree - <group> - - 6BAA8742402580EFA424D05C - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods.a - sourceTree - BUILT_PRODUCTS_DIR - - 6BC4ED10365AF857D9B9EC7D - - fileRef - 7D6F2895F550D07AF86A5208 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - 6C0C9589CF1CDBF3E8934359 - - includeInIndex - 1 - isa - PBXFileReference - name - POPAnimationExtras.mm - path - pop/POPAnimationExtras.mm - sourceTree - <group> - - 6DF7C123ACB80AFEACE32074 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPLayerExtras.h - path - pop/POPLayerExtras.h - sourceTree - <group> - - 6F5461404D205DBE07CA153B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPAnimationExtras.h - path - pop/POPAnimationExtras.h - sourceTree - <group> - - 6FC87743D1CFB4BE32BEAF23 - - fileRef - 9B0520A5C90472F46BABC1C5 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 70A2A7B5B6C12F99D81374AA - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSString+CSV.m - path - Classes/Extensions/NSString+CSV.m - sourceTree - <group> - - 70AE2818C72071E0893A378F - - fileRef - C0BF66C9D24C747E7D99C99E - isa - PBXBuildFile - - 7173168D4BBF20DFCB476FC7 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-RoboKit-dummy.m - sourceTree - <group> - - 721BB50FC31AAFBC1D532510 - - fileRef - BBC6439C673DCBB2EAD40CFA - isa - PBXBuildFile - - 73FC2B2DB80A814A90D7A0FD - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - Cocoa.framework - path - Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/Cocoa.framework - sourceTree - DEVELOPER_DIR - - 746366A22C327DA5E6149213 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-pop-Private.xcconfig - sourceTree - <group> - - 751ADC45550A57D9371C7245 - - buildConfigurations - - D013B9824187FFA567E25B18 - 7AA68CD9DE522DC1FCE06A94 - B16FF8A1BD1FC0494879BF4E - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 75278A1BD655F33CFB92097F - - children - - 6395EC7727CF0E5F65F0BB39 - 746366A22C327DA5E6149213 - AC68E57D0BB6D20969831B3B - 4139000AA387F71E5C39EC96 - - isa - PBXGroup - name - Support Files - path - ../Target Support Files/Pods-pop - sourceTree - <group> - - 75FC77D9D923EE3F8E24E5EA - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods.debug.xcconfig - sourceTree - <group> - - 78CE08E75C8B2B34B63BBE25 - - buildActionMask - 2147483647 - files - - A209EE433777C640E255B6E4 - 4442B0D21B3E7CC30E0585D0 - B9D8AE7CDAE871FF4973C4C5 - 0DF64FC47D2FC9DD4A8FC7A7 - 4B721505C8D5518880783EAB - C2F42D08E7BFB004BB4DB627 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 7A4DC6EAE4DA5489B306415A - - fileRef - EED199F673EB178F47F3C7CF - isa - PBXBuildFile - - 7A5AA33B53998F336FE4D113 - - fileRef - 36F2835EB6610B123E0EA1FD - isa - PBXBuildFile - - 7AA68CD9DE522DC1FCE06A94 - - baseConfigurationReference - FD48F26E8B5D83BC781ACDC6 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COMBINE_HIDPI_IMAGES - YES - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_DYNAMIC_NO_PIC - NO - GCC_ENABLE_OBJC_EXCEPTIONS - YES - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-MASShortcut/Pods-MASShortcut-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - MACOSX_DEPLOYMENT_TARGET - 10.10 - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - SDKROOT - macosx - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - 7BD9E32C17ABDEC8D436CB20 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPAnimationTracer.h - path - pop/POPAnimationTracer.h - sourceTree - <group> - - 7D0F650365C164432F0D1FAB - - fileRef - 27DBF19D33B5EF04AB030CE9 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 7D6F2895F550D07AF86A5208 - - includeInIndex - 1 - isa - PBXFileReference - name - POPLayerExtras.mm - path - pop/POPLayerExtras.mm - sourceTree - <group> - - 7D840FF4267D5C61DA47CCCD - - baseConfigurationReference - 0BD3166F05A463D4FC24F5BF - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COMBINE_HIDPI_IMAGES - YES - COPY_PHASE_STRIP - YES - DEBUG_INFORMATION_FORMAT - dwarf-with-dsym - DSTROOT - /tmp/xcodeproj.dst - GCC_ENABLE_OBJC_EXCEPTIONS - YES - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-HockeySDK-Mac/Pods-HockeySDK-Mac-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - MACOSX_DEPLOYMENT_TARGET - 10.10 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - SDKROOT - macosx - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Release - - 7DEADC7A02765C6E3F91BF92 - - fileRef - D65C83520DAA5DFF8A27A9E2 - isa - PBXBuildFile - - 81DDA3617370F8029BE9069A - - fileRef - 1725501949E337D04AE0240F - isa - PBXBuildFile - - 82B42DF4AB91948AF2C48ABD - - fileRef - D9243E37C3E1A614C471856E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - 83D1DD82BB3B8DB16A0535A2 - - fileRef - 8EDCF00B3D626043C6963D0C - isa - PBXBuildFile - - 844E4F0B8BA40D1706DDF849 - - children - - 848735BEDC02ACBDAB1CF465 - EE51715377B9CC641762AE2E - BD708589C5D97A5D3A70F3A4 - - isa - PBXGroup - name - HockeySDK-Mac - path - HockeySDK-Mac - sourceTree - <group> - - 848735BEDC02ACBDAB1CF465 - - children - - 6771D37D19B38B8D81B52201 - - isa - PBXGroup - name - Frameworks - sourceTree - <group> - - 851AA860479BCD82E2B05D56 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POP.h - path - pop/POP.h - sourceTree - <group> - - 851D690821CE667894CCB0B3 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - MASShortcutView+UserDefaults.m - sourceTree - <group> - - 857E7991852F0E3891AA2576 - - fileRef - 2678298EDCC43CDD5A332FDD - isa - PBXBuildFile - - 864DBA7844AE0DAC5BDA23BB - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Pods-libextobjc-prefix.pch - sourceTree - <group> - - 87E0C560AFBB55F7FE0CB9F5 - - baseConfigurationReference - A22D4B61075AEE7186BBF36D - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COMBINE_HIDPI_IMAGES - YES - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_DYNAMIC_NO_PIC - NO - GCC_ENABLE_OBJC_EXCEPTIONS - YES - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-RoboKit/Pods-RoboKit-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - MACOSX_DEPLOYMENT_TARGET - 10.10 - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - SDKROOT - macosx - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - 898B6D8A27908EDC442F6496 - - baseConfigurationReference - 746366A22C327DA5E6149213 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COMBINE_HIDPI_IMAGES - YES - COPY_PHASE_STRIP - YES - DEBUG_INFORMATION_FORMAT - dwarf-with-dsym - DSTROOT - /tmp/xcodeproj.dst - GCC_ENABLE_OBJC_EXCEPTIONS - YES - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-pop/Pods-pop-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - MACOSX_DEPLOYMENT_TARGET - 10.10 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - SDKROOT - macosx - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Beta Release - - 89D9AE3A9CF532AA9819C6C2 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSData+Base64.h - path - Classes/Extensions/NSData+Base64.h - sourceTree - <group> - - 8AA26A14800435D6000C5F3F - - fileRef - 73FC2B2DB80A814A90D7A0FD - isa - PBXBuildFile - - 8AB86B3B24D6356B376C0757 - - fileRef - D7FE2D0B45B5E6B79654F1EA - isa - PBXBuildFile - - 8B441CFA4ED3BBE9101BEDB3 - - children - - 3D78D2E1E5C7AD23918628FC - 73FC2B2DB80A814A90D7A0FD - FC2C7D6E486F88B1D98D16B6 - - isa - PBXGroup - name - OS X - sourceTree - <group> - - 8C80C7D3D6BF47ABEE7FC6E2 - - fileRef - 293EB2716BA5D5C26D8773BD - isa - PBXBuildFile - - 8CECE5C21B4789DB09A6A8F3 - - children - - 844E4F0B8BA40D1706DDF849 - 0C34B5774C87BE2355CAB198 - 4F2740AAB56C40B7904EE0ED - 0C4ECBDCF70B830FEC706717 - 3A2D139221B1F153E1D37073 - - isa - PBXGroup - name - Pods - sourceTree - <group> - - 8CF11C8A248365F323E1B8F0 - - buildConfigurations - - C6858D2D56428D7B5269909C - 08AA2653BE753D71EEBC659B - 995EF401ED0B45FA7F2FE514 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 8D4A97F208C4973F1574095C - - isa - PBXTargetDependency - target - 523741741FF3DAB8FCAFF3B4 - targetProxy - C8086121D9F66BA1C908A130 - - 8D5D4B1CEC1D7145CC01CC13 - - fileRef - E026699F6A666513126D6E30 - isa - PBXBuildFile - - 8E8306925DBA03A88A42953B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text - name - Podfile - path - ../Podfile - sourceTree - SOURCE_ROOT - xcLanguageSpecificationIdentifier - xcode.lang.ruby - - 8ECAD045C350F49711A6270D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSString+RoboKit.m - path - Classes/Extensions/NSString+RoboKit.m - sourceTree - <group> - - 8EDCF00B3D626043C6963D0C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - EXTRuntimeExtensions.h - path - extobjc/EXTRuntimeExtensions.h - sourceTree - <group> - - 8F114FEC1F1377DCB2F79B5A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - MASShortcut+UserDefaults.h - sourceTree - <group> - - 9008B289D756750CCF0B1FA5 - - buildActionMask - 2147483647 - files - - 8C80C7D3D6BF47ABEE7FC6E2 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 90AE16A1E05F770168214DDE - - fileRef - 4948C551B73794BEAFBCDF8D - isa - PBXBuildFile - - 9260C68C1E0F70A2D7DAB2EA - - children - - 6BAA8742402580EFA424D05C - 32819FC342EDE6732558C01F - C7ABC7F5DE4FB17CD41427F8 - 1D923EF266EA998FD5965576 - FB6512BCB2BAE048F0954EC1 - 21CF1C77F5161C3D5B6414EE - - isa - PBXGroup - name - Products - sourceTree - <group> - - 92C7EB48B5780D3B89FE4DDC - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPDecayAnimation.h - path - pop/POPDecayAnimation.h - sourceTree - <group> - - 93130EB756BF02B48476A8E2 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSString+CSV.h - path - Classes/Extensions/NSString+CSV.h - sourceTree - <group> - - 94DF83C42DC8C1CFD71C2DD0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - MASShortcut+Monitoring.h - sourceTree - <group> - - 95F93CEC0B5A6C7D4AB73C7B - - fileRef - 6340D43714B2D8366E4DEC5A - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - 968FC116C0921EA6FE4B9858 - - includeInIndex - 1 - isa - PBXFileReference - name - POPVector.mm - path - pop/POPVector.mm - sourceTree - <group> - - 995EF401ED0B45FA7F2FE514 - - baseConfigurationReference - 3C23FBCFA735493F1ABE0151 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COMBINE_HIDPI_IMAGES - YES - COPY_PHASE_STRIP - YES - DEBUG_INFORMATION_FORMAT - dwarf-with-dsym - DSTROOT - /tmp/xcodeproj.dst - GCC_ENABLE_OBJC_EXCEPTIONS - YES - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-libextobjc/Pods-libextobjc-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - MACOSX_DEPLOYMENT_TARGET - 10.10 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - SDKROOT - macosx - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Release - - 99BD5E7EE7DE20358A32E888 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-MASShortcut-dummy.m - sourceTree - <group> - - 99FE0870A5FEE6B790A36E68 - - fileRef - 73FC2B2DB80A814A90D7A0FD - isa - PBXBuildFile - - 9AE7E1F66426B30F4AAF7178 - - baseConfigurationReference - 746366A22C327DA5E6149213 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COMBINE_HIDPI_IMAGES - YES - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_DYNAMIC_NO_PIC - NO - GCC_ENABLE_OBJC_EXCEPTIONS - YES - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-pop/Pods-pop-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - MACOSX_DEPLOYMENT_TARGET - 10.10 - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - SDKROOT - macosx - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - 9B0520A5C90472F46BABC1C5 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSMutableArray+RoboKit.m - path - Classes/Extensions/NSMutableArray+RoboKit.m - sourceTree - <group> - - 9C2C4AD9B34A6EC81F019D89 - - buildActionMask - 2147483647 - files - - 06D3DAC3F4BC1FA7D60C2B5E - 83D1DD82BB3B8DB16A0535A2 - 351EE07CE8D0000D60F45D9C - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 9CE0E242459F2C9F94397B04 - - fileRef - 18CC09D2F24880CFD02BA2D7 - isa - PBXBuildFile - - 9D3842F9754C035518153519 - - fileRef - F7E17A01F72933155D0E0B2B - isa - PBXBuildFile - - 9DA928FDC1D93874EA94F578 - - fileRef - CB2AFA0ED4E4906CC2151504 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 9E38697023ABD6817035428D - - includeInIndex - 1 - isa - PBXFileReference - name - POPCustomAnimation.mm - path - pop/POPCustomAnimation.mm - sourceTree - <group> - - 9F4922ADF407E593F95FF356 - - buildActionMask - 2147483647 - files - - F80AC0E886CCDE61B27611FF - 498AA930625FEA8BA3103C5D - 8D5D4B1CEC1D7145CC01CC13 - D6AF99D91925258594CC9AFD - 1B147EF1CC44EC391C644B54 - 51A0B12C29899438BC0B7E10 - 90AE16A1E05F770168214DDE - 5CF2D428024296027497DEBE - FF67DAAC7966BCA8BC17C59B - CAE73B658F93B9B811E889F9 - ADB67C296A6D4AB3CE2C4EF1 - ECA305CA10AE788212E30FE7 - F2EC8F7B575B8700B78ED3AA - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 9F6BE447498471DAB83ADFCF - - includeInIndex - 1 - isa - PBXFileReference - name - POPAnimatableProperty.mm - path - pop/POPAnimatableProperty.mm - sourceTree - <group> - - A005C0F44830CD55F246A9AF - - buildActionMask - 2147483647 - files - - C23F036B7BA93C42CA8CAD31 - 4CC238D2DACCBC09B7718004 - EC85F6688D32E03501772AA2 - 5311562CA95AB7691B6FD0DC - D4C123F1756D7F3542FC511E - 82B42DF4AB91948AF2C48ABD - 189FB1A6820FEC6C73FEB0A1 - BCC59E070A9DF8A16F2AFFAB - 540CD29A6D51A6234BB9328A - CFF95116C3DBE74FA889A4D1 - ECF0BEAAC64D8621BF2BAC0D - C2E25916F279E5BFC6D0064C - 6BC4ED10365AF857D9B9EC7D - 036CF9E9A0C1826988C28D64 - 355538AE638FA13F3958BF37 - 15750A05D3A9CFA808EB6EDC - 57B6B1C7949B85BF4DC5EB4C - EFE039457D44D9B643006619 - 032A24B9CE8BD2FCB4342862 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - A02F4A35883635E9AD9AA75A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSData+RoboKit.m - path - Classes/Extensions/NSData+RoboKit.m - sourceTree - <group> - - A0597AE421ED6B7FA455D313 - - attributes - - LastUpgradeCheck - 0510 - - buildConfigurationList - 01C1A4BBC98B458545DA990C - compatibilityVersion - Xcode 3.2 - developmentRegion - English - hasScannedForEncodings - 0 - isa - PBXProject - knownRegions - - en - - mainGroup - EF1C991C0E94F9727F025457 - productRefGroup - 9260C68C1E0F70A2D7DAB2EA - projectDirPath - - projectReferences - - projectRoot - - targets - - CB314F6FCDB2071D0E651A76 - 523741741FF3DAB8FCAFF3B4 - A298819E85AA5FEF6AB720F4 - 1B3CD56B4243576581891B4D - 249F9909E30E7220AD168FE6 - 485A73EACEEED7FBD7FF5991 - - - A0654E92F024F0993EB4772A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPAnimationEvent.h - path - pop/POPAnimationEvent.h - sourceTree - <group> - - A09C04637A9AF9C02FCB6D2A - - fileRef - 29486EE6B1182BB6DF9E7002 - isa - PBXBuildFile - - A209EE433777C640E255B6E4 - - fileRef - 04F36850BE07F64A3CB578A0 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - A22D4B61075AEE7186BBF36D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-RoboKit-Private.xcconfig - sourceTree - <group> - - A298819E85AA5FEF6AB720F4 - - buildConfigurationList - 751ADC45550A57D9371C7245 - buildPhases - - 78CE08E75C8B2B34B63BBE25 - C53D81FAD04FADB9CCE5D4CC - ADD652874951B934B20A11A5 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - Pods-MASShortcut - productName - Pods-MASShortcut - productReference - C7ABC7F5DE4FB17CD41427F8 - productType - com.apple.product-type.library.static - - A375B3B957D4380A5E5C8E6E - - containerPortal - A0597AE421ED6B7FA455D313 - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 1B3CD56B4243576581891B4D - remoteInfo - Pods-RoboKit - - A5C11A52DBC900393933B6A2 - - baseConfigurationReference - 651F5B4B7D79B0FE119C5B58 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COMBINE_HIDPI_IMAGES - YES - COPY_PHASE_STRIP - YES - DEBUG_INFORMATION_FORMAT - dwarf-with-dsym - DSTROOT - /tmp/xcodeproj.dst - GCC_ENABLE_OBJC_EXCEPTIONS - YES - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - MACOSX_DEPLOYMENT_TARGET - 10.10 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - SDKROOT - macosx - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Beta Release - - AB9D5303C1F0C057F2B13CED - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSArray+RoboKit.m - path - Classes/Extensions/NSArray+RoboKit.m - sourceTree - <group> - - AC68E57D0BB6D20969831B3B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-pop-dummy.m - sourceTree - <group> - - ACFBD38822E518D5F785DA92 - - baseConfigurationReference - A22D4B61075AEE7186BBF36D - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COMBINE_HIDPI_IMAGES - YES - COPY_PHASE_STRIP - YES - DEBUG_INFORMATION_FORMAT - dwarf-with-dsym - DSTROOT - /tmp/xcodeproj.dst - GCC_ENABLE_OBJC_EXCEPTIONS - YES - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-RoboKit/Pods-RoboKit-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - MACOSX_DEPLOYMENT_TARGET - 10.10 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - SDKROOT - macosx - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Beta Release - - ADB67C296A6D4AB3CE2C4EF1 - - fileRef - 68A11E74BE2481E524FE1B07 - isa - PBXBuildFile - - ADD652874951B934B20A11A5 - - buildActionMask - 2147483647 - files - - 5525C952B6959E24C8E1E483 - 4479BB5FF8CA944F38B2CF2C - D8069F2C3E5B2BD379611C22 - B3729371D3330CB1B5E632CB - 7A4DC6EAE4DA5489B306415A - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - B013A6F39D9A5DC4D015EFB9 - - containerPortal - A0597AE421ED6B7FA455D313 - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 485A73EACEEED7FBD7FF5991 - remoteInfo - Pods-pop - - B16FF8A1BD1FC0494879BF4E - - baseConfigurationReference - FD48F26E8B5D83BC781ACDC6 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COMBINE_HIDPI_IMAGES - YES - COPY_PHASE_STRIP - YES - DEBUG_INFORMATION_FORMAT - dwarf-with-dsym - DSTROOT - /tmp/xcodeproj.dst - GCC_ENABLE_OBJC_EXCEPTIONS - YES - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-MASShortcut/Pods-MASShortcut-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - MACOSX_DEPLOYMENT_TARGET - 10.10 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - SDKROOT - macosx - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Release - - B1E3B86CD0F4CAC95E7D36FB - - fileRef - 6F5461404D205DBE07CA153B - isa - PBXBuildFile - - B24C382CED6F4CCA3BBFE346 - - baseConfigurationReference - 75FC77D9D923EE3F8E24E5EA - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COMBINE_HIDPI_IMAGES - YES - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_DYNAMIC_NO_PIC - NO - GCC_ENABLE_OBJC_EXCEPTIONS - YES - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - MACOSX_DEPLOYMENT_TARGET - 10.10 - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - SDKROOT - macosx - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - B3729371D3330CB1B5E632CB - - fileRef - C3A973EDE480202DAAC5E0E8 - isa - PBXBuildFile - - B41AA99A8300452C20DAAB84 - - fileRef - E0488966355AD09ADA659A70 - isa - PBXBuildFile - - B420D7F920B82494E4E5BC7D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-HockeySDK-Mac.xcconfig - sourceTree - <group> - - B7A2EB59684D78536DF4E301 - - fileRef - E0E2BB09F2F5A6EB20C35D81 - isa - PBXBuildFile - - B7ABE822AE1B64ACFBADE2DA - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods.release.xcconfig - sourceTree - <group> - - B9BF063DECAC33A9EC46D3AA - - fileRef - F6F74EB5FA34CBC01E2C1E55 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - B9D8AE7CDAE871FF4973C4C5 - - fileRef - 0BE5AC55181DC55029C266C7 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - BA48C6298C84202E81263CAF - - baseConfigurationReference - A22D4B61075AEE7186BBF36D - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COMBINE_HIDPI_IMAGES - YES - COPY_PHASE_STRIP - YES - DEBUG_INFORMATION_FORMAT - dwarf-with-dsym - DSTROOT - /tmp/xcodeproj.dst - GCC_ENABLE_OBJC_EXCEPTIONS - YES - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-RoboKit/Pods-RoboKit-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - MACOSX_DEPLOYMENT_TARGET - 10.10 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - SDKROOT - macosx - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Release - - BB6A120B65BF10D0BCC8C4CC - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - FloatConversion.h - path - pop/WebCore/FloatConversion.h - sourceTree - <group> - - BBC6439C673DCBB2EAD40CFA - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-dummy.m - sourceTree - <group> - - BC721C9D268121AFDB94162B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-RoboKit.xcconfig - sourceTree - <group> - - BCC59E070A9DF8A16F2AFFAB - - fileRef - 3EA76506B3093C11D42E7C7D - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - BD708589C5D97A5D3A70F3A4 - - children - - B420D7F920B82494E4E5BC7D - 0BD3166F05A463D4FC24F5BF - 293EB2716BA5D5C26D8773BD - 1051AE1926DD59CF5885D47D - - isa - PBXGroup - name - Support Files - path - ../Target Support Files/Pods-HockeySDK-Mac - sourceTree - <group> - - C0BF66C9D24C747E7D99C99E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - UnitBezier.h - path - pop/WebCore/UnitBezier.h - sourceTree - <group> - - C0E337D6A60BC633D7AE5ED2 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Pods-environment.h - sourceTree - <group> - - C0F41F2DC4A42D97CAEA63CE - - baseConfigurationReference - 0BD3166F05A463D4FC24F5BF - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COMBINE_HIDPI_IMAGES - YES - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_DYNAMIC_NO_PIC - NO - GCC_ENABLE_OBJC_EXCEPTIONS - YES - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-HockeySDK-Mac/Pods-HockeySDK-Mac-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - MACOSX_DEPLOYMENT_TARGET - 10.10 - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - SDKROOT - macosx - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - C1A8E159A7A0526AE649222F - - fileRef - D5B66BC0F17D5D583B768918 - isa - PBXBuildFile - - C23F036B7BA93C42CA8CAD31 - - fileRef - 9F6BE447498471DAB83ADFCF - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - C293F9B0D53020B63FA4497B - - buildConfigurations - - A5C11A52DBC900393933B6A2 - B24C382CED6F4CCA3BBFE346 - 0F051B668090AD43D6DCEA3C - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - C2E25916F279E5BFC6D0064C - - fileRef - 5DB0A4DD8581F4B035FA8050 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - C2F42D08E7BFB004BB4DB627 - - fileRef - 99BD5E7EE7DE20358A32E888 - isa - PBXBuildFile - - C3A973EDE480202DAAC5E0E8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - MASShortcutView+UserDefaults.h - sourceTree - <group> - - C52847B511F521B13112BAE1 - - includeInIndex - 1 - isa - PBXFileReference - name - POPCGUtils.mm - path - pop/POPCGUtils.mm - sourceTree - <group> - - C53D81FAD04FADB9CCE5D4CC - - buildActionMask - 2147483647 - files - - 4CB8CF79FD2073E534DDFC90 - F0F74156B02AFFD79A50C2B6 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - C57D63C6798044E04A3B5A61 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPBasicAnimation.h - path - pop/POPBasicAnimation.h - sourceTree - <group> - - C6858D2D56428D7B5269909C - - baseConfigurationReference - 3C23FBCFA735493F1ABE0151 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COMBINE_HIDPI_IMAGES - YES - COPY_PHASE_STRIP - YES - DEBUG_INFORMATION_FORMAT - dwarf-with-dsym - DSTROOT - /tmp/xcodeproj.dst - GCC_ENABLE_OBJC_EXCEPTIONS - YES - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-libextobjc/Pods-libextobjc-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - MACOSX_DEPLOYMENT_TARGET - 10.10 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - SDKROOT - macosx - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Beta Release - - C72A296CA8F9E8B1CDFA95C0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-libextobjc-dummy.m - sourceTree - <group> - - C7ABC7F5DE4FB17CD41427F8 - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-MASShortcut.a - sourceTree - BUILT_PRODUCTS_DIR - - C7C75F2F4B39FDDC2A6E2F4B - - includeInIndex - 1 - isa - PBXFileReference - name - POPMath.mm - path - pop/POPMath.mm - sourceTree - <group> - - C8086121D9F66BA1C908A130 - - containerPortal - A0597AE421ED6B7FA455D313 - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 523741741FF3DAB8FCAFF3B4 - remoteInfo - Pods-HockeySDK-Mac - - C81F4C8FB36E6781B7A39302 - - buildActionMask - 2147483647 - files - - 66759A7EDEB5E8232CBCA154 - F512FC58679430430F1FDF78 - DD5313090B9F80B7B8741ED3 - 2F76BB4E15AC016E7DC5EF40 - 9D3842F9754C035518153519 - 2BF111CE90ECC61A74597383 - 30290986D31E9A92F61EEA63 - B1E3B86CD0F4CAC95E7D36FB - C1A8E159A7A0526AE649222F - 9CE0E242459F2C9F94397B04 - 1B0D9B87DDF76CBB05028569 - 4710DBE04F63F7282AFEF7F0 - 4A6ED301AF3BC7B6F5463D31 - 3F3E74C378E96E3A43400D31 - 31543920A5409A9E85A9DF9B - 4E16B7FDF1AEB2AD91AABF46 - F4E8ECA17C1BE475ACE7C6A7 - 81DDA3617370F8029BE9069A - 857E7991852F0E3891AA2576 - CE53450E02641A441519EFB3 - 428BC92A54B0FC2DE3BDD7A5 - A09C04637A9AF9C02FCB6D2A - 7A5AA33B53998F336FE4D113 - D7958BCFEB4CD940CF810852 - 8AB86B3B24D6356B376C0757 - 6086BE34620E5285FB9C58B9 - B7A2EB59684D78536DF4E301 - 0366692EBFBAC86FC26DCABC - 3E31C1B10EC81F8FFEBD7092 - 7DEADC7A02765C6E3F91BF92 - B41AA99A8300452C20DAAB84 - 089A1C738C697D8B798D1276 - 70AE2818C72071E0893A378F - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - C845FED4130E5BB23A31A473 - - fileRef - FC2C7D6E486F88B1D98D16B6 - isa - PBXBuildFile - - CA8CD71DE292E3B3B81CF415 - - buildConfigurations - - 898B6D8A27908EDC442F6496 - 9AE7E1F66426B30F4AAF7178 - 4420EB6BFF48C8140468064D - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - CAE73B658F93B9B811E889F9 - - fileRef - EADEC8F1367F52927D38E817 - isa - PBXBuildFile - - CB2AFA0ED4E4906CC2151504 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - RBKHTTPStatusCodes.m - path - Classes/RBKHTTPStatusCodes.m - sourceTree - <group> - - CB314F6FCDB2071D0E651A76 - - buildConfigurationList - C293F9B0D53020B63FA4497B - buildPhases - - 3C0BF5F1A1A2FCD753C5D05B - 1E84E0E64EA6EA2F36F5175C - - buildRules - - dependencies - - 8D4A97F208C4973F1574095C - 0D90481E1E195F81F9A2E07C - 56A9B0036E1796792BDDCB12 - EAF82361F630E75F2183FCB3 - 06AEA9C1FDEFF7448355498A - - isa - PBXNativeTarget - name - Pods - productName - Pods - productReference - 6BAA8742402580EFA424D05C - productType - com.apple.product-type.library.static - - CC0A3235A9781A6A222AAB15 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - MASShortcut.h - sourceTree - <group> - - CCAB3576BD70AE6D8DEF234F - - fileRef - A02F4A35883635E9AD9AA75A - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - CDDC265964D7FDED36CB6F2E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSObject+CancelableScheduledBlock.m - path - Classes/Extensions/NSObject+CancelableScheduledBlock.m - sourceTree - <group> - - CE3E86E4DD0AC5AA81B2F081 - - children - - 5FB8075F83F1DE824A2A5B91 - FD48F26E8B5D83BC781ACDC6 - 99BD5E7EE7DE20358A32E888 - 22B82AB2AF75603874F46B24 - - isa - PBXGroup - name - Support Files - path - ../Target Support Files/Pods-MASShortcut - sourceTree - <group> - - CE53450E02641A441519EFB3 - - fileRef - 92C7EB48B5780D3B89FE4DDC - isa - PBXBuildFile - - CFF95116C3DBE74FA889A4D1 - - fileRef - 9E38697023ABD6817035428D - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - D013B9824187FFA567E25B18 - - baseConfigurationReference - FD48F26E8B5D83BC781ACDC6 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COMBINE_HIDPI_IMAGES - YES - COPY_PHASE_STRIP - YES - DEBUG_INFORMATION_FORMAT - dwarf-with-dsym - DSTROOT - /tmp/xcodeproj.dst - GCC_ENABLE_OBJC_EXCEPTIONS - YES - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-MASShortcut/Pods-MASShortcut-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - MACOSX_DEPLOYMENT_TARGET - 10.10 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - SDKROOT - macosx - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Beta Release - - D037F51C2049A074A5C52E53 - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - NO - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES - COPY_PHASE_STRIP - NO - ENABLE_NS_ASSERTIONS - NO - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PREPROCESSOR_DEFINITIONS - - RELEASE=1 - - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - MACOSX_DEPLOYMENT_TARGET - 10.10 - STRIP_INSTALLED_PRODUCT - NO - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - D17AEC4D2EC7BF48CEFE4F4C - - children - - 8EDCF00B3D626043C6963D0C - 6340D43714B2D8366E4DEC5A - EAE31E98316B2515C64B760D - - isa - PBXGroup - name - RuntimeExtensions - sourceTree - <group> - - D1B2E5A13F2F818639ABBC45 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPBasicAnimationInternal.h - path - pop/POPBasicAnimationInternal.h - sourceTree - <group> - - D1E9C631F02D0DCE2C888976 - - includeInIndex - 1 - isa - PBXFileReference - name - POPAnimation.mm - path - pop/POPAnimation.mm - sourceTree - <group> - - D4C123F1756D7F3542FC511E - - fileRef - 5D2B3A7F8D16DF3B9A375976 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - D56D8D6ABDFE44FCBFC765C3 - - fileRef - 70A2A7B5B6C12F99D81374AA - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - D5B66BC0F17D5D583B768918 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPAnimationInternal.h - path - pop/POPAnimationInternal.h - sourceTree - <group> - - D63D40D361D285E370BE0A46 - - fileRef - 73FC2B2DB80A814A90D7A0FD - isa - PBXBuildFile - - D65C83520DAA5DFF8A27A9E2 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPSpringSolver.h - path - pop/POPSpringSolver.h - sourceTree - <group> - - D6AF99D91925258594CC9AFD - - fileRef - 17D62D5A2B7F9227AD9714C1 - isa - PBXBuildFile - - D7958BCFEB4CD940CF810852 - - fileRef - 6DF7C123ACB80AFEACE32074 - isa - PBXBuildFile - - D7FE2D0B45B5E6B79654F1EA - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPMath.h - path - pop/POPMath.h - sourceTree - <group> - - D8069F2C3E5B2BD379611C22 - - fileRef - CC0A3235A9781A6A222AAB15 - isa - PBXBuildFile - - D8354A66278C616AFFD3E0C1 - - buildActionMask - 2147483647 - files - - 99FE0870A5FEE6B790A36E68 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - D84F1D8EF18387C1DD46BFC5 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - MASShortcut+UserDefaults.m - sourceTree - <group> - - D8B5D97D333767F715257F2E - - buildActionMask - 2147483647 - files - - 95F93CEC0B5A6C7D4AB73C7B - DE3004DB2E291DFB6CDB78F1 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - D8E5D5ADA9542C358A671D22 - - children - - E0D2DFD70CE675D640A60B26 - 6293EF85769F6BD25CD23D02 - BBC6439C673DCBB2EAD40CFA - C0E337D6A60BC633D7AE5ED2 - F0EA77F918F8B3F523F55876 - 651F5B4B7D79B0FE119C5B58 - 75FC77D9D923EE3F8E24E5EA - B7ABE822AE1B64ACFBADE2DA - - isa - PBXGroup - name - Pods - path - Target Support Files/Pods - sourceTree - <group> - - D9243E37C3E1A614C471856E - - includeInIndex - 1 - isa - PBXFileReference - name - POPAnimationTracer.mm - path - pop/POPAnimationTracer.mm - sourceTree - <group> - - DAB8F1EA0467EAAB5D54EA9A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - RBKHTTPStatusCodes.h - path - Classes/RBKHTTPStatusCodes.h - sourceTree - <group> - - DD5313090B9F80B7B8741ED3 - - fileRef - F7288493915EF523A46272A9 - isa - PBXBuildFile - - DE3004DB2E291DFB6CDB78F1 - - fileRef - C72A296CA8F9E8B1CDFA95C0 - isa - PBXBuildFile - - DE7916C8478B548D89A55459 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPAnimationRuntime.h - path - pop/POPAnimationRuntime.h - sourceTree - <group> - - E026699F6A666513126D6E30 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSData+RoboKit.h - path - Classes/Extensions/NSData+RoboKit.h - sourceTree - <group> - - E0488966355AD09ADA659A70 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPVector.h - path - pop/POPVector.h - sourceTree - <group> - - E0D2DFD70CE675D640A60B26 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text - path - Pods-acknowledgements.markdown - sourceTree - <group> - - E0E2BB09F2F5A6EB20C35D81 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPPropertyAnimationInternal.h - path - pop/POPPropertyAnimationInternal.h - sourceTree - <group> - - E2B3DB2CC7BBE92635774A55 - - includeInIndex - 1 - isa - PBXFileReference - name - POPAnimationEvent.mm - path - pop/POPAnimationEvent.mm - sourceTree - <group> - - E44B7AA9C9A3C66EDC89602A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSObject+CancelableScheduledBlock.h - path - Classes/Extensions/NSObject+CancelableScheduledBlock.h - sourceTree - <group> - - E6CA3CD7262C04983FE5329D - - buildConfigurations - - 094FEFB1FE37D9C72EC0B45D - C0F41F2DC4A42D97CAEA63CE - 7D840FF4267D5C61DA47CCCD - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - E988299D84C0284C12A50A8F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPSpringAnimationInternal.h - path - pop/POPSpringAnimationInternal.h - sourceTree - <group> - - EADEC8F1367F52927D38E817 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSString+RoboKit.h - path - Classes/Extensions/NSString+RoboKit.h - sourceTree - <group> - - EAE31E98316B2515C64B760D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - metamacros.h - path - extobjc/metamacros.h - sourceTree - <group> - - EAF82361F630E75F2183FCB3 - - isa - PBXTargetDependency - target - 249F9909E30E7220AD168FE6 - targetProxy - 20DAEB7CB1C115267EBA8323 - - EC85F6688D32E03501772AA2 - - fileRef - E2B3DB2CC7BBE92635774A55 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - ECA305CA10AE788212E30FE7 - - fileRef - 3F9B94FDB4086E44A538927F - isa - PBXBuildFile - - ECF0BEAAC64D8621BF2BAC0D - - fileRef - 54393726BB26CD77A5D19E32 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - EE51715377B9CC641762AE2E - - children - - isa - PBXGroup - name - Resources - sourceTree - <group> - - EED199F673EB178F47F3C7CF - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - MASShortcutView.h - sourceTree - <group> - - EF1C991C0E94F9727F025457 - - children - - 8E8306925DBA03A88A42953B - 344FAE1BBDDCAA3FFDFBA009 - 8CECE5C21B4789DB09A6A8F3 - 9260C68C1E0F70A2D7DAB2EA - FB4587B440FBAAB30277BCBF - - isa - PBXGroup - sourceTree - <group> - - EFE039457D44D9B643006619 - - fileRef - AC68E57D0BB6D20969831B3B - isa - PBXBuildFile - - F06F2A9E27F3317434346969 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPDecayAnimationInternal.h - path - pop/POPDecayAnimationInternal.h - sourceTree - <group> - - F0EA77F918F8B3F523F55876 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.script.sh - path - Pods-resources.sh - sourceTree - <group> - - F0F74156B02AFFD79A50C2B6 - - fileRef - 73FC2B2DB80A814A90D7A0FD - isa - PBXBuildFile - - F10790957FA2470C5F9351C8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSDate-Utilities.m - path - Classes/Extensions/NSDate-Utilities.m - sourceTree - <group> - - F28D10DCC1CB1EFAFF00EDDE - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - EXTKeyPathCoding.h - path - extobjc/EXTKeyPathCoding.h - sourceTree - <group> - - F2EC8F7B575B8700B78ED3AA - - fileRef - DAB8F1EA0467EAAB5D54EA9A - isa - PBXBuildFile - - F4E8ECA17C1BE475ACE7C6A7 - - fileRef - D1B2E5A13F2F818639ABBC45 - isa - PBXBuildFile - - F512FC58679430430F1FDF78 - - fileRef - 851AA860479BCD82E2B05D56 - isa - PBXBuildFile - - F5430E8A898E0A3680ED2D57 - - children - - BC721C9D268121AFDB94162B - A22D4B61075AEE7186BBF36D - 7173168D4BBF20DFCB476FC7 - 07B5FD461548E768A272E9A5 - - isa - PBXGroup - name - Support Files - path - ../Target Support Files/Pods-RoboKit - sourceTree - <group> - - F6F74EB5FA34CBC01E2C1E55 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSDate+Holidays.m - path - Classes/Extensions/NSDate+Holidays.m - sourceTree - <group> - - F7288493915EF523A46272A9 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPAction.h - path - pop/POPAction.h - sourceTree - <group> - - F7A97C781A846F30B334C050 - - fileRef - F10790957FA2470C5F9351C8 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - F7E17A01F72933155D0E0B2B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - POPAnimation.h - path - pop/POPAnimation.h - sourceTree - <group> - - F80AC0E886CCDE61B27611FF - - fileRef - 355830C402A5F114B8175FB4 - isa - PBXBuildFile - - FB4587B440FBAAB30277BCBF - - children - - D8E5D5ADA9542C358A671D22 - - isa - PBXGroup - name - Targets Support Files - sourceTree - <group> - - FB6512BCB2BAE048F0954EC1 - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-libextobjc.a - sourceTree - BUILT_PRODUCTS_DIR - - FC2C7D6E486F88B1D98D16B6 - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - Foundation.framework - path - Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/Foundation.framework - sourceTree - DEVELOPER_DIR - - FD48F26E8B5D83BC781ACDC6 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-MASShortcut-Private.xcconfig - sourceTree - <group> - - FF67DAAC7966BCA8BC17C59B - - fileRef - 93130EB756BF02B48476A8E2 - isa - PBXBuildFile - - - rootObject - A0597AE421ED6B7FA455D313 - - +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 00502493FAD27126DA139B2B3F36059C /* POPGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = 83DB3A833DCDF8A7314F20E22C4E56EE /* POPGeometry.h */; }; + 017C835F46C9AA57082082F933987B45 /* OCMInvocationMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 923AEAAF0E761ED1DD34DFB04D3AF1AD /* OCMInvocationMatcher.h */; }; + 03829963959A1766B2119EC4F61ACC3F /* MASShortcut+Monitoring.h in Headers */ = {isa = PBXBuildFile; fileRef = 48C6BF4FE087491069173DD45B39EFB3 /* MASShortcut+Monitoring.h */; }; + 0440D5084AEA1296DAA060B4D4127A7E /* OCMExceptionReturnValueProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 45ED55EF8FF224B32BD728D7EE5D30CA /* OCMExceptionReturnValueProvider.h */; }; + 048CCF2DB0A10B9893D7346C8802F28A /* OCMReturnValueProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 61F9DEF6722EEAD5F5E89C95BFD9B030 /* OCMReturnValueProvider.h */; }; + 066A020AE4A309A8C65A67F01B7F86E3 /* OCMMacroState.h in Headers */ = {isa = PBXBuildFile; fileRef = 704CB91253CCA5A38FBA218A8CDD92D0 /* OCMMacroState.h */; }; + 0712B4CB2B4EFC594029D96E0DC383F7 /* POPVector.h in Headers */ = {isa = PBXBuildFile; fileRef = 8951517F8D27F3EBDDAB654222BEE163 /* POPVector.h */; }; + 0904D83A4DA8467C1DDDFB62716AEB16 /* POPDecayAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E662C06EB8D523D2751FB27E2F31A53 /* POPDecayAnimation.h */; }; + 1053CBF7E05874E14F2BF8AA492B6BD0 /* POPAnimator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3A29698959E8D2344DDF19E7EDB48798 /* POPAnimator.mm */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 10A63E80BEC929633822AF08B9BE6F25 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D3378D8E988D8DF99296621B5C5E114 /* Foundation.framework */; }; + 129DC4C70747F82F0D55DC18B78A25A2 /* OCMLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 80E4B1BEEE40BF4B3BF93773602CFE1D /* OCMLocation.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 12C2FF2F24C7D289559B7D7467579C4A /* Pods-JeffTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CAA55FA5B3B2A3FB164EA4727D356665 /* Pods-JeffTests-dummy.m */; }; + 1571E528BBF2255FB2BCF75558E253CE /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 28DF70DAA53216F92E1A2E75E5B6450C /* Cocoa.framework */; }; + 1574B941B9065A884CA4497FABA2826C /* POPPropertyAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = D0008646F5D771BE8AFB3F33DBDDD9C3 /* POPPropertyAnimationInternal.h */; }; + 18F2DD01DA5912EFEF463A53AE39B2C9 /* EXTRuntimeExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B33913C64EE9CC8E8FC1B4C6B6A958A /* EXTRuntimeExtensions.h */; }; + 1B744EFB29353CBBBAC32FC457DD6137 /* OCMExpectationRecorder.h in Headers */ = {isa = PBXBuildFile; fileRef = C0DCFCE11C08FDF0E65B11A0FBFD2673 /* OCMExpectationRecorder.h */; }; + 1DFDB33DA8310D8AEBB3DA8C03528448 /* OCMInvocationMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 66391DBC1B3B241D4CD8116552427116 /* OCMInvocationMatcher.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 1E2CF6E2CE320CEFA4727921C6542A9C /* NSInvocation+OCMAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = B64C6A18DF81FD4B3210755484A47F63 /* NSInvocation+OCMAdditions.h */; }; + 1EEA4B12116352D9E0DD799A797A2F0E /* OCMConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = B644A0AFA725E5BA8EC160D1EE1B23F9 /* OCMConstraint.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 20541B61E3E686960EC2A26653DC4B58 /* OCMBlockCaller.h in Headers */ = {isa = PBXBuildFile; fileRef = EA051D75016D580BBF19D2EDA231EBA6 /* OCMBlockCaller.h */; }; + 273834A4431F5C369BA41370F3525739 /* POPCustomAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F788CD16059E0CB308C7180C8620436 /* POPCustomAnimation.h */; }; + 2F8C1BE458584AE0A7AF8483435E9FA2 /* OCMStubRecorder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F90B4211769EC56EAB6309DDEA0126A /* OCMStubRecorder.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 315CA17C5B4692C2D63108ABE6BC4011 /* NSString+CSV.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CF541189119BF41484727AB84DBF8F7 /* NSString+CSV.m */; }; + 318FBA99E595B69B64E62DD06B43785A /* metamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 5233D2C49A19895D482D7D3899B321B2 /* metamacros.h */; }; + 3276D4EA50F8CECAD3185FB3BE3C5FB1 /* POPAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = FEBDF5960CE5729B92B2E8286F2B2417 /* POPAnimator.h */; }; + 329ACA6351504C746D0174808EF2F907 /* pop-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 865D7FC5FE9C9593BD827323EF3686E7 /* pop-dummy.m */; }; + 338993C443B9A854C81E1EDEAEB3DA8E /* OCMArg.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C7E8EB35A0B9EDCFA6F6041EF1E3AE4 /* OCMArg.h */; }; + 338E2AAD2E904BFCFEFF7DF1A3DA6892 /* OCMPassByRefSetter.h in Headers */ = {isa = PBXBuildFile; fileRef = 17EC44606ED5F7C2B5321B1B03FADA8D /* OCMPassByRefSetter.h */; }; + 34D32984A6A1E21800390182550FA541 /* MASShortcut+UserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C57A1EE222D623CC51E88841F7B60F1 /* MASShortcut+UserDefaults.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 353C87C3C3C72568006F83E89207EE2D /* OCMBoxedReturnValueProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 77BDBEBB9A1651D150F2600B2A6970B4 /* OCMBoxedReturnValueProvider.h */; }; + 38C0BEC75D55F0C4FCD81F4A5AAF0280 /* NSData+RoboKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A000A04A81B3331F06863CB22270978 /* NSData+RoboKit.h */; }; + 3A8CC99DA1E84C6CCFE37C7CB7D4A000 /* POPAnimationTracerInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = AF0EA9459582F7ED74682AD96C4806A7 /* POPAnimationTracerInternal.h */; }; + 3AA5E31FC16A518E7FD286772D54B469 /* POPDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 90AA3CF7AFDF09EAB30F65DD337C1A2B /* POPDefines.h */; }; + 3EE79E76AE57AD4A4CD1AA935788DEA5 /* OCMBoxedReturnValueProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = CDEE70C0B4F8727F7BC3CCAE0CA98F85 /* OCMBoxedReturnValueProvider.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 4179510254BCCCCAA81ED07ECC6DE86C /* OCProtocolMockObject.m in Sources */ = {isa = PBXBuildFile; fileRef = CEBCBCE115F738EB0CA9CAD0281212D8 /* OCProtocolMockObject.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 4210A274CE7DBEF6AA8230EC03BD20D1 /* POPDecayAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = CEB4017AAA5E9C677701C7B89825EA36 /* POPDecayAnimationInternal.h */; }; + 42CA514C4141C00057D54F77ED3F3791 /* NSObject+CancelableScheduledBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = 561DA0A9B81E8775F0099DF3D0FD8DC1 /* NSObject+CancelableScheduledBlock.m */; }; + 43C871BA7EFF82FF5213E5B488738188 /* POPAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 77187305929B669191D00CD661FD4EB7 /* POPAnimation.mm */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 43D62DC2EA83AD21A13CCEFDC9C694F7 /* POPCGUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = DC23F1B8A0A642EEBCBFA9B50F5772D7 /* POPCGUtils.h */; }; + 441805704F37E57696AAB4467E0D371D /* OCMLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = F953E7F01C97FAD47101D89A299B6559 /* OCMLocation.h */; }; + 44DED9083CE9A64E7331D9D6812DF129 /* OCMConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 69D86A539022EBA92255561FE510F053 /* OCMConstraint.h */; }; + 45F39F3B3034F42AB1856D382DDEE841 /* POPAnimationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = C3ABB6F38818473CB6D6218C2D0E182A /* POPAnimationPrivate.h */; }; + 46A8F48198C142E99CB7A9E6F1195C82 /* POPSpringAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = A87EADAE6DE01970392B2C3096A07C70 /* POPSpringAnimation.mm */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 46BC1BB94F11EBF86027D27985941605 /* MASShortcutView+UserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = C7F325C08B92A92B4257A379560E90D4 /* MASShortcutView+UserDefaults.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 482E0B9AA14A791313F67B11B65BC561 /* RBKHTTPStatusCodes.m in Sources */ = {isa = PBXBuildFile; fileRef = 9945E0E2BD4FE25BD82D7F6756C68279 /* RBKHTTPStatusCodes.m */; }; + 485C3732E301E8BC51FAA1B972F164E8 /* OCClassMockObject.m in Sources */ = {isa = PBXBuildFile; fileRef = DB6C844E0FDF208063031FA7F37924E6 /* OCClassMockObject.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 498E63384452ACEA7499A99A8897C256 /* POPAnimationTracer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8DA47BC8BB96C513491022056ECC801B /* POPAnimationTracer.mm */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 4C7838E1F8543FE970280F0BD3CE1942 /* NSDate+RoboKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 640F2A58EB4879155966F9469C606596 /* NSDate+RoboKit.h */; }; + 4E8F10A86F737CE674BC8D514EAA77BF /* POPAnimationExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CDB6EC3378EA499EC5781C7E7842CD9 /* POPAnimationExtras.h */; }; + 4F772DE7FFFB40FC4CCB6C7A7583865A /* NSValue+OCMAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A14C649F0767362359A6F2B234F1A123 /* NSValue+OCMAdditions.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 533F275092C2A5DC98155B965A700301 /* POPSpringAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = BFFD0DA45EF4F67CBA76B7B3D1A32163 /* POPSpringAnimation.h */; }; + 5815C261275155B9D2604251EDB945F2 /* OCMRealObjectForwarder.m in Sources */ = {isa = PBXBuildFile; fileRef = ADB40FC8D59C9E7527FB68AD5A9E2BBD /* OCMRealObjectForwarder.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 58269FD043AE86E5619FB100275B1019 /* POPAnimationExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = 77A12C32756D3B4D8F98657E6A2CF4B0 /* POPAnimationExtras.mm */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 5A020BEB38DD51C93A2AB1267074B223 /* OCMInvocationStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 377792DBA4BDA5CA3EEA159B1BDEA99C /* OCMInvocationStub.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 5A5AD360E58FDE6C23523C050B4BC964 /* OCObserverMockObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 01BE4F59EFA6C7B4E653D4254B0861B6 /* OCObserverMockObject.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 5B0AAEE300223A335F2A1C0907F0D7B1 /* OCMNotificationPoster.m in Sources */ = {isa = PBXBuildFile; fileRef = 755935FFAC326E593B3F9811E3C6EF67 /* OCMNotificationPoster.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 5DBC886BAB59AAFE45A96EAAD5D377AF /* POPAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 13549A242D307D5F803A531BA7118B82 /* POPAnimation.h */; }; + 5DF0BBBABDC3689E8EBAF6AD851AD619 /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 42BD756A41A6E94AA0FC5346A96A45F9 /* Pods-dummy.m */; }; + 5DF3C6EE9643EC5614FC3D46BA4BFEF4 /* RBKAppKitUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = E06E14904AE2DA3DCBD5F6DA6E5E991D /* RBKAppKitUtils.h */; }; + 5E769B5EFBC559E5E95D8621CBC6B2AF /* POPDecayAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8655A23FC4A01E0D8C953A3BCFA4B492 /* POPDecayAnimation.mm */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 5EAB81301AE60956AD79C45BAF0035E2 /* POPAnimatableProperty.mm in Sources */ = {isa = PBXBuildFile; fileRef = DE490CE2A03F86DCCFC5C51EA3B4149C /* POPAnimatableProperty.mm */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 5F89597DBCE8BB008935F6791ED20B2B /* POPAnimationRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = EA2F5051B652DD4733045A3DBAB6926B /* POPAnimationRuntime.h */; }; + 60ECF6DAEA900A6158675F7982FAFA49 /* OCMFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 81C28C7A721F19488FDDB8ED5F204B91 /* OCMFunctions.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 642C166F3A646073D18A529772B677A8 /* TransformationMatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 672176FD0520B306B169A91A64FAEF3C /* TransformationMatrix.cpp */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 656B6596237CC11E3E9ED8B3F554B19B /* POPPropertyAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 27B991B5344530B32852CF3A400650DF /* POPPropertyAnimation.h */; }; + 657637796320F5713E6EDB89E405E333 /* NSMutableArray+RoboKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 5356CA85E959631DF291677BA31D0277 /* NSMutableArray+RoboKit.h */; }; + 6923CA730605E742854CA86357198CDB /* OCMRecorder.m in Sources */ = {isa = PBXBuildFile; fileRef = 258A30DD546146CF1DAB914178DE4309 /* OCMRecorder.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 6B690C8B9EEC982D912A9A3A8162818B /* NSObject+OCMAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BEC7180AD921087057B27B372F4D1C7 /* NSObject+OCMAdditions.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 6F2CF07040D742469A4C7DFDEA48DA2E /* NSDate+Holidays.h in Headers */ = {isa = PBXBuildFile; fileRef = ED36BE3EF723939864668098C265C473 /* NSDate+Holidays.h */; }; + 702AD81FCCE49EE8A4317B779750FDC6 /* NSDate+RoboKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 08718A0CA0E0C6095CD36D050498CF41 /* NSDate+RoboKit.m */; }; + 727BFDA18276A96D2F2A6EDA1175E8EF /* NSNotificationCenter+OCMAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F1E86996663181714D92C2AFF9B9053 /* NSNotificationCenter+OCMAdditions.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 72936DF7F0D500F45254D546F0C57A54 /* NSArray+RoboKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 211ADFDAD47565A42F9374DECC664C02 /* NSArray+RoboKit.m */; }; + 7327ED23FAF4176EBE9EFE668776F18C /* EXTKeyPathCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 80D5DD6058029A00934DFA1F9640F668 /* EXTKeyPathCoding.h */; }; + 7571EE16AEF5DE2437657E4FCEB28CA7 /* OCMExpectationRecorder.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F6739E56E3FAA665FD1B590064B4D61 /* OCMExpectationRecorder.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 7AAC6E8BC07E051E1144AEF812B93F6C /* OCMock.h in Headers */ = {isa = PBXBuildFile; fileRef = D7083670274D125D0C8B1D26BA59E028 /* OCMock.h */; }; + 7B004C4BDF5F05E3319C9384B9B30325 /* MASShortcutView.h in Headers */ = {isa = PBXBuildFile; fileRef = EDCB2F1338C89532AA75CE720B07BA4C /* MASShortcutView.h */; }; + 7B0C7E0A0106A7AC350C016ADA9D00E5 /* OCMExceptionReturnValueProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = B709D662CE46A834CEDCE98B9BD52E15 /* OCMExceptionReturnValueProvider.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 7DCC2968E0BFA0602627998A43F7F50B /* POP.h in Headers */ = {isa = PBXBuildFile; fileRef = 41EC48CBF34AA86EB1BC0DE3107262C5 /* POP.h */; }; + 7F6BE000B848FC60B96490DC07EE5B99 /* POPMath.h in Headers */ = {isa = PBXBuildFile; fileRef = B30930874D8FD6296D8CC9D0AD6DCAFA /* POPMath.h */; }; + 808ECA91602EA99CC1833934010F62DC /* NSString+RoboKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FD9E7E72D8F0298B1328C4B6C4BE643 /* NSString+RoboKit.m */; }; + 80EC917EE65D938AF921E05F50E20BA7 /* OCMObserverRecorder.m in Sources */ = {isa = PBXBuildFile; fileRef = E38EF9462676440D0F0DEEAC8E2BAA82 /* OCMObserverRecorder.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 810DC7DA575DDD62E010C5378D6C0588 /* POPAction.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A65E0B23EA502B0B8FC55E6E67ABD3B /* POPAction.h */; }; + 81EC76704E9CA8AC04E67A464AB4D12A /* UnitBezier.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DB3C16FA8ACDF43072E2D3FE5B45036 /* UnitBezier.h */; }; + 820566854E4D8B1E8F301E5D481232F4 /* NSInvocation+OCMAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AC75D99F4C00FF9438F309A61697D92D /* NSInvocation+OCMAdditions.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 83B327839DB4AC50C794DEA9D08F266E /* NSObject+CancelableScheduledBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 5918CFA63CBC61C51F8554346C1D4744 /* NSObject+CancelableScheduledBlock.h */; }; + 8465F2AC64696B2C773F7DF610A49737 /* OCPartialMockObject.m in Sources */ = {isa = PBXBuildFile; fileRef = BDF8C438B194979153145F7547FD6436 /* OCPartialMockObject.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 8B73901BE6FAA8D0F9F909BF015B8650 /* OCMock-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BDB0C911B37F3FB3A8699CD57A33B77E /* OCMock-dummy.m */; }; + 8E19A770019EF5848C7F8D06BEF48915 /* OCMNotificationPoster.h in Headers */ = {isa = PBXBuildFile; fileRef = 81CD7F352ACFD70C8139378AF6A781B7 /* OCMNotificationPoster.h */; }; + 8E20CA512B88C3846B1BAA6651E4FCC4 /* NSMethodSignature+OCMAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = BF495420A2ED20EB85A41F0C2135F944 /* NSMethodSignature+OCMAdditions.h */; }; + 90B079D8D82F5E9F57809B1EA1FA73ED /* NSDate-Utilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 379A90BAC3D67D45CCD18EF4F3231DD6 /* NSDate-Utilities.m */; }; + 90F11AF4D1090D443F9C88785C3FDFBB /* FloatConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = C3B1AD6E0C882C3B510F47D7B5A218B7 /* FloatConversion.h */; }; + 91C88A31F7801D5F4F6395D20ED50829 /* POPMath.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3751B1E3B92F22C2E020C69BDEF51C60 /* POPMath.mm */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 92E98172291A1EB8453B145DB892E103 /* RoboKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ECA00D437CE20E33C38255F1D671FB3 /* RoboKit-dummy.m */; }; + 939A1A0ADAAAD249FB919F6BF497D94C /* POPGeometry.mm in Sources */ = {isa = PBXBuildFile; fileRef = AD06380066ACDC566244FC31F3AC5680 /* POPGeometry.mm */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 93AA8158ED67C55B11573AF8F0EC3E57 /* POPBasicAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 895889220E9AB9BAAEADD6F343B6A779 /* POPBasicAnimation.h */; }; + 942F6FFAB5E2975971EAB490975A42B1 /* MASShortcut+Monitoring.m in Sources */ = {isa = PBXBuildFile; fileRef = FE46A60EEB18BD812B1F49AC6A532CF4 /* MASShortcut+Monitoring.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 9558567148627FDD8D6204CA6430C551 /* RBKCommonUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = D4B6974708096A1F54228462C0F8C101 /* RBKCommonUtils.h */; }; + 95C97DD4E42DFBB234E53DEB1EE7CBE5 /* EXTRuntimeExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FDA98BC2DE7EDE8894660CA9C0C5EF3 /* EXTRuntimeExtensions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 9943241498D7901F4BE4E326E43B0A1C /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1942B01A0B613A69FD364046E13259F1 /* Carbon.framework */; }; + 9954DF4DEF78F19DDDE28A200BA2FB79 /* POPAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 129A9866B3609E1CA4C63B6B14A1F4A1 /* POPAnimationInternal.h */; }; + 9AAF17544C91F487BE6D7BFC81AC3D3A /* MASShortcut.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E10823D0F935742411FCD34169D3AC1 /* MASShortcut.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 9ED6B9531892CB2031CC6FA528A240D1 /* NSDate-Utilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 9741E8A77F28EB7C010B44F49495AF22 /* NSDate-Utilities.h */; }; + 9EFB58B8F816AED19F4D1712B78C8107 /* NSValue+OCMAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = A7C26C531D056B8F55C8D9DFF8439B5B /* NSValue+OCMAdditions.h */; }; + 9FB6D6BBA6DE4062F4F5B228C73F1CC8 /* OCClassMockObject.h in Headers */ = {isa = PBXBuildFile; fileRef = C4C9339BA8E7BBA8F667FD4F55D639B6 /* OCClassMockObject.h */; }; + A55BE5812309150A755F4AA23C9F52D9 /* POPAnimationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 45AA3344C2E3478FF5F30F300634B5F0 /* POPAnimationEvent.h */; }; + A5D004EFBC50A2A820CCA025B96E4973 /* POPAnimatableProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = E926F36B1FC6E4AD815EAEF15A83B196 /* POPAnimatableProperty.h */; }; + A60CE354B2D22461861E6A4718FF1234 /* POPLayerExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = CF28A813ACB59C7A8F2676B72AABE37D /* POPLayerExtras.mm */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + A6751877173D53AF4B398F24D1C1A651 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 28DF70DAA53216F92E1A2E75E5B6450C /* Cocoa.framework */; }; + A6BF151C6594691293529285F5084530 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 28DF70DAA53216F92E1A2E75E5B6450C /* Cocoa.framework */; }; + A7366FC380AC8BFD7C59451CD4BD9784 /* OCMRealObjectForwarder.h in Headers */ = {isa = PBXBuildFile; fileRef = F65963E61A440D808F01AD1C072DAA2D /* OCMRealObjectForwarder.h */; }; + A7C6954340C67BE405534864AE33E7C6 /* POPAnimationEventInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4920301C5112B3A62E52D727F9F27527 /* POPAnimationEventInternal.h */; }; + A94E63AD8090B36EF7CA95A8F1F31519 /* OCMVerifier.m in Sources */ = {isa = PBXBuildFile; fileRef = D1A3347C5EDEED04DCE08B8C85C7A1A3 /* OCMVerifier.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + A9B2357EEFB37FDE369D0DB56361123C /* NSMethodSignature+OCMAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 50EC02F86BD241A1CF96E3A94DD55DF1 /* NSMethodSignature+OCMAdditions.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + AB5E3F783365A229D6F19687D2C04D71 /* NSMutableArray+RoboKit.m in Sources */ = {isa = PBXBuildFile; fileRef = F536032B7C69E4742DE49D264EDE9051 /* NSMutableArray+RoboKit.m */; }; + ABB64AB02F83A0D3E4A67A540DFDB8AE /* POPBasicAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 337C5B1FEA3E23EDA06CEA069BDD6803 /* POPBasicAnimationInternal.h */; }; + AD71F3E123164664F308E9141D5623FD /* OCMIndirectReturnValueProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 388610E77078FDC96E13AB6DC7CAED89 /* OCMIndirectReturnValueProvider.h */; }; + AE8602AB288C0918D558E3D03B6EBCCA /* POPAnimationTracer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9120E3534295C4429A1E661EC9014DC6 /* POPAnimationTracer.h */; }; + AF44BB82AC4B6E87868F26FCB9B55567 /* OCMFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 8931D563011C2000D6BC6FADACA5AF56 /* OCMFunctions.h */; }; + AF8848D8707EBE3586A0EBD8583F797A /* libextobjc-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A0BC9508322093DC155FC5F4EA5FF65 /* libextobjc-dummy.m */; }; + B8104ADC5342F69318FFC022D266DE67 /* NSString+RoboKit.h in Headers */ = {isa = PBXBuildFile; fileRef = E72E49A9BD5EF8B2F7AB9BF6C528F24C /* NSString+RoboKit.h */; }; + BEFC5CBAD9F05AA4396EEAA90E170B8B /* MASShortcut.h in Headers */ = {isa = PBXBuildFile; fileRef = FBF00E634CAB46611B23C10A66CB93F6 /* MASShortcut.h */; }; + C023D5DE2289ACEEF525DA797E8D1929 /* POPSpringSolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A8D727A2ABA622CAF2B35F33DB59AA0 /* POPSpringSolver.h */; }; + C315FC32937A690655B233C9F4709497 /* NSDate+Holidays.m in Sources */ = {isa = PBXBuildFile; fileRef = 9165976A4417D7AD1F3A9967B247B64B /* NSDate+Holidays.m */; }; + C3317D19F5C68E39005FFF02E86B28D3 /* MASShortcut-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 50CAB4E27D72FF87EDB02214D0370371 /* MASShortcut-dummy.m */; }; + C49D5746BE7B487799DA4F75C02D07EA /* NSArray+RoboKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 096D9581ABDAF63D4B40396780397B7D /* NSArray+RoboKit.h */; }; + C524BD62F111C16177B857A86D07020B /* POPCGUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0056E485EB2AC2DB77589397B43F9D4E /* POPCGUtils.mm */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + C75460053107342B780F5EB0489C6C3E /* NSObject+OCMAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = B13A5631D255DD787407BD8840B2A529 /* NSObject+OCMAdditions.h */; }; + C91E2ADEA1232E5B8888AC7711FDAD31 /* OCMMacroState.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E399257D91B808B6CCDA2001C1D74C9 /* OCMMacroState.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + CB99FC7FDA16CE654304F641980B3006 /* OCMPassByRefSetter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E38010CEA09F77735E3D4ECDD820AD9 /* OCMPassByRefSetter.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + CC6EE4406C0F1E8293CC898D431E390C /* OCMVerifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 7969C76DB03BD3D8A945EF203225EE82 /* OCMVerifier.h */; }; + CE49A515FB54B7CBA9EF42D043747D74 /* MASShortcut+UserDefaults.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7D48A2E9C8341317CBCC6E5FB9897A /* MASShortcut+UserDefaults.h */; }; + CE5F8288C2CB28466D15A6715B2BCD59 /* NSString+CSV.h in Headers */ = {isa = PBXBuildFile; fileRef = 308AEECAEAAA35376813440978342651 /* NSString+CSV.h */; }; + CE93CBA6548410A9C663D43AB5C22465 /* OCMStubRecorder.h in Headers */ = {isa = PBXBuildFile; fileRef = 6755DA7CDAB4E8A547456FC9E676700B /* OCMStubRecorder.h */; }; + CF514FF9C76675F2E525F1145C1CF577 /* POPBasicAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 656C564AB78928C9C9E38ADF1D0A8034 /* POPBasicAnimation.mm */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + D1BBB69E6E6C246E9BECACC6E56E4594 /* POPAnimationEvent.mm in Sources */ = {isa = PBXBuildFile; fileRef = FE5985D200AA2A143AF1265E0CBC71D6 /* POPAnimationEvent.mm */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + D22E63AFF6F37760A56AB21715286E4C /* NSNotificationCenter+OCMAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = B095958E7F96CFF04DB8DFA7705D4A6A /* NSNotificationCenter+OCMAdditions.h */; }; + D2F2966C120D1115B9BE925376FEE8D7 /* OCMObserverRecorder.h in Headers */ = {isa = PBXBuildFile; fileRef = 49AE29EFF5F537BAD6D41A7EB299E214 /* OCMObserverRecorder.h */; }; + D571E4A10064615F109AC991E5BFFCD8 /* POPCustomAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 178147E2DAFE25FE29769B97658336A7 /* POPCustomAnimation.mm */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + D618F8E480AD25D3976EBE5E60E3915D /* POPLayerExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 26B315D426679DD0C6379F2385E8D3E8 /* POPLayerExtras.h */; }; + D6891DDFB0A4411100D1C4F340CDAE4B /* NSData+Base64.h in Headers */ = {isa = PBXBuildFile; fileRef = 103F08E85F080F4DD3CAA745940EE6B5 /* NSData+Base64.h */; }; + D690B7F640634DCF058B66397C7EB498 /* OCMArg.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BE22E755E38F192FC92E468F697EE37 /* OCMArg.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + D7352F8FB7F84ED6B55BCE2841BDCF8E /* MASShortcutView.m in Sources */ = {isa = PBXBuildFile; fileRef = 26752BCA8BB663A67248F736FBBD50E8 /* MASShortcutView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + D98051472A9DA44E11A97D84BDD9B82E /* POPVector.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7AD5C3DAEA2BD47972EEC107B0552551 /* POPVector.mm */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + D9CEDFDB425718718EC594EBAC24E6DA /* OCProtocolMockObject.h in Headers */ = {isa = PBXBuildFile; fileRef = A49829951E6CCCD9079725BEBBD5649A /* OCProtocolMockObject.h */; }; + DD8358A6AFFEFA7C875FC8A328D73FB9 /* NSData+Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = 0723F117B76FAFED4145396402A445C2 /* NSData+Base64.m */; }; + DDCC2199009C1C207B40286430771A08 /* OCMockObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DECF61B547AAE86998A628B1896D3B1 /* OCMockObject.h */; }; + E21C02C008350F204532C7FDEC620FDA /* POPSpringAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = B87627FE7A04A036B9A38D3379B57E95 /* POPSpringAnimationInternal.h */; }; + E5BCFECDB68719B00A197FABBF1E9FE2 /* OCObserverMockObject.h in Headers */ = {isa = PBXBuildFile; fileRef = F6722EA199DDE7D96681F5F6AD876CBA /* OCObserverMockObject.h */; }; + E71AEE4A0D156B675829694D2B2B0763 /* OCMockObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 43550F14039177893FDE15773633A8F5 /* OCMockObject.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + E84E27A78B96090A33798DDF391C8413 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 28DF70DAA53216F92E1A2E75E5B6450C /* Cocoa.framework */; }; + EAA16BF9B2110012597357BE1C0606CA /* POPPropertyAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1579DCCD381F583B9A8D3A6455837281 /* POPPropertyAnimation.mm */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + EAA1B79CA1FDD476DF8AF25CCBDA46C3 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA8BC8CEE81D63BB6D02C28F6743CBC4 /* XCTest.framework */; }; + EAC6B8816B3E1743FC2C3D85C630BEB4 /* OCMRecorder.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D2E312E2E7E287CBA2D4C69C4A06977 /* OCMRecorder.h */; }; + EB7A89395FEC03489CBCAD62F65EE8C2 /* OCMBlockCaller.m in Sources */ = {isa = PBXBuildFile; fileRef = FD7B8C493B381B8C1379FFA8AD0235A2 /* OCMBlockCaller.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + EC1810758F103E2B2819C51A41B761FE /* OCMInvocationExpectation.h in Headers */ = {isa = PBXBuildFile; fileRef = 74068987CFC60A5EFA3A44EEA7FD44B2 /* OCMInvocationExpectation.h */; }; + ECBB39758C4AD6FF8E030753BF8D13F8 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 28DF70DAA53216F92E1A2E75E5B6450C /* Cocoa.framework */; }; + EEA2C195718D32C291C75E536B8C7429 /* MASShortcutView+UserDefaults.h in Headers */ = {isa = PBXBuildFile; fileRef = B7D151496C3E01DCF6CBF728A3D48F4F /* MASShortcutView+UserDefaults.h */; }; + EEE571639CCE60686CD2A7D81B3EE476 /* POPAnimationRuntime.mm in Sources */ = {isa = PBXBuildFile; fileRef = B79E8D579072AE83304EB5D0F7D18898 /* POPAnimationRuntime.mm */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + F017ED52A4F764E8FA1F9BC09500FBA2 /* OCMInvocationStub.h in Headers */ = {isa = PBXBuildFile; fileRef = 3141BF49E4650035EE9C9C8F5B506684 /* OCMInvocationStub.h */; }; + F4C1D61AEF6160D25C5C77D288768462 /* OCMInvocationExpectation.m in Sources */ = {isa = PBXBuildFile; fileRef = B2EDCDF9CB1E5F357386F1C93495FB87 /* OCMInvocationExpectation.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + F53860C67F1BC11B5A092ADA490D627D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 28DF70DAA53216F92E1A2E75E5B6450C /* Cocoa.framework */; }; + F57400D1C13E7CDB4170230F26DF6775 /* TransformationMatrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D6D2842705BD5A167AB34CB60C4E5AA /* TransformationMatrix.h */; }; + F61DA3B14F2E17B259824ED9FEA80272 /* POPAnimatorPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = BCF9EC03B1EBB20CE03DA2D0E543AD0A /* POPAnimatorPrivate.h */; }; + F91217E5EED5FDF11057FA36A92D887C /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 28DF70DAA53216F92E1A2E75E5B6450C /* Cocoa.framework */; }; + F91A447E454ED8484185E7410FB4C76A /* OCPartialMockObject.h in Headers */ = {isa = PBXBuildFile; fileRef = E4DDCC951F89DE2691C40757D0F75529 /* OCPartialMockObject.h */; }; + F9BE37A7C52D2274BB17D031C27F779E /* OCMReturnValueProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 122DF81227BDD27B38BE22BD5AB706FF /* OCMReturnValueProvider.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + FBCCE1E18AD079EAFCCCB0E63F37F8E8 /* RBKHTTPStatusCodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A79A89CDD1141033596FC5DC2F4AA136 /* RBKHTTPStatusCodes.h */; }; + FC37F9C16B6BE8DAFB1A7E25ECB48574 /* OCMIndirectReturnValueProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C2FBD0A5347AB1F13890517367CD5FC /* OCMIndirectReturnValueProvider.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + FCA2B8990CEB6D59315150BC42D0A55A /* NSData+RoboKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A332D30AFD51EAD9243845EE9248EDD /* NSData+RoboKit.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 138A8ED45FC59E15BF9A1BE313B2B8C0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8CB09AE374A98F5F317AA93056C66034; + remoteInfo = RoboKit; + }; + 237F2668392A83AE62276C9863348875 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8CB09AE374A98F5F317AA93056C66034; + remoteInfo = RoboKit; + }; + 3AAC04F8DD28018B69F8B55807904856 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3BFCBF556A84B3DE1046A6CD92479A43; + remoteInfo = libextobjc; + }; + 4DE67A40BA4D3D84216DF45A640B8D29 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3BFCBF556A84B3DE1046A6CD92479A43; + remoteInfo = libextobjc; + }; + 5D3799AF32C4EA13F1897801CB5C3A8B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 302CAABB27975081B37358129270BD41; + remoteInfo = MASShortcut; + }; + 63D3741A302848AA3C7919C3DC19BF6F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = CEF5C67696B324D8C9B2B33E9DF57554; + remoteInfo = OCMock; + }; + C6AFD9B346176F908FAC6216F995D03F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0BFAD44192724552163997EC96EDCFD6; + remoteInfo = pop; + }; + CF61E61A938EF8AF7DFE4F069AF47192 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0BFAD44192724552163997EC96EDCFD6; + remoteInfo = pop; + }; + EC636EE6B059B8035D31CDFF4A5A0326 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 302CAABB27975081B37358129270BD41; + remoteInfo = MASShortcut; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 0056E485EB2AC2DB77589397B43F9D4E /* POPCGUtils.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPCGUtils.mm; path = pop/POPCGUtils.mm; sourceTree = ""; }; + 01BE4F59EFA6C7B4E653D4254B0861B6 /* OCObserverMockObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCObserverMockObject.m; path = Source/OCMock/OCObserverMockObject.m; sourceTree = ""; }; + 06D7FF19768B8EE90878463F0F7B6BDB /* MASShortcut-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MASShortcut-prefix.pch"; sourceTree = ""; }; + 0723F117B76FAFED4145396402A445C2 /* NSData+Base64.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+Base64.m"; path = "Classes/Extensions/NSData+Base64.m"; sourceTree = ""; }; + 08718A0CA0E0C6095CD36D050498CF41 /* NSDate+RoboKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDate+RoboKit.m"; path = "Classes/Extensions/NSDate+RoboKit.m"; sourceTree = ""; }; + 096D9581ABDAF63D4B40396780397B7D /* NSArray+RoboKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+RoboKit.h"; path = "Classes/Extensions/NSArray+RoboKit.h"; sourceTree = ""; }; + 0A65E0B23EA502B0B8FC55E6E67ABD3B /* POPAction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAction.h; path = pop/POPAction.h; sourceTree = ""; }; + 0E8651D089F7875BF36E29B64DABF3BE /* libPods-JeffTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-JeffTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 0ECA00D437CE20E33C38255F1D671FB3 /* RoboKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RoboKit-dummy.m"; sourceTree = ""; }; + 103F08E85F080F4DD3CAA745940EE6B5 /* NSData+Base64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+Base64.h"; path = "Classes/Extensions/NSData+Base64.h"; sourceTree = ""; }; + 122DF81227BDD27B38BE22BD5AB706FF /* OCMReturnValueProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCMReturnValueProvider.m; path = Source/OCMock/OCMReturnValueProvider.m; sourceTree = ""; }; + 129A9866B3609E1CA4C63B6B14A1F4A1 /* POPAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationInternal.h; path = pop/POPAnimationInternal.h; sourceTree = ""; }; + 13279A823284BC267ED0AFF4E85FF7F3 /* Pods.beta release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods.beta release.xcconfig"; sourceTree = ""; }; + 13549A242D307D5F803A531BA7118B82 /* POPAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimation.h; path = pop/POPAnimation.h; sourceTree = ""; }; + 1579DCCD381F583B9A8D3A6455837281 /* POPPropertyAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPPropertyAnimation.mm; path = pop/POPPropertyAnimation.mm; sourceTree = ""; }; + 178147E2DAFE25FE29769B97658336A7 /* POPCustomAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPCustomAnimation.mm; path = pop/POPCustomAnimation.mm; sourceTree = ""; }; + 17EC44606ED5F7C2B5321B1B03FADA8D /* OCMPassByRefSetter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMPassByRefSetter.h; path = Source/OCMock/OCMPassByRefSetter.h; sourceTree = ""; }; + 1942B01A0B613A69FD364046E13259F1 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/Carbon.framework; sourceTree = DEVELOPER_DIR; }; + 19D53C1FBB544D5D14124E67F8B519B8 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; }; + 1A0BC9508322093DC155FC5F4EA5FF65 /* libextobjc-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "libextobjc-dummy.m"; sourceTree = ""; }; + 1CF541189119BF41484727AB84DBF8F7 /* NSString+CSV.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+CSV.m"; path = "Classes/Extensions/NSString+CSV.m"; sourceTree = ""; }; + 1E10823D0F935742411FCD34169D3AC1 /* MASShortcut.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MASShortcut.m; sourceTree = ""; }; + 1F788CD16059E0CB308C7180C8620436 /* POPCustomAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPCustomAnimation.h; path = pop/POPCustomAnimation.h; sourceTree = ""; }; + 211ADFDAD47565A42F9374DECC664C02 /* NSArray+RoboKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+RoboKit.m"; path = "Classes/Extensions/NSArray+RoboKit.m"; sourceTree = ""; }; + 258A30DD546146CF1DAB914178DE4309 /* OCMRecorder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCMRecorder.m; path = Source/OCMock/OCMRecorder.m; sourceTree = ""; }; + 26752BCA8BB663A67248F736FBBD50E8 /* MASShortcutView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MASShortcutView.m; sourceTree = ""; }; + 26B315D426679DD0C6379F2385E8D3E8 /* POPLayerExtras.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPLayerExtras.h; path = pop/POPLayerExtras.h; sourceTree = ""; }; + 275791B6FA5ADED806A636091090356F /* MASShortcut-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "MASShortcut-Private.xcconfig"; sourceTree = ""; }; + 27B991B5344530B32852CF3A400650DF /* POPPropertyAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPPropertyAnimation.h; path = pop/POPPropertyAnimation.h; sourceTree = ""; }; + 28DF70DAA53216F92E1A2E75E5B6450C /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; + 2A000A04A81B3331F06863CB22270978 /* NSData+RoboKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+RoboKit.h"; path = "Classes/Extensions/NSData+RoboKit.h"; sourceTree = ""; }; + 2A332D30AFD51EAD9243845EE9248EDD /* NSData+RoboKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+RoboKit.m"; path = "Classes/Extensions/NSData+RoboKit.m"; sourceTree = ""; }; + 2A8CF4BBA908153ECA67666196E67AAC /* Pods-JeffTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-JeffTests.debug.xcconfig"; sourceTree = ""; }; + 2C2FBD0A5347AB1F13890517367CD5FC /* OCMIndirectReturnValueProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCMIndirectReturnValueProvider.m; path = Source/OCMock/OCMIndirectReturnValueProvider.m; sourceTree = ""; }; + 2DECF61B547AAE86998A628B1896D3B1 /* OCMockObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMockObject.h; path = Source/OCMock/OCMockObject.h; sourceTree = ""; }; + 2F90B4211769EC56EAB6309DDEA0126A /* OCMStubRecorder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCMStubRecorder.m; path = Source/OCMock/OCMStubRecorder.m; sourceTree = ""; }; + 3032F351EE23A161F08860509398BCB9 /* Pods-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-acknowledgements.plist"; sourceTree = ""; }; + 308AEECAEAAA35376813440978342651 /* NSString+CSV.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+CSV.h"; path = "Classes/Extensions/NSString+CSV.h"; sourceTree = ""; }; + 3141BF49E4650035EE9C9C8F5B506684 /* OCMInvocationStub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMInvocationStub.h; path = Source/OCMock/OCMInvocationStub.h; sourceTree = ""; }; + 318FB3241BB3D57939FDAF783E4EECA0 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; }; + 337C5B1FEA3E23EDA06CEA069BDD6803 /* POPBasicAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPBasicAnimationInternal.h; path = pop/POPBasicAnimationInternal.h; sourceTree = ""; }; + 3751B1E3B92F22C2E020C69BDEF51C60 /* POPMath.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPMath.mm; path = pop/POPMath.mm; sourceTree = ""; }; + 377792DBA4BDA5CA3EEA159B1BDEA99C /* OCMInvocationStub.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCMInvocationStub.m; path = Source/OCMock/OCMInvocationStub.m; sourceTree = ""; }; + 379A90BAC3D67D45CCD18EF4F3231DD6 /* NSDate-Utilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDate-Utilities.m"; path = "Classes/Extensions/NSDate-Utilities.m"; sourceTree = ""; }; + 388610E77078FDC96E13AB6DC7CAED89 /* OCMIndirectReturnValueProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMIndirectReturnValueProvider.h; path = Source/OCMock/OCMIndirectReturnValueProvider.h; sourceTree = ""; }; + 3A29698959E8D2344DDF19E7EDB48798 /* POPAnimator.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimator.mm; path = pop/POPAnimator.mm; sourceTree = ""; }; + 3BE22E755E38F192FC92E468F697EE37 /* OCMArg.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCMArg.m; path = Source/OCMock/OCMArg.m; sourceTree = ""; }; + 3BEC7180AD921087057B27B372F4D1C7 /* NSObject+OCMAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+OCMAdditions.m"; path = "Source/OCMock/NSObject+OCMAdditions.m"; sourceTree = ""; }; + 3D66D964DE780C0D3203F31F851C6504 /* OCMock-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "OCMock-Private.xcconfig"; sourceTree = ""; }; + 3FC0586A17539DB7129E34EFF600DCCF /* Pods-JeffTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-JeffTests-resources.sh"; sourceTree = ""; }; + 41EC48CBF34AA86EB1BC0DE3107262C5 /* POP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POP.h; path = pop/POP.h; sourceTree = ""; }; + 42BD756A41A6E94AA0FC5346A96A45F9 /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; + 43550F14039177893FDE15773633A8F5 /* OCMockObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCMockObject.m; path = Source/OCMock/OCMockObject.m; sourceTree = ""; }; + 4363A66BE087A1D2DB48A9C7C15DC0ED /* libpop.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libpop.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 45AA3344C2E3478FF5F30F300634B5F0 /* POPAnimationEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationEvent.h; path = pop/POPAnimationEvent.h; sourceTree = ""; }; + 45ED55EF8FF224B32BD728D7EE5D30CA /* OCMExceptionReturnValueProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMExceptionReturnValueProvider.h; path = Source/OCMock/OCMExceptionReturnValueProvider.h; sourceTree = ""; }; + 475C14E9A77B536E172C157E944371B1 /* OCMock-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "OCMock-prefix.pch"; sourceTree = ""; }; + 48C6BF4FE087491069173DD45B39EFB3 /* MASShortcut+Monitoring.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MASShortcut+Monitoring.h"; sourceTree = ""; }; + 4920301C5112B3A62E52D727F9F27527 /* POPAnimationEventInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationEventInternal.h; path = pop/POPAnimationEventInternal.h; sourceTree = ""; }; + 49AE29EFF5F537BAD6D41A7EB299E214 /* OCMObserverRecorder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMObserverRecorder.h; path = Source/OCMock/OCMObserverRecorder.h; sourceTree = ""; }; + 4A36FB390D7187532B42D7FF088387F2 /* MASShortcut.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MASShortcut.xcconfig; sourceTree = ""; }; + 4AA53E650C5A590A416D1002AB25D6AB /* libMASShortcut.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMASShortcut.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 4CDB6EC3378EA499EC5781C7E7842CD9 /* POPAnimationExtras.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationExtras.h; path = pop/POPAnimationExtras.h; sourceTree = ""; }; + 4D6D2842705BD5A167AB34CB60C4E5AA /* TransformationMatrix.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TransformationMatrix.h; path = pop/WebCore/TransformationMatrix.h; sourceTree = ""; }; + 4E38010CEA09F77735E3D4ECDD820AD9 /* OCMPassByRefSetter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCMPassByRefSetter.m; path = Source/OCMock/OCMPassByRefSetter.m; sourceTree = ""; }; + 4F6739E56E3FAA665FD1B590064B4D61 /* OCMExpectationRecorder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCMExpectationRecorder.m; path = Source/OCMock/OCMExpectationRecorder.m; sourceTree = ""; }; + 50CAB4E27D72FF87EDB02214D0370371 /* MASShortcut-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MASShortcut-dummy.m"; sourceTree = ""; }; + 50EC02F86BD241A1CF96E3A94DD55DF1 /* NSMethodSignature+OCMAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMethodSignature+OCMAdditions.m"; path = "Source/OCMock/NSMethodSignature+OCMAdditions.m"; sourceTree = ""; }; + 5233D2C49A19895D482D7D3899B321B2 /* metamacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = metamacros.h; path = extobjc/metamacros.h; sourceTree = ""; }; + 5356CA85E959631DF291677BA31D0277 /* NSMutableArray+RoboKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableArray+RoboKit.h"; path = "Classes/Extensions/NSMutableArray+RoboKit.h"; sourceTree = ""; }; + 561DA0A9B81E8775F0099DF3D0FD8DC1 /* NSObject+CancelableScheduledBlock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+CancelableScheduledBlock.m"; path = "Classes/Extensions/NSObject+CancelableScheduledBlock.m"; sourceTree = ""; }; + 56920A091B6EFF119988AD067695FDA1 /* Pods-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-resources.sh"; sourceTree = ""; }; + 5918CFA63CBC61C51F8554346C1D4744 /* NSObject+CancelableScheduledBlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+CancelableScheduledBlock.h"; path = "Classes/Extensions/NSObject+CancelableScheduledBlock.h"; sourceTree = ""; }; + 5A43C9A6D97894CE18395983831A53E3 /* libextobjc-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "libextobjc-prefix.pch"; sourceTree = ""; }; + 5B4716C7F7BAF3C6AAB1852DB822BA00 /* pop-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "pop-Private.xcconfig"; sourceTree = ""; }; + 5E662C06EB8D523D2751FB27E2F31A53 /* POPDecayAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDecayAnimation.h; path = pop/POPDecayAnimation.h; sourceTree = ""; }; + 6114DE9C0A01D22D1EE20D83A2A0BF67 /* RoboKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RoboKit.xcconfig; sourceTree = ""; }; + 61F9DEF6722EEAD5F5E89C95BFD9B030 /* OCMReturnValueProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMReturnValueProvider.h; path = Source/OCMock/OCMReturnValueProvider.h; sourceTree = ""; }; + 640F2A58EB4879155966F9469C606596 /* NSDate+RoboKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDate+RoboKit.h"; path = "Classes/Extensions/NSDate+RoboKit.h"; sourceTree = ""; }; + 656C564AB78928C9C9E38ADF1D0A8034 /* POPBasicAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPBasicAnimation.mm; path = pop/POPBasicAnimation.mm; sourceTree = ""; }; + 66391DBC1B3B241D4CD8116552427116 /* OCMInvocationMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCMInvocationMatcher.m; path = Source/OCMock/OCMInvocationMatcher.m; sourceTree = ""; }; + 672176FD0520B306B169A91A64FAEF3C /* TransformationMatrix.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TransformationMatrix.cpp; path = pop/WebCore/TransformationMatrix.cpp; sourceTree = ""; }; + 6755DA7CDAB4E8A547456FC9E676700B /* OCMStubRecorder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMStubRecorder.h; path = Source/OCMock/OCMStubRecorder.h; sourceTree = ""; }; + 69D86A539022EBA92255561FE510F053 /* OCMConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMConstraint.h; path = Source/OCMock/OCMConstraint.h; sourceTree = ""; }; + 6B805A4AB514DDB3455585D13CA2323B /* pop.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = pop.xcconfig; sourceTree = ""; }; + 6E399257D91B808B6CCDA2001C1D74C9 /* OCMMacroState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCMMacroState.m; path = Source/OCMock/OCMMacroState.m; sourceTree = ""; }; + 6FDA98BC2DE7EDE8894660CA9C0C5EF3 /* EXTRuntimeExtensions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXTRuntimeExtensions.m; path = extobjc/EXTRuntimeExtensions.m; sourceTree = ""; }; + 704CB91253CCA5A38FBA218A8CDD92D0 /* OCMMacroState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMMacroState.h; path = Source/OCMock/OCMMacroState.h; sourceTree = ""; }; + 74068987CFC60A5EFA3A44EEA7FD44B2 /* OCMInvocationExpectation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMInvocationExpectation.h; path = Source/OCMock/OCMInvocationExpectation.h; sourceTree = ""; }; + 755935FFAC326E593B3F9811E3C6EF67 /* OCMNotificationPoster.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCMNotificationPoster.m; path = Source/OCMock/OCMNotificationPoster.m; sourceTree = ""; }; + 77187305929B669191D00CD661FD4EB7 /* POPAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimation.mm; path = pop/POPAnimation.mm; sourceTree = ""; }; + 77A12C32756D3B4D8F98657E6A2CF4B0 /* POPAnimationExtras.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationExtras.mm; path = pop/POPAnimationExtras.mm; sourceTree = ""; }; + 77BDBEBB9A1651D150F2600B2A6970B4 /* OCMBoxedReturnValueProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMBoxedReturnValueProvider.h; path = Source/OCMock/OCMBoxedReturnValueProvider.h; sourceTree = ""; }; + 7969C76DB03BD3D8A945EF203225EE82 /* OCMVerifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMVerifier.h; path = Source/OCMock/OCMVerifier.h; sourceTree = ""; }; + 7AD5C3DAEA2BD47972EEC107B0552551 /* POPVector.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPVector.mm; path = pop/POPVector.mm; sourceTree = ""; }; + 7D2E312E2E7E287CBA2D4C69C4A06977 /* OCMRecorder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMRecorder.h; path = Source/OCMock/OCMRecorder.h; sourceTree = ""; }; + 7FD9E7E72D8F0298B1328C4B6C4BE643 /* NSString+RoboKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+RoboKit.m"; path = "Classes/Extensions/NSString+RoboKit.m"; sourceTree = ""; }; + 80D5DD6058029A00934DFA1F9640F668 /* EXTKeyPathCoding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXTKeyPathCoding.h; path = extobjc/EXTKeyPathCoding.h; sourceTree = ""; }; + 80E4B1BEEE40BF4B3BF93773602CFE1D /* OCMLocation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCMLocation.m; path = Source/OCMock/OCMLocation.m; sourceTree = ""; }; + 818B7BEDFD89397E53D11EFFDB0CF9B7 /* libRoboKit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRoboKit.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 81C28C7A721F19488FDDB8ED5F204B91 /* OCMFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCMFunctions.m; path = Source/OCMock/OCMFunctions.m; sourceTree = ""; }; + 81CD7F352ACFD70C8139378AF6A781B7 /* OCMNotificationPoster.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMNotificationPoster.h; path = Source/OCMock/OCMNotificationPoster.h; sourceTree = ""; }; + 81DAF5ECC26FAAD0B1F888A385425EED /* HockeySDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = HockeySDK.framework; path = "HockeySDK-Mac/HockeySDK.framework"; sourceTree = ""; }; + 82CEE90FB09AF1132E4C26906E470887 /* pop-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "pop-prefix.pch"; sourceTree = ""; }; + 8305CE8A59A3463A56C6962EFC74F4D5 /* libOCMock.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libOCMock.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 83DB3A833DCDF8A7314F20E22C4E56EE /* POPGeometry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPGeometry.h; path = pop/POPGeometry.h; sourceTree = ""; }; + 84F55689B86B800B86A1A1577AE3BD5A /* Pods-JeffTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-JeffTests-acknowledgements.markdown"; sourceTree = ""; }; + 8655A23FC4A01E0D8C953A3BCFA4B492 /* POPDecayAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPDecayAnimation.mm; path = pop/POPDecayAnimation.mm; sourceTree = ""; }; + 865D7FC5FE9C9593BD827323EF3686E7 /* pop-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "pop-dummy.m"; sourceTree = ""; }; + 8931D563011C2000D6BC6FADACA5AF56 /* OCMFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMFunctions.h; path = Source/OCMock/OCMFunctions.h; sourceTree = ""; }; + 8951517F8D27F3EBDDAB654222BEE163 /* POPVector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPVector.h; path = pop/POPVector.h; sourceTree = ""; }; + 895889220E9AB9BAAEADD6F343B6A779 /* POPBasicAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPBasicAnimation.h; path = pop/POPBasicAnimation.h; sourceTree = ""; }; + 8A8D727A2ABA622CAF2B35F33DB59AA0 /* POPSpringSolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringSolver.h; path = pop/POPSpringSolver.h; sourceTree = ""; }; + 8B33913C64EE9CC8E8FC1B4C6B6A958A /* EXTRuntimeExtensions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXTRuntimeExtensions.h; path = extobjc/EXTRuntimeExtensions.h; sourceTree = ""; }; + 8C7E8EB35A0B9EDCFA6F6041EF1E3AE4 /* OCMArg.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMArg.h; path = Source/OCMock/OCMArg.h; sourceTree = ""; }; + 8D3378D8E988D8DF99296621B5C5E114 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 8DA47BC8BB96C513491022056ECC801B /* POPAnimationTracer.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationTracer.mm; path = pop/POPAnimationTracer.mm; sourceTree = ""; }; + 8E7D48A2E9C8341317CBCC6E5FB9897A /* MASShortcut+UserDefaults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MASShortcut+UserDefaults.h"; sourceTree = ""; }; + 90AA3CF7AFDF09EAB30F65DD337C1A2B /* POPDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDefines.h; path = pop/POPDefines.h; sourceTree = ""; }; + 9120E3534295C4429A1E661EC9014DC6 /* POPAnimationTracer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationTracer.h; path = pop/POPAnimationTracer.h; sourceTree = ""; }; + 9165976A4417D7AD1F3A9967B247B64B /* NSDate+Holidays.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDate+Holidays.m"; path = "Classes/Extensions/NSDate+Holidays.m"; sourceTree = ""; }; + 923AEAAF0E761ED1DD34DFB04D3AF1AD /* OCMInvocationMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMInvocationMatcher.h; path = Source/OCMock/OCMInvocationMatcher.h; sourceTree = ""; }; + 9741E8A77F28EB7C010B44F49495AF22 /* NSDate-Utilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDate-Utilities.h"; path = "Classes/Extensions/NSDate-Utilities.h"; sourceTree = ""; }; + 9945E0E2BD4FE25BD82D7F6756C68279 /* RBKHTTPStatusCodes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RBKHTTPStatusCodes.m; path = Classes/RBKHTTPStatusCodes.m; sourceTree = ""; }; + 9C57A1EE222D623CC51E88841F7B60F1 /* MASShortcut+UserDefaults.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MASShortcut+UserDefaults.m"; sourceTree = ""; }; + 9D18FCA3831E0E68C7DAABB1587B5367 /* RoboKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RoboKit-prefix.pch"; sourceTree = ""; }; + 9D33B622994747548AF8278AF883B1F8 /* RoboKit-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "RoboKit-Private.xcconfig"; sourceTree = ""; }; + 9DB3C16FA8ACDF43072E2D3FE5B45036 /* UnitBezier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UnitBezier.h; path = pop/WebCore/UnitBezier.h; sourceTree = ""; }; + 9F1E86996663181714D92C2AFF9B9053 /* NSNotificationCenter+OCMAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSNotificationCenter+OCMAdditions.m"; path = "Source/OCMock/NSNotificationCenter+OCMAdditions.m"; sourceTree = ""; }; + A14AA42A9CB734E73C06827E0143F316 /* libextobjc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = libextobjc.xcconfig; sourceTree = ""; }; + A14C649F0767362359A6F2B234F1A123 /* NSValue+OCMAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSValue+OCMAdditions.m"; path = "Source/OCMock/NSValue+OCMAdditions.m"; sourceTree = ""; }; + A2EAEACC1A3C0F07E27C385C14FE9D8A /* liblibextobjc.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = liblibextobjc.a; sourceTree = BUILT_PRODUCTS_DIR; }; + A49829951E6CCCD9079725BEBBD5649A /* OCProtocolMockObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCProtocolMockObject.h; path = Source/OCMock/OCProtocolMockObject.h; sourceTree = ""; }; + A4D0E7B237D650BE49759F0EE14CF8A5 /* libextobjc-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "libextobjc-Private.xcconfig"; sourceTree = ""; }; + A79A89CDD1141033596FC5DC2F4AA136 /* RBKHTTPStatusCodes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RBKHTTPStatusCodes.h; path = Classes/RBKHTTPStatusCodes.h; sourceTree = ""; }; + A7C26C531D056B8F55C8D9DFF8439B5B /* NSValue+OCMAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSValue+OCMAdditions.h"; path = "Source/OCMock/NSValue+OCMAdditions.h"; sourceTree = ""; }; + A87EADAE6DE01970392B2C3096A07C70 /* POPSpringAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPSpringAnimation.mm; path = pop/POPSpringAnimation.mm; sourceTree = ""; }; + AB2816BA9A828CBF308D945231C93A49 /* Pods-JeffTests.beta release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-JeffTests.beta release.xcconfig"; sourceTree = ""; }; + AC75D99F4C00FF9438F309A61697D92D /* NSInvocation+OCMAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSInvocation+OCMAdditions.m"; path = "Source/OCMock/NSInvocation+OCMAdditions.m"; sourceTree = ""; }; + AD06380066ACDC566244FC31F3AC5680 /* POPGeometry.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPGeometry.mm; path = pop/POPGeometry.mm; sourceTree = ""; }; + ADB40FC8D59C9E7527FB68AD5A9E2BBD /* OCMRealObjectForwarder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCMRealObjectForwarder.m; path = Source/OCMock/OCMRealObjectForwarder.m; sourceTree = ""; }; + AF0EA9459582F7ED74682AD96C4806A7 /* POPAnimationTracerInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationTracerInternal.h; path = pop/POPAnimationTracerInternal.h; sourceTree = ""; }; + B095958E7F96CFF04DB8DFA7705D4A6A /* NSNotificationCenter+OCMAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSNotificationCenter+OCMAdditions.h"; path = "Source/OCMock/NSNotificationCenter+OCMAdditions.h"; sourceTree = ""; }; + B13A5631D255DD787407BD8840B2A529 /* NSObject+OCMAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+OCMAdditions.h"; path = "Source/OCMock/NSObject+OCMAdditions.h"; sourceTree = ""; }; + B2EDCDF9CB1E5F357386F1C93495FB87 /* OCMInvocationExpectation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCMInvocationExpectation.m; path = Source/OCMock/OCMInvocationExpectation.m; sourceTree = ""; }; + B30930874D8FD6296D8CC9D0AD6DCAFA /* POPMath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPMath.h; path = pop/POPMath.h; sourceTree = ""; }; + B644A0AFA725E5BA8EC160D1EE1B23F9 /* OCMConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCMConstraint.m; path = Source/OCMock/OCMConstraint.m; sourceTree = ""; }; + B64C6A18DF81FD4B3210755484A47F63 /* NSInvocation+OCMAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSInvocation+OCMAdditions.h"; path = "Source/OCMock/NSInvocation+OCMAdditions.h"; sourceTree = ""; }; + B709D662CE46A834CEDCE98B9BD52E15 /* OCMExceptionReturnValueProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCMExceptionReturnValueProvider.m; path = Source/OCMock/OCMExceptionReturnValueProvider.m; sourceTree = ""; }; + B79E8D579072AE83304EB5D0F7D18898 /* POPAnimationRuntime.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationRuntime.mm; path = pop/POPAnimationRuntime.mm; sourceTree = ""; }; + B7D151496C3E01DCF6CBF728A3D48F4F /* MASShortcutView+UserDefaults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MASShortcutView+UserDefaults.h"; sourceTree = ""; }; + B87627FE7A04A036B9A38D3379B57E95 /* POPSpringAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringAnimationInternal.h; path = pop/POPSpringAnimationInternal.h; sourceTree = ""; }; + BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + BCF9EC03B1EBB20CE03DA2D0E543AD0A /* POPAnimatorPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimatorPrivate.h; path = pop/POPAnimatorPrivate.h; sourceTree = ""; }; + BDB0C911B37F3FB3A8699CD57A33B77E /* OCMock-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "OCMock-dummy.m"; sourceTree = ""; }; + BDF8C438B194979153145F7547FD6436 /* OCPartialMockObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCPartialMockObject.m; path = Source/OCMock/OCPartialMockObject.m; sourceTree = ""; }; + BF495420A2ED20EB85A41F0C2135F944 /* NSMethodSignature+OCMAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMethodSignature+OCMAdditions.h"; path = "Source/OCMock/NSMethodSignature+OCMAdditions.h"; sourceTree = ""; }; + BFFD0DA45EF4F67CBA76B7B3D1A32163 /* POPSpringAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringAnimation.h; path = pop/POPSpringAnimation.h; sourceTree = ""; }; + C0DCFCE11C08FDF0E65B11A0FBFD2673 /* OCMExpectationRecorder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMExpectationRecorder.h; path = Source/OCMock/OCMExpectationRecorder.h; sourceTree = ""; }; + C3ABB6F38818473CB6D6218C2D0E182A /* POPAnimationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationPrivate.h; path = pop/POPAnimationPrivate.h; sourceTree = ""; }; + C3B1AD6E0C882C3B510F47D7B5A218B7 /* FloatConversion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FloatConversion.h; path = pop/WebCore/FloatConversion.h; sourceTree = ""; }; + C48D904023CDFEA3D67BB1A13F974C7B /* Pods-JeffTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-JeffTests.release.xcconfig"; sourceTree = ""; }; + C4C9339BA8E7BBA8F667FD4F55D639B6 /* OCClassMockObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCClassMockObject.h; path = Source/OCMock/OCClassMockObject.h; sourceTree = ""; }; + C7F325C08B92A92B4257A379560E90D4 /* MASShortcutView+UserDefaults.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MASShortcutView+UserDefaults.m"; sourceTree = ""; }; + CAA55FA5B3B2A3FB164EA4727D356665 /* Pods-JeffTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-JeffTests-dummy.m"; sourceTree = ""; }; + CDEE70C0B4F8727F7BC3CCAE0CA98F85 /* OCMBoxedReturnValueProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCMBoxedReturnValueProvider.m; path = Source/OCMock/OCMBoxedReturnValueProvider.m; sourceTree = ""; }; + CEB4017AAA5E9C677701C7B89825EA36 /* POPDecayAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDecayAnimationInternal.h; path = pop/POPDecayAnimationInternal.h; sourceTree = ""; }; + CEBCBCE115F738EB0CA9CAD0281212D8 /* OCProtocolMockObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCProtocolMockObject.m; path = Source/OCMock/OCProtocolMockObject.m; sourceTree = ""; }; + CF28A813ACB59C7A8F2676B72AABE37D /* POPLayerExtras.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPLayerExtras.mm; path = pop/POPLayerExtras.mm; sourceTree = ""; }; + D0008646F5D771BE8AFB3F33DBDDD9C3 /* POPPropertyAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPPropertyAnimationInternal.h; path = pop/POPPropertyAnimationInternal.h; sourceTree = ""; }; + D1A3347C5EDEED04DCE08B8C85C7A1A3 /* OCMVerifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCMVerifier.m; path = Source/OCMock/OCMVerifier.m; sourceTree = ""; }; + D4B6974708096A1F54228462C0F8C101 /* RBKCommonUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RBKCommonUtils.h; path = Classes/Headers/RBKCommonUtils.h; sourceTree = ""; }; + D7083670274D125D0C8B1D26BA59E028 /* OCMock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMock.h; path = Source/OCMock/OCMock.h; sourceTree = ""; }; + DB6C844E0FDF208063031FA7F37924E6 /* OCClassMockObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCClassMockObject.m; path = Source/OCMock/OCClassMockObject.m; sourceTree = ""; }; + DC23F1B8A0A642EEBCBFA9B50F5772D7 /* POPCGUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPCGUtils.h; path = pop/POPCGUtils.h; sourceTree = ""; }; + DE490CE2A03F86DCCFC5C51EA3B4149C /* POPAnimatableProperty.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimatableProperty.mm; path = pop/POPAnimatableProperty.mm; sourceTree = ""; }; + E06E14904AE2DA3DCBD5F6DA6E5E991D /* RBKAppKitUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RBKAppKitUtils.h; path = OSX/RBKAppKitUtils.h; sourceTree = ""; }; + E38EF9462676440D0F0DEEAC8E2BAA82 /* OCMObserverRecorder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCMObserverRecorder.m; path = Source/OCMock/OCMObserverRecorder.m; sourceTree = ""; }; + E4DDCC951F89DE2691C40757D0F75529 /* OCPartialMockObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCPartialMockObject.h; path = Source/OCMock/OCPartialMockObject.h; sourceTree = ""; }; + E72E49A9BD5EF8B2F7AB9BF6C528F24C /* NSString+RoboKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+RoboKit.h"; path = "Classes/Extensions/NSString+RoboKit.h"; sourceTree = ""; }; + E926F36B1FC6E4AD815EAEF15A83B196 /* POPAnimatableProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimatableProperty.h; path = pop/POPAnimatableProperty.h; sourceTree = ""; }; + EA051D75016D580BBF19D2EDA231EBA6 /* OCMBlockCaller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMBlockCaller.h; path = Source/OCMock/OCMBlockCaller.h; sourceTree = ""; }; + EA2F5051B652DD4733045A3DBAB6926B /* POPAnimationRuntime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationRuntime.h; path = pop/POPAnimationRuntime.h; sourceTree = ""; }; + ED36BE3EF723939864668098C265C473 /* NSDate+Holidays.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDate+Holidays.h"; path = "Classes/Extensions/NSDate+Holidays.h"; sourceTree = ""; }; + EDCB2F1338C89532AA75CE720B07BA4C /* MASShortcutView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MASShortcutView.h; sourceTree = ""; }; + EF944B420873322F20DBD30C92233618 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; + F387B888830E3C7F69C4BBD3FF58DABB /* Pods-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-acknowledgements.markdown"; sourceTree = ""; }; + F536032B7C69E4742DE49D264EDE9051 /* NSMutableArray+RoboKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableArray+RoboKit.m"; path = "Classes/Extensions/NSMutableArray+RoboKit.m"; sourceTree = ""; }; + F65963E61A440D808F01AD1C072DAA2D /* OCMRealObjectForwarder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMRealObjectForwarder.h; path = Source/OCMock/OCMRealObjectForwarder.h; sourceTree = ""; }; + F6722EA199DDE7D96681F5F6AD876CBA /* OCObserverMockObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCObserverMockObject.h; path = Source/OCMock/OCObserverMockObject.h; sourceTree = ""; }; + F953E7F01C97FAD47101D89A299B6559 /* OCMLocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OCMLocation.h; path = Source/OCMock/OCMLocation.h; sourceTree = ""; }; + FA605BF4368E271C2616FCC759F41A24 /* Pods-JeffTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-JeffTests-acknowledgements.plist"; sourceTree = ""; }; + FA8BC8CEE81D63BB6D02C28F6743CBC4 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + FBF00E634CAB46611B23C10A66CB93F6 /* MASShortcut.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MASShortcut.h; sourceTree = ""; }; + FD7B8C493B381B8C1379FFA8AD0235A2 /* OCMBlockCaller.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OCMBlockCaller.m; path = Source/OCMock/OCMBlockCaller.m; sourceTree = ""; }; + FE46A60EEB18BD812B1F49AC6A532CF4 /* MASShortcut+Monitoring.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MASShortcut+Monitoring.m"; sourceTree = ""; }; + FE5985D200AA2A143AF1265E0CBC71D6 /* POPAnimationEvent.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationEvent.mm; path = pop/POPAnimationEvent.mm; sourceTree = ""; }; + FEBDF5960CE5729B92B2E8286F2B2417 /* POPAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimator.h; path = pop/POPAnimator.h; sourceTree = ""; }; + FECBB82DB4A834D32C2CC2A5BDC9B837 /* OCMock.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = OCMock.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 08A17036924FD6293C658104EE15CDB3 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A6751877173D53AF4B398F24D1C1A651 /* Cocoa.framework in Frameworks */, + EAA1B79CA1FDD476DF8AF25CCBDA46C3 /* XCTest.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2BC7A4F78535B7585461837559E8459D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A6BF151C6594691293529285F5084530 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2E04F2AB298F02A926307F97DB203692 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F53860C67F1BC11B5A092ADA490D627D /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5B7112E340F3309AC2333CC58FF0D2D4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E84E27A78B96090A33798DDF391C8413 /* Cocoa.framework in Frameworks */, + 10A63E80BEC929633822AF08B9BE6F25 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B0982772652E7DC3F87453090D246470 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9943241498D7901F4BE4E326E43B0A1C /* Carbon.framework in Frameworks */, + F91217E5EED5FDF11057FA36A92D887C /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C23FF831E15F044EBDFD6580507ECA97 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 1571E528BBF2255FB2BCF75558E253CE /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C9425AA0A55898EDD547968662066248 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ECBB39758C4AD6FF8E030753BF8D13F8 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 12202AAE97F11384C20BFA45F983C5D2 /* RuntimeExtensions */ = { + isa = PBXGroup; + children = ( + 8B33913C64EE9CC8E8FC1B4C6B6A958A /* EXTRuntimeExtensions.h */, + 6FDA98BC2DE7EDE8894660CA9C0C5EF3 /* EXTRuntimeExtensions.m */, + 5233D2C49A19895D482D7D3899B321B2 /* metamacros.h */, + ); + name = RuntimeExtensions; + sourceTree = ""; + }; + 2B0AC5582C4C7DA1DC9E0A7DD76C9BBC /* Support Files */ = { + isa = PBXGroup; + children = ( + A14AA42A9CB734E73C06827E0143F316 /* libextobjc.xcconfig */, + A4D0E7B237D650BE49759F0EE14CF8A5 /* libextobjc-Private.xcconfig */, + 1A0BC9508322093DC155FC5F4EA5FF65 /* libextobjc-dummy.m */, + 5A43C9A6D97894CE18395983831A53E3 /* libextobjc-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/libextobjc"; + sourceTree = ""; + }; + 2EE61A27212781BE0E1CBA24DB7B8B17 /* Pods */ = { + isa = PBXGroup; + children = ( + F71875BCFFABEA301AAD1B9EE5803760 /* HockeySDK-Mac */, + 36BA9FD21C6173B5E57338EFB9E51D31 /* MASShortcut */, + 9B26E1BD66E809933FFF5CBAE2C3B892 /* OCMock */, + 43BE669C6307E7E1766FAEB4D5B9B58C /* RoboKit */, + DCB38E721985F98505BB37FBA1D49FF0 /* libextobjc */, + B4F3454A89E01F6682472208D0DFA410 /* pop */, + ); + name = Pods; + sourceTree = ""; + }; + 36BA9FD21C6173B5E57338EFB9E51D31 /* MASShortcut */ = { + isa = PBXGroup; + children = ( + FBF00E634CAB46611B23C10A66CB93F6 /* MASShortcut.h */, + 1E10823D0F935742411FCD34169D3AC1 /* MASShortcut.m */, + 48C6BF4FE087491069173DD45B39EFB3 /* MASShortcut+Monitoring.h */, + FE46A60EEB18BD812B1F49AC6A532CF4 /* MASShortcut+Monitoring.m */, + 8E7D48A2E9C8341317CBCC6E5FB9897A /* MASShortcut+UserDefaults.h */, + 9C57A1EE222D623CC51E88841F7B60F1 /* MASShortcut+UserDefaults.m */, + EDCB2F1338C89532AA75CE720B07BA4C /* MASShortcutView.h */, + 26752BCA8BB663A67248F736FBBD50E8 /* MASShortcutView.m */, + B7D151496C3E01DCF6CBF728A3D48F4F /* MASShortcutView+UserDefaults.h */, + C7F325C08B92A92B4257A379560E90D4 /* MASShortcutView+UserDefaults.m */, + 6C0A84458B7B3B740AC8EDEE7AF724D0 /* Support Files */, + ); + path = MASShortcut; + sourceTree = ""; + }; + 43BE669C6307E7E1766FAEB4D5B9B58C /* RoboKit */ = { + isa = PBXGroup; + children = ( + 096D9581ABDAF63D4B40396780397B7D /* NSArray+RoboKit.h */, + 211ADFDAD47565A42F9374DECC664C02 /* NSArray+RoboKit.m */, + 103F08E85F080F4DD3CAA745940EE6B5 /* NSData+Base64.h */, + 0723F117B76FAFED4145396402A445C2 /* NSData+Base64.m */, + 2A000A04A81B3331F06863CB22270978 /* NSData+RoboKit.h */, + 2A332D30AFD51EAD9243845EE9248EDD /* NSData+RoboKit.m */, + ED36BE3EF723939864668098C265C473 /* NSDate+Holidays.h */, + 9165976A4417D7AD1F3A9967B247B64B /* NSDate+Holidays.m */, + 640F2A58EB4879155966F9469C606596 /* NSDate+RoboKit.h */, + 08718A0CA0E0C6095CD36D050498CF41 /* NSDate+RoboKit.m */, + 9741E8A77F28EB7C010B44F49495AF22 /* NSDate-Utilities.h */, + 379A90BAC3D67D45CCD18EF4F3231DD6 /* NSDate-Utilities.m */, + 5356CA85E959631DF291677BA31D0277 /* NSMutableArray+RoboKit.h */, + F536032B7C69E4742DE49D264EDE9051 /* NSMutableArray+RoboKit.m */, + 5918CFA63CBC61C51F8554346C1D4744 /* NSObject+CancelableScheduledBlock.h */, + 561DA0A9B81E8775F0099DF3D0FD8DC1 /* NSObject+CancelableScheduledBlock.m */, + 308AEECAEAAA35376813440978342651 /* NSString+CSV.h */, + 1CF541189119BF41484727AB84DBF8F7 /* NSString+CSV.m */, + E72E49A9BD5EF8B2F7AB9BF6C528F24C /* NSString+RoboKit.h */, + 7FD9E7E72D8F0298B1328C4B6C4BE643 /* NSString+RoboKit.m */, + E06E14904AE2DA3DCBD5F6DA6E5E991D /* RBKAppKitUtils.h */, + D4B6974708096A1F54228462C0F8C101 /* RBKCommonUtils.h */, + A79A89CDD1141033596FC5DC2F4AA136 /* RBKHTTPStatusCodes.h */, + 9945E0E2BD4FE25BD82D7F6756C68279 /* RBKHTTPStatusCodes.m */, + 7D860AC856D9D9E4AB6B1E3098911A1E /* Support Files */, + ); + path = RoboKit; + sourceTree = ""; + }; + 446817C7B60A130AF49E63068F42EBF0 /* EXTKeyPathCoding */ = { + isa = PBXGroup; + children = ( + 80D5DD6058029A00934DFA1F9640F668 /* EXTKeyPathCoding.h */, + ); + name = EXTKeyPathCoding; + sourceTree = ""; + }; + 68F1DC66D1DC3A7571B7038332E11001 /* Pods-JeffTests */ = { + isa = PBXGroup; + children = ( + 84F55689B86B800B86A1A1577AE3BD5A /* Pods-JeffTests-acknowledgements.markdown */, + FA605BF4368E271C2616FCC759F41A24 /* Pods-JeffTests-acknowledgements.plist */, + CAA55FA5B3B2A3FB164EA4727D356665 /* Pods-JeffTests-dummy.m */, + 3FC0586A17539DB7129E34EFF600DCCF /* Pods-JeffTests-resources.sh */, + AB2816BA9A828CBF308D945231C93A49 /* Pods-JeffTests.beta release.xcconfig */, + 2A8CF4BBA908153ECA67666196E67AAC /* Pods-JeffTests.debug.xcconfig */, + C48D904023CDFEA3D67BB1A13F974C7B /* Pods-JeffTests.release.xcconfig */, + ); + name = "Pods-JeffTests"; + path = "Target Support Files/Pods-JeffTests"; + sourceTree = ""; + }; + 6C0A84458B7B3B740AC8EDEE7AF724D0 /* Support Files */ = { + isa = PBXGroup; + children = ( + 4A36FB390D7187532B42D7FF088387F2 /* MASShortcut.xcconfig */, + 275791B6FA5ADED806A636091090356F /* MASShortcut-Private.xcconfig */, + 50CAB4E27D72FF87EDB02214D0370371 /* MASShortcut-dummy.m */, + 06D7FF19768B8EE90878463F0F7B6BDB /* MASShortcut-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/MASShortcut"; + sourceTree = ""; + }; + 7D860AC856D9D9E4AB6B1E3098911A1E /* Support Files */ = { + isa = PBXGroup; + children = ( + 6114DE9C0A01D22D1EE20D83A2A0BF67 /* RoboKit.xcconfig */, + 9D33B622994747548AF8278AF883B1F8 /* RoboKit-Private.xcconfig */, + 0ECA00D437CE20E33C38255F1D671FB3 /* RoboKit-dummy.m */, + 9D18FCA3831E0E68C7DAABB1587B5367 /* RoboKit-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/RoboKit"; + sourceTree = ""; + }; + 7DB346D0F39D3F0E887471402A8071AB = { + isa = PBXGroup; + children = ( + BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */, + CD75D5B60FCA72FBF7F9C770460B2C26 /* Frameworks */, + 2EE61A27212781BE0E1CBA24DB7B8B17 /* Pods */, + CCA510CFBEA2D207524CDA0D73C3B561 /* Products */, + 9C532B51D12C502CC346F65EE4ECA87F /* Targets Support Files */, + ); + sourceTree = ""; + }; + 896891EF4DA1914F8D3147FD012D7124 /* Support Files */ = { + isa = PBXGroup; + children = ( + FECBB82DB4A834D32C2CC2A5BDC9B837 /* OCMock.xcconfig */, + 3D66D964DE780C0D3203F31F851C6504 /* OCMock-Private.xcconfig */, + BDB0C911B37F3FB3A8699CD57A33B77E /* OCMock-dummy.m */, + 475C14E9A77B536E172C157E944371B1 /* OCMock-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/OCMock"; + sourceTree = ""; + }; + 91D17B2F0E017B9EE72EAD4191C12180 /* Pods */ = { + isa = PBXGroup; + children = ( + F387B888830E3C7F69C4BBD3FF58DABB /* Pods-acknowledgements.markdown */, + 3032F351EE23A161F08860509398BCB9 /* Pods-acknowledgements.plist */, + 42BD756A41A6E94AA0FC5346A96A45F9 /* Pods-dummy.m */, + 56920A091B6EFF119988AD067695FDA1 /* Pods-resources.sh */, + 13279A823284BC267ED0AFF4E85FF7F3 /* Pods.beta release.xcconfig */, + 19D53C1FBB544D5D14124E67F8B519B8 /* Pods.debug.xcconfig */, + 318FB3241BB3D57939FDAF783E4EECA0 /* Pods.release.xcconfig */, + ); + name = Pods; + path = "Target Support Files/Pods"; + sourceTree = ""; + }; + 9B26E1BD66E809933FFF5CBAE2C3B892 /* OCMock */ = { + isa = PBXGroup; + children = ( + B64C6A18DF81FD4B3210755484A47F63 /* NSInvocation+OCMAdditions.h */, + AC75D99F4C00FF9438F309A61697D92D /* NSInvocation+OCMAdditions.m */, + BF495420A2ED20EB85A41F0C2135F944 /* NSMethodSignature+OCMAdditions.h */, + 50EC02F86BD241A1CF96E3A94DD55DF1 /* NSMethodSignature+OCMAdditions.m */, + B095958E7F96CFF04DB8DFA7705D4A6A /* NSNotificationCenter+OCMAdditions.h */, + 9F1E86996663181714D92C2AFF9B9053 /* NSNotificationCenter+OCMAdditions.m */, + B13A5631D255DD787407BD8840B2A529 /* NSObject+OCMAdditions.h */, + 3BEC7180AD921087057B27B372F4D1C7 /* NSObject+OCMAdditions.m */, + A7C26C531D056B8F55C8D9DFF8439B5B /* NSValue+OCMAdditions.h */, + A14C649F0767362359A6F2B234F1A123 /* NSValue+OCMAdditions.m */, + C4C9339BA8E7BBA8F667FD4F55D639B6 /* OCClassMockObject.h */, + DB6C844E0FDF208063031FA7F37924E6 /* OCClassMockObject.m */, + 8C7E8EB35A0B9EDCFA6F6041EF1E3AE4 /* OCMArg.h */, + 3BE22E755E38F192FC92E468F697EE37 /* OCMArg.m */, + EA051D75016D580BBF19D2EDA231EBA6 /* OCMBlockCaller.h */, + FD7B8C493B381B8C1379FFA8AD0235A2 /* OCMBlockCaller.m */, + 77BDBEBB9A1651D150F2600B2A6970B4 /* OCMBoxedReturnValueProvider.h */, + CDEE70C0B4F8727F7BC3CCAE0CA98F85 /* OCMBoxedReturnValueProvider.m */, + 69D86A539022EBA92255561FE510F053 /* OCMConstraint.h */, + B644A0AFA725E5BA8EC160D1EE1B23F9 /* OCMConstraint.m */, + 45ED55EF8FF224B32BD728D7EE5D30CA /* OCMExceptionReturnValueProvider.h */, + B709D662CE46A834CEDCE98B9BD52E15 /* OCMExceptionReturnValueProvider.m */, + C0DCFCE11C08FDF0E65B11A0FBFD2673 /* OCMExpectationRecorder.h */, + 4F6739E56E3FAA665FD1B590064B4D61 /* OCMExpectationRecorder.m */, + 8931D563011C2000D6BC6FADACA5AF56 /* OCMFunctions.h */, + 81C28C7A721F19488FDDB8ED5F204B91 /* OCMFunctions.m */, + 388610E77078FDC96E13AB6DC7CAED89 /* OCMIndirectReturnValueProvider.h */, + 2C2FBD0A5347AB1F13890517367CD5FC /* OCMIndirectReturnValueProvider.m */, + 74068987CFC60A5EFA3A44EEA7FD44B2 /* OCMInvocationExpectation.h */, + B2EDCDF9CB1E5F357386F1C93495FB87 /* OCMInvocationExpectation.m */, + 923AEAAF0E761ED1DD34DFB04D3AF1AD /* OCMInvocationMatcher.h */, + 66391DBC1B3B241D4CD8116552427116 /* OCMInvocationMatcher.m */, + 3141BF49E4650035EE9C9C8F5B506684 /* OCMInvocationStub.h */, + 377792DBA4BDA5CA3EEA159B1BDEA99C /* OCMInvocationStub.m */, + F953E7F01C97FAD47101D89A299B6559 /* OCMLocation.h */, + 80E4B1BEEE40BF4B3BF93773602CFE1D /* OCMLocation.m */, + 704CB91253CCA5A38FBA218A8CDD92D0 /* OCMMacroState.h */, + 6E399257D91B808B6CCDA2001C1D74C9 /* OCMMacroState.m */, + 81CD7F352ACFD70C8139378AF6A781B7 /* OCMNotificationPoster.h */, + 755935FFAC326E593B3F9811E3C6EF67 /* OCMNotificationPoster.m */, + 49AE29EFF5F537BAD6D41A7EB299E214 /* OCMObserverRecorder.h */, + E38EF9462676440D0F0DEEAC8E2BAA82 /* OCMObserverRecorder.m */, + 17EC44606ED5F7C2B5321B1B03FADA8D /* OCMPassByRefSetter.h */, + 4E38010CEA09F77735E3D4ECDD820AD9 /* OCMPassByRefSetter.m */, + F65963E61A440D808F01AD1C072DAA2D /* OCMRealObjectForwarder.h */, + ADB40FC8D59C9E7527FB68AD5A9E2BBD /* OCMRealObjectForwarder.m */, + 7D2E312E2E7E287CBA2D4C69C4A06977 /* OCMRecorder.h */, + 258A30DD546146CF1DAB914178DE4309 /* OCMRecorder.m */, + 61F9DEF6722EEAD5F5E89C95BFD9B030 /* OCMReturnValueProvider.h */, + 122DF81227BDD27B38BE22BD5AB706FF /* OCMReturnValueProvider.m */, + 6755DA7CDAB4E8A547456FC9E676700B /* OCMStubRecorder.h */, + 2F90B4211769EC56EAB6309DDEA0126A /* OCMStubRecorder.m */, + 7969C76DB03BD3D8A945EF203225EE82 /* OCMVerifier.h */, + D1A3347C5EDEED04DCE08B8C85C7A1A3 /* OCMVerifier.m */, + D7083670274D125D0C8B1D26BA59E028 /* OCMock.h */, + 2DECF61B547AAE86998A628B1896D3B1 /* OCMockObject.h */, + 43550F14039177893FDE15773633A8F5 /* OCMockObject.m */, + F6722EA199DDE7D96681F5F6AD876CBA /* OCObserverMockObject.h */, + 01BE4F59EFA6C7B4E653D4254B0861B6 /* OCObserverMockObject.m */, + E4DDCC951F89DE2691C40757D0F75529 /* OCPartialMockObject.h */, + BDF8C438B194979153145F7547FD6436 /* OCPartialMockObject.m */, + A49829951E6CCCD9079725BEBBD5649A /* OCProtocolMockObject.h */, + CEBCBCE115F738EB0CA9CAD0281212D8 /* OCProtocolMockObject.m */, + 896891EF4DA1914F8D3147FD012D7124 /* Support Files */, + ); + path = OCMock; + sourceTree = ""; + }; + 9C532B51D12C502CC346F65EE4ECA87F /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + 91D17B2F0E017B9EE72EAD4191C12180 /* Pods */, + 68F1DC66D1DC3A7571B7038332E11001 /* Pods-JeffTests */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + A2BCDF4AF4C8F97FE9E95F0F3D031346 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 81DAF5ECC26FAAD0B1F888A385425EED /* HockeySDK.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + A94C68088A06AA14DB1A985D07C166A1 /* OS X */ = { + isa = PBXGroup; + children = ( + 1942B01A0B613A69FD364046E13259F1 /* Carbon.framework */, + 28DF70DAA53216F92E1A2E75E5B6450C /* Cocoa.framework */, + 8D3378D8E988D8DF99296621B5C5E114 /* Foundation.framework */, + FA8BC8CEE81D63BB6D02C28F6743CBC4 /* XCTest.framework */, + ); + name = "OS X"; + sourceTree = ""; + }; + B4F3454A89E01F6682472208D0DFA410 /* pop */ = { + isa = PBXGroup; + children = ( + C3B1AD6E0C882C3B510F47D7B5A218B7 /* FloatConversion.h */, + 41EC48CBF34AA86EB1BC0DE3107262C5 /* POP.h */, + 0A65E0B23EA502B0B8FC55E6E67ABD3B /* POPAction.h */, + E926F36B1FC6E4AD815EAEF15A83B196 /* POPAnimatableProperty.h */, + DE490CE2A03F86DCCFC5C51EA3B4149C /* POPAnimatableProperty.mm */, + 13549A242D307D5F803A531BA7118B82 /* POPAnimation.h */, + 77187305929B669191D00CD661FD4EB7 /* POPAnimation.mm */, + 45AA3344C2E3478FF5F30F300634B5F0 /* POPAnimationEvent.h */, + FE5985D200AA2A143AF1265E0CBC71D6 /* POPAnimationEvent.mm */, + 4920301C5112B3A62E52D727F9F27527 /* POPAnimationEventInternal.h */, + 4CDB6EC3378EA499EC5781C7E7842CD9 /* POPAnimationExtras.h */, + 77A12C32756D3B4D8F98657E6A2CF4B0 /* POPAnimationExtras.mm */, + 129A9866B3609E1CA4C63B6B14A1F4A1 /* POPAnimationInternal.h */, + C3ABB6F38818473CB6D6218C2D0E182A /* POPAnimationPrivate.h */, + EA2F5051B652DD4733045A3DBAB6926B /* POPAnimationRuntime.h */, + B79E8D579072AE83304EB5D0F7D18898 /* POPAnimationRuntime.mm */, + 9120E3534295C4429A1E661EC9014DC6 /* POPAnimationTracer.h */, + 8DA47BC8BB96C513491022056ECC801B /* POPAnimationTracer.mm */, + AF0EA9459582F7ED74682AD96C4806A7 /* POPAnimationTracerInternal.h */, + FEBDF5960CE5729B92B2E8286F2B2417 /* POPAnimator.h */, + 3A29698959E8D2344DDF19E7EDB48798 /* POPAnimator.mm */, + BCF9EC03B1EBB20CE03DA2D0E543AD0A /* POPAnimatorPrivate.h */, + 895889220E9AB9BAAEADD6F343B6A779 /* POPBasicAnimation.h */, + 656C564AB78928C9C9E38ADF1D0A8034 /* POPBasicAnimation.mm */, + 337C5B1FEA3E23EDA06CEA069BDD6803 /* POPBasicAnimationInternal.h */, + DC23F1B8A0A642EEBCBFA9B50F5772D7 /* POPCGUtils.h */, + 0056E485EB2AC2DB77589397B43F9D4E /* POPCGUtils.mm */, + 1F788CD16059E0CB308C7180C8620436 /* POPCustomAnimation.h */, + 178147E2DAFE25FE29769B97658336A7 /* POPCustomAnimation.mm */, + 5E662C06EB8D523D2751FB27E2F31A53 /* POPDecayAnimation.h */, + 8655A23FC4A01E0D8C953A3BCFA4B492 /* POPDecayAnimation.mm */, + CEB4017AAA5E9C677701C7B89825EA36 /* POPDecayAnimationInternal.h */, + 90AA3CF7AFDF09EAB30F65DD337C1A2B /* POPDefines.h */, + 83DB3A833DCDF8A7314F20E22C4E56EE /* POPGeometry.h */, + AD06380066ACDC566244FC31F3AC5680 /* POPGeometry.mm */, + 26B315D426679DD0C6379F2385E8D3E8 /* POPLayerExtras.h */, + CF28A813ACB59C7A8F2676B72AABE37D /* POPLayerExtras.mm */, + B30930874D8FD6296D8CC9D0AD6DCAFA /* POPMath.h */, + 3751B1E3B92F22C2E020C69BDEF51C60 /* POPMath.mm */, + 27B991B5344530B32852CF3A400650DF /* POPPropertyAnimation.h */, + 1579DCCD381F583B9A8D3A6455837281 /* POPPropertyAnimation.mm */, + D0008646F5D771BE8AFB3F33DBDDD9C3 /* POPPropertyAnimationInternal.h */, + BFFD0DA45EF4F67CBA76B7B3D1A32163 /* POPSpringAnimation.h */, + A87EADAE6DE01970392B2C3096A07C70 /* POPSpringAnimation.mm */, + B87627FE7A04A036B9A38D3379B57E95 /* POPSpringAnimationInternal.h */, + 8A8D727A2ABA622CAF2B35F33DB59AA0 /* POPSpringSolver.h */, + 8951517F8D27F3EBDDAB654222BEE163 /* POPVector.h */, + 7AD5C3DAEA2BD47972EEC107B0552551 /* POPVector.mm */, + 672176FD0520B306B169A91A64FAEF3C /* TransformationMatrix.cpp */, + 4D6D2842705BD5A167AB34CB60C4E5AA /* TransformationMatrix.h */, + 9DB3C16FA8ACDF43072E2D3FE5B45036 /* UnitBezier.h */, + FBDEAC7638267B650D1F0B25CEC9B072 /* Support Files */, + ); + path = pop; + sourceTree = ""; + }; + B589AC8ACB2296CBF31CD1829EFA40A6 /* Resources */ = { + isa = PBXGroup; + children = ( + ); + name = Resources; + sourceTree = ""; + }; + CCA510CFBEA2D207524CDA0D73C3B561 /* Products */ = { + isa = PBXGroup; + children = ( + 4AA53E650C5A590A416D1002AB25D6AB /* libMASShortcut.a */, + 8305CE8A59A3463A56C6962EFC74F4D5 /* libOCMock.a */, + EF944B420873322F20DBD30C92233618 /* libPods.a */, + 0E8651D089F7875BF36E29B64DABF3BE /* libPods-JeffTests.a */, + 818B7BEDFD89397E53D11EFFDB0CF9B7 /* libRoboKit.a */, + A2EAEACC1A3C0F07E27C385C14FE9D8A /* liblibextobjc.a */, + 4363A66BE087A1D2DB48A9C7C15DC0ED /* libpop.a */, + ); + name = Products; + sourceTree = ""; + }; + CD75D5B60FCA72FBF7F9C770460B2C26 /* Frameworks */ = { + isa = PBXGroup; + children = ( + A94C68088A06AA14DB1A985D07C166A1 /* OS X */, + ); + name = Frameworks; + sourceTree = ""; + }; + DCB38E721985F98505BB37FBA1D49FF0 /* libextobjc */ = { + isa = PBXGroup; + children = ( + 446817C7B60A130AF49E63068F42EBF0 /* EXTKeyPathCoding */, + 12202AAE97F11384C20BFA45F983C5D2 /* RuntimeExtensions */, + 2B0AC5582C4C7DA1DC9E0A7DD76C9BBC /* Support Files */, + ); + path = libextobjc; + sourceTree = ""; + }; + F71875BCFFABEA301AAD1B9EE5803760 /* HockeySDK-Mac */ = { + isa = PBXGroup; + children = ( + A2BCDF4AF4C8F97FE9E95F0F3D031346 /* Frameworks */, + B589AC8ACB2296CBF31CD1829EFA40A6 /* Resources */, + ); + path = "HockeySDK-Mac"; + sourceTree = ""; + }; + FBDEAC7638267B650D1F0B25CEC9B072 /* Support Files */ = { + isa = PBXGroup; + children = ( + 6B805A4AB514DDB3455585D13CA2323B /* pop.xcconfig */, + 5B4716C7F7BAF3C6AAB1852DB822BA00 /* pop-Private.xcconfig */, + 865D7FC5FE9C9593BD827323EF3686E7 /* pop-dummy.m */, + 82CEE90FB09AF1132E4C26906E470887 /* pop-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/pop"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 0DB6769B46DCE87D2CC990B74F71D014 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 1E2CF6E2CE320CEFA4727921C6542A9C /* NSInvocation+OCMAdditions.h in Headers */, + 8E20CA512B88C3846B1BAA6651E4FCC4 /* NSMethodSignature+OCMAdditions.h in Headers */, + D22E63AFF6F37760A56AB21715286E4C /* NSNotificationCenter+OCMAdditions.h in Headers */, + C75460053107342B780F5EB0489C6C3E /* NSObject+OCMAdditions.h in Headers */, + 9EFB58B8F816AED19F4D1712B78C8107 /* NSValue+OCMAdditions.h in Headers */, + 9FB6D6BBA6DE4062F4F5B228C73F1CC8 /* OCClassMockObject.h in Headers */, + 338993C443B9A854C81E1EDEAEB3DA8E /* OCMArg.h in Headers */, + 20541B61E3E686960EC2A26653DC4B58 /* OCMBlockCaller.h in Headers */, + 353C87C3C3C72568006F83E89207EE2D /* OCMBoxedReturnValueProvider.h in Headers */, + 44DED9083CE9A64E7331D9D6812DF129 /* OCMConstraint.h in Headers */, + 0440D5084AEA1296DAA060B4D4127A7E /* OCMExceptionReturnValueProvider.h in Headers */, + 1B744EFB29353CBBBAC32FC457DD6137 /* OCMExpectationRecorder.h in Headers */, + AF44BB82AC4B6E87868F26FCB9B55567 /* OCMFunctions.h in Headers */, + AD71F3E123164664F308E9141D5623FD /* OCMIndirectReturnValueProvider.h in Headers */, + EC1810758F103E2B2819C51A41B761FE /* OCMInvocationExpectation.h in Headers */, + 017C835F46C9AA57082082F933987B45 /* OCMInvocationMatcher.h in Headers */, + F017ED52A4F764E8FA1F9BC09500FBA2 /* OCMInvocationStub.h in Headers */, + 441805704F37E57696AAB4467E0D371D /* OCMLocation.h in Headers */, + 066A020AE4A309A8C65A67F01B7F86E3 /* OCMMacroState.h in Headers */, + 8E19A770019EF5848C7F8D06BEF48915 /* OCMNotificationPoster.h in Headers */, + D2F2966C120D1115B9BE925376FEE8D7 /* OCMObserverRecorder.h in Headers */, + 338E2AAD2E904BFCFEFF7DF1A3DA6892 /* OCMPassByRefSetter.h in Headers */, + A7366FC380AC8BFD7C59451CD4BD9784 /* OCMRealObjectForwarder.h in Headers */, + EAC6B8816B3E1743FC2C3D85C630BEB4 /* OCMRecorder.h in Headers */, + 048CCF2DB0A10B9893D7346C8802F28A /* OCMReturnValueProvider.h in Headers */, + CE93CBA6548410A9C663D43AB5C22465 /* OCMStubRecorder.h in Headers */, + CC6EE4406C0F1E8293CC898D431E390C /* OCMVerifier.h in Headers */, + 7AAC6E8BC07E051E1144AEF812B93F6C /* OCMock.h in Headers */, + DDCC2199009C1C207B40286430771A08 /* OCMockObject.h in Headers */, + E5BCFECDB68719B00A197FABBF1E9FE2 /* OCObserverMockObject.h in Headers */, + F91A447E454ED8484185E7410FB4C76A /* OCPartialMockObject.h in Headers */, + D9CEDFDB425718718EC594EBAC24E6DA /* OCProtocolMockObject.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 850CA74DFD6DA6A2810B5280E156F7BA /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + C49D5746BE7B487799DA4F75C02D07EA /* NSArray+RoboKit.h in Headers */, + D6891DDFB0A4411100D1C4F340CDAE4B /* NSData+Base64.h in Headers */, + 38C0BEC75D55F0C4FCD81F4A5AAF0280 /* NSData+RoboKit.h in Headers */, + 6F2CF07040D742469A4C7DFDEA48DA2E /* NSDate+Holidays.h in Headers */, + 4C7838E1F8543FE970280F0BD3CE1942 /* NSDate+RoboKit.h in Headers */, + 9ED6B9531892CB2031CC6FA528A240D1 /* NSDate-Utilities.h in Headers */, + 657637796320F5713E6EDB89E405E333 /* NSMutableArray+RoboKit.h in Headers */, + 83B327839DB4AC50C794DEA9D08F266E /* NSObject+CancelableScheduledBlock.h in Headers */, + CE5F8288C2CB28466D15A6715B2BCD59 /* NSString+CSV.h in Headers */, + B8104ADC5342F69318FFC022D266DE67 /* NSString+RoboKit.h in Headers */, + 5DF3C6EE9643EC5614FC3D46BA4BFEF4 /* RBKAppKitUtils.h in Headers */, + 9558567148627FDD8D6204CA6430C551 /* RBKCommonUtils.h in Headers */, + FBCCE1E18AD079EAFCCCB0E63F37F8E8 /* RBKHTTPStatusCodes.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A5D2AB1E214CC59456AB4ACEB4EB97DE /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 03829963959A1766B2119EC4F61ACC3F /* MASShortcut+Monitoring.h in Headers */, + CE49A515FB54B7CBA9EF42D043747D74 /* MASShortcut+UserDefaults.h in Headers */, + BEFC5CBAD9F05AA4396EEAA90E170B8B /* MASShortcut.h in Headers */, + EEA2C195718D32C291C75E536B8C7429 /* MASShortcutView+UserDefaults.h in Headers */, + 7B004C4BDF5F05E3319C9384B9B30325 /* MASShortcutView.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C9C61A7892BCE51787C05EED2557B8FC /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 7327ED23FAF4176EBE9EFE668776F18C /* EXTKeyPathCoding.h in Headers */, + 18F2DD01DA5912EFEF463A53AE39B2C9 /* EXTRuntimeExtensions.h in Headers */, + 318FBA99E595B69B64E62DD06B43785A /* metamacros.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CCD8FD697CFD260A77CBF8C11F303A90 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 90F11AF4D1090D443F9C88785C3FDFBB /* FloatConversion.h in Headers */, + 7DCC2968E0BFA0602627998A43F7F50B /* POP.h in Headers */, + 810DC7DA575DDD62E010C5378D6C0588 /* POPAction.h in Headers */, + A5D004EFBC50A2A820CCA025B96E4973 /* POPAnimatableProperty.h in Headers */, + 5DBC886BAB59AAFE45A96EAAD5D377AF /* POPAnimation.h in Headers */, + A55BE5812309150A755F4AA23C9F52D9 /* POPAnimationEvent.h in Headers */, + A7C6954340C67BE405534864AE33E7C6 /* POPAnimationEventInternal.h in Headers */, + 4E8F10A86F737CE674BC8D514EAA77BF /* POPAnimationExtras.h in Headers */, + 9954DF4DEF78F19DDDE28A200BA2FB79 /* POPAnimationInternal.h in Headers */, + 45F39F3B3034F42AB1856D382DDEE841 /* POPAnimationPrivate.h in Headers */, + 5F89597DBCE8BB008935F6791ED20B2B /* POPAnimationRuntime.h in Headers */, + AE8602AB288C0918D558E3D03B6EBCCA /* POPAnimationTracer.h in Headers */, + 3A8CC99DA1E84C6CCFE37C7CB7D4A000 /* POPAnimationTracerInternal.h in Headers */, + 3276D4EA50F8CECAD3185FB3BE3C5FB1 /* POPAnimator.h in Headers */, + F61DA3B14F2E17B259824ED9FEA80272 /* POPAnimatorPrivate.h in Headers */, + 93AA8158ED67C55B11573AF8F0EC3E57 /* POPBasicAnimation.h in Headers */, + ABB64AB02F83A0D3E4A67A540DFDB8AE /* POPBasicAnimationInternal.h in Headers */, + 43D62DC2EA83AD21A13CCEFDC9C694F7 /* POPCGUtils.h in Headers */, + 273834A4431F5C369BA41370F3525739 /* POPCustomAnimation.h in Headers */, + 0904D83A4DA8467C1DDDFB62716AEB16 /* POPDecayAnimation.h in Headers */, + 4210A274CE7DBEF6AA8230EC03BD20D1 /* POPDecayAnimationInternal.h in Headers */, + 3AA5E31FC16A518E7FD286772D54B469 /* POPDefines.h in Headers */, + 00502493FAD27126DA139B2B3F36059C /* POPGeometry.h in Headers */, + D618F8E480AD25D3976EBE5E60E3915D /* POPLayerExtras.h in Headers */, + 7F6BE000B848FC60B96490DC07EE5B99 /* POPMath.h in Headers */, + 656B6596237CC11E3E9ED8B3F554B19B /* POPPropertyAnimation.h in Headers */, + 1574B941B9065A884CA4497FABA2826C /* POPPropertyAnimationInternal.h in Headers */, + 533F275092C2A5DC98155B965A700301 /* POPSpringAnimation.h in Headers */, + E21C02C008350F204532C7FDEC620FDA /* POPSpringAnimationInternal.h in Headers */, + C023D5DE2289ACEEF525DA797E8D1929 /* POPSpringSolver.h in Headers */, + 0712B4CB2B4EFC594029D96E0DC383F7 /* POPVector.h in Headers */, + F57400D1C13E7CDB4170230F26DF6775 /* TransformationMatrix.h in Headers */, + 81EC76704E9CA8AC04E67A464AB4D12A /* UnitBezier.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 09E074417ECED99F7825C1A72743E2F4 /* Pods-JeffTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = F61CC097E9D636871A14DC42CDE859C5 /* Build configuration list for PBXNativeTarget "Pods-JeffTests" */; + buildPhases = ( + 6BD7DA7D8DC758D4394F19D478F74BD9 /* Sources */, + 2BC7A4F78535B7585461837559E8459D /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + A10035AC941A6E623E5438927FF7A5DB /* PBXTargetDependency */, + D6A3384339E62F521B33DFDF3ABB54E3 /* PBXTargetDependency */, + 6B7C7B87592FAA46C03A7CD68E270941 /* PBXTargetDependency */, + 565D9A1390C15D2CDF3148CBD2B10B5F /* PBXTargetDependency */, + BA754231A3EC3616CB896EA333E7F53E /* PBXTargetDependency */, + ); + name = "Pods-JeffTests"; + productName = "Pods-JeffTests"; + productReference = 0E8651D089F7875BF36E29B64DABF3BE /* libPods-JeffTests.a */; + productType = "com.apple.product-type.library.static"; + }; + 0BFAD44192724552163997EC96EDCFD6 /* pop */ = { + isa = PBXNativeTarget; + buildConfigurationList = 36469BB9D0670EFA123F1F7DFC522915 /* Build configuration list for PBXNativeTarget "pop" */; + buildPhases = ( + 00C5F23AC65D1A8FC139D09F6EC36F31 /* Sources */, + 2E04F2AB298F02A926307F97DB203692 /* Frameworks */, + CCD8FD697CFD260A77CBF8C11F303A90 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = pop; + productName = pop; + productReference = 4363A66BE087A1D2DB48A9C7C15DC0ED /* libpop.a */; + productType = "com.apple.product-type.library.static"; + }; + 302CAABB27975081B37358129270BD41 /* MASShortcut */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33483CD9895E0147EF8DD00EF4205A42 /* Build configuration list for PBXNativeTarget "MASShortcut" */; + buildPhases = ( + A4833FE0757A2283ADDDD451CFAFF4FA /* Sources */, + B0982772652E7DC3F87453090D246470 /* Frameworks */, + A5D2AB1E214CC59456AB4ACEB4EB97DE /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MASShortcut; + productName = MASShortcut; + productReference = 4AA53E650C5A590A416D1002AB25D6AB /* libMASShortcut.a */; + productType = "com.apple.product-type.library.static"; + }; + 3BFCBF556A84B3DE1046A6CD92479A43 /* libextobjc */ = { + isa = PBXNativeTarget; + buildConfigurationList = 473B553AE9CF966F9071B815E8B4BA53 /* Build configuration list for PBXNativeTarget "libextobjc" */; + buildPhases = ( + E83B6EF285E28EBC8D7B477D734AF943 /* Sources */, + C9425AA0A55898EDD547968662066248 /* Frameworks */, + C9C61A7892BCE51787C05EED2557B8FC /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = libextobjc; + productName = libextobjc; + productReference = A2EAEACC1A3C0F07E27C385C14FE9D8A /* liblibextobjc.a */; + productType = "com.apple.product-type.library.static"; + }; + 71EB310EB622F94553F75F155A4307B6 /* Pods */ = { + isa = PBXNativeTarget; + buildConfigurationList = E9E1ECCAE1D32A89732669B9743AB38E /* Build configuration list for PBXNativeTarget "Pods" */; + buildPhases = ( + 571804EB9942F8B299D98645ED8AB486 /* Sources */, + C23FF831E15F044EBDFD6580507ECA97 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ACE31309B51369B67DB6F157E8D4B766 /* PBXTargetDependency */, + 41965A51DE371053069F558B00880137 /* PBXTargetDependency */, + 4E22988FCE3E33E089A17473D297452E /* PBXTargetDependency */, + 8A53107D34DF7938C11C28A319FCF27B /* PBXTargetDependency */, + ); + name = Pods; + productName = Pods; + productReference = EF944B420873322F20DBD30C92233618 /* libPods.a */; + productType = "com.apple.product-type.library.static"; + }; + 8CB09AE374A98F5F317AA93056C66034 /* RoboKit */ = { + isa = PBXNativeTarget; + buildConfigurationList = D979A15CC22F7BEFB0BFC690B837DE98 /* Build configuration list for PBXNativeTarget "RoboKit" */; + buildPhases = ( + 92F3DB2E68DA79C289D783D08A5B640B /* Sources */, + 5B7112E340F3309AC2333CC58FF0D2D4 /* Frameworks */, + 850CA74DFD6DA6A2810B5280E156F7BA /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = RoboKit; + productName = RoboKit; + productReference = 818B7BEDFD89397E53D11EFFDB0CF9B7 /* libRoboKit.a */; + productType = "com.apple.product-type.library.static"; + }; + CEF5C67696B324D8C9B2B33E9DF57554 /* OCMock */ = { + isa = PBXNativeTarget; + buildConfigurationList = 68404C96668AFA6E25BA1EBC7DDE4122 /* Build configuration list for PBXNativeTarget "OCMock" */; + buildPhases = ( + 69A2719821C4A92ADACEBCB086FBCD64 /* Sources */, + 08A17036924FD6293C658104EE15CDB3 /* Frameworks */, + 0DB6769B46DCE87D2CC990B74F71D014 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = OCMock; + productName = OCMock; + productReference = 8305CE8A59A3463A56C6962EFC74F4D5 /* libOCMock.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0700; + LastUpgradeCheck = 0700; + }; + buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 7DB346D0F39D3F0E887471402A8071AB; + productRefGroup = CCA510CFBEA2D207524CDA0D73C3B561 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 302CAABB27975081B37358129270BD41 /* MASShortcut */, + CEF5C67696B324D8C9B2B33E9DF57554 /* OCMock */, + 71EB310EB622F94553F75F155A4307B6 /* Pods */, + 09E074417ECED99F7825C1A72743E2F4 /* Pods-JeffTests */, + 8CB09AE374A98F5F317AA93056C66034 /* RoboKit */, + 3BFCBF556A84B3DE1046A6CD92479A43 /* libextobjc */, + 0BFAD44192724552163997EC96EDCFD6 /* pop */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 00C5F23AC65D1A8FC139D09F6EC36F31 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5EAB81301AE60956AD79C45BAF0035E2 /* POPAnimatableProperty.mm in Sources */, + 43C871BA7EFF82FF5213E5B488738188 /* POPAnimation.mm in Sources */, + D1BBB69E6E6C246E9BECACC6E56E4594 /* POPAnimationEvent.mm in Sources */, + 58269FD043AE86E5619FB100275B1019 /* POPAnimationExtras.mm in Sources */, + EEE571639CCE60686CD2A7D81B3EE476 /* POPAnimationRuntime.mm in Sources */, + 498E63384452ACEA7499A99A8897C256 /* POPAnimationTracer.mm in Sources */, + 1053CBF7E05874E14F2BF8AA492B6BD0 /* POPAnimator.mm in Sources */, + CF514FF9C76675F2E525F1145C1CF577 /* POPBasicAnimation.mm in Sources */, + C524BD62F111C16177B857A86D07020B /* POPCGUtils.mm in Sources */, + D571E4A10064615F109AC991E5BFFCD8 /* POPCustomAnimation.mm in Sources */, + 5E769B5EFBC559E5E95D8621CBC6B2AF /* POPDecayAnimation.mm in Sources */, + 939A1A0ADAAAD249FB919F6BF497D94C /* POPGeometry.mm in Sources */, + A60CE354B2D22461861E6A4718FF1234 /* POPLayerExtras.mm in Sources */, + 91C88A31F7801D5F4F6395D20ED50829 /* POPMath.mm in Sources */, + EAA16BF9B2110012597357BE1C0606CA /* POPPropertyAnimation.mm in Sources */, + 46A8F48198C142E99CB7A9E6F1195C82 /* POPSpringAnimation.mm in Sources */, + D98051472A9DA44E11A97D84BDD9B82E /* POPVector.mm in Sources */, + 642C166F3A646073D18A529772B677A8 /* TransformationMatrix.cpp in Sources */, + 329ACA6351504C746D0174808EF2F907 /* pop-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 571804EB9942F8B299D98645ED8AB486 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5DF0BBBABDC3689E8EBAF6AD851AD619 /* Pods-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 69A2719821C4A92ADACEBCB086FBCD64 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 820566854E4D8B1E8F301E5D481232F4 /* NSInvocation+OCMAdditions.m in Sources */, + A9B2357EEFB37FDE369D0DB56361123C /* NSMethodSignature+OCMAdditions.m in Sources */, + 727BFDA18276A96D2F2A6EDA1175E8EF /* NSNotificationCenter+OCMAdditions.m in Sources */, + 6B690C8B9EEC982D912A9A3A8162818B /* NSObject+OCMAdditions.m in Sources */, + 4F772DE7FFFB40FC4CCB6C7A7583865A /* NSValue+OCMAdditions.m in Sources */, + 485C3732E301E8BC51FAA1B972F164E8 /* OCClassMockObject.m in Sources */, + D690B7F640634DCF058B66397C7EB498 /* OCMArg.m in Sources */, + EB7A89395FEC03489CBCAD62F65EE8C2 /* OCMBlockCaller.m in Sources */, + 3EE79E76AE57AD4A4CD1AA935788DEA5 /* OCMBoxedReturnValueProvider.m in Sources */, + 1EEA4B12116352D9E0DD799A797A2F0E /* OCMConstraint.m in Sources */, + 7B0C7E0A0106A7AC350C016ADA9D00E5 /* OCMExceptionReturnValueProvider.m in Sources */, + 7571EE16AEF5DE2437657E4FCEB28CA7 /* OCMExpectationRecorder.m in Sources */, + 60ECF6DAEA900A6158675F7982FAFA49 /* OCMFunctions.m in Sources */, + FC37F9C16B6BE8DAFB1A7E25ECB48574 /* OCMIndirectReturnValueProvider.m in Sources */, + F4C1D61AEF6160D25C5C77D288768462 /* OCMInvocationExpectation.m in Sources */, + 1DFDB33DA8310D8AEBB3DA8C03528448 /* OCMInvocationMatcher.m in Sources */, + 5A020BEB38DD51C93A2AB1267074B223 /* OCMInvocationStub.m in Sources */, + 129DC4C70747F82F0D55DC18B78A25A2 /* OCMLocation.m in Sources */, + C91E2ADEA1232E5B8888AC7711FDAD31 /* OCMMacroState.m in Sources */, + 5B0AAEE300223A335F2A1C0907F0D7B1 /* OCMNotificationPoster.m in Sources */, + 80EC917EE65D938AF921E05F50E20BA7 /* OCMObserverRecorder.m in Sources */, + CB99FC7FDA16CE654304F641980B3006 /* OCMPassByRefSetter.m in Sources */, + 5815C261275155B9D2604251EDB945F2 /* OCMRealObjectForwarder.m in Sources */, + 6923CA730605E742854CA86357198CDB /* OCMRecorder.m in Sources */, + F9BE37A7C52D2274BB17D031C27F779E /* OCMReturnValueProvider.m in Sources */, + 2F8C1BE458584AE0A7AF8483435E9FA2 /* OCMStubRecorder.m in Sources */, + A94E63AD8090B36EF7CA95A8F1F31519 /* OCMVerifier.m in Sources */, + 8B73901BE6FAA8D0F9F909BF015B8650 /* OCMock-dummy.m in Sources */, + E71AEE4A0D156B675829694D2B2B0763 /* OCMockObject.m in Sources */, + 5A5AD360E58FDE6C23523C050B4BC964 /* OCObserverMockObject.m in Sources */, + 8465F2AC64696B2C773F7DF610A49737 /* OCPartialMockObject.m in Sources */, + 4179510254BCCCCAA81ED07ECC6DE86C /* OCProtocolMockObject.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6BD7DA7D8DC758D4394F19D478F74BD9 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 12C2FF2F24C7D289559B7D7467579C4A /* Pods-JeffTests-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 92F3DB2E68DA79C289D783D08A5B640B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 72936DF7F0D500F45254D546F0C57A54 /* NSArray+RoboKit.m in Sources */, + DD8358A6AFFEFA7C875FC8A328D73FB9 /* NSData+Base64.m in Sources */, + FCA2B8990CEB6D59315150BC42D0A55A /* NSData+RoboKit.m in Sources */, + C315FC32937A690655B233C9F4709497 /* NSDate+Holidays.m in Sources */, + 702AD81FCCE49EE8A4317B779750FDC6 /* NSDate+RoboKit.m in Sources */, + 90B079D8D82F5E9F57809B1EA1FA73ED /* NSDate-Utilities.m in Sources */, + AB5E3F783365A229D6F19687D2C04D71 /* NSMutableArray+RoboKit.m in Sources */, + 42CA514C4141C00057D54F77ED3F3791 /* NSObject+CancelableScheduledBlock.m in Sources */, + 315CA17C5B4692C2D63108ABE6BC4011 /* NSString+CSV.m in Sources */, + 808ECA91602EA99CC1833934010F62DC /* NSString+RoboKit.m in Sources */, + 482E0B9AA14A791313F67B11B65BC561 /* RBKHTTPStatusCodes.m in Sources */, + 92E98172291A1EB8453B145DB892E103 /* RoboKit-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A4833FE0757A2283ADDDD451CFAFF4FA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 942F6FFAB5E2975971EAB490975A42B1 /* MASShortcut+Monitoring.m in Sources */, + 34D32984A6A1E21800390182550FA541 /* MASShortcut+UserDefaults.m in Sources */, + C3317D19F5C68E39005FFF02E86B28D3 /* MASShortcut-dummy.m in Sources */, + 9AAF17544C91F487BE6D7BFC81AC3D3A /* MASShortcut.m in Sources */, + 46BC1BB94F11EBF86027D27985941605 /* MASShortcutView+UserDefaults.m in Sources */, + D7352F8FB7F84ED6B55BCE2841BDCF8E /* MASShortcutView.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E83B6EF285E28EBC8D7B477D734AF943 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 95C97DD4E42DFBB234E53DEB1EE7CBE5 /* EXTRuntimeExtensions.m in Sources */, + AF8848D8707EBE3586A0EBD8583F797A /* libextobjc-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 41965A51DE371053069F558B00880137 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RoboKit; + target = 8CB09AE374A98F5F317AA93056C66034 /* RoboKit */; + targetProxy = 138A8ED45FC59E15BF9A1BE313B2B8C0 /* PBXContainerItemProxy */; + }; + 4E22988FCE3E33E089A17473D297452E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = libextobjc; + target = 3BFCBF556A84B3DE1046A6CD92479A43 /* libextobjc */; + targetProxy = 3AAC04F8DD28018B69F8B55807904856 /* PBXContainerItemProxy */; + }; + 565D9A1390C15D2CDF3148CBD2B10B5F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = libextobjc; + target = 3BFCBF556A84B3DE1046A6CD92479A43 /* libextobjc */; + targetProxy = 4DE67A40BA4D3D84216DF45A640B8D29 /* PBXContainerItemProxy */; + }; + 6B7C7B87592FAA46C03A7CD68E270941 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RoboKit; + target = 8CB09AE374A98F5F317AA93056C66034 /* RoboKit */; + targetProxy = 237F2668392A83AE62276C9863348875 /* PBXContainerItemProxy */; + }; + 8A53107D34DF7938C11C28A319FCF27B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = pop; + target = 0BFAD44192724552163997EC96EDCFD6 /* pop */; + targetProxy = CF61E61A938EF8AF7DFE4F069AF47192 /* PBXContainerItemProxy */; + }; + A10035AC941A6E623E5438927FF7A5DB /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = MASShortcut; + target = 302CAABB27975081B37358129270BD41 /* MASShortcut */; + targetProxy = EC636EE6B059B8035D31CDFF4A5A0326 /* PBXContainerItemProxy */; + }; + ACE31309B51369B67DB6F157E8D4B766 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = MASShortcut; + target = 302CAABB27975081B37358129270BD41 /* MASShortcut */; + targetProxy = 5D3799AF32C4EA13F1897801CB5C3A8B /* PBXContainerItemProxy */; + }; + BA754231A3EC3616CB896EA333E7F53E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = pop; + target = 0BFAD44192724552163997EC96EDCFD6 /* pop */; + targetProxy = C6AFD9B346176F908FAC6216F995D03F /* PBXContainerItemProxy */; + }; + D6A3384339E62F521B33DFDF3ABB54E3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = OCMock; + target = CEF5C67696B324D8C9B2B33E9DF57554 /* OCMock */; + targetProxy = 63D3741A302848AA3C7919C3DC19BF6F /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 0DE9ECD22E724B017B7EAE33D56F7CEC /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A4D0E7B237D650BE49759F0EE14CF8A5 /* libextobjc-Private.xcconfig */; + buildSettings = { + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_PREFIX_HEADER = "Target Support Files/libextobjc/libextobjc-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = Release; + }; + 11CF4CE6ADA553FA123EBB81D4E72E50 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2A8CF4BBA908153ECA67666196E67AAC /* Pods-JeffTests.debug.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 1E621D6BF749EDCE77ACBE7C6D464E29 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + ONLY_ACTIVE_ARCH = YES; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + 3FACBE82C0282867FFF4958B9B8B4993 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5B4716C7F7BAF3C6AAB1852DB822BA00 /* pop-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_PREFIX_HEADER = "Target Support Files/pop/pop-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = Debug; + }; + 5577A3F22A37686E40DB6863D68D476C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = "RELEASE=1"; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 5E1A0B7507ACF6870944E3926EC9BAB1 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 318FB3241BB3D57939FDAF783E4EECA0 /* Pods.release.xcconfig */; + buildSettings = { + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 5E7DCB936E18D59CCA44943995630B28 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5B4716C7F7BAF3C6AAB1852DB822BA00 /* pop-Private.xcconfig */; + buildSettings = { + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_PREFIX_HEADER = "Target Support Files/pop/pop-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = Release; + }; + 60B508C5EB54D81D5486856A5162523E /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 275791B6FA5ADED806A636091090356F /* MASShortcut-Private.xcconfig */; + buildSettings = { + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_PREFIX_HEADER = "Target Support Files/MASShortcut/MASShortcut-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = Release; + }; + 745A577E35678E836D69CD9E64C1B2BB /* Beta Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3D66D964DE780C0D3203F31F851C6504 /* OCMock-Private.xcconfig */; + buildSettings = { + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_PREFIX_HEADER = "Target Support Files/OCMock/OCMock-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = "Beta Release"; + }; + 7AA318C16AF5BAB9E0D0125D26A43BE4 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3D66D964DE780C0D3203F31F851C6504 /* OCMock-Private.xcconfig */; + buildSettings = { + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_PREFIX_HEADER = "Target Support Files/OCMock/OCMock-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = Release; + }; + 842E7AA740F50F846020FEB7266B064C /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C48D904023CDFEA3D67BB1A13F974C7B /* Pods-JeffTests.release.xcconfig */; + buildSettings = { + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 857171564D99E07048763EA484531A91 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9D33B622994747548AF8278AF883B1F8 /* RoboKit-Private.xcconfig */; + buildSettings = { + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_PREFIX_HEADER = "Target Support Files/RoboKit/RoboKit-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = Release; + }; + 9087ECBB65808CBBB069AE1BB767ED8C /* Beta Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5B4716C7F7BAF3C6AAB1852DB822BA00 /* pop-Private.xcconfig */; + buildSettings = { + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_PREFIX_HEADER = "Target Support Files/pop/pop-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = "Beta Release"; + }; + 9804B7F5342771AA9855CEF24F7A2F93 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9D33B622994747548AF8278AF883B1F8 /* RoboKit-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_PREFIX_HEADER = "Target Support Files/RoboKit/RoboKit-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = Debug; + }; + 9A4B2593F6426EB2467F22B4480107EF /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A4D0E7B237D650BE49759F0EE14CF8A5 /* libextobjc-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_PREFIX_HEADER = "Target Support Files/libextobjc/libextobjc-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = Debug; + }; + A07E7C1E574D7EE3EF47B0DEB20D2D1A /* Beta Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A4D0E7B237D650BE49759F0EE14CF8A5 /* libextobjc-Private.xcconfig */; + buildSettings = { + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_PREFIX_HEADER = "Target Support Files/libextobjc/libextobjc-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = "Beta Release"; + }; + C1B2137FC0D7E6863F4D3CDBA13AB0AC /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 275791B6FA5ADED806A636091090356F /* MASShortcut-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_PREFIX_HEADER = "Target Support Files/MASShortcut/MASShortcut-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = Debug; + }; + C30B2CBF7234196C97657B4E0998FAD2 /* Beta Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 13279A823284BC267ED0AFF4E85FF7F3 /* Pods.beta release.xcconfig */; + buildSettings = { + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = "Beta Release"; + }; + C35B7720DF2D23C889C4704A72AAC1B0 /* Beta Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AB2816BA9A828CBF308D945231C93A49 /* Pods-JeffTests.beta release.xcconfig */; + buildSettings = { + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = "Beta Release"; + }; + D907D2904A20D26C199A8BD9A1732DE7 /* Beta Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 275791B6FA5ADED806A636091090356F /* MASShortcut-Private.xcconfig */; + buildSettings = { + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_PREFIX_HEADER = "Target Support Files/MASShortcut/MASShortcut-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = "Beta Release"; + }; + E1C67719411232A8B1A96ACA75D09929 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 19D53C1FBB544D5D14124E67F8B519B8 /* Pods.debug.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + E502E6A6335DF1DA83C407411A1688D8 /* Beta Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9D33B622994747548AF8278AF883B1F8 /* RoboKit-Private.xcconfig */; + buildSettings = { + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_PREFIX_HEADER = "Target Support Files/RoboKit/RoboKit-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = "Beta Release"; + }; + F23B6337DF7314CD6B8E40B258341C82 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3D66D964DE780C0D3203F31F851C6504 /* OCMock-Private.xcconfig */; + buildSettings = { + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_PREFIX_HEADER = "Target Support Files/OCMock/OCMock-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = Debug; + }; + F91903802AC57064040B4ADDD3FC2278 /* Beta Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = "BETA_RELEASE=1"; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + STRIP_INSTALLED_PRODUCT = NO; + VALIDATE_PRODUCT = YES; + }; + name = "Beta Release"; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F91903802AC57064040B4ADDD3FC2278 /* Beta Release */, + 1E621D6BF749EDCE77ACBE7C6D464E29 /* Debug */, + 5577A3F22A37686E40DB6863D68D476C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33483CD9895E0147EF8DD00EF4205A42 /* Build configuration list for PBXNativeTarget "MASShortcut" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D907D2904A20D26C199A8BD9A1732DE7 /* Beta Release */, + C1B2137FC0D7E6863F4D3CDBA13AB0AC /* Debug */, + 60B508C5EB54D81D5486856A5162523E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 36469BB9D0670EFA123F1F7DFC522915 /* Build configuration list for PBXNativeTarget "pop" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9087ECBB65808CBBB069AE1BB767ED8C /* Beta Release */, + 3FACBE82C0282867FFF4958B9B8B4993 /* Debug */, + 5E7DCB936E18D59CCA44943995630B28 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 473B553AE9CF966F9071B815E8B4BA53 /* Build configuration list for PBXNativeTarget "libextobjc" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A07E7C1E574D7EE3EF47B0DEB20D2D1A /* Beta Release */, + 9A4B2593F6426EB2467F22B4480107EF /* Debug */, + 0DE9ECD22E724B017B7EAE33D56F7CEC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 68404C96668AFA6E25BA1EBC7DDE4122 /* Build configuration list for PBXNativeTarget "OCMock" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 745A577E35678E836D69CD9E64C1B2BB /* Beta Release */, + F23B6337DF7314CD6B8E40B258341C82 /* Debug */, + 7AA318C16AF5BAB9E0D0125D26A43BE4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D979A15CC22F7BEFB0BFC690B837DE98 /* Build configuration list for PBXNativeTarget "RoboKit" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E502E6A6335DF1DA83C407411A1688D8 /* Beta Release */, + 9804B7F5342771AA9855CEF24F7A2F93 /* Debug */, + 857171564D99E07048763EA484531A91 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E9E1ECCAE1D32A89732669B9743AB38E /* Build configuration list for PBXNativeTarget "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C30B2CBF7234196C97657B4E0998FAD2 /* Beta Release */, + E1C67719411232A8B1A96ACA75D09929 /* Debug */, + 5E1A0B7507ACF6870944E3926EC9BAB1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F61CC097E9D636871A14DC42CDE859C5 /* Build configuration list for PBXNativeTarget "Pods-JeffTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C35B7720DF2D23C889C4704A72AAC1B0 /* Beta Release */, + 11CF4CE6ADA553FA123EBB81D4E72E50 /* Debug */, + 842E7AA740F50F846020FEB7266B064C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; +} diff --git a/Pods/RoboKit/Classes/Extensions/NSString+RoboKit.h b/Pods/RoboKit/Classes/Extensions/NSString+RoboKit.h index 144aa88..0f42aa8 100644 --- a/Pods/RoboKit/Classes/Extensions/NSString+RoboKit.h +++ b/Pods/RoboKit/Classes/Extensions/NSString+RoboKit.h @@ -18,10 +18,14 @@ @interface NSString (NSString_RoboKit) -+ (NSString *)RBK_md5HashForString:(NSString *)input; -+ (NSString *)RBK_sha1HashForString:(NSString*)input; ++ (NSString *)RBK_md5HashForString:(NSString *)input; // should not be used for cryptographic purposes ++ (NSString *)RBK_sha1HashForString:(NSString *)input; // should not be used for cryptographic purposes -+ (NSString *)RBK_uuidString; ++ (NSString *)RBK_sha256HashForString:(NSString *)input; ++ (NSString *)RBK_sha384HashForString:(NSString *)input; ++ (NSString *)RBK_sha512HashForString:(NSString *)input; + ++ (NSString *)RBK_uuidString DEPRECATED_ATTRIBUTE; // consider [[NSUUID UUID] UUIDString] for iOS 6+ + (NSString *)RBK_documentsDirectory; + (NSString *)RBK_loremIpsumString; diff --git a/Pods/RoboKit/Classes/Extensions/NSString+RoboKit.m b/Pods/RoboKit/Classes/Extensions/NSString+RoboKit.m index 9be1fdf..09591c2 100644 --- a/Pods/RoboKit/Classes/Extensions/NSString+RoboKit.m +++ b/Pods/RoboKit/Classes/Extensions/NSString+RoboKit.m @@ -36,7 +36,7 @@ + (NSString *)RBK_md5HashForString:(NSString *)input { return [hash lowercaseString]; } -+ (NSString*)RBK_sha1HashForString:(NSString*)input { ++ (NSString *)RBK_sha1HashForString:(NSString *)input { const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding]; NSData *data = [NSData dataWithBytes:cstr length:input.length]; @@ -46,11 +46,58 @@ + (NSString*)RBK_sha1HashForString:(NSString*)input { NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2]; - for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) + for (int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) { [output appendFormat:@"%02x", digest[i]]; + } + return output; +} + ++ (NSString *)RBK_sha256HashForString:(NSString *)input { + const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding]; + NSData *data = [NSData dataWithBytes:cstr length:input.length]; + + uint8_t digest[CC_SHA256_DIGEST_LENGTH]; + + CC_SHA256(data.bytes, (CC_LONG)data.length, digest); + + NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2]; + + for (int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) { + [output appendFormat:@"%02x", digest[i]]; + } + return output; +} + ++ (NSString *)RBK_sha384HashForString:(NSString *)input { + const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding]; + NSData *data = [NSData dataWithBytes:cstr length:input.length]; + + uint8_t digest[CC_SHA384_DIGEST_LENGTH]; + + CC_SHA384(data.bytes, (CC_LONG)data.length, digest); + + NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA384_DIGEST_LENGTH * 2]; + for (int i = 0; i < CC_SHA384_DIGEST_LENGTH; i++) { + [output appendFormat:@"%02x", digest[i]]; + } return output; +} + ++ (NSString *)RBK_sha512HashForString:(NSString *)input { + const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding]; + NSData *data = [NSData dataWithBytes:cstr length:input.length]; + + uint8_t digest[CC_SHA512_DIGEST_LENGTH]; + + CC_SHA512(data.bytes, (CC_LONG)data.length, digest); + NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA512_DIGEST_LENGTH * 2]; + + for (int i = 0; i < CC_SHA512_DIGEST_LENGTH; i++) { + [output appendFormat:@"%02x", digest[i]]; + } + return output; } + (NSString *)RBK_uuidString { diff --git a/Pods/RoboKit/OSX/RBKAppKitUtils.h b/Pods/RoboKit/OSX/RBKAppKitUtils.h index 4f17756..72775dd 100644 --- a/Pods/RoboKit/OSX/RBKAppKitUtils.h +++ b/Pods/RoboKit/OSX/RBKAppKitUtils.h @@ -19,6 +19,8 @@ #import /* - * Check if device is retina + * Check if device is retina or retina HD */ -#define IS_RETINA() ([[NSScreen mainScreen] backingScaleFactor] == 2.0) +#define IS_RETINA() ([[UIScreen mainScreen] scale] == 2.0) +#define IS_RETINA_HD() ([[UIScreen mainScreen] scale] == 3.0) +#define SINGLE_PIXEL_LINE_WIDTH() (1.0 / [[UIScreen mainScreen] scale]) diff --git a/Pods/RoboKit/README.md b/Pods/RoboKit/README.md index f67a3c8..247f38a 100644 --- a/Pods/RoboKit/README.md +++ b/Pods/RoboKit/README.md @@ -9,7 +9,10 @@ RoboKit is collection of categories that we've found useful and potentially reus ### Cocoapods RoboKit is not yet in the cocoapods Add the following to your podfile -`pod 'RoboKit', :git => 'git@github.com:RobotsAndPencils/RoboKit.git'` +``` +source 'git@github.com:RobotsAndPencils/RNPPrivateSpecs.git' +pod 'RoboKit' +``` ### Manual 1. Add RoboKit.xcodeproj to your project diff --git a/Pods/Target Support Files/MASShortcut/MASShortcut-Private.xcconfig b/Pods/Target Support Files/MASShortcut/MASShortcut-Private.xcconfig new file mode 100644 index 0000000..2b1a179 --- /dev/null +++ b/Pods/Target Support Files/MASShortcut/MASShortcut-Private.xcconfig @@ -0,0 +1,6 @@ +#include "MASShortcut.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/MASShortcut" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac/HockeySDK" "${PODS_ROOT}/Headers/Public/MASShortcut" "${PODS_ROOT}/Headers/Public/OCMock" "${PODS_ROOT}/Headers/Public/RoboKit" "${PODS_ROOT}/Headers/Public/libextobjc" "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = ${MASSHORTCUT_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} +SKIP_INSTALL = YES \ No newline at end of file diff --git a/Pods/Target Support Files/MASShortcut/MASShortcut-dummy.m b/Pods/Target Support Files/MASShortcut/MASShortcut-dummy.m new file mode 100644 index 0000000..0757dcc --- /dev/null +++ b/Pods/Target Support Files/MASShortcut/MASShortcut-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_MASShortcut : NSObject +@end +@implementation PodsDummy_MASShortcut +@end diff --git a/Pods/Target Support Files/Pods-HockeySDK-Mac/Pods-HockeySDK-Mac-prefix.pch b/Pods/Target Support Files/MASShortcut/MASShortcut-prefix.pch similarity index 62% rename from Pods/Target Support Files/Pods-HockeySDK-Mac/Pods-HockeySDK-Mac-prefix.pch rename to Pods/Target Support Files/MASShortcut/MASShortcut-prefix.pch index 2e9257c..b9c163b 100644 --- a/Pods/Target Support Files/Pods-HockeySDK-Mac/Pods-HockeySDK-Mac-prefix.pch +++ b/Pods/Target Support Files/MASShortcut/MASShortcut-prefix.pch @@ -2,4 +2,3 @@ #import #endif -#import "Pods-environment.h" diff --git a/Pods/Target Support Files/MASShortcut/MASShortcut.xcconfig b/Pods/Target Support Files/MASShortcut/MASShortcut.xcconfig new file mode 100644 index 0000000..4c71068 --- /dev/null +++ b/Pods/Target Support Files/MASShortcut/MASShortcut.xcconfig @@ -0,0 +1 @@ +MASSHORTCUT_OTHER_LDFLAGS = -framework "Carbon" \ No newline at end of file diff --git a/Pods/Target Support Files/OCMock/OCMock-Private.xcconfig b/Pods/Target Support Files/OCMock/OCMock-Private.xcconfig new file mode 100644 index 0000000..fd25072 --- /dev/null +++ b/Pods/Target Support Files/OCMock/OCMock-Private.xcconfig @@ -0,0 +1,7 @@ +#include "OCMock.xcconfig" +FRAMEWORK_SEARCH_PATHS = ${OCMOCK_FRAMEWORK_SEARCH_PATHS} +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/OCMock" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac/HockeySDK" "${PODS_ROOT}/Headers/Public/MASShortcut" "${PODS_ROOT}/Headers/Public/OCMock" "${PODS_ROOT}/Headers/Public/RoboKit" "${PODS_ROOT}/Headers/Public/libextobjc" "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = ${OCMOCK_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} +SKIP_INSTALL = YES \ No newline at end of file diff --git a/Pods/Target Support Files/OCMock/OCMock-dummy.m b/Pods/Target Support Files/OCMock/OCMock-dummy.m new file mode 100644 index 0000000..7e5d150 --- /dev/null +++ b/Pods/Target Support Files/OCMock/OCMock-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_OCMock : NSObject +@end +@implementation PodsDummy_OCMock +@end diff --git a/Pods/Target Support Files/Pods-MASShortcut/Pods-MASShortcut-prefix.pch b/Pods/Target Support Files/OCMock/OCMock-prefix.pch similarity index 62% rename from Pods/Target Support Files/Pods-MASShortcut/Pods-MASShortcut-prefix.pch rename to Pods/Target Support Files/OCMock/OCMock-prefix.pch index 2e9257c..b9c163b 100644 --- a/Pods/Target Support Files/Pods-MASShortcut/Pods-MASShortcut-prefix.pch +++ b/Pods/Target Support Files/OCMock/OCMock-prefix.pch @@ -2,4 +2,3 @@ #import #endif -#import "Pods-environment.h" diff --git a/Pods/Target Support Files/OCMock/OCMock.xcconfig b/Pods/Target Support Files/OCMock/OCMock.xcconfig new file mode 100644 index 0000000..5ffd82f --- /dev/null +++ b/Pods/Target Support Files/OCMock/OCMock.xcconfig @@ -0,0 +1,2 @@ +OCMOCK_FRAMEWORK_SEARCH_PATHS = $(inherited) "$(DEVELOPER_LIBRARY_DIR)/Frameworks" "$(PLATFORM_DIR)/Developer/Library/Frameworks" +OCMOCK_OTHER_LDFLAGS = -framework "XCTest" \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-HockeySDK-Mac/Pods-HockeySDK-Mac-Private.xcconfig b/Pods/Target Support Files/Pods-HockeySDK-Mac/Pods-HockeySDK-Mac-Private.xcconfig deleted file mode 100644 index cbf1483..0000000 --- a/Pods/Target Support Files/Pods-HockeySDK-Mac/Pods-HockeySDK-Mac-Private.xcconfig +++ /dev/null @@ -1,7 +0,0 @@ -#include "Pods-HockeySDK-Mac.xcconfig" -FRAMEWORK_SEARCH_PATHS = ${PODS_HOCKEYSDK_MAC_FRAMEWORK_SEARCH_PATHS} -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/HockeySDK-Mac" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" "${PODS_ROOT}/Headers/Public/MASShortcut" "${PODS_ROOT}/Headers/Public/RoboKit" "${PODS_ROOT}/Headers/Public/libextobjc" "${PODS_ROOT}/Headers/Public/pop" -LD_RUNPATH_SEARCH_PATHS = ${PODS_HOCKEYSDK_MAC_LD_RUNPATH_SEARCH_PATHS} -OTHER_LDFLAGS = ${PODS_HOCKEYSDK_MAC_OTHER_LDFLAGS} -ObjC -PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-HockeySDK-Mac/Pods-HockeySDK-Mac-dummy.m b/Pods/Target Support Files/Pods-HockeySDK-Mac/Pods-HockeySDK-Mac-dummy.m deleted file mode 100644 index 017e7aa..0000000 --- a/Pods/Target Support Files/Pods-HockeySDK-Mac/Pods-HockeySDK-Mac-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_HockeySDK_Mac : NSObject -@end -@implementation PodsDummy_Pods_HockeySDK_Mac -@end diff --git a/Pods/Target Support Files/Pods-HockeySDK-Mac/Pods-HockeySDK-Mac.xcconfig b/Pods/Target Support Files/Pods-HockeySDK-Mac/Pods-HockeySDK-Mac.xcconfig deleted file mode 100644 index 31158a4..0000000 --- a/Pods/Target Support Files/Pods-HockeySDK-Mac/Pods-HockeySDK-Mac.xcconfig +++ /dev/null @@ -1,3 +0,0 @@ -PODS_HOCKEYSDK_MAC_FRAMEWORK_SEARCH_PATHS = "$(PODS_ROOT)/HockeySDK-Mac/HockeySDK-Mac" -PODS_HOCKEYSDK_MAC_LD_RUNPATH_SEARCH_PATHS = @loader_path/../Frameworks -PODS_HOCKEYSDK_MAC_OTHER_LDFLAGS = -framework "HockeySDK" \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests-acknowledgements.markdown b/Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests-acknowledgements.markdown new file mode 100644 index 0000000..f0c1dc3 --- /dev/null +++ b/Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests-acknowledgements.markdown @@ -0,0 +1,356 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## HockeySDK-Mac + +## Licenses + +The Hockey SDK is provided under the following license: + + The MIT License + Copyright (c) 2012-2014 HockeyApp, Bit Stadium GmbH. + All rights reserved. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + +Except as noted below, PLCrashReporter +is provided under the following license: + + Copyright (c) 2008 - 2014 Plausible Labs Cooperative, Inc. + Copyright (c) 2012 - 2014 HockeyApp, Bit Stadium GmbH. + All rights reserved. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + +The protobuf-c library, as well as the PLCrashLogWriterEncoding.c +file are licensed as follows: + + Copyright 2008, Dave Benson. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with + the License. You may obtain a copy of the License + at http://www.apache.org/licenses/LICENSE-2.0 Unless + required by applicable law or agreed to in writing, + software distributed under the License is distributed on + an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + + +## MASShortcut + +Copyright (c) 2012-2013, Vadim Shpakovski +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +## RoboKit + +Copyright (c) 2012 Robots and Pencils, Inc. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +"RoboKit" is a trademark of Robots and Pencils, Inc. and may not be used to endorse or promote products derived from this software without specific prior written permission. + +Neither the name of the Robots and Pencils, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +## libextobjc + +**Copyright (c) 2012 - 2014 Justin Spahr-Summers** + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +## pop + +BSD License + +For Pop software + +Copyright (c) 2014, Facebook, Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name Facebook nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +## OCMock + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + +Generated by CocoaPods - http://cocoapods.org diff --git a/Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests-acknowledgements.plist b/Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests-acknowledgements.plist new file mode 100644 index 0000000..c959ee9 --- /dev/null +++ b/Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests-acknowledgements.plist @@ -0,0 +1,406 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + ## Licenses + +The Hockey SDK is provided under the following license: + + The MIT License + Copyright (c) 2012-2014 HockeyApp, Bit Stadium GmbH. + All rights reserved. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + +Except as noted below, PLCrashReporter +is provided under the following license: + + Copyright (c) 2008 - 2014 Plausible Labs Cooperative, Inc. + Copyright (c) 2012 - 2014 HockeyApp, Bit Stadium GmbH. + All rights reserved. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + +The protobuf-c library, as well as the PLCrashLogWriterEncoding.c +file are licensed as follows: + + Copyright 2008, Dave Benson. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with + the License. You may obtain a copy of the License + at http://www.apache.org/licenses/LICENSE-2.0 Unless + required by applicable law or agreed to in writing, + software distributed under the License is distributed on + an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + + Title + HockeySDK-Mac + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2012-2013, Vadim Shpakovski +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + Title + MASShortcut + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2012 Robots and Pencils, Inc. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +"RoboKit" is a trademark of Robots and Pencils, Inc. and may not be used to endorse or promote products derived from this software without specific prior written permission. + +Neither the name of the Robots and Pencils, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Title + RoboKit + Type + PSGroupSpecifier + + + FooterText + **Copyright (c) 2012 - 2014 Justin Spahr-Summers** + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Title + libextobjc + Type + PSGroupSpecifier + + + FooterText + BSD License + +For Pop software + +Copyright (c) 2014, Facebook, Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name Facebook nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + Title + pop + Type + PSGroupSpecifier + + + FooterText + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Title + OCMock + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - http://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests-dummy.m b/Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests-dummy.m new file mode 100644 index 0000000..982f51b --- /dev/null +++ b/Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_JeffTests : NSObject +@end +@implementation PodsDummy_Pods_JeffTests +@end diff --git a/Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests-resources.sh b/Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests-resources.sh new file mode 100755 index 0000000..03a0a72 --- /dev/null +++ b/Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests-resources.sh @@ -0,0 +1,104 @@ +#!/bin/sh +set -e + +mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +realpath() { + DIRECTORY="$(cd "${1%/*}" && pwd)" + FILENAME="${1##*/}" + echo "$DIRECTORY/$FILENAME" +} + +install_resource() +{ + case $1 in + *.storyboard) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" + ;; + *.xib) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" + ;; + *.framework) + echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" + xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" + xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm\"" + xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE=$(realpath "${PODS_ROOT}/$1") + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + /*) + echo "$1" + echo "$1" >> "$RESOURCES_TO_COPY" + ;; + *) + echo "${PODS_ROOT}/$1" + echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" + ;; + esac +} +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_resource "HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_resource "HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework" +fi +if [[ "$CONFIGURATION" == "Beta Release" ]]; then + install_resource "HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework" +fi + +mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +then + case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; + esac + + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "`realpath $PODS_ROOT`*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests.beta release.xcconfig b/Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests.beta release.xcconfig new file mode 100644 index 0000000..3422a15 --- /dev/null +++ b/Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests.beta release.xcconfig @@ -0,0 +1,9 @@ +CLANG_CXX_LANGUAGE_STANDARD = c++11 +CLANG_CXX_LIBRARY = libc++ +FRAMEWORK_SEARCH_PATHS = "$(PODS_ROOT)/HockeySDK-Mac/HockeySDK-Mac" $(inherited) "$(DEVELOPER_LIBRARY_DIR)/Frameworks" "$(PLATFORM_DIR)/Developer/Library/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac/HockeySDK" "${PODS_ROOT}/Headers/Public/MASShortcut" "${PODS_ROOT}/Headers/Public/OCMock" "${PODS_ROOT}/Headers/Public/RoboKit" "${PODS_ROOT}/Headers/Public/libextobjc" "${PODS_ROOT}/Headers/Public/pop" +LD_RUNPATH_SEARCH_PATHS = @executable_path/../Frameworks +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" -isystem "${PODS_ROOT}/Headers/Public/HockeySDK-Mac/HockeySDK" -isystem "${PODS_ROOT}/Headers/Public/MASShortcut" -isystem "${PODS_ROOT}/Headers/Public/OCMock" -isystem "${PODS_ROOT}/Headers/Public/RoboKit" -isystem "${PODS_ROOT}/Headers/Public/libextobjc" -isystem "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"MASShortcut" -l"OCMock" -l"RoboKit" -l"c++" -l"libextobjc" -l"pop" -framework "Carbon" -framework "Cocoa" -framework "Foundation" -framework "HockeySDK" -framework "XCTest" +PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests.debug.xcconfig b/Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests.debug.xcconfig new file mode 100644 index 0000000..3422a15 --- /dev/null +++ b/Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests.debug.xcconfig @@ -0,0 +1,9 @@ +CLANG_CXX_LANGUAGE_STANDARD = c++11 +CLANG_CXX_LIBRARY = libc++ +FRAMEWORK_SEARCH_PATHS = "$(PODS_ROOT)/HockeySDK-Mac/HockeySDK-Mac" $(inherited) "$(DEVELOPER_LIBRARY_DIR)/Frameworks" "$(PLATFORM_DIR)/Developer/Library/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac/HockeySDK" "${PODS_ROOT}/Headers/Public/MASShortcut" "${PODS_ROOT}/Headers/Public/OCMock" "${PODS_ROOT}/Headers/Public/RoboKit" "${PODS_ROOT}/Headers/Public/libextobjc" "${PODS_ROOT}/Headers/Public/pop" +LD_RUNPATH_SEARCH_PATHS = @executable_path/../Frameworks +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" -isystem "${PODS_ROOT}/Headers/Public/HockeySDK-Mac/HockeySDK" -isystem "${PODS_ROOT}/Headers/Public/MASShortcut" -isystem "${PODS_ROOT}/Headers/Public/OCMock" -isystem "${PODS_ROOT}/Headers/Public/RoboKit" -isystem "${PODS_ROOT}/Headers/Public/libextobjc" -isystem "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"MASShortcut" -l"OCMock" -l"RoboKit" -l"c++" -l"libextobjc" -l"pop" -framework "Carbon" -framework "Cocoa" -framework "Foundation" -framework "HockeySDK" -framework "XCTest" +PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests.release.xcconfig b/Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests.release.xcconfig new file mode 100644 index 0000000..3422a15 --- /dev/null +++ b/Pods/Target Support Files/Pods-JeffTests/Pods-JeffTests.release.xcconfig @@ -0,0 +1,9 @@ +CLANG_CXX_LANGUAGE_STANDARD = c++11 +CLANG_CXX_LIBRARY = libc++ +FRAMEWORK_SEARCH_PATHS = "$(PODS_ROOT)/HockeySDK-Mac/HockeySDK-Mac" $(inherited) "$(DEVELOPER_LIBRARY_DIR)/Frameworks" "$(PLATFORM_DIR)/Developer/Library/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac/HockeySDK" "${PODS_ROOT}/Headers/Public/MASShortcut" "${PODS_ROOT}/Headers/Public/OCMock" "${PODS_ROOT}/Headers/Public/RoboKit" "${PODS_ROOT}/Headers/Public/libextobjc" "${PODS_ROOT}/Headers/Public/pop" +LD_RUNPATH_SEARCH_PATHS = @executable_path/../Frameworks +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" -isystem "${PODS_ROOT}/Headers/Public/HockeySDK-Mac/HockeySDK" -isystem "${PODS_ROOT}/Headers/Public/MASShortcut" -isystem "${PODS_ROOT}/Headers/Public/OCMock" -isystem "${PODS_ROOT}/Headers/Public/RoboKit" -isystem "${PODS_ROOT}/Headers/Public/libextobjc" -isystem "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"MASShortcut" -l"OCMock" -l"RoboKit" -l"c++" -l"libextobjc" -l"pop" -framework "Carbon" -framework "Cocoa" -framework "Foundation" -framework "HockeySDK" -framework "XCTest" +PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-MASShortcut/Pods-MASShortcut-Private.xcconfig b/Pods/Target Support Files/Pods-MASShortcut/Pods-MASShortcut-Private.xcconfig deleted file mode 100644 index 84931b9..0000000 --- a/Pods/Target Support Files/Pods-MASShortcut/Pods-MASShortcut-Private.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -#include "Pods-MASShortcut.xcconfig" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/MASShortcut" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" "${PODS_ROOT}/Headers/Public/MASShortcut" "${PODS_ROOT}/Headers/Public/RoboKit" "${PODS_ROOT}/Headers/Public/libextobjc" "${PODS_ROOT}/Headers/Public/pop" -OTHER_LDFLAGS = ${PODS_MASSHORTCUT_OTHER_LDFLAGS} -ObjC -PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-MASShortcut/Pods-MASShortcut-dummy.m b/Pods/Target Support Files/Pods-MASShortcut/Pods-MASShortcut-dummy.m deleted file mode 100644 index d28b54d..0000000 --- a/Pods/Target Support Files/Pods-MASShortcut/Pods-MASShortcut-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_MASShortcut : NSObject -@end -@implementation PodsDummy_Pods_MASShortcut -@end diff --git a/Pods/Target Support Files/Pods-MASShortcut/Pods-MASShortcut.xcconfig b/Pods/Target Support Files/Pods-MASShortcut/Pods-MASShortcut.xcconfig deleted file mode 100644 index aa05bfa..0000000 --- a/Pods/Target Support Files/Pods-MASShortcut/Pods-MASShortcut.xcconfig +++ /dev/null @@ -1 +0,0 @@ -PODS_MASSHORTCUT_OTHER_LDFLAGS = -framework "Carbon" \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-RoboKit/Pods-RoboKit-Private.xcconfig b/Pods/Target Support Files/Pods-RoboKit/Pods-RoboKit-Private.xcconfig deleted file mode 100644 index bb88e4c..0000000 --- a/Pods/Target Support Files/Pods-RoboKit/Pods-RoboKit-Private.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -#include "Pods-RoboKit.xcconfig" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/RoboKit" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" "${PODS_ROOT}/Headers/Public/MASShortcut" "${PODS_ROOT}/Headers/Public/RoboKit" "${PODS_ROOT}/Headers/Public/libextobjc" "${PODS_ROOT}/Headers/Public/pop" -OTHER_LDFLAGS = ${PODS_ROBOKIT_OTHER_LDFLAGS} -ObjC -PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-RoboKit/Pods-RoboKit-dummy.m b/Pods/Target Support Files/Pods-RoboKit/Pods-RoboKit-dummy.m deleted file mode 100644 index fb099b3..0000000 --- a/Pods/Target Support Files/Pods-RoboKit/Pods-RoboKit-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_RoboKit : NSObject -@end -@implementation PodsDummy_Pods_RoboKit -@end diff --git a/Pods/Target Support Files/Pods-RoboKit/Pods-RoboKit.xcconfig b/Pods/Target Support Files/Pods-RoboKit/Pods-RoboKit.xcconfig deleted file mode 100644 index 8079a23..0000000 --- a/Pods/Target Support Files/Pods-RoboKit/Pods-RoboKit.xcconfig +++ /dev/null @@ -1 +0,0 @@ -PODS_ROBOKIT_OTHER_LDFLAGS = -framework "Cocoa" -framework "Foundation" \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-libextobjc/Pods-libextobjc-Private.xcconfig b/Pods/Target Support Files/Pods-libextobjc/Pods-libextobjc-Private.xcconfig deleted file mode 100644 index af7bee6..0000000 --- a/Pods/Target Support Files/Pods-libextobjc/Pods-libextobjc-Private.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -#include "Pods-libextobjc.xcconfig" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/libextobjc" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" "${PODS_ROOT}/Headers/Public/MASShortcut" "${PODS_ROOT}/Headers/Public/RoboKit" "${PODS_ROOT}/Headers/Public/libextobjc" "${PODS_ROOT}/Headers/Public/pop" -OTHER_LDFLAGS = -ObjC -PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-libextobjc/Pods-libextobjc-dummy.m b/Pods/Target Support Files/Pods-libextobjc/Pods-libextobjc-dummy.m deleted file mode 100644 index 8eecff1..0000000 --- a/Pods/Target Support Files/Pods-libextobjc/Pods-libextobjc-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_libextobjc : NSObject -@end -@implementation PodsDummy_Pods_libextobjc -@end diff --git a/Pods/Target Support Files/Pods-pop/Pods-pop-Private.xcconfig b/Pods/Target Support Files/Pods-pop/Pods-pop-Private.xcconfig deleted file mode 100644 index 1308760..0000000 --- a/Pods/Target Support Files/Pods-pop/Pods-pop-Private.xcconfig +++ /dev/null @@ -1,7 +0,0 @@ -#include "Pods-pop.xcconfig" -CLANG_CXX_LANGUAGE_STANDARD = ${PODS_POP_CLANG_CXX_LANGUAGE_STANDARD} -CLANG_CXX_LIBRARY = ${PODS_POP_CLANG_CXX_LIBRARY} -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/pop" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" "${PODS_ROOT}/Headers/Public/MASShortcut" "${PODS_ROOT}/Headers/Public/RoboKit" "${PODS_ROOT}/Headers/Public/libextobjc" "${PODS_ROOT}/Headers/Public/pop" -OTHER_LDFLAGS = ${PODS_POP_OTHER_LDFLAGS} -ObjC -PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-pop/Pods-pop-dummy.m b/Pods/Target Support Files/Pods-pop/Pods-pop-dummy.m deleted file mode 100644 index d07c34b..0000000 --- a/Pods/Target Support Files/Pods-pop/Pods-pop-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_pop : NSObject -@end -@implementation PodsDummy_Pods_pop -@end diff --git a/Pods/Target Support Files/Pods-pop/Pods-pop-prefix.pch b/Pods/Target Support Files/Pods-pop/Pods-pop-prefix.pch deleted file mode 100644 index 2e9257c..0000000 --- a/Pods/Target Support Files/Pods-pop/Pods-pop-prefix.pch +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __OBJC__ -#import -#endif - -#import "Pods-environment.h" diff --git a/Pods/Target Support Files/Pods-pop/Pods-pop.xcconfig b/Pods/Target Support Files/Pods-pop/Pods-pop.xcconfig deleted file mode 100644 index 40e5d19..0000000 --- a/Pods/Target Support Files/Pods-pop/Pods-pop.xcconfig +++ /dev/null @@ -1,3 +0,0 @@ -PODS_POP_CLANG_CXX_LANGUAGE_STANDARD = c++11 -PODS_POP_CLANG_CXX_LIBRARY = libc++ -PODS_POP_OTHER_LDFLAGS = -l"c++" \ No newline at end of file diff --git a/Pods/Target Support Files/Pods/Pods-environment.h b/Pods/Target Support Files/Pods/Pods-environment.h deleted file mode 100644 index 77281a4..0000000 --- a/Pods/Target Support Files/Pods/Pods-environment.h +++ /dev/null @@ -1,44 +0,0 @@ - -// To check if a library is compiled with CocoaPods you -// can use the `COCOAPODS` macro definition which is -// defined in the xcconfigs so it is available in -// headers also when they are imported in the client -// project. - - -// HockeySDK-Mac -#define COCOAPODS_POD_AVAILABLE_HockeySDK_Mac -#define COCOAPODS_VERSION_MAJOR_HockeySDK_Mac 2 -#define COCOAPODS_VERSION_MINOR_HockeySDK_Mac 1 -#define COCOAPODS_VERSION_PATCH_HockeySDK_Mac 0 - -// MASShortcut -#define COCOAPODS_POD_AVAILABLE_MASShortcut -#define COCOAPODS_VERSION_MAJOR_MASShortcut 1 -#define COCOAPODS_VERSION_MINOR_MASShortcut 2 -#define COCOAPODS_VERSION_PATCH_MASShortcut 3 - -// RoboKit -#define COCOAPODS_POD_AVAILABLE_RoboKit -#define COCOAPODS_VERSION_MAJOR_RoboKit 0 -#define COCOAPODS_VERSION_MINOR_RoboKit 3 -#define COCOAPODS_VERSION_PATCH_RoboKit 3 - -// libextobjc/EXTKeyPathCoding -#define COCOAPODS_POD_AVAILABLE_libextobjc_EXTKeyPathCoding -#define COCOAPODS_VERSION_MAJOR_libextobjc_EXTKeyPathCoding 0 -#define COCOAPODS_VERSION_MINOR_libextobjc_EXTKeyPathCoding 4 -#define COCOAPODS_VERSION_PATCH_libextobjc_EXTKeyPathCoding 1 - -// libextobjc/RuntimeExtensions -#define COCOAPODS_POD_AVAILABLE_libextobjc_RuntimeExtensions -#define COCOAPODS_VERSION_MAJOR_libextobjc_RuntimeExtensions 0 -#define COCOAPODS_VERSION_MINOR_libextobjc_RuntimeExtensions 4 -#define COCOAPODS_VERSION_PATCH_libextobjc_RuntimeExtensions 1 - -// pop -#define COCOAPODS_POD_AVAILABLE_pop -#define COCOAPODS_VERSION_MAJOR_pop 1 -#define COCOAPODS_VERSION_MINOR_pop 0 -#define COCOAPODS_VERSION_PATCH_pop 7 - diff --git a/Pods/Target Support Files/Pods/Pods-resources.sh b/Pods/Target Support Files/Pods/Pods-resources.sh index beca66a..03a0a72 100755 --- a/Pods/Target Support Files/Pods/Pods-resources.sh +++ b/Pods/Target Support Files/Pods/Pods-resources.sh @@ -6,6 +6,14 @@ mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt > "$RESOURCES_TO_COPY" +XCASSET_FILES=() + +realpath() { + DIRECTORY="$(cd "${1%/*}" && pwd)" + FILENAME="${1##*/}" + echo "$DIRECTORY/$FILENAME" +} + install_resource() { case $1 in @@ -14,7 +22,7 @@ install_resource() ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" ;; *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" ;; *.framework) @@ -31,7 +39,13 @@ install_resource() echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" ;; + *.xcmappingmodel) + echo "xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm\"" + xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm" + ;; *.xcassets) + ABSOLUTE_XCASSET_FILE=$(realpath "${PODS_ROOT}/$1") + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") ;; /*) echo "$1" @@ -43,15 +57,25 @@ install_resource() ;; esac } - install_resource "HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework" - +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_resource "HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_resource "HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework" +fi +if [[ "$CONFIGURATION" == "Beta Release" ]]; then + install_resource "HockeySDK-Mac/HockeySDK-Mac/HockeySDK.framework" +fi + +mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" if [[ "${ACTION}" == "install" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ `find . -name '*.xcassets' | wc -l` -ne 0 ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] then case "${TARGETED_DEVICE_FAMILY}" in 1,2) @@ -67,5 +91,14 @@ then TARGET_DEVICE_ARGS="--target-device mac" ;; esac - find "${PWD}" -name "*.xcassets" -print0 | xargs -0 actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "`realpath $PODS_ROOT`*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" fi diff --git a/Pods/Target Support Files/Pods/Pods.beta release.xcconfig b/Pods/Target Support Files/Pods/Pods.beta release.xcconfig index dec0d59..427faf2 100644 --- a/Pods/Target Support Files/Pods/Pods.beta release.xcconfig +++ b/Pods/Target Support Files/Pods/Pods.beta release.xcconfig @@ -2,9 +2,8 @@ CLANG_CXX_LANGUAGE_STANDARD = c++11 CLANG_CXX_LIBRARY = libc++ FRAMEWORK_SEARCH_PATHS = "$(PODS_ROOT)/HockeySDK-Mac/HockeySDK-Mac" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" "${PODS_ROOT}/Headers/Public/MASShortcut" "${PODS_ROOT}/Headers/Public/RoboKit" "${PODS_ROOT}/Headers/Public/libextobjc" "${PODS_ROOT}/Headers/Public/pop" -LD_RUNPATH_SEARCH_PATHS = @loader_path/../Frameworks -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" -isystem "${PODS_ROOT}/Headers/Public/MASShortcut" -isystem "${PODS_ROOT}/Headers/Public/RoboKit" -isystem "${PODS_ROOT}/Headers/Public/libextobjc" -isystem "${PODS_ROOT}/Headers/Public/pop" -OTHER_LDFLAGS = -ObjC -l"Pods-HockeySDK-Mac" -l"Pods-MASShortcut" -l"Pods-RoboKit" -l"Pods-libextobjc" -l"Pods-pop" -l"c++" -framework "Carbon" -framework "Cocoa" -framework "Foundation" -framework "HockeySDK" -OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac/HockeySDK" "${PODS_ROOT}/Headers/Public/MASShortcut" "${PODS_ROOT}/Headers/Public/OCMock" "${PODS_ROOT}/Headers/Public/RoboKit" "${PODS_ROOT}/Headers/Public/libextobjc" "${PODS_ROOT}/Headers/Public/pop" +LD_RUNPATH_SEARCH_PATHS = @executable_path/../Frameworks +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" -isystem "${PODS_ROOT}/Headers/Public/HockeySDK-Mac/HockeySDK" -isystem "${PODS_ROOT}/Headers/Public/MASShortcut" -isystem "${PODS_ROOT}/Headers/Public/OCMock" -isystem "${PODS_ROOT}/Headers/Public/RoboKit" -isystem "${PODS_ROOT}/Headers/Public/libextobjc" -isystem "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"MASShortcut" -l"RoboKit" -l"c++" -l"libextobjc" -l"pop" -framework "Carbon" -framework "Cocoa" -framework "Foundation" -framework "HockeySDK" PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/Pods/Target Support Files/Pods/Pods.debug.xcconfig b/Pods/Target Support Files/Pods/Pods.debug.xcconfig index dec0d59..427faf2 100644 --- a/Pods/Target Support Files/Pods/Pods.debug.xcconfig +++ b/Pods/Target Support Files/Pods/Pods.debug.xcconfig @@ -2,9 +2,8 @@ CLANG_CXX_LANGUAGE_STANDARD = c++11 CLANG_CXX_LIBRARY = libc++ FRAMEWORK_SEARCH_PATHS = "$(PODS_ROOT)/HockeySDK-Mac/HockeySDK-Mac" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" "${PODS_ROOT}/Headers/Public/MASShortcut" "${PODS_ROOT}/Headers/Public/RoboKit" "${PODS_ROOT}/Headers/Public/libextobjc" "${PODS_ROOT}/Headers/Public/pop" -LD_RUNPATH_SEARCH_PATHS = @loader_path/../Frameworks -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" -isystem "${PODS_ROOT}/Headers/Public/MASShortcut" -isystem "${PODS_ROOT}/Headers/Public/RoboKit" -isystem "${PODS_ROOT}/Headers/Public/libextobjc" -isystem "${PODS_ROOT}/Headers/Public/pop" -OTHER_LDFLAGS = -ObjC -l"Pods-HockeySDK-Mac" -l"Pods-MASShortcut" -l"Pods-RoboKit" -l"Pods-libextobjc" -l"Pods-pop" -l"c++" -framework "Carbon" -framework "Cocoa" -framework "Foundation" -framework "HockeySDK" -OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac/HockeySDK" "${PODS_ROOT}/Headers/Public/MASShortcut" "${PODS_ROOT}/Headers/Public/OCMock" "${PODS_ROOT}/Headers/Public/RoboKit" "${PODS_ROOT}/Headers/Public/libextobjc" "${PODS_ROOT}/Headers/Public/pop" +LD_RUNPATH_SEARCH_PATHS = @executable_path/../Frameworks +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" -isystem "${PODS_ROOT}/Headers/Public/HockeySDK-Mac/HockeySDK" -isystem "${PODS_ROOT}/Headers/Public/MASShortcut" -isystem "${PODS_ROOT}/Headers/Public/OCMock" -isystem "${PODS_ROOT}/Headers/Public/RoboKit" -isystem "${PODS_ROOT}/Headers/Public/libextobjc" -isystem "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"MASShortcut" -l"RoboKit" -l"c++" -l"libextobjc" -l"pop" -framework "Carbon" -framework "Cocoa" -framework "Foundation" -framework "HockeySDK" PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/Pods/Target Support Files/Pods/Pods.release.xcconfig b/Pods/Target Support Files/Pods/Pods.release.xcconfig index dec0d59..427faf2 100644 --- a/Pods/Target Support Files/Pods/Pods.release.xcconfig +++ b/Pods/Target Support Files/Pods/Pods.release.xcconfig @@ -2,9 +2,8 @@ CLANG_CXX_LANGUAGE_STANDARD = c++11 CLANG_CXX_LIBRARY = libc++ FRAMEWORK_SEARCH_PATHS = "$(PODS_ROOT)/HockeySDK-Mac/HockeySDK-Mac" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" "${PODS_ROOT}/Headers/Public/MASShortcut" "${PODS_ROOT}/Headers/Public/RoboKit" "${PODS_ROOT}/Headers/Public/libextobjc" "${PODS_ROOT}/Headers/Public/pop" -LD_RUNPATH_SEARCH_PATHS = @loader_path/../Frameworks -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" -isystem "${PODS_ROOT}/Headers/Public/MASShortcut" -isystem "${PODS_ROOT}/Headers/Public/RoboKit" -isystem "${PODS_ROOT}/Headers/Public/libextobjc" -isystem "${PODS_ROOT}/Headers/Public/pop" -OTHER_LDFLAGS = -ObjC -l"Pods-HockeySDK-Mac" -l"Pods-MASShortcut" -l"Pods-RoboKit" -l"Pods-libextobjc" -l"Pods-pop" -l"c++" -framework "Carbon" -framework "Cocoa" -framework "Foundation" -framework "HockeySDK" -OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac/HockeySDK" "${PODS_ROOT}/Headers/Public/MASShortcut" "${PODS_ROOT}/Headers/Public/OCMock" "${PODS_ROOT}/Headers/Public/RoboKit" "${PODS_ROOT}/Headers/Public/libextobjc" "${PODS_ROOT}/Headers/Public/pop" +LD_RUNPATH_SEARCH_PATHS = @executable_path/../Frameworks +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" -isystem "${PODS_ROOT}/Headers/Public/HockeySDK-Mac/HockeySDK" -isystem "${PODS_ROOT}/Headers/Public/MASShortcut" -isystem "${PODS_ROOT}/Headers/Public/OCMock" -isystem "${PODS_ROOT}/Headers/Public/RoboKit" -isystem "${PODS_ROOT}/Headers/Public/libextobjc" -isystem "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = $(inherited) -ObjC -l"MASShortcut" -l"RoboKit" -l"c++" -l"libextobjc" -l"pop" -framework "Carbon" -framework "Cocoa" -framework "Foundation" -framework "HockeySDK" PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/Pods/Target Support Files/RoboKit/RoboKit-Private.xcconfig b/Pods/Target Support Files/RoboKit/RoboKit-Private.xcconfig new file mode 100644 index 0000000..a5bad22 --- /dev/null +++ b/Pods/Target Support Files/RoboKit/RoboKit-Private.xcconfig @@ -0,0 +1,6 @@ +#include "RoboKit.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/RoboKit" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac/HockeySDK" "${PODS_ROOT}/Headers/Public/MASShortcut" "${PODS_ROOT}/Headers/Public/OCMock" "${PODS_ROOT}/Headers/Public/RoboKit" "${PODS_ROOT}/Headers/Public/libextobjc" "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = ${ROBOKIT_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} +SKIP_INSTALL = YES \ No newline at end of file diff --git a/Pods/Target Support Files/RoboKit/RoboKit-dummy.m b/Pods/Target Support Files/RoboKit/RoboKit-dummy.m new file mode 100644 index 0000000..ede5d15 --- /dev/null +++ b/Pods/Target Support Files/RoboKit/RoboKit-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_RoboKit : NSObject +@end +@implementation PodsDummy_RoboKit +@end diff --git a/Pods/Target Support Files/Pods-RoboKit/Pods-RoboKit-prefix.pch b/Pods/Target Support Files/RoboKit/RoboKit-prefix.pch similarity index 62% rename from Pods/Target Support Files/Pods-RoboKit/Pods-RoboKit-prefix.pch rename to Pods/Target Support Files/RoboKit/RoboKit-prefix.pch index 2e9257c..b9c163b 100644 --- a/Pods/Target Support Files/Pods-RoboKit/Pods-RoboKit-prefix.pch +++ b/Pods/Target Support Files/RoboKit/RoboKit-prefix.pch @@ -2,4 +2,3 @@ #import #endif -#import "Pods-environment.h" diff --git a/Pods/Target Support Files/RoboKit/RoboKit.xcconfig b/Pods/Target Support Files/RoboKit/RoboKit.xcconfig new file mode 100644 index 0000000..d26e339 --- /dev/null +++ b/Pods/Target Support Files/RoboKit/RoboKit.xcconfig @@ -0,0 +1 @@ +ROBOKIT_OTHER_LDFLAGS = -framework "Cocoa" -framework "Foundation" \ No newline at end of file diff --git a/Pods/Target Support Files/libextobjc/libextobjc-Private.xcconfig b/Pods/Target Support Files/libextobjc/libextobjc-Private.xcconfig new file mode 100644 index 0000000..89b2356 --- /dev/null +++ b/Pods/Target Support Files/libextobjc/libextobjc-Private.xcconfig @@ -0,0 +1,5 @@ +#include "libextobjc.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/libextobjc" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac/HockeySDK" "${PODS_ROOT}/Headers/Public/MASShortcut" "${PODS_ROOT}/Headers/Public/OCMock" "${PODS_ROOT}/Headers/Public/RoboKit" "${PODS_ROOT}/Headers/Public/libextobjc" "${PODS_ROOT}/Headers/Public/pop" +PODS_ROOT = ${SRCROOT} +SKIP_INSTALL = YES \ No newline at end of file diff --git a/Pods/Target Support Files/libextobjc/libextobjc-dummy.m b/Pods/Target Support Files/libextobjc/libextobjc-dummy.m new file mode 100644 index 0000000..03e5ced --- /dev/null +++ b/Pods/Target Support Files/libextobjc/libextobjc-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_libextobjc : NSObject +@end +@implementation PodsDummy_libextobjc +@end diff --git a/Pods/Target Support Files/Pods-libextobjc/Pods-libextobjc-prefix.pch b/Pods/Target Support Files/libextobjc/libextobjc-prefix.pch similarity index 62% rename from Pods/Target Support Files/Pods-libextobjc/Pods-libextobjc-prefix.pch rename to Pods/Target Support Files/libextobjc/libextobjc-prefix.pch index 2e9257c..b9c163b 100644 --- a/Pods/Target Support Files/Pods-libextobjc/Pods-libextobjc-prefix.pch +++ b/Pods/Target Support Files/libextobjc/libextobjc-prefix.pch @@ -2,4 +2,3 @@ #import #endif -#import "Pods-environment.h" diff --git a/Pods/Target Support Files/Pods-libextobjc/Pods-libextobjc.xcconfig b/Pods/Target Support Files/libextobjc/libextobjc.xcconfig similarity index 100% rename from Pods/Target Support Files/Pods-libextobjc/Pods-libextobjc.xcconfig rename to Pods/Target Support Files/libextobjc/libextobjc.xcconfig diff --git a/Pods/Target Support Files/pop/pop-Private.xcconfig b/Pods/Target Support Files/pop/pop-Private.xcconfig new file mode 100644 index 0000000..d77c6ed --- /dev/null +++ b/Pods/Target Support Files/pop/pop-Private.xcconfig @@ -0,0 +1,8 @@ +#include "pop.xcconfig" +CLANG_CXX_LANGUAGE_STANDARD = ${POP_CLANG_CXX_LANGUAGE_STANDARD} +CLANG_CXX_LIBRARY = ${POP_CLANG_CXX_LIBRARY} +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/pop" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac" "${PODS_ROOT}/Headers/Public/HockeySDK-Mac/HockeySDK" "${PODS_ROOT}/Headers/Public/MASShortcut" "${PODS_ROOT}/Headers/Public/OCMock" "${PODS_ROOT}/Headers/Public/RoboKit" "${PODS_ROOT}/Headers/Public/libextobjc" "${PODS_ROOT}/Headers/Public/pop" +OTHER_LDFLAGS = ${POP_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} +SKIP_INSTALL = YES \ No newline at end of file diff --git a/Pods/Target Support Files/pop/pop-dummy.m b/Pods/Target Support Files/pop/pop-dummy.m new file mode 100644 index 0000000..19ed261 --- /dev/null +++ b/Pods/Target Support Files/pop/pop-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_pop : NSObject +@end +@implementation PodsDummy_pop +@end diff --git a/Pods/Target Support Files/pop/pop-prefix.pch b/Pods/Target Support Files/pop/pop-prefix.pch new file mode 100644 index 0000000..b9c163b --- /dev/null +++ b/Pods/Target Support Files/pop/pop-prefix.pch @@ -0,0 +1,4 @@ +#ifdef __OBJC__ +#import +#endif + diff --git a/Pods/Target Support Files/pop/pop.xcconfig b/Pods/Target Support Files/pop/pop.xcconfig new file mode 100644 index 0000000..d4a59ed --- /dev/null +++ b/Pods/Target Support Files/pop/pop.xcconfig @@ -0,0 +1,3 @@ +POP_CLANG_CXX_LANGUAGE_STANDARD = c++11 +POP_CLANG_CXX_LIBRARY = libc++ +POP_OTHER_LDFLAGS = -l"c++" \ No newline at end of file diff --git a/Pods/pop/README.md b/Pods/pop/README.md index e8b0215..addb18a 100644 --- a/Pods/pop/README.md +++ b/Pods/pop/README.md @@ -11,6 +11,25 @@ Pop is available on [CocoaPods](http://cocoapods.org). Just add the following to ```ruby pod 'pop', '~> 1.0' ``` + +Bugs are first fixed in master and then made available via a designated release. If you tend to live on the bleeding edge, you can use Pop from master with the following Podfile entry: + +```ruby +pod 'pop', :git => 'https://github.com/facebook/pop.git' +``` + +## Non-CocoaPods Installation + +### iOS 8 Embedded Framework +By adding the project to your project and adding pop.embedded framework to the Embedded Binaries section on the General tab of your app's target, you can set up pop in seconds! This also enables `@import pop` syntax with header modules. + +**Note**: because of some awkward limitations with Xcode, embedded binaries must share the same name as the module and must have `.framework` as an extension. This means that you'll see two pop.frameworks when adding embedded binaries (one for OS X, and one for iOS). You'll need to be sure to add the iOS one, and since this list is populated in order of targets, it's safe to assume it's the second one. You can verify the correct one was chosen by checking the path next to the framework listed: `Debug-iphoneos`. + +![Embedded Binaries](Images/EmbeddedBinaries.png?raw=true) + +**Note 2**: this method does not currently play nicely with workspaces. For some unknown reason, Xcode simply rejects adding pop.framework as an embedded binary when pop.xcodeproj is placed in the workspace. This only works when pop.xcodeproj is added as a subproject to the current target's project. + +### Advanced Alternatively, you can add the project to your workspace and adopt the provided configuration files or manually copy the files under the pop subdirectory into your project. If installing manually, ensure the C++ standard library is also linked by including `-lc++` to your project linker flags. ## Usage @@ -21,6 +40,12 @@ Pop adopts the Core Animation explicit animation programming model. Use by inclu #import ``` +or if you're using the embedded framework: + +```objective-c +@import pop; +``` + ### Start, Stop & Update To start an animation, add it to the object you wish to animate: @@ -143,15 +168,22 @@ pod install Assuming CocoaPods is installed, this will include the necessary OCMock dependency to the unit test targets. +## SceneKit + +Due to SceneKit requiring iOS 8 and OS X 10.9, POP's SceneKit extensions aren't provided out of box. Unfortunately, [weakly linked frameworks](https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html) cannot be used due to issues mentioned in the [Xcode 6.1 Release Notes](https://developer.apple.com/library/ios/releasenotes/DeveloperTools/RN-Xcode/Chapters/xc6_release_notes.html). + +To remedy this, you can easily opt-in to use SceneKit! Simply add this to the Preprocessor Macros section of your Xcode Project: + +``` +POP_USE_SCENEKIT=1 +``` + ## Resources A collection of links to external resources that may prove valuable: * [AGGeometryKit+POP - Animating Quadrilaterals with Pop](https://github.com/hfossli/aggeometrykit-pop) * [Apple – Core Animation Programming Guide](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreAnimation_guide/Introduction/Introduction.html) -* [Codeplease – Bridging the gesture to animation gap](http://codeplease.io/playing-with-pop-ii/) -* [Codeplease – Playing with Pop (iii)](http://codeplease.io/playing-with-pop-iii/) -* [Codeplease – Adding a custom animatable property](http://codeplease.io/playing-with-pop-v/) * [iOS Development Tips – UIScrollView-like deceleration with Pop](http://iosdevtips.co/post/84571595353/replicating-uiscrollviews-deceleration-with-facebook) * [Pop Playground – Repository of Pop animation examples](https://github.com/callmeed/pop-playground) * [Pop Playground 2 – Playing with Facebook's framework](http://victorbaro.com/2014/05/pop-playground-playing-with-facebooks-framework/) @@ -161,6 +193,7 @@ A collection of links to external resources that may prove valuable: * [Tapity Tutorial – Getting Started with Pop](http://tapity.com/tutorial-getting-started-with-pop/) * [Tweaks – Easily adjust parameters for iOS apps in development](https://github.com/facebook/tweaks) * [POP Tutorial in 5 steps](https://github.com/maxmyers/FacebookPop) +* [VBFPopFlatButton – Flat animatable button, using Pop to transition between states](https://github.com/victorBaro/VBFPopFlatButton) ## Contributing See the CONTRIBUTING file for how to help out. diff --git a/Pods/pop/pop/POP.h b/Pods/pop/pop/POP.h index 90f4198..72adba7 100644 --- a/Pods/pop/pop/POP.h +++ b/Pods/pop/pop/POP.h @@ -10,6 +10,8 @@ #ifndef POP_POP_H #define POP_POP_H +#import + #import #import #import @@ -19,10 +21,9 @@ #import #import #import -#import #import +#import #import #import - #endif /* POP_POP_H */ diff --git a/Pods/pop/pop/POPAction.h b/Pods/pop/pop/POPAction.h index a98f394..85cca19 100644 --- a/Pods/pop/pop/POPAction.h +++ b/Pods/pop/pop/POPAction.h @@ -11,6 +11,7 @@ #define POPACTION_H #import + #import #ifdef __cplusplus diff --git a/Pods/pop/pop/POPAnimatableProperty.h b/Pods/pop/pop/POPAnimatableProperty.h index 640b780..1636783 100644 --- a/Pods/pop/pop/POPAnimatableProperty.h +++ b/Pods/pop/pop/POPAnimatableProperty.h @@ -8,8 +8,11 @@ */ #import + #import +#import + @class POPMutableAnimatableProperty; /** @@ -125,6 +128,7 @@ extern NSString * const kPOPShapeLayerStrokeStart; extern NSString * const kPOPShapeLayerStrokeEnd; extern NSString * const kPOPShapeLayerStrokeColor; extern NSString * const kPOPShapeLayerFillColor; +extern NSString * const kPOPShapeLayerLineWidth; /** Common NSLayoutConstraint property names. @@ -188,4 +192,58 @@ extern NSString * const kPOPTabBarBarTintColor; */ extern NSString * const kPOPLabelTextColor; +#else + +/** + Common NSView property names. + */ +extern NSString * const kPOPViewFrame; +extern NSString * const kPOPViewBounds; +extern NSString * const kPOPViewAlphaValue; +extern NSString * const kPOPViewFrameRotation; +extern NSString * const kPOPViewFrameCenterRotation; +extern NSString * const kPOPViewBoundsRotation; + +/** + Common NSWindow property names. + */ +extern NSString * const kPOPWindowFrame; +extern NSString * const kPOPWindowAlphaValue; +extern NSString * const kPOPWindowBackgroundColor; + +#endif + +#if SCENEKIT_SDK_AVAILABLE + +/** + Common SceneKit property names. + */ +extern NSString * const kPOPSCNNodePosition; +extern NSString * const kPOPSCNNodePositionX; +extern NSString * const kPOPSCNNodePositionY; +extern NSString * const kPOPSCNNodePositionZ; +extern NSString * const kPOPSCNNodeTranslation; +extern NSString * const kPOPSCNNodeTranslationX; +extern NSString * const kPOPSCNNodeTranslationY; +extern NSString * const kPOPSCNNodeTranslationZ; +extern NSString * const kPOPSCNNodeRotation; +extern NSString * const kPOPSCNNodeRotationX; +extern NSString * const kPOPSCNNodeRotationY; +extern NSString * const kPOPSCNNodeRotationZ; +extern NSString * const kPOPSCNNodeRotationW; +extern NSString * const kPOPSCNNodeEulerAngles; +extern NSString * const kPOPSCNNodeEulerAnglesX; +extern NSString * const kPOPSCNNodeEulerAnglesY; +extern NSString * const kPOPSCNNodeEulerAnglesZ; +extern NSString * const kPOPSCNNodeOrientation; +extern NSString * const kPOPSCNNodeOrientationX; +extern NSString * const kPOPSCNNodeOrientationY; +extern NSString * const kPOPSCNNodeOrientationZ; +extern NSString * const kPOPSCNNodeOrientationW; +extern NSString * const kPOPSCNNodeScale; +extern NSString * const kPOPSCNNodeScaleX; +extern NSString * const kPOPSCNNodeScaleY; +extern NSString * const kPOPSCNNodeScaleZ; +extern NSString * const kPOPSCNNodeScaleXY; + #endif diff --git a/Pods/pop/pop/POPAnimatableProperty.mm b/Pods/pop/pop/POPAnimatableProperty.mm index 7732465..c8b3130 100644 --- a/Pods/pop/pop/POPAnimatableProperty.mm +++ b/Pods/pop/pop/POPAnimatableProperty.mm @@ -8,18 +8,13 @@ */ #import "POPAnimatableProperty.h" -#import "POPCGUtils.h" -#import "POPAnimationRuntime.h" #import -#import - -#if TARGET_OS_IPHONE -#import -#else -#import -#endif +#import "POPAnimationRuntime.h" +#import "POPCGUtils.h" +#import "POPDefines.h" +#import "POPLayerExtras.h" // common threshold definitions static CGFloat const kPOPThresholdColor = 0.01; @@ -68,10 +63,13 @@ NSString * const kPOPShapeLayerStrokeEnd = @"shapeLayer.strokeEnd"; NSString * const kPOPShapeLayerStrokeColor = @"shapeLayer.strokeColor"; NSString * const kPOPShapeLayerFillColor = @"shapeLayer.fillColor"; +NSString * const kPOPShapeLayerLineWidth = @"shapeLayer.lineWidth"; // NSLayoutConstraint NSString * const kPOPLayoutConstraintConstant = @"layoutConstraint.constant"; +#if TARGET_OS_IPHONE + // UIView NSString * const kPOPViewAlpha = @"view.alpha"; NSString * const kPOPViewBackgroundColor = @"view.backgroundColor"; @@ -107,9 +105,59 @@ // UITabBar NSString * const kPOPTabBarBarTintColor = kPOPNavigationBarBarTintColor; -//UILabel +// UILabel NSString * const kPOPLabelTextColor = @"label.textColor"; +#else + +// NSView +NSString * const kPOPViewFrame = @"view.frame"; +NSString * const kPOPViewBounds = @"view.bounds"; +NSString * const kPOPViewAlphaValue = @"view.alphaValue"; +NSString * const kPOPViewFrameRotation = @"view.frameRotation"; +NSString * const kPOPViewFrameCenterRotation = @"view.frameCenterRotation"; +NSString * const kPOPViewBoundsRotation = @"view.boundsRotation"; + +// NSWindow +NSString * const kPOPWindowFrame = @"window.frame"; +NSString * const kPOPWindowAlphaValue = @"window.alphaValue"; +NSString * const kPOPWindowBackgroundColor = @"window.backgroundColor"; + +#endif + +#if SCENEKIT_SDK_AVAILABLE + +// SceneKit +NSString * const kPOPSCNNodePosition = @"scnode.position"; +NSString * const kPOPSCNNodePositionX = @"scnnode.position.x"; +NSString * const kPOPSCNNodePositionY = @"scnnode.position.y"; +NSString * const kPOPSCNNodePositionZ = @"scnnode.position.z"; +NSString * const kPOPSCNNodeTranslation = @"scnnode.translation"; +NSString * const kPOPSCNNodeTranslationX = @"scnnode.translation.x"; +NSString * const kPOPSCNNodeTranslationY = @"scnnode.translation.y"; +NSString * const kPOPSCNNodeTranslationZ = @"scnnode.translation.z"; +NSString * const kPOPSCNNodeRotation = @"scnnode.rotation"; +NSString * const kPOPSCNNodeRotationX = @"scnnode.rotation.x"; +NSString * const kPOPSCNNodeRotationY = @"scnnode.rotation.y"; +NSString * const kPOPSCNNodeRotationZ = @"scnnode.rotation.z"; +NSString * const kPOPSCNNodeRotationW = @"scnnode.rotation.w"; +NSString * const kPOPSCNNodeEulerAngles = @"scnnode.eulerAngles"; +NSString * const kPOPSCNNodeEulerAnglesX = @"scnnode.eulerAngles.x"; +NSString * const kPOPSCNNodeEulerAnglesY = @"scnnode.eulerAngles.y"; +NSString * const kPOPSCNNodeEulerAnglesZ = @"scnnode.eulerAngles.z"; +NSString * const kPOPSCNNodeOrientation = @"scnnode.orientation"; +NSString * const kPOPSCNNodeOrientationX = @"scnnode.orientation.x"; +NSString * const kPOPSCNNodeOrientationY = @"scnnode.orientation.y"; +NSString * const kPOPSCNNodeOrientationZ = @"scnnode.orientation.z"; +NSString * const kPOPSCNNodeOrientationW = @"scnnode.orientation.w"; +NSString * const kPOPSCNNodeScale = @"scnnode.scale"; +NSString * const kPOPSCNNodeScaleX = @"scnnode.scale.x"; +NSString * const kPOPSCNNodeScaleY = @"scnnode.scale.y"; +NSString * const kPOPSCNNodeScaleZ = @"scnnode.scale.z"; +NSString * const kPOPSCNNodeScaleXY = @"scnnode.scale.xy"; + +#endif + /** State structure internal to static animatable property. */ @@ -489,6 +537,16 @@ kPOPThresholdColor }, + {kPOPShapeLayerLineWidth, + ^(CAShapeLayer *obj, CGFloat values[]) { + values[0] = obj.lineWidth; + }, + ^(CAShapeLayer *obj, const CGFloat values[]) { + obj.lineWidth = values[0]; + }, + 0.01 + }, + {kPOPLayoutConstraintConstant, ^(NSLayoutConstraint *obj, CGFloat values[]) { values[0] = obj.constant; @@ -652,6 +710,381 @@ kPOPThresholdColor }, +#else + + /* NSView */ + + {kPOPViewFrame, + ^(NSView *obj, CGFloat values[]) { + values_from_rect(values, NSRectToCGRect(obj.frame)); + }, + ^(NSView *obj, const CGFloat values[]) { + obj.frame = NSRectFromCGRect(values_to_rect(values)); + }, + kPOPThresholdPoint + }, + + {kPOPViewBounds, + ^(NSView *obj, CGFloat values[]) { + values_from_rect(values, NSRectToCGRect(obj.frame)); + }, + ^(NSView *obj, const CGFloat values[]) { + obj.bounds = NSRectFromCGRect(values_to_rect(values)); + }, + kPOPThresholdPoint + }, + + {kPOPViewAlphaValue, + ^(NSView *obj, CGFloat values[]) { + values[0] = obj.alphaValue; + }, + ^(NSView *obj, const CGFloat values[]) { + obj.alphaValue = values[0]; + }, + kPOPThresholdOpacity + }, + + {kPOPViewFrameRotation, + ^(NSView *obj, CGFloat values[]) { + values[0] = obj.frameRotation; + }, + ^(NSView *obj, const CGFloat values[]) { + obj.frameRotation = values[0]; + }, + kPOPThresholdRotation + }, + + {kPOPViewFrameCenterRotation, + ^(NSView *obj, CGFloat values[]) { + values[0] = obj.frameCenterRotation; + }, + ^(NSView *obj, const CGFloat values[]) { + obj.frameCenterRotation = values[0]; + }, + kPOPThresholdRotation + }, + + {kPOPViewBoundsRotation, + ^(NSView *obj, CGFloat values[]) { + values[0] = obj.boundsRotation; + }, + ^(NSView *obj, const CGFloat values[]) { + obj.boundsRotation = values[0]; + }, + kPOPThresholdRotation + }, + + /* NSWindow */ + + {kPOPWindowFrame, + ^(NSWindow *obj, CGFloat values[]) { + values_from_rect(values, NSRectToCGRect(obj.frame)); + }, + ^(NSWindow *obj, const CGFloat values[]) { + [obj setFrame:NSRectFromCGRect(values_to_rect(values)) display:YES]; + }, + kPOPThresholdPoint + }, + + {kPOPWindowAlphaValue, + ^(NSWindow *obj, CGFloat values[]) { + values[0] = obj.alphaValue; + }, + ^(NSWindow *obj, const CGFloat values[]) { + obj.alphaValue = values[0]; + }, + kPOPThresholdOpacity + }, + + {kPOPWindowBackgroundColor, + ^(NSWindow *obj, CGFloat values[]) { + POPNSColorGetRGBAComponents(obj.backgroundColor, values); + }, + ^(NSWindow *obj, const CGFloat values[]) { + obj.backgroundColor = POPNSColorRGBACreate(values); + }, + kPOPThresholdColor + }, + +#endif + +#if SCENEKIT_SDK_AVAILABLE + + /* SceneKit */ + + {kPOPSCNNodePosition, + ^(SCNNode *obj, CGFloat values[]) { + values_from_vec3(values, obj.position); + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.position = values_to_vec3(values); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodePositionX, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.position.x; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.position = SCNVector3Make(values[0], obj.position.y, obj.position.z); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodePositionY, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.position.y; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.position = SCNVector3Make(obj.position.x, values[0], obj.position.z); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodePositionZ, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.position.z; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.position = SCNVector3Make(obj.position.x, obj.position.y, values[0]); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeTranslation, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.transform.m41; + values[1] = obj.transform.m42; + values[2] = obj.transform.m43; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.transform = SCNMatrix4MakeTranslation(values[0], values[1], values[2]); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeTranslationX, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.transform.m41; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.transform = SCNMatrix4MakeTranslation(values[0], obj.transform.m42, obj.transform.m43); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeTranslationY, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.transform.m42; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.transform = SCNMatrix4MakeTranslation(obj.transform.m41, values[0], obj.transform.m43); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeTranslationY, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.transform.m43; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.transform = SCNMatrix4MakeTranslation(obj.transform.m41, obj.transform.m42, values[0]); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeRotation, + ^(SCNNode *obj, CGFloat values[]) { + values_from_vec4(values, obj.rotation); + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.rotation = values_to_vec4(values); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeRotationX, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.rotation.x; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.rotation = SCNVector4Make(1.0, obj.rotation.y, obj.rotation.z, values[0]); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeRotationY, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.rotation.y; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.rotation = SCNVector4Make(obj.rotation.x, 1.0, obj.rotation.z, values[0]); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeRotationZ, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.rotation.z; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.rotation = SCNVector4Make(obj.rotation.x, obj.rotation.y, 1.0, values[0]); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeRotationW, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.rotation.w; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.rotation = SCNVector4Make(obj.rotation.x, obj.rotation.y, obj.rotation.z, values[0]); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeEulerAngles, + ^(SCNNode *obj, CGFloat values[]) { + values_from_vec3(values, obj.eulerAngles); + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.eulerAngles = values_to_vec3(values); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeEulerAnglesX, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.eulerAngles.x; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.eulerAngles = SCNVector3Make(values[0], obj.eulerAngles.y, obj.eulerAngles.z); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeEulerAnglesY, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.eulerAngles.y; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.eulerAngles = SCNVector3Make(obj.eulerAngles.x, values[0], obj.eulerAngles.z); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeEulerAnglesZ, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.eulerAngles.z; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.eulerAngles = SCNVector3Make(obj.eulerAngles.x, obj.eulerAngles.y, values[0]); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeOrientation, + ^(SCNNode *obj, CGFloat values[]) { + values_from_vec4(values, obj.orientation); + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.orientation = values_to_vec4(values); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeOrientationX, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.orientation.x; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.orientation = SCNVector4Make(values[0], obj.orientation.y, obj.orientation.z, obj.orientation.w); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeOrientationY, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.orientation.y; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.orientation = SCNVector4Make(obj.orientation.x, values[0], obj.orientation.z, obj.orientation.w); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeOrientationZ, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.orientation.z; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.orientation = SCNVector4Make(obj.orientation.x, obj.orientation.y, values[0], obj.orientation.w); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeOrientationW, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.orientation.w; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.orientation = SCNVector4Make(obj.orientation.x, obj.orientation.y, obj.orientation.z, values[0]); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeScale, + ^(SCNNode *obj, CGFloat values[]) { + values_from_vec3(values, obj.scale); + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.scale = values_to_vec3(values); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeScaleX, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.scale.x; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.scale = SCNVector3Make(values[0], obj.scale.y, obj.scale.z); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeScaleY, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.scale.y; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.position = SCNVector3Make(obj.scale.x, values[0], obj.scale.z); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeScaleZ, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.scale.z; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.scale = SCNVector3Make(obj.scale.x, obj.scale.y, values[0]); + }, + kPOPThresholdScale + }, + + {kPOPSCNNodeScaleXY, + ^(SCNNode *obj, CGFloat values[]) { + values[0] = obj.scale.x; + values[1] = obj.scale.y; + }, + ^(SCNNode *obj, const CGFloat values[]) { + obj.scale = SCNVector3Make(values[0], values[1], obj.scale.z); + }, + kPOPThresholdScale + }, + #endif }; diff --git a/Pods/pop/pop/POPAnimation.h b/Pods/pop/pop/POPAnimation.h index a79bf17..3c710f2 100644 --- a/Pods/pop/pop/POPAnimation.h +++ b/Pods/pop/pop/POPAnimation.h @@ -44,11 +44,26 @@ */ @property (readonly, nonatomic) POPAnimationTracer *tracer; +/** + @abstract Optional block called on animation start. + */ +@property (copy, nonatomic) void (^animationDidStartBlock)(POPAnimation *anim); + +/** + @abstract Optional block called when value meets or exceeds to value. + */ +@property (copy, nonatomic) void (^animationDidReachToValueBlock)(POPAnimation *anim); + /** @abstract Optional block called on animation completion. */ @property (copy, nonatomic) void (^completionBlock)(POPAnimation *anim, BOOL finished); +/** + @abstract Optional block called each frame animation is applied. + */ +@property (copy, nonatomic) void (^animationDidApplyBlock)(POPAnimation *anim); + /** @abstract Flag indicating whether animation should be removed on completion. @discussion Setting to NO can facilitate animation reuse. Defaults to YES. @@ -160,3 +175,14 @@ When combined with the autoreverses property, a singular animation is effectivel - (id)pop_animationForKey:(NSString *)key; @end + +/** + * This implementation of NSCopying does not do any copying of animation's state, but only configuration. + * i.e. you cannot copy an animation and expect to apply it to a view and have the copied animation pick up where the original left off. + * Two common uses of copying animations: + * * you need to apply the same animation to multiple different views. + * * you need to absolutely ensure that the the caller of your function cannot mutate the animation once it's been passed in. + */ +@interface POPAnimation (NSCopying) + +@end diff --git a/Pods/pop/pop/POPAnimation.mm b/Pods/pop/pop/POPAnimation.mm index 99b0e8e..75bdeb1 100644 --- a/Pods/pop/pop/POPAnimation.mm +++ b/Pods/pop/pop/POPAnimation.mm @@ -7,15 +7,15 @@ of patent rights can be found in the PATENTS file in the same directory. */ +#import "POPAnimationExtras.h" #import "POPAnimationInternal.h" -#import "POPAnimationTracerInternal.h" #import -#import "POPAnimationExtras.h" +#import "POPAction.h" #import "POPAnimationRuntime.h" +#import "POPAnimationTracerInternal.h" #import "POPAnimatorPrivate.h" -#import "POPAction.h" using namespace POP; @@ -118,7 +118,10 @@ - (void)setAutoreverses:(BOOL)autoreverses } FB_PROPERTY_GET(POPAnimationState, type, POPAnimationType); +DEFINE_RW_PROPERTY_OBJ_COPY(POPAnimationState, animationDidStartBlock, setAnimationDidStartBlock:, POPAnimationDidStartBlock); +DEFINE_RW_PROPERTY_OBJ_COPY(POPAnimationState, animationDidReachToValueBlock, setAnimationDidReachToValueBlock:, POPAnimationDidReachToValueBlock); DEFINE_RW_PROPERTY_OBJ_COPY(POPAnimationState, completionBlock, setCompletionBlock:, POPAnimationCompletionBlock); +DEFINE_RW_PROPERTY_OBJ_COPY(POPAnimationState, animationDidApplyBlock, setAnimationDidApplyBlock:, POPAnimationDidApplyBlock); DEFINE_RW_PROPERTY_OBJ_COPY(POPAnimationState, name, setName:, NSString*); DEFINE_RW_PROPERTY(POPAnimationState, beginTime, setBeginTime:, CFTimeInterval); DEFINE_RW_FLAG(POPAnimationState, removedOnCompletion, removedOnCompletion, setRemovedOnCompletion:); @@ -267,3 +270,34 @@ - (id)pop_animationForKey:(NSString *)key } @end + +@implementation POPAnimation (NSCopying) + +- (instancetype)copyWithZone:(NSZone *)zone +{ + /* + * Must use [self class] instead of POPAnimation so that subclasses can call this via super. + * Even though POPAnimation and POPPropertyAnimation throw exceptions on init, + * it's safe to call it since you can only copy objects that have been successfully created. + */ + POPAnimation *copy = [[[self class] allocWithZone:zone] init]; + + if (copy) { + copy.name = self.name; + copy.beginTime = self.beginTime; + copy.delegate = self.delegate; + copy.animationDidStartBlock = self.animationDidStartBlock; + copy.animationDidReachToValueBlock = self.animationDidReachToValueBlock; + copy.completionBlock = self.completionBlock; + copy.animationDidApplyBlock = self.animationDidApplyBlock; + copy.removedOnCompletion = self.removedOnCompletion; + + copy.autoreverses = self.autoreverses; + copy.repeatCount = self.repeatCount; + copy.repeatForever = self.repeatForever; + } + + return copy; +} + +@end \ No newline at end of file diff --git a/Pods/pop/pop/POPAnimationExtras.mm b/Pods/pop/pop/POPAnimationExtras.mm index 941aaaf..0a6d6c9 100644 --- a/Pods/pop/pop/POPAnimationExtras.mm +++ b/Pods/pop/pop/POPAnimationExtras.mm @@ -8,18 +8,18 @@ */ #import "POPAnimationExtras.h" - #import "POPAnimationPrivate.h" -#import "POPMath.h" #if TARGET_OS_IPHONE #import #endif #if TARGET_IPHONE_SIMULATOR -UIKIT_EXTERN CGFloat UIAnimationDragCoefficient(); // UIKit private drag coeffient, use judiciously +UIKIT_EXTERN float UIAnimationDragCoefficient(); // UIKit private drag coeffient, use judiciously #endif +#import "POPMath.h" + CGFloat POPAnimationDragCoefficient() { #if TARGET_IPHONE_SIMULATOR diff --git a/Pods/pop/pop/POPAnimationInternal.h b/Pods/pop/pop/POPAnimationInternal.h index ecab1b6..317364f 100644 --- a/Pods/pop/pop/POPAnimationInternal.h +++ b/Pods/pop/pop/POPAnimationInternal.h @@ -7,13 +7,14 @@ of patent rights can be found in the PATENTS file in the same directory. */ +#import "POPAnimation.h" + #import -#import "POPAnimation.h" +#import "POPAction.h" #import "POPAnimationRuntime.h" #import "POPAnimationTracerInternal.h" #import "POPSpringSolver.h" -#import "POPAction.h" using namespace POP; @@ -34,7 +35,10 @@ typedef struct bool reached; } POPProgressMarker; +typedef void (^POPAnimationDidStartBlock)(POPAnimation *anim); +typedef void (^POPAnimationDidReachToValueBlock)(POPAnimation *anim); typedef void (^POPAnimationCompletionBlock)(POPAnimation *anim, BOOL finished); +typedef void (^POPAnimationDidApplyBlock)(POPAnimation *anim); @interface POPAnimation() - (instancetype)_init; @@ -199,7 +203,10 @@ struct _POPAnimationState CFTimeInterval startTime; CFTimeInterval lastTime; id __weak delegate; + POPAnimationDidStartBlock animationDidStartBlock; + POPAnimationDidReachToValueBlock animationDidReachToValueBlock; POPAnimationCompletionBlock completionBlock; + POPAnimationDidApplyBlock animationDidApplyBlock; NSMutableDictionary *dict; POPAnimationTracer *tracer; CGFloat progress; @@ -232,7 +239,10 @@ struct _POPAnimationState startTime(0), lastTime(0), delegate(nil), + animationDidStartBlock(nil), + animationDidReachToValueBlock(nil), completionBlock(nil), + animationDidApplyBlock(nil), dict(nil), tracer(nil), progress(0), @@ -258,7 +268,10 @@ struct _POPAnimationState name = nil; dict = nil; tracer = nil; + animationDidStartBlock = NULL; + animationDidReachToValueBlock = NULL; completionBlock = NULL; + animationDidApplyBlock = NULL; } bool isCustom() { @@ -364,6 +377,12 @@ struct _POPAnimationState ActionEnabler enabler; [delegate pop_animationDidStart:self]; } + + POPAnimationDidStartBlock block = animationDidStartBlock; + if (block != NULL) { + ActionEnabler enabler; + block(self); + } if (tracing) { [tracer didStart]; @@ -451,6 +470,12 @@ struct _POPAnimationState ActionEnabler enabler; [delegate pop_animationDidApply:self]; } + + POPAnimationDidApplyBlock block = animationDidApplyBlock; + if (block != NULL) { + ActionEnabler enabler; + block(self); + } } virtual void reset(bool all) { diff --git a/Pods/pop/pop/POPAnimationRuntime.h b/Pods/pop/pop/POPAnimationRuntime.h index 788c8c6..902c312 100644 --- a/Pods/pop/pop/POPAnimationRuntime.h +++ b/Pods/pop/pop/POPAnimationRuntime.h @@ -26,6 +26,8 @@ enum POPValueType kPOPValueTransform, kPOPValueRange, kPOPValueColor, + kPOPValueSCNVector3, + kPOPValueSCNVector4, }; using namespace POP; @@ -43,12 +45,12 @@ extern POPValueType POPSelectValueType(id obj, const POPValueType *types, size_t /** Array of all value types. */ -extern const POPValueType kPOPAnimatableAllTypes[10]; +extern const POPValueType kPOPAnimatableAllTypes[12]; /** Array of all value types supported for animation. */ -extern const POPValueType kPOPAnimatableSupportTypes[8]; +extern const POPValueType kPOPAnimatableSupportTypes[10]; /** Returns a string description of a value type. diff --git a/Pods/pop/pop/POPAnimationRuntime.mm b/Pods/pop/pop/POPAnimationRuntime.mm index af3f301..371e009 100644 --- a/Pods/pop/pop/POPAnimationRuntime.mm +++ b/Pods/pop/pop/POPAnimationRuntime.mm @@ -17,10 +17,10 @@ #import #endif -#import "POPVector.h" -#import "POPAnimationRuntime.h" #import "POPCGUtils.h" +#import "POPDefines.h" #import "POPGeometry.h" +#import "POPVector.h" static Boolean pointerEqual(const void *ptr1, const void *ptr2) { return ptr1 == ptr2; @@ -36,7 +36,7 @@ CFMutableDictionaryRef POPDictionaryCreateMutableWeakPointerToWeakPointer(NSUInt // weak, pointer keys kcb.retain = NULL; - kcb.retain = NULL; + kcb.release = NULL; kcb.equal = pointerEqual; kcb.hash = pointerHash; @@ -101,7 +101,7 @@ static bool FBCompareTypeEncoding(const char *objctype, POPValueType type) #else return false; #endif - + case kPOPValueAffineTransform: return strcmp(objctype, @encode(CGAffineTransform)) == 0; @@ -122,6 +122,21 @@ static bool FBCompareTypeEncoding(const char *objctype, POPValueType type) || strcmp(objctype, @encode(long long)) == 0 || strcmp(objctype, @encode(unsigned long long)) == 0 ); + + case kPOPValueSCNVector3: +#if SCENEKIT_SDK_AVAILABLE + return strcmp(objctype, @encode(SCNVector3)) == 0; +#else + return false; +#endif + + case kPOPValueSCNVector4: +#if SCENEKIT_SDK_AVAILABLE + return strcmp(objctype, @encode(SCNVector4)) == 0; +#else + return false; +#endif + default: return false; } @@ -148,9 +163,9 @@ POPValueType POPSelectValueType(id obj, const POPValueType *types, size_t length return kPOPValueUnknown; } -const POPValueType kPOPAnimatableAllTypes[10] = {kPOPValueInteger, kPOPValueFloat, kPOPValuePoint, kPOPValueSize, kPOPValueRect, kPOPValueEdgeInsets, kPOPValueAffineTransform, kPOPValueTransform, kPOPValueRange, kPOPValueColor}; +const POPValueType kPOPAnimatableAllTypes[12] = {kPOPValueInteger, kPOPValueFloat, kPOPValuePoint, kPOPValueSize, kPOPValueRect, kPOPValueEdgeInsets, kPOPValueAffineTransform, kPOPValueTransform, kPOPValueRange, kPOPValueColor, kPOPValueSCNVector3, kPOPValueSCNVector4}; -const POPValueType kPOPAnimatableSupportTypes[8] = {kPOPValueInteger, kPOPValueFloat, kPOPValuePoint, kPOPValueSize, kPOPValueRect, kPOPValueEdgeInsets, kPOPValueColor}; +const POPValueType kPOPAnimatableSupportTypes[10] = {kPOPValueInteger, kPOPValueFloat, kPOPValuePoint, kPOPValueSize, kPOPValueRect, kPOPValueEdgeInsets, kPOPValueColor, kPOPValueSCNVector3, kPOPValueSCNVector4}; NSString *POPValueTypeToString(POPValueType t) { @@ -177,6 +192,10 @@ POPValueType POPSelectValueType(id obj, const POPValueType *types, size_t length return @"CFRange"; case kPOPValueColor: return @"CGColorRef"; + case kPOPValueSCNVector3: + return @"SCNVector3"; + case kPOPValueSCNVector4: + return @"SCNVector4"; default: return nil; } @@ -210,6 +229,16 @@ id POPBox(VectorConstRef vec, POPValueType type, bool force) return (__bridge_transfer id)vec->cg_color(); break; } +#if SCENEKIT_SDK_AVAILABLE + case kPOPValueSCNVector3: { + return [NSValue valueWithSCNVector3:vec->scn_vector3()]; + break; + } + case kPOPValueSCNVector4: { + return [NSValue valueWithSCNVector4:vec->scn_vector4()]; + break; + } +#endif default: return force ? [NSValue valueWithCGPoint:vec->cg_point()] : nil; break; @@ -223,7 +252,11 @@ static VectorRef vectorize(id value, POPValueType type) switch (type) { case kPOPValueInteger: case kPOPValueFloat: +#if CGFLOAT_IS_DOUBLE + vec = Vector::new_cg_float([value doubleValue]); +#else vec = Vector::new_cg_float([value floatValue]); +#endif break; case kPOPValuePoint: vec = Vector::new_cg_point([value CGPointValue]); @@ -245,6 +278,14 @@ static VectorRef vectorize(id value, POPValueType type) case kPOPValueColor: vec = Vector::new_cg_color(POPCGColorWithColor(value)); break; +#if SCENEKIT_SDK_AVAILABLE + case kPOPValueSCNVector3: + vec = Vector::new_scn_vector3([value SCNVector3Value]); + break; + case kPOPValueSCNVector4: + vec = Vector::new_scn_vector4([value SCNVector4Value]); + break; +#endif default: break; } @@ -264,7 +305,7 @@ VectorRef POPUnbox(id value, POPValueType &animationType, NSUInteger &count, boo // handle unknown types if (kPOPValueUnknown == valueType) { - NSString *valueDesc = kPOPValueUnknown != valueType ? POPValueTypeToString(valueType) : [[value class] description]; + NSString *valueDesc = [[value class] description]; [NSException raise:@"Unsuported value" format:@"Animating %@ values is not supported", valueDesc]; } diff --git a/Pods/pop/pop/POPAnimator.h b/Pods/pop/pop/POPAnimator.h index 7d71d24..5310bed 100644 --- a/Pods/pop/pop/POPAnimator.h +++ b/Pods/pop/pop/POPAnimator.h @@ -7,7 +7,7 @@ of patent rights can be found in the PATENTS file in the same directory. */ -#import +#import @protocol POPAnimatorDelegate; diff --git a/Pods/pop/pop/POPAnimator.mm b/Pods/pop/pop/POPAnimator.mm index 2addfba..6b2a770 100644 --- a/Pods/pop/pop/POPAnimator.mm +++ b/Pods/pop/pop/POPAnimator.mm @@ -11,9 +11,14 @@ #import "POPAnimatorPrivate.h" #import -#import #import +#if !TARGET_OS_IPHONE +#import +#endif + +#import + #import #import "POPAnimation.h" @@ -82,6 +87,7 @@ @interface POPAnimator () CADisplayLink *_displayLink; #else CVDisplayLinkRef _displayLink; + int32_t _enqueuedRender; #endif POPAnimatorItemList _list; CFMutableDictionaryRef _dict; @@ -106,9 +112,15 @@ @implementation POPAnimator static CVReturn displayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp *now, const CVTimeStamp *outputTime, CVOptionFlags flagsIn, CVOptionFlags *flagsOut, void *context) { if (_disableBackgroundThread) { + __unsafe_unretained POPAnimator *pa = (__bridge POPAnimator *)context; + int32_t* enqueuedRender = &pa->_enqueuedRender; + if (*enqueuedRender == 0) { + OSAtomicIncrement32(enqueuedRender); dispatch_async(dispatch_get_main_queue(), ^{ [(__bridge POPAnimator*)context render]; + OSAtomicDecrement32(enqueuedRender); }); + } } else { [(__bridge POPAnimator*)context render]; } @@ -429,8 +441,8 @@ - (void)_renderTime:(CFTimeInterval)time items:(std::list)it // unlock OSSpinLockUnlock(&_lock); } else { - // copy list into vectory - std::vector vector{ std::begin(items), std::end(items) }; + // copy list into vector + std::vector vector{ items.begin(), items.end() }; // unlock OSSpinLockUnlock(&_lock); diff --git a/Pods/pop/pop/POPBasicAnimation.mm b/Pods/pop/pop/POPBasicAnimation.mm index f53bba1..2843c99 100644 --- a/Pods/pop/pop/POPBasicAnimation.mm +++ b/Pods/pop/pop/POPBasicAnimation.mm @@ -88,3 +88,19 @@ - (void)_appendDescription:(NSMutableString *)s debug:(BOOL)debug } @end + +@implementation POPBasicAnimation (NSCopying) + +- (instancetype)copyWithZone:(NSZone *)zone { + + POPBasicAnimation *copy = [super copyWithZone:zone]; + + if (copy) { + copy.duration = self.duration; + copy.timingFunction = self.timingFunction; // not a 'copy', but timing functions are publicly immutable. + } + + return copy; +} + +@end \ No newline at end of file diff --git a/Pods/pop/pop/POPBasicAnimationInternal.h b/Pods/pop/pop/POPBasicAnimationInternal.h index e274c3f..1027670 100644 --- a/Pods/pop/pop/POPBasicAnimationInternal.h +++ b/Pods/pop/pop/POPBasicAnimationInternal.h @@ -8,6 +8,7 @@ */ #import "POPBasicAnimation.h" + #import "POPPropertyAnimationInternal.h" // default animation duration diff --git a/Pods/pop/pop/POPCGUtils.h b/Pods/pop/pop/POPCGUtils.h index f754d66..c843947 100644 --- a/Pods/pop/pop/POPCGUtils.h +++ b/Pods/pop/pop/POPCGUtils.h @@ -8,13 +8,17 @@ */ #import + #if TARGET_OS_IPHONE #import +#else +#import #endif + #import "POPDefines.h" -#if TARGET_OS_IPHONE -@class UIColor; +#if SCENEKIT_SDK_AVAILABLE +#import #endif POP_EXTERN_C_BEGIN @@ -34,6 +38,18 @@ NS_INLINE CGRect values_to_rect(const CGFloat values[]) return CGRectMake(values[0], values[1], values[2], values[3]); } +#if SCENEKIT_SDK_AVAILABLE +NS_INLINE SCNVector3 values_to_vec3(const CGFloat values[]) +{ + return SCNVector3Make(values[0], values[1], values[2]); +} + +NS_INLINE SCNVector4 values_to_vec4(const CGFloat values[]) +{ + return SCNVector4Make(values[0], values[1], values[2], values[3]); +} +#endif + #if TARGET_OS_IPHONE NS_INLINE UIEdgeInsets values_to_edge_insets(const CGFloat values[]) @@ -63,6 +79,23 @@ NS_INLINE void values_from_rect(CGFloat values[], CGRect r) values[3] = r.size.height; } +#if SCENEKIT_SDK_AVAILABLE +NS_INLINE void values_from_vec3(CGFloat values[], SCNVector3 v) +{ + values[0] = v.x; + values[1] = v.y; + values[2] = v.z; +} + +NS_INLINE void values_from_vec4(CGFloat values[], SCNVector4 v) +{ + values[0] = v.x; + values[1] = v.y; + values[2] = v.z; + values[3] = v.w; +} +#endif + #if TARGET_OS_IPHONE NS_INLINE void values_from_edge_insets(CGFloat values[], UIEdgeInsets i) @@ -88,7 +121,7 @@ extern CGColorRef POPCGColorRGBACreate(const CGFloat components[]) CF_RETURNS_RE /** Takes a color reference and returns a CGColor. */ -extern CGColorRef POPCGColorWithColor(id color); +extern CGColorRef POPCGColorWithColor(id color) CF_RETURNS_NOT_RETAINED; #if TARGET_OS_IPHONE @@ -102,6 +135,18 @@ extern void POPUIColorGetRGBAComponents(UIColor *color, CGFloat components[]); */ extern UIColor *POPUIColorRGBACreate(const CGFloat components[]) NS_RETURNS_RETAINED; +#else + +/** + Takes a NSColor and converts it into RGBA components, if necessary. + */ +extern void POPNSColorGetRGBAComponents(NSColor *color, CGFloat components[]); + +/** + Takes RGBA components and returns a NSColor. + */ +extern NSColor *POPNSColorRGBACreate(const CGFloat components[]) NS_RETURNS_RETAINED; + #endif POP_EXTERN_C_END diff --git a/Pods/pop/pop/POPCGUtils.mm b/Pods/pop/pop/POPCGUtils.mm index c8a866a..72a2d36 100644 --- a/Pods/pop/pop/POPCGUtils.mm +++ b/Pods/pop/pop/POPCGUtils.mm @@ -9,42 +9,34 @@ #import "POPCGUtils.h" -#if TARGET_OS_IPHONE -#import -#else -#import -#endif +#import void POPCGColorGetRGBAComponents(CGColorRef color, CGFloat components[]) { - if (!color) { -#if TARGET_OS_IPHONE - color = [UIColor clearColor].CGColor; -#else - color = [NSColor clearColor].CGColor; -#endif - } - - const CGFloat *colors = CGColorGetComponents(color); - size_t count = CGColorGetNumberOfComponents(color); - - if (4 == count) { - // RGB colorspace - components[0] = colors[0]; - components[1] = colors[1]; - components[2] = colors[2]; - components[3] = colors[3]; - } else if (2 == count) { - // Grey colorspace - components[0] = components[1] = components[2] = colors[0]; - components[3] = colors[1]; + if (color) { + const CGFloat *colors = CGColorGetComponents(color); + size_t count = CGColorGetNumberOfComponents(color); + + if (4 == count) { + // RGB colorspace + components[0] = colors[0]; + components[1] = colors[1]; + components[2] = colors[2]; + components[3] = colors[3]; + } else if (2 == count) { + // Grey colorspace + components[0] = components[1] = components[2] = colors[0]; + components[3] = colors[1]; + } else { + // Use CI to convert + CIColor *ciColor = [CIColor colorWithCGColor:color]; + components[0] = ciColor.red; + components[1] = ciColor.green; + components[2] = ciColor.blue; + components[3] = ciColor.alpha; + } } else { - // Use CI to convert - CIColor *ciColor = [CIColor colorWithCGColor:color]; - components[0] = ciColor.red; - components[1] = ciColor.green; - components[2] = ciColor.blue; - components[3] = ciColor.alpha; + memset(components, 0, 4 * sizeof(components[0])); } } @@ -71,7 +63,44 @@ CGColorRef POPCGColorWithColor(id color) } #else else if ([color isKindOfClass:[NSColor class]]) { - return [color CGColor]; + // -[NSColor CGColor] is only supported since OSX 10.8+ + if ([color respondsToSelector:@selector(CGColor)]) { + return [color CGColor]; + } + + /* + * Otherwise create a CGColorRef manually. + * + * The original accessor is (or would be) declared as: + * @property(readonly) CGColorRef CGColor; + * - (CGColorRef)CGColor NS_RETURNS_INNER_POINTER CF_RETURNS_NOT_RETAINED; + * + * (Please note that OSX' accessor is atomic, while iOS' isn't.) + * + * The access to the NSColor object must thus be synchronized + * and the CGColorRef be stored as an associated object, + * to return a reference which doesn't need to be released manually. + */ + @synchronized(color) { + static const void* key = &key; + + CGColorRef colorRef = (__bridge CGColorRef)objc_getAssociatedObject(color, key); + + if (!colorRef) { + size_t numberOfComponents = [color numberOfComponents]; + CGFloat components[numberOfComponents]; + CGColorSpaceRef colorSpace = [[color colorSpace] CGColorSpace]; + + [color getComponents:components]; + + colorRef = CGColorCreate(colorSpace, components); + + objc_setAssociatedObject(color, key, (__bridge id)colorRef, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + CGColorRelease(colorRef); + } + + return colorRef; + } } #endif return nil; @@ -81,7 +110,7 @@ CGColorRef POPCGColorWithColor(id color) void POPUIColorGetRGBAComponents(UIColor *color, CGFloat components[]) { - return POPCGColorGetRGBAComponents(color.CGColor, components); + return POPCGColorGetRGBAComponents(POPCGColorWithColor(color), components); } UIColor *POPUIColorRGBACreate(const CGFloat components[]) @@ -92,5 +121,30 @@ void POPUIColorGetRGBAComponents(UIColor *color, CGFloat components[]) return color; } +#else + +void POPNSColorGetRGBAComponents(NSColor *color, CGFloat components[]) +{ + return POPCGColorGetRGBAComponents(POPCGColorWithColor(color), components); +} + +NSColor *POPNSColorRGBACreate(const CGFloat components[]) +{ + CGColorRef colorRef = POPCGColorRGBACreate(components); + NSColor *color = nil; + + if (colorRef) { + if ([NSColor respondsToSelector:@selector(colorWithCGColor:)]) { + color = [NSColor colorWithCGColor:colorRef]; + } else { + color = [NSColor colorWithCIColor:[CIColor colorWithCGColor:colorRef]]; + } + + CGColorRelease(colorRef); + } + + return color; +} + #endif diff --git a/Pods/pop/pop/POPCustomAnimation.mm b/Pods/pop/pop/POPCustomAnimation.mm index 20e361a..8cb7913 100644 --- a/Pods/pop/pop/POPCustomAnimation.mm +++ b/Pods/pop/pop/POPCustomAnimation.mm @@ -7,9 +7,10 @@ of patent rights can be found in the PATENTS file in the same directory. */ -#import "POPCustomAnimation.h" #import "POPAnimationInternal.h" +#import "POPCustomAnimation.h" + @interface POPCustomAnimation () @property (nonatomic, copy) POPCustomAnimationBlock animate; @end @@ -54,3 +55,21 @@ - (void)_appendDescription:(NSMutableString *)s debug:(BOOL)debug } @end + +/** + * Note that only the animate block is copied, but not the current/elapsed times + */ +@implementation POPCustomAnimation (NSCopying) + +- (instancetype)copyWithZone:(NSZone *)zone { + + POPCustomAnimation *copy = [super copyWithZone:zone]; + + if (copy) { + copy.animate = self.animate; + } + + return copy; +} + +@end \ No newline at end of file diff --git a/Pods/pop/pop/POPDecayAnimation.mm b/Pods/pop/pop/POPDecayAnimation.mm index 405c529..4698fd0 100644 --- a/Pods/pop/pop/POPDecayAnimation.mm +++ b/Pods/pop/pop/POPDecayAnimation.mm @@ -80,7 +80,11 @@ - (id)reversedVelocity POPValueType velocityType = POPSelectValueType(self.originalVelocity, supportedVelocityTypes, POP_ARRAY_COUNT(supportedVelocityTypes)); if (velocityType == kPOPValueFloat) { +#if CGFLOAT_IS_DOUBLE + CGFloat originalVelocityFloat = [(NSNumber *)self.originalVelocity doubleValue]; +#else CGFloat originalVelocityFloat = [(NSNumber *)self.originalVelocity floatValue]; +#endif NSNumber *negativeOriginalVelocityNumber = @(-originalVelocityFloat); reversedVelocity = negativeOriginalVelocityNumber; } else if (velocityType == kPOPValueInteger) { @@ -179,3 +183,21 @@ - (void)_appendDescription:(NSMutableString *)s debug:(BOOL)debug } @end + +@implementation POPDecayAnimation (NSCopying) + +- (instancetype)copyWithZone:(NSZone *)zone { + + POPDecayAnimation *copy = [super copyWithZone:zone]; + + if (copy) { + // Set the velocity to the animation's original velocity, not its current. + copy.velocity = self.originalVelocity; + copy.deceleration = self.deceleration; + + } + + return copy; +} + +@end \ No newline at end of file diff --git a/Pods/pop/pop/POPDecayAnimationInternal.h b/Pods/pop/pop/POPDecayAnimationInternal.h index 6b2d854..c101761 100644 --- a/Pods/pop/pop/POPDecayAnimationInternal.h +++ b/Pods/pop/pop/POPDecayAnimationInternal.h @@ -8,6 +8,9 @@ */ #import "POPDecayAnimation.h" + +#import + #import "POPPropertyAnimationInternal.h" // minimal velocity factor before decay animation is considered complete, in units / s @@ -58,7 +61,7 @@ struct _POPDecayAnimationState : _POPPropertyAnimationState CGFloat f = dynamicsThreshold * kPOPAnimationDecayMinimalVelocityFactor; const CGFloat *velocityValues = vec_data(velocityVec); for (NSUInteger idx = 0; idx < valueCount; idx++) { - if (fabsf(velocityValues[idx]) >= f) + if (std::abs((velocityValues[idx])) >= f) return false; } return true; @@ -79,7 +82,7 @@ struct _POPDecayAnimationState : _POPPropertyAnimationState duration = MAX(MAX(MAX(log(fabs(vx)) / d, log(fabs(vy)) / d), log(fabs(vz)) / d), log(fabs(vw)) / d); // ensure velocity threshold is exceeded - if (isnan(duration) || duration < 0) { + if (std::isnan(duration) || duration < 0) { duration = 0; } } @@ -105,40 +108,6 @@ struct _POPDecayAnimationState : _POPPropertyAnimationState toVec = toValue; } - void computeDestinationValues() { - // to value assuming final velocity as a factor of dynamics threshold - // derived from v' = v * d^dt used in decay_position - // to compute the to value with maximal dt, p' = p + (v * d) / (1 - d) - VectorRef fromValue = NULL != currentVec ? currentVec : fromVec; - if (!fromValue) { - return; - } - - VectorRef toValue(Vector::new_vector(fromValue.get())); - - // compute duration till threshold velocity - Vector4r scaledVelocity = vector4(velocityVec) / 1000.; - - double k = dynamicsThreshold * kPOPAnimationDecayMinimalVelocityFactor / 1000.; - double vx = k / scaledVelocity.x; - double vy = k / scaledVelocity.y; - double vz = k / scaledVelocity.z; - double vw = k / scaledVelocity.w; - double d = log(deceleration) * 1000.; - duration = MAX(MAX(MAX(log(fabs(vx)) / d, log(fabs(vy)) / d), log(fabs(vz)) / d), log(fabs(vw)) / d); - - // ensure velocity threshold is exceeded - if (isnan(duration) || duration < 0) { - duration = 0; - } else { - // compute to value - Vector4r velocity = velocityVec->vector4r(); - decay_position(toValue->data(), velocity.data(), valueCount, duration, deceleration); - } - - toVec = toValue; - } - bool advance(CFTimeInterval time, CFTimeInterval dt, id obj) { // advance past not yet initialized animations if (NULL == currentVec) { diff --git a/Pods/pop/pop/POPDefines.h b/Pods/pop/pop/POPDefines.h index 92cf801..eb28781 100644 --- a/Pods/pop/pop/POPDefines.h +++ b/Pods/pop/pop/POPDefines.h @@ -10,6 +10,8 @@ #ifndef POP_POPDefines_h #define POP_POPDefines_h +#import + #ifdef __cplusplus # define POP_EXTERN_C_BEGIN extern "C" { # define POP_EXTERN_C_END } @@ -26,4 +28,10 @@ # define POP_NOTHROW #endif +#if TARGET_OS_MAC + #define SCENEKIT_SDK_AVAILABLE defined(POP_USE_SCENEKIT) +#elif TARGET_OS_IPHONE + #define SCENEKIT_SDK_AVAILABLE defined(POP_USE_SCENEKIT) +#endif + #endif diff --git a/Pods/pop/pop/POPGeometry.mm b/Pods/pop/pop/POPGeometry.mm index 29c75a4..41998b1 100644 --- a/Pods/pop/pop/POPGeometry.mm +++ b/Pods/pop/pop/POPGeometry.mm @@ -65,3 +65,30 @@ - (CGAffineTransform)CGAffineTransformValue { @end #endif + +#if TARGET_OS_IPHONE +#import "POPDefines.h" + +#if SCENEKIT_SDK_AVAILABLE +#import + +/** + Dirty hacks because iOS is weird and decided to define both SCNVector3's and SCNVector4's objCType as "t". However @encode(SCNVector3) and @encode(SCNVector4) both return the proper definition ("{SCNVector3=fff}" and "{SCNVector4=ffff}" respectively) + + [[NSValue valueWithSCNVector3:SCNVector3Make(0.0, 0.0, 0.0)] objcType] returns "t", whereas it should return "{SCNVector3=fff}". + + *flips table* + */ +@implementation NSValue (SceneKitFixes) + ++ (NSValue *)valueWithSCNVector3:(SCNVector3)vec3 { + return [NSValue valueWithBytes:&vec3 objCType:@encode(SCNVector3)]; +} + ++ (NSValue *)valueWithSCNVector4:(SCNVector4)vec4 { + return [NSValue valueWithBytes:&vec4 objCType:@encode(SCNVector4)]; +} + +@end +#endif +#endif diff --git a/Pods/pop/pop/POPMath.h b/Pods/pop/pop/POPMath.h index baba374..0c6f5e2 100644 --- a/Pods/pop/pop/POPMath.h +++ b/Pods/pop/pop/POPMath.h @@ -8,6 +8,7 @@ */ #import + #import #import "POPDefines.h" diff --git a/Pods/pop/pop/POPMath.mm b/Pods/pop/pop/POPMath.mm index 5dbfd7d..69a506a 100644 --- a/Pods/pop/pop/POPMath.mm +++ b/Pods/pop/pop/POPMath.mm @@ -8,8 +8,9 @@ */ #import "POPMath.h" -#import "UnitBezier.h" + #import "POPAnimationPrivate.h" +#import "UnitBezier.h" void POPInterpolateVector(NSUInteger count, CGFloat *dst, const CGFloat *from, const CGFloat *to, CGFloat f) { diff --git a/Pods/pop/pop/POPPropertyAnimation.mm b/Pods/pop/pop/POPPropertyAnimation.mm index 118e689..56a9e5c 100644 --- a/Pods/pop/pop/POPPropertyAnimation.mm +++ b/Pods/pop/pop/POPPropertyAnimation.mm @@ -103,3 +103,23 @@ - (void)_appendDescription:(NSMutableString *)s debug:(BOOL)debug } @end + +@implementation POPPropertyAnimation (NSCopying) + +- (instancetype)copyWithZone:(NSZone *)zone { + + POPPropertyAnimation *copy = [super copyWithZone:zone]; + + if (copy) { + copy.property = [self.property copyWithZone:zone]; + copy.fromValue = self.fromValue; + copy.toValue = self.toValue; + copy.roundingFactor = self.roundingFactor; + copy.clampMode = self.clampMode; + copy.additive = self.additive; + } + + return copy; +} + +@end \ No newline at end of file diff --git a/Pods/pop/pop/POPPropertyAnimationInternal.h b/Pods/pop/pop/POPPropertyAnimationInternal.h index a6758c8..9f2aee4 100644 --- a/Pods/pop/pop/POPPropertyAnimationInternal.h +++ b/Pods/pop/pop/POPPropertyAnimationInternal.h @@ -231,6 +231,12 @@ struct _POPPropertyAnimationState : _POPAnimationState [delegate pop_animationDidReachToValue:self]; } + POPAnimationDidReachToValueBlock block = animationDidReachToValueBlock; + if (block != NULL) { + ActionEnabler enabler; + block(self); + } + if (tracing) { [tracer didReachToValue:POPBox(currentValue(), valueType, true)]; } diff --git a/Pods/pop/pop/POPSpringAnimation.h b/Pods/pop/pop/POPSpringAnimation.h index 60916d4..a22cd5b 100644 --- a/Pods/pop/pop/POPSpringAnimation.h +++ b/Pods/pop/pop/POPSpringAnimation.h @@ -36,13 +36,13 @@ /** @abstract The effective bounciness. - @discussion Use in conjunction with 'springSpeed' to change animation effect. Values are converted into corresponding dynamics constants. Defined as a value in the range [0, 20]. Defaults to 4. + @discussion Use in conjunction with 'springSpeed' to change animation effect. Values are converted into corresponding dynamics constants. Higher values increase spring movement range resulting in more oscillations and springiness. Defined as a value in the range [0, 20]. Defaults to 4. */ @property (assign, nonatomic) CGFloat springBounciness; /** @abstract The effective speed. - @discussion Use in conjunction with 'springBounciness' to change animation effect. Values are converted into corresponding dynamics constants. Defined as a value in the range [0, 20]. Defaults to 12. + @discussion Use in conjunction with 'springBounciness' to change animation effect. Values are converted into corresponding dynamics constants. Higher values increase the dampening power of the spring resulting in a faster initial velocity and more rapid bounce slowdown. Defined as a value in the range [0, 20]. Defaults to 12. */ @property (assign, nonatomic) CGFloat springSpeed; diff --git a/Pods/pop/pop/POPSpringAnimation.mm b/Pods/pop/pop/POPSpringAnimation.mm index 10cb510..d299770 100644 --- a/Pods/pop/pop/POPSpringAnimation.mm +++ b/Pods/pop/pop/POPSpringAnimation.mm @@ -63,8 +63,10 @@ - (void)setVelocity:(id)aValue { POPPropertyAnimationState *s = __state; VectorRef vec = POPUnbox(aValue, s->valueType, s->valueCount, YES); + VectorRef origVec = POPUnbox(aValue, s->valueType, s->valueCount, YES); if (!vec_equal(vec, s->velocityVec)) { s->velocityVec = vec; + s->originalVelocityVec = origVec; if (s->tracing) { [s->tracer updateVelocity:aValue]; @@ -162,3 +164,29 @@ - (void)_appendDescription:(NSMutableString *)s debug:(BOOL)debug } @end + +@implementation POPSpringAnimation (NSCopying) + +- (instancetype)copyWithZone:(NSZone *)zone { + + POPSpringAnimation *copy = [super copyWithZone:zone]; + + if (copy) { + id velocity = POPBox(__state->originalVelocityVec, __state->valueType); + + // If velocity never gets set, then POPBox will return nil, messing up __state->valueCount. + if (velocity) { + copy.velocity = velocity; + } + + copy.springBounciness = self.springBounciness; + copy.springSpeed = self.springSpeed; + copy.dynamicsTension = self.dynamicsTension; + copy.dynamicsFriction = self.dynamicsFriction; + copy.dynamicsMass = self.dynamicsMass; + } + + return copy; +} + +@end \ No newline at end of file diff --git a/Pods/pop/pop/POPSpringAnimationInternal.h b/Pods/pop/pop/POPSpringAnimationInternal.h index 6d17c3c..6a72a43 100644 --- a/Pods/pop/pop/POPSpringAnimationInternal.h +++ b/Pods/pop/pop/POPSpringAnimationInternal.h @@ -7,6 +7,8 @@ of patent rights can be found in the PATENTS file in the same directory. */ +#import + #import "POPAnimationExtras.h" #import "POPPropertyAnimationInternal.h" @@ -46,7 +48,7 @@ struct _POPSpringAnimationState : _POPPropertyAnimationState const CGFloat *previous2Values = previous2Vec->data(); for (NSUInteger idx = 0; idx < count; idx++) { - if ((fabsf(toValues[idx] - previousValues[idx]) >= t) || (fabsf(previous2Values[idx] - previousValues[idx]) >= t)) { + if ((std::abs(toValues[idx] - previousValues[idx]) >= t) || (std::abs(previous2Values[idx] - previousValues[idx]) >= t)) { return false; } } diff --git a/Pods/pop/pop/POPVector.h b/Pods/pop/pop/POPVector.h index 12db46b..44d4e9f 100644 --- a/Pods/pop/pop/POPVector.h +++ b/Pods/pop/pop/POPVector.h @@ -13,11 +13,20 @@ #include #include -#import #import + +#import + +#import "POPDefines.h" + +#if SCENEKIT_SDK_AVAILABLE +#import +#endif + #if TARGET_OS_IPHONE #import #endif + #import "POPMath.h" namespace POP { @@ -336,6 +345,16 @@ namespace POP { // CGColorRef support CGColorRef cg_color() const CF_RETURNS_RETAINED; static Vector *new_cg_color(CGColorRef color); + +#if SCENEKIT_SDK_AVAILABLE + // SCNVector3 support + SCNVector3 scn_vector3() const; + static Vector *new_scn_vector3(const SCNVector3 &vec3); + + // SCNVector4 support + SCNVector4 scn_vector4() const; + static Vector *new_scn_vector4(const SCNVector4 &vec4); +#endif // operator overloads CGFloat &operator[](size_t i) const { diff --git a/Pods/pop/pop/POPVector.mm b/Pods/pop/pop/POPVector.mm index b9b6103..96cee24 100644 --- a/Pods/pop/pop/POPVector.mm +++ b/Pods/pop/pop/POPVector.mm @@ -8,6 +8,8 @@ */ #import "POPVector.h" + +#import "POPDefines.h" #import "POPCGUtils.h" namespace POP @@ -177,7 +179,7 @@ { return _count < 4 ? CGRectZero : CGRectMake(_values[0], _values[1], _values[2], _values[3]); } - + Vector *Vector::new_cg_rect(const CGRect &r) { Vector *v = new Vector(4); @@ -250,6 +252,37 @@ POPCGColorGetRGBAComponents(color, rgba); return new_vector(4, rgba); } + +#if SCENEKIT_SDK_AVAILABLE + SCNVector3 Vector::scn_vector3() const + { + return _count < 3 ? SCNVector3Make(0.0, 0.0, 0.0) : SCNVector3Make(_values[0], _values[1], _values[2]); + } + + Vector *Vector::new_scn_vector3(const SCNVector3 &vec3) + { + Vector *v = new Vector(3); + v->_values[0] = vec3.x; + v->_values[1] = vec3.y; + v->_values[2] = vec3.z; + return v; + } + + SCNVector4 Vector::scn_vector4() const + { + return _count < 4 ? SCNVector4Make(0.0, 0.0, 0.0, 0.0) : SCNVector4Make(_values[0], _values[1], _values[2], _values[3]); + } + + Vector *Vector::new_scn_vector4(const SCNVector4 &vec4) + { + Vector *v = new Vector(4); + v->_values[0] = vec4.x; + v->_values[1] = vec4.y; + v->_values[2] = vec4.z; + v->_values[3] = vec4.w; + return v; + } +#endif void Vector::subRound(CGFloat sub) { diff --git a/Pods/pop/pop/WebCore/TransformationMatrix.cpp b/Pods/pop/pop/WebCore/TransformationMatrix.cpp index cbfd701..7264ab5 100644 --- a/Pods/pop/pop/WebCore/TransformationMatrix.cpp +++ b/Pods/pop/pop/WebCore/TransformationMatrix.cpp @@ -25,9 +25,11 @@ */ #include "TransformationMatrix.h" -#include "FloatConversion.h" + #include +#include "FloatConversion.h" + inline double deg2rad(double d) { return d * M_PI / 180.0; } inline double rad2deg(double r) { return r * 180.0 / M_PI; } inline double deg2grad(double d) { return d * 400.0 / 360.0; } diff --git a/Pods/pop/pop/WebCore/TransformationMatrix.h b/Pods/pop/pop/WebCore/TransformationMatrix.h index 9dad2e9..b99ae89 100644 --- a/Pods/pop/pop/WebCore/TransformationMatrix.h +++ b/Pods/pop/pop/WebCore/TransformationMatrix.h @@ -27,7 +27,9 @@ #define TransformationMatrix_h #include //for memcpy + #include + #include namespace WebCore { diff --git a/fastlane/Appfile b/fastlane/Appfile new file mode 100644 index 0000000..6cc1d14 --- /dev/null +++ b/fastlane/Appfile @@ -0,0 +1,3 @@ +app_identifier "com.robotsandpencils.Jeff" # The bundle identifier of your app +apple_id "brandon.evans@robotsandpencils.com" # Your Apple email address +team_name "Robots and Pencils Inc." diff --git a/fastlane/Fastfile b/fastlane/Fastfile new file mode 100644 index 0000000..a51b5b4 --- /dev/null +++ b/fastlane/Fastfile @@ -0,0 +1,63 @@ +# vim: autoindent tabstop=2 shiftwidth=2 expandtab softtabstop=2 filetype=ruby +fastlane_version "1.30.2" +default_platform :mac + +platform :mac do + before_all do + # jeff-dev + ENV["SLACK_URL"] = "https://hooks.slack.com/services/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" + end + + desc "Build and submit a new beta build to HockeyApp" + lane :beta do + ensure_git_status_clean + increment_build_number + + xcarchive( + workspace: "Jeff.xcworkspace", + scheme: "Jeff", + configuration: "Beta Release" + ) + + # Create zip of app and dSYM for HockeyApp + sh "zip -r ../Jeff.app.zip ../Jeff.xcarchive/Products/Applications/Jeff.app" + dsym_zip + + # Upload to HockeyApp manually since the built-in action doesn't seem to work + # token = "261dcfc8af7f4033835a2f421481f978" + # json_string = sh "curl -s -F \"status=1\" -F \"notify=0\" -F \"ipa=@../Jeff.app.zip\" -F \"dsym=@../Jeff.app.dSYM.zip\" -H \"X-HockeyAppToken: #{token}\" \"https://rink.hockeyapp.net/api/2/apps/fc5eb937bcf6acbfd098ba02d7d633a8/app_versions/upload\"" + # json = JSON.parse(json_string) + # download_link = json["public_url"] + + # Cleanup build artifacts + # sh "rm -r ../Jeff.xcarchive ../Jeff.app.zip ../Jeff.app.dSYM.zip" + + # build_number = get_build_number(xcodeproj: "Jeff.xcodeproj") + # version_number = get_version_number(xcodeproj: "Jeff.xcodeproj") + # commit_version_bump message: "Bump build number to #{build_number}", xcodeproj: "Jeff.xcodeproj" + # tag = "#{version_number}b#{build_number}" + # sh "git tag -a -m '#{tag}' '#{tag}'" + + # slack( + # message: "Successfully deployed new version of Jeff to HockeyApp. <#{download_link}|Download>" + # ) + end + + desc "Archive a new release build for the App Store" + lane :appstore do + ensure_git_status_clean + + xcarchive( + workspace: "Jeff.xcworkspace", + scheme: "Jeff", + configuration: "Release" + ) + end + + error do |lane, exception| + # slack( + # message: exception.message, + # success: false + # ) + end +end