├── .gitignore ├── Classes ├── Sharing.h ├── Sharing.m ├── TDKTrollController.h ├── TDKTrollController.m └── Trollface.h ├── Example ├── Podfile ├── Podfile.lock ├── Pods │ ├── Headers │ │ ├── Private │ │ │ └── TrollDropKit │ │ │ │ ├── Sharing.h │ │ │ │ ├── TDKTrollController.h │ │ │ │ └── Trollface.h │ │ └── Public │ │ │ └── TrollDropKit │ │ │ └── TDKTrollController.h │ ├── Local Podspecs │ │ └── TrollDropKit.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ ├── project.pbxproj │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ ├── TrollDropKit-OSX.xcscheme │ │ │ └── TrollDropKit-iOS.xcscheme │ └── Target Support Files │ │ ├── Pods-TrollDrop │ │ ├── Pods-TrollDrop-acknowledgements.markdown │ │ ├── Pods-TrollDrop-acknowledgements.plist │ │ ├── Pods-TrollDrop-dummy.m │ │ ├── Pods-TrollDrop-frameworks.sh │ │ ├── Pods-TrollDrop-resources.sh │ │ ├── Pods-TrollDrop.debug.xcconfig │ │ └── Pods-TrollDrop.release.xcconfig │ │ ├── Pods-TrollDropMobile │ │ ├── Pods-TrollDropMobile-acknowledgements.markdown │ │ ├── Pods-TrollDropMobile-acknowledgements.plist │ │ ├── Pods-TrollDropMobile-dummy.m │ │ ├── Pods-TrollDropMobile-frameworks.sh │ │ ├── Pods-TrollDropMobile-resources.sh │ │ ├── Pods-TrollDropMobile.debug.xcconfig │ │ └── Pods-TrollDropMobile.release.xcconfig │ │ ├── TrollDropKit-OSX │ │ ├── TrollDropKit-OSX-dummy.m │ │ ├── TrollDropKit-OSX-prefix.pch │ │ └── TrollDropKit-OSX.xcconfig │ │ └── TrollDropKit-iOS │ │ ├── TrollDropKit-iOS-dummy.m │ │ ├── TrollDropKit-iOS-prefix.pch │ │ └── TrollDropKit-iOS.xcconfig ├── TrollDrop.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ ├── TrollDrop.xcscheme │ │ └── TrollDropMobile.xcscheme ├── TrollDrop.xcworkspace │ └── contents.xcworkspacedata ├── TrollDrop │ └── main.m └── TrollDropMobile │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Assets.xcassets │ └── AppIcon.appiconset │ │ ├── AppIcon60x60@2x.png │ │ ├── AppIcon60x60@3x.png │ │ ├── AppIcon76x76.png │ │ ├── AppIcon76x76@2x.png │ │ ├── AppIcon83.5x83.5@2x.png │ │ └── Contents.json │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ ├── main.m │ └── trollface.jpg ├── LICENSE ├── README.md └── TrollDropKit.podspec /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata 19 | 20 | ## Other 21 | *.xccheckout 22 | *.moved-aside 23 | *.xcuserstate 24 | *.xcscmblueprint 25 | 26 | ## Obj-C/Swift specific 27 | *.hmap 28 | *.ipa 29 | 30 | # CocoaPods 31 | # 32 | # We recommend against adding the Pods directory to your .gitignore. However 33 | # you should judge for yourself, the pros and cons are mentioned at: 34 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 35 | # 36 | # Pods/ 37 | 38 | # Carthage 39 | # 40 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 41 | # Carthage/Checkouts 42 | 43 | Carthage/Build 44 | 45 | # fastlane 46 | # 47 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 48 | # screenshots whenever they are needed. 49 | # For more information about the recommended setup visit: 50 | # https://github.com/fastlane/fastlane/blob/master/docs/Gitignore.md 51 | 52 | fastlane/report.xml 53 | fastlane/screenshots 54 | -------------------------------------------------------------------------------- /Classes/Sharing.h: -------------------------------------------------------------------------------- 1 | // 2 | // Sharing.h 3 | // TrollDropKit 4 | // 5 | // Created by Alexsander Akers on 5/5/16. 6 | // Copyright © 2016 Pandamonia LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | extern CFStringRef kTDKSFBrowserKindAirDrop; 12 | extern CFStringRef kTDKSFOperationKindSender; 13 | extern CFStringRef kTDKSFOperationFileIconKey; 14 | extern CFStringRef kTDKSFOperationItemsKey; 15 | extern CFStringRef kTDKSFOperationNodeKey; 16 | 17 | typedef CF_ENUM(CFIndex, TDKSFOperationEvent) { 18 | kTDKSFOperationEventUnknown, 19 | kTDKSFOperationEventNewOperation, 20 | kTDKSFOperationEventAskUser, 21 | kTDKSFOperationEventWaitForAnswer, 22 | kTDKSFOperationEventCanceled, 23 | kTDKSFOperationEventStarted, 24 | kTDKSFOperationEventPreprocess, 25 | kTDKSFOperationEventProgress, 26 | kTDKSFOperationEventPostprocess, 27 | kTDKSFOperationEventFinished, 28 | kTDKSFOperationEventErrorOccurred, 29 | kTDKSFOperationEventConnecting, 30 | kTDKSFOperationEventInformation, 31 | kTDKSFOperationEventConflict, 32 | kTDKSFOperationEventBlocked, 33 | }; 34 | 35 | typedef struct TDKSFBrowser *TDKSFBrowserRef; 36 | typedef struct TDKSFNode *TDKSFNodeRef; 37 | typedef struct TDKSFOperation *TDKSFOperationRef; 38 | 39 | struct TDKSFBrowserClientContext { 40 | CFIndex version; 41 | void *info; 42 | CFAllocatorRetainCallBack retain; 43 | CFAllocatorReleaseCallBack release; 44 | CFAllocatorCopyDescriptionCallBack copyDescription; 45 | }; 46 | typedef struct TDKSFBrowserClientContext TDKSFBrowserClientContext; 47 | 48 | struct TDKSFOperationClientContext { 49 | CFIndex version; 50 | void *info; 51 | CFAllocatorRetainCallBack retain; 52 | CFAllocatorReleaseCallBack release; 53 | CFAllocatorCopyDescriptionCallBack copyDescription; 54 | }; 55 | typedef struct TDKSFOperationClientContext TDKSFOperationClientContext; 56 | 57 | extern TDKSFBrowserRef (*TDKSFBrowserCreate)(CFAllocatorRef alloc, CFStringRef kind); 58 | extern void (*TDKSFBrowserSetClient)(TDKSFBrowserRef browser, void *callback, TDKSFBrowserClientContext *clientContext); 59 | extern void (*TDKSFBrowserSetDispatchQueue)(TDKSFBrowserRef browser, dispatch_queue_t queue); 60 | extern void (*TDKSFBrowserOpenNode)(TDKSFBrowserRef browser, TDKSFNodeRef node, void *protocol, CFOptionFlags flags); 61 | extern CFArrayRef (*TDKSFBrowserCopyChildren)(TDKSFBrowserRef browser, TDKSFNodeRef node); 62 | extern void (*TDKSFBrowserInvalidate)(TDKSFBrowserRef browser); 63 | extern TDKSFNodeRef (*TDKSFBrowserGetRootNode)(TDKSFBrowserRef browser); 64 | 65 | extern CFStringRef (*TDKSFNodeCopyDisplayName)(TDKSFNodeRef node); 66 | extern CFStringRef (*TDKSFNodeCopyComputerName)(TDKSFNodeRef node); 67 | extern CFStringRef (*TDKSFNodeCopySecondaryName)(TDKSFNodeRef node); 68 | 69 | extern TDKSFOperationRef (*TDKSFOperationCreate)(CFAllocatorRef alloc, CFStringRef kind, void *argA, void *argB); 70 | extern void (*TDKSFOperationSetClient)(TDKSFOperationRef operation, void *callback, TDKSFOperationClientContext *context); 71 | extern void (*TDKSFOperationSetDispatchQueue)(TDKSFOperationRef operation, dispatch_queue_t queue); 72 | extern CFTypeRef (*TDKSFOperationCopyProperty)(TDKSFOperationRef operation, CFStringRef name); 73 | extern void (*TDKSFOperationSetProperty)(TDKSFOperationRef operation, CFStringRef name, CFTypeRef value); 74 | extern void (*TDKSFOperationResume)(TDKSFOperationRef operation); 75 | extern void (*TDKSFOperationCancel)(TDKSFOperationRef operation); 76 | 77 | void TDKSharingInitialize(void); 78 | -------------------------------------------------------------------------------- /Classes/Sharing.m: -------------------------------------------------------------------------------- 1 | // 2 | // Sharing.m 3 | // TrollDropKit 4 | // 5 | // Created by Alexsander Akers on 5/5/16. 6 | // Copyright © 2016 Pandamonia LLC. All rights reserved. 7 | // 8 | 9 | #import "Sharing.h" 10 | 11 | CFStringRef kTDKSFBrowserKindAirDrop; 12 | CFStringRef kTDKSFOperationKindSender; 13 | CFStringRef kTDKSFOperationFileIconKey; 14 | CFStringRef kTDKSFOperationItemsKey; 15 | CFStringRef kTDKSFOperationNodeKey; 16 | 17 | TDKSFBrowserRef (*TDKSFBrowserCreate)(CFAllocatorRef alloc, CFStringRef kind); 18 | void (*TDKSFBrowserSetClient)(TDKSFBrowserRef browser, void *callback, TDKSFBrowserClientContext *clientContext); 19 | void (*TDKSFBrowserSetDispatchQueue)(TDKSFBrowserRef browser, dispatch_queue_t queue); 20 | void (*TDKSFBrowserOpenNode)(TDKSFBrowserRef browser, TDKSFNodeRef node, void *protocol, CFOptionFlags flags); 21 | CFArrayRef (*TDKSFBrowserCopyChildren)(TDKSFBrowserRef browser, TDKSFNodeRef node); 22 | void (*TDKSFBrowserInvalidate)(TDKSFBrowserRef browser); 23 | TDKSFNodeRef (*TDKSFBrowserGetRootNode)(TDKSFBrowserRef browser); 24 | 25 | CFStringRef (*TDKSFNodeCopyDisplayName)(TDKSFNodeRef node); 26 | CFStringRef (*TDKSFNodeCopyComputerName)(TDKSFNodeRef node); 27 | CFStringRef (*TDKSFNodeCopySecondaryName)(TDKSFNodeRef node); 28 | 29 | TDKSFOperationRef (*TDKSFOperationCreate)(CFAllocatorRef alloc, CFStringRef kind, void *argA, void *argB); 30 | void (*TDKSFOperationSetClient)(TDKSFOperationRef operation, void *callback, TDKSFOperationClientContext *context); 31 | void (*TDKSFOperationSetDispatchQueue)(TDKSFOperationRef operation, dispatch_queue_t queue); 32 | CFTypeRef (*TDKSFOperationCopyProperty)(TDKSFOperationRef operation, CFStringRef name); 33 | void (*TDKSFOperationSetProperty)(TDKSFOperationRef operation, CFStringRef name, CFTypeRef value); 34 | void (*TDKSFOperationResume)(TDKSFOperationRef operation); 35 | void (*TDKSFOperationCancel)(TDKSFOperationRef operation); 36 | 37 | static void __TDKSharingInitialize(void *context) { 38 | CFURLRef bundleURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFSTR("/System/Library/PrivateFrameworks/Sharing.framework"), kCFURLPOSIXPathStyle, false); 39 | CFBundleRef bundle = CFBundleCreate(kCFAllocatorDefault, bundleURL); 40 | CFRelease(bundleURL); 41 | if (!bundle) return; 42 | 43 | CFErrorRef error = NULL; 44 | if (!CFBundleLoadExecutableAndReturnError(bundle, &error)) { 45 | CFRelease(bundle); 46 | return; 47 | } 48 | 49 | #define SYMBOLS \ 50 | WRAPPER(SFBrowserKindAirDrop) \ 51 | WRAPPER(SFOperationKindSender) \ 52 | WRAPPER(SFOperationFileIconKey) \ 53 | WRAPPER(SFOperationItemsKey) \ 54 | WRAPPER(SFOperationNodeKey) \ 55 | 56 | #define WRAPPER(X) CFSTR("k" #X), 57 | CFStringRef symbolNames[] = { SYMBOLS }; 58 | #undef WRAPPER 59 | 60 | #define WRAPPER(X) (void *)&kTDK ## X, 61 | void **symbolDestinations[] = { SYMBOLS }; 62 | #undef WRAPPER 63 | 64 | CFArrayRef symbolNamesArray = CFArrayCreate(kCFAllocatorDefault, (const void **)symbolNames, sizeof(symbolNames) / sizeof(*symbolNames), &kCFTypeArrayCallBacks); 65 | 66 | void **symbols[sizeof(symbolNames) / sizeof(*symbolNames)]; 67 | CFBundleGetDataPointersForNames(bundle, symbolNamesArray, (void **)symbols); 68 | CFRelease(symbolNamesArray); 69 | 70 | for (size_t i = 0; i < sizeof(symbolNames) / sizeof(*symbolNames); i++) { 71 | NSCAssert(symbols[i] != NULL, @"Could not find pointer for symbol named \"%@\"", (__bridge id)symbolNames[i]); 72 | *symbolDestinations[i] = *symbols[i]; 73 | } 74 | #undef SYMBOLS 75 | 76 | #define FUNCTIONS \ 77 | WRAPPER(SFBrowserCreate) \ 78 | WRAPPER(SFBrowserSetClient) \ 79 | WRAPPER(SFBrowserSetDispatchQueue) \ 80 | WRAPPER(SFBrowserOpenNode) \ 81 | WRAPPER(SFBrowserCopyChildren) \ 82 | WRAPPER(SFBrowserInvalidate) \ 83 | WRAPPER(SFBrowserGetRootNode) \ 84 | WRAPPER(SFNodeCopyDisplayName) \ 85 | WRAPPER(SFNodeCopyComputerName) \ 86 | WRAPPER(SFNodeCopySecondaryName) \ 87 | WRAPPER(SFOperationCreate) \ 88 | WRAPPER(SFOperationSetClient) \ 89 | WRAPPER(SFOperationSetDispatchQueue) \ 90 | WRAPPER(SFOperationCopyProperty) \ 91 | WRAPPER(SFOperationSetProperty) \ 92 | WRAPPER(SFOperationResume) \ 93 | WRAPPER(SFOperationCancel) \ 94 | 95 | #define WRAPPER(X) CFSTR(#X), 96 | CFStringRef functionNames[] = { FUNCTIONS }; 97 | #undef WRAPPER 98 | 99 | #define WRAPPER(X) (void (**)(void))&TDK ## X, 100 | void (**functionDestinations[])(void) = { FUNCTIONS }; 101 | #undef WRAPPER 102 | 103 | CFArrayRef functionNamesArray = CFArrayCreate(kCFAllocatorDefault, (const void **)functionNames, sizeof(functionNames) / sizeof(*functionNames), &kCFTypeArrayCallBacks); 104 | 105 | void (*functions[sizeof(functionNames) / sizeof(*functionNames)])(void); 106 | CFBundleGetFunctionPointersForNames(bundle, functionNamesArray, (void **)functions); 107 | CFRelease(functionNamesArray); 108 | 109 | for (size_t i = 0; i < sizeof(functionNames) / sizeof(*functionNames); i++) { 110 | NSCAssert(functions[i] != NULL, @"Could not find pointer for function named \"%@\"", (__bridge id)functionNames[i]); 111 | *(functionDestinations[i]) = functions[i]; 112 | } 113 | #undef FUNCTIONS 114 | 115 | CFRelease(bundle); 116 | } 117 | 118 | void TDKSharingInitialize(void) { 119 | static dispatch_once_t onceToken; 120 | dispatch_once_f(&onceToken, NULL, __TDKSharingInitialize); 121 | } 122 | -------------------------------------------------------------------------------- /Classes/TDKTrollController.h: -------------------------------------------------------------------------------- 1 | // 2 | // TDKTrollController.h 3 | // TrollDropKit 4 | // 5 | // Created by Alexsander Akers on 5/5/16. 6 | // Copyright © 2016 Pandamonia LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface TDKPerson : NSObject 14 | 15 | @property (nonatomic, readonly) NSString *displayName; 16 | @property (nonatomic, readonly) NSString *computerName; 17 | @property (nonatomic, readonly) NSString *secondaryName; 18 | 19 | @end 20 | 21 | typedef BOOL (^TDKTrollControllerShouldTrollHandler)(TDKPerson *person); 22 | typedef NSURL *_Nullable (^TDKTrollControllerSharedURLOverrideHandler)(TDKPerson *person); 23 | 24 | @interface TDKTrollController : NSObject 25 | 26 | /// The duration to wait after trolling before trolling again. 27 | @property (nonatomic) NSTimeInterval rechargeDuration; 28 | 29 | /// The local file URL with which to troll. Defaults to a troll face image. 30 | @property (nonatomic, copy, null_resettable) NSURL *sharedURL; 31 | 32 | /// Whether the scanner is currently active. 33 | @property (nonatomic, getter=isRunning) BOOL running; 34 | 35 | /// A block handler that allows for fine-grained control of whom to troll. 36 | @property (nonatomic, copy) TDKTrollControllerShouldTrollHandler shouldTrollHandler; 37 | 38 | /// A block handler that allows customization of the shared file for certain people. 39 | @property (nonatomic, copy) TDKTrollControllerSharedURLOverrideHandler sharedURLOverrideHandler; 40 | 41 | - (instancetype)init NS_DESIGNATED_INITIALIZER; 42 | 43 | /// Start scanning for people and troll them. 44 | - (void)start; 45 | 46 | /// Stop scanning for people. 47 | - (void)stop; 48 | 49 | @end 50 | 51 | NS_ASSUME_NONNULL_END 52 | -------------------------------------------------------------------------------- /Classes/TDKTrollController.m: -------------------------------------------------------------------------------- 1 | // 2 | // TDKTrollController.m 3 | // TrollDropKit 4 | // 5 | // Created by Alexsander Akers on 5/5/16. 6 | // Copyright © 2016 Pandamonia LLC. All rights reserved. 7 | // 8 | 9 | #import "TDKTrollController.h" 10 | #import "Sharing.h" 11 | #import "Trollface.h" 12 | 13 | static void browserCallback(TDKSFBrowserRef browser, TDKSFNodeRef node, CFArrayRef children, void *argA, void *argB, void *context); 14 | static void operationCallback(TDKSFOperationRef operation, TDKSFOperationEvent event, CFTypeRef results, void *context); 15 | static void dictionaryValueApplier(const void *key, const void *value, void *context); 16 | 17 | @implementation TDKPerson 18 | 19 | + (instancetype)personWithNode:(id)node 20 | { 21 | TDKSFNodeRef nodeRef = (__bridge TDKSFNodeRef)node; 22 | 23 | TDKPerson *person = [[self alloc] init]; 24 | person->_displayName = (__bridge_transfer id)TDKSFNodeCopyDisplayName(nodeRef); 25 | person->_computerName = (__bridge_transfer id)TDKSFNodeCopyComputerName(nodeRef); 26 | person->_secondaryName = (__bridge_transfer id)TDKSFNodeCopySecondaryName(nodeRef); 27 | 28 | return person; 29 | } 30 | 31 | @end 32 | 33 | @interface TDKTrollController () 34 | 35 | @property (nonatomic, nullable) TDKSFBrowserRef browser; 36 | @property (nonatomic, nullable, copy) NSSet /* */ *people; 37 | 38 | @end 39 | 40 | @implementation TDKTrollController 41 | { 42 | CFMutableDictionaryRef /* */ _operations; 43 | } 44 | 45 | @synthesize sharedURL = _sharedURL; 46 | 47 | + (void)initialize 48 | { 49 | if (self == [TDKTrollController class]) { 50 | TDKSharingInitialize(); 51 | } 52 | } 53 | 54 | - (instancetype)init 55 | { 56 | self = [super init]; 57 | if (self) { 58 | _operations = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); 59 | _rechargeDuration = 15.0; 60 | } 61 | 62 | return self; 63 | } 64 | 65 | - (void)dealloc 66 | { 67 | // Stop if we are running. 68 | // Invalidates and cleans up browsing state. 69 | [self stop]; 70 | 71 | // Clean up CF ivars. 72 | CFRelease(_operations); 73 | } 74 | 75 | #pragma mark - Accessors 76 | 77 | - (NSURL *)sharedURL 78 | { 79 | if (!_sharedURL) { 80 | _sharedURL = [TDKTrollController writeTrollfaceToTemporaryFile]; 81 | } 82 | 83 | return _sharedURL; 84 | } 85 | 86 | - (void)setSharedURL:(NSURL *)newURL 87 | { 88 | _sharedURL = newURL ? [newURL copy] : [TDKTrollController writeTrollfaceToTemporaryFile]; 89 | } 90 | 91 | - (void)setBrowser:(TDKSFBrowserRef)browser 92 | { 93 | // Release old browser. 94 | if (_browser) CFRelease(_browser); 95 | 96 | // Retain new browser - if there is one. 97 | _browser = browser ? (TDKSFBrowserRef)CFRetain(browser) : NULL; 98 | } 99 | 100 | #pragma mark - Node Operations 101 | 102 | /// The in-progress operation for the node, if it exists. 103 | - (nullable id)operationForNode:(id)node 104 | { 105 | return (__bridge id)CFDictionaryGetValue(_operations, (__bridge void *)node); 106 | } 107 | 108 | /// Associates an operation with a given node. 109 | - (void)setOperation:(nullable id)operation forNode:(id)node 110 | { 111 | void *key = (__bridge void *)node; 112 | if (operation) { 113 | CFDictionarySetValue(_operations, key, (__bridge void *)operation); 114 | } else { 115 | CFDictionaryRemoveValue(_operations, key); 116 | } 117 | } 118 | 119 | + (id)propertyFromNode:(id)node withCopyFunction:(CFTypeRef (*)(TDKSFNodeRef))function 120 | { 121 | return (__bridge_transfer id)function((__bridge TDKSFNodeRef)node); 122 | } 123 | 124 | /// If there is a \c sharedURLOverrideHandler and it returns a non-nil URL, prefer that over the \c sharedURL. 125 | - (NSURL *)fileURLForNode:(id)node 126 | { 127 | NSURL *fileURL = self.sharedURL; 128 | if (self.sharedURLOverrideHandler) { 129 | TDKPerson *person = [TDKPerson personWithNode:node]; 130 | NSURL *overrideURL = self.sharedURLOverrideHandler(person); 131 | if (overrideURL) { 132 | fileURL = overrideURL; 133 | } 134 | } 135 | 136 | return fileURL; 137 | } 138 | 139 | #pragma mark - Start / Stop 140 | 141 | /// Whether the browser is running. 142 | - (BOOL)isRunning 143 | { 144 | return self.browser != NULL; 145 | } 146 | 147 | /// KVO compliance for \c isRunning 148 | + (NSSet *)keyPathsForValuesAffectingRunning 149 | { 150 | return [NSSet setWithObject:@"browser"]; 151 | } 152 | 153 | /// Start the browser. 154 | - (void)start 155 | { 156 | if (self.running) return; 157 | 158 | TDKSFBrowserClientContext clientContext = { 159 | .version = 0, 160 | .info = (__bridge void *)self, 161 | }; 162 | 163 | TDKSFBrowserRef browser = TDKSFBrowserCreate(kCFAllocatorDefault, kTDKSFBrowserKindAirDrop); 164 | TDKSFBrowserSetClient(browser, &browserCallback, &clientContext); 165 | TDKSFBrowserSetDispatchQueue(browser, dispatch_get_main_queue()); 166 | TDKSFBrowserOpenNode(browser, NULL, NULL, 0); 167 | self.browser = browser; 168 | } 169 | 170 | /// Stop the browser and clean up browsing state. 171 | - (void)stop 172 | { 173 | if (!self.running) return; 174 | 175 | // Cancel dormant trollings. 176 | [NSObject cancelPreviousPerformRequestsWithTarget:self]; 177 | 178 | // Cancel pending operations. 179 | CFDictionaryApplyFunction(_operations, &dictionaryValueApplier, &TDKSFOperationCancel); 180 | 181 | // Empty operations map. 182 | CFDictionaryRemoveAllValues(_operations); 183 | 184 | // Invalidate the browser. 185 | TDKSFBrowserInvalidate(self.browser); 186 | self.browser = NULL; 187 | } 188 | 189 | #pragma mark - Troll 190 | 191 | /// Troll the person/device identified by \c node (\c TDKSFNodeRef) 192 | - (void)troll:(id)node 193 | { 194 | NSURL *fileURL = [self fileURLForNode:node]; 195 | 196 | TDKSFOperationClientContext clientContext = { 197 | .version = 0, 198 | .info = (__bridge void *)self, 199 | }; 200 | 201 | 202 | CGDataProviderRef dataProvider = CGDataProviderCreateWithData(NULL, __trollface, __trollface_len, NULL); 203 | CGImageRef fileIcon = CGImageCreateWithJPEGDataProvider(dataProvider, NULL, false, kCGRenderingIntentDefault); 204 | 205 | TDKSFOperationRef operation = TDKSFOperationCreate(kCFAllocatorDefault, kTDKSFOperationKindSender, NULL, NULL); 206 | TDKSFOperationSetClient(operation, &operationCallback, &clientContext); 207 | TDKSFOperationSetProperty(operation, kTDKSFOperationItemsKey, (__bridge CFArrayRef)@[fileURL]); 208 | TDKSFOperationSetProperty(operation, kTDKSFOperationFileIconKey, fileIcon); 209 | TDKSFOperationSetProperty(operation, kTDKSFOperationNodeKey, (__bridge TDKSFNodeRef)node); 210 | TDKSFOperationSetDispatchQueue(operation, dispatch_get_main_queue()); 211 | TDKSFOperationResume(operation); 212 | 213 | CGImageRelease(fileIcon); 214 | CGDataProviderRelease(dataProvider); 215 | 216 | [self setOperation:(__bridge_transfer id)operation forNode:node]; 217 | } 218 | 219 | #pragma mark - Callbacks 220 | 221 | /// Browser callback. 222 | /// Invoked when a child is added or removed from the browser's root node. 223 | /// Invoked from the C function at EOF. 224 | - (void)handleBrowserCallback:(TDKSFBrowserRef)browser node:(TDKSFNodeRef)node children:(CFArrayRef)children 225 | { 226 | NSArray *nodes = (__bridge_transfer NSArray *)TDKSFBrowserCopyChildren(browser, NULL); 227 | NSMutableSet *newPeople = [NSMutableSet setWithCapacity:nodes.count]; 228 | 229 | for (id node in nodes) { 230 | BOOL isAwareOfPerson = [self.people containsObject:node] || [self operationForNode:node] != nil; 231 | BOOL shouldTroll = !self.shouldTrollHandler || self.shouldTrollHandler([TDKPerson personWithNode:node]); 232 | 233 | if (!isAwareOfPerson && shouldTroll) { 234 | [self troll:node]; 235 | } 236 | 237 | [newPeople addObject:node]; 238 | } 239 | 240 | self.people = newPeople; 241 | } 242 | 243 | /// Operation callback. 244 | /// Invoked when the operation triggers an event. 245 | /// Invoked from the C function at EOF. 246 | - (void)handleOperationCallback:(TDKSFOperationRef)operation event:(TDKSFOperationEvent)event results:(CFTypeRef)results 247 | { 248 | switch (event) { 249 | case kTDKSFOperationEventAskUser: 250 | // Seems that .AskUser requires the operation to be resumed. 251 | TDKSFOperationResume(operation); 252 | break; 253 | 254 | case kTDKSFOperationEventCanceled: 255 | case kTDKSFOperationEventErrorOccurred: 256 | case kTDKSFOperationEventFinished: { 257 | // Schedule a new trolling if the operation has ended. 258 | id node = (__bridge_transfer id)TDKSFOperationCopyProperty(operation, kTDKSFOperationNodeKey); 259 | [self setOperation:nil forNode:node]; 260 | [self performSelector:@selector(troll:) withObject:node afterDelay:self.rechargeDuration]; 261 | break; 262 | } 263 | 264 | default: 265 | break; 266 | } 267 | } 268 | 269 | #pragma mark - Trollface Data / URL Helpers 270 | 271 | /// The trollface image as JPEG data. 272 | + (NSData *)trollface 273 | { 274 | return [NSData dataWithBytesNoCopy:__trollface length:__trollface_len freeWhenDone:NO]; 275 | } 276 | 277 | /// The destination (in temporary storage) of the trollface file. 278 | + (NSURL *)temporaryTrollfaceURL 279 | { 280 | return [NSURL fileURLWithPathComponents:@[NSTemporaryDirectory(), @"trollface.jpg"]]; 281 | } 282 | 283 | /// Writes the trollface data to a temporary URL and returns that URL. 284 | + (NSURL *)writeTrollfaceToTemporaryFile 285 | { 286 | NSURL *trollfaceURL = [self temporaryTrollfaceURL]; 287 | [[self trollface] writeToURL:trollfaceURL options:NSDataWritingWithoutOverwriting error:NULL]; 288 | return trollfaceURL; 289 | } 290 | 291 | @end 292 | 293 | static void browserCallback(TDKSFBrowserRef browser, TDKSFNodeRef node, CFArrayRef children, void *argA, void *argB, void *context) { 294 | [(__bridge TDKTrollController *)context handleBrowserCallback:browser node:node children:children]; 295 | } 296 | 297 | static void operationCallback(TDKSFOperationRef operation, TDKSFOperationEvent event, CFTypeRef results, void *context) { 298 | [(__bridge TDKTrollController *)context handleOperationCallback:operation event:event results:results]; 299 | } 300 | 301 | static void dictionaryValueApplier(const void *key, const void *value, void *context) { 302 | ((void (*)(const void *))context)(value); 303 | } 304 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | target 'TrollDrop' do 2 | platform :osx, '10.7' 3 | pod 'TrollDropKit', path: '../' 4 | end 5 | 6 | target 'TrollDropMobile' do 7 | platform :ios, '7.0' 8 | pod 'TrollDropKit', path: '../' 9 | end 10 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - TrollDropKit (0.3.0) 3 | 4 | DEPENDENCIES: 5 | - TrollDropKit (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | TrollDropKit: 9 | :path: ../ 10 | 11 | SPEC CHECKSUMS: 12 | TrollDropKit: 77e1ebb3e42024783056bd8e4729199ce16f8f20 13 | 14 | PODFILE CHECKSUM: e36692302cfedb8ab1a178568b6556cba12aa692 15 | 16 | COCOAPODS: 1.0.0 17 | -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/TrollDropKit/Sharing.h: -------------------------------------------------------------------------------- 1 | ../../../../../Classes/Sharing.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/TrollDropKit/TDKTrollController.h: -------------------------------------------------------------------------------- 1 | ../../../../../Classes/TDKTrollController.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/TrollDropKit/Trollface.h: -------------------------------------------------------------------------------- 1 | ../../../../../Classes/Trollface.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/TrollDropKit/TDKTrollController.h: -------------------------------------------------------------------------------- 1 | ../../../../../Classes/TDKTrollController.h -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/TrollDropKit.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TrollDropKit", 3 | "version": "0.3.0", 4 | "summary": "Send trollfaces via AirDrop to nearby devices.", 5 | "description": "Scans for nearby devices with AirDrop enabled and sends them a trollface image (or a file of your choice).", 6 | "homepage": "https://github.com/a2/TrollDropKit", 7 | "license": "MIT", 8 | "authors": { 9 | "Alexsander Akers": "me@a2.io" 10 | }, 11 | "social_media_url": "https://twitter.com/a2", 12 | "source": { 13 | "git": "https://github.com/a2/TrollDropKit.git", 14 | "tag": "0.3.0" 15 | }, 16 | "source_files": [ 17 | "Classes", 18 | "Classes/**/*.{h,m}" 19 | ], 20 | "public_header_files": "Classes/TDKTrollController.h", 21 | "platforms": { 22 | "ios": "7.0", 23 | "tvos": "9.0", 24 | "osx": "10.7" 25 | }, 26 | "requires_arc": true 27 | } 28 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - TrollDropKit (0.3.0) 3 | 4 | DEPENDENCIES: 5 | - TrollDropKit (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | TrollDropKit: 9 | :path: ../ 10 | 11 | SPEC CHECKSUMS: 12 | TrollDropKit: 77e1ebb3e42024783056bd8e4729199ce16f8f20 13 | 14 | PODFILE CHECKSUM: e36692302cfedb8ab1a178568b6556cba12aa692 15 | 16 | COCOAPODS: 1.0.0 17 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 02F3F3EBDCB8E5FC540E2A40C8C439B6 /* TDKTrollController.m in Sources */ = {isa = PBXBuildFile; fileRef = 471BC8B11F720A9E6B1EFC57CEAFAF10 /* TDKTrollController.m */; }; 11 | 06346BF9955137D7ACC12118E4AC4AC1 /* Pods-TrollDrop-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7670C1B93AA2B6DB15821D1DEBECF100 /* Pods-TrollDrop-dummy.m */; }; 12 | 0AFA5C0ED1F6B8F534DD52803C6DF244 /* Sharing.m in Sources */ = {isa = PBXBuildFile; fileRef = 3137AB9BE00E85847BE6BCE0EABF9504 /* Sharing.m */; }; 13 | 130681723F548000581B2CB9EECE6F8F /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE25DD04263CA735DBC0065D686C708D /* Cocoa.framework */; }; 14 | 32A8E71B1BD6147D64528C6DBD91DAAB /* TDKTrollController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1531B5D2D0BF70DDD934FB33DAE4F14B /* TDKTrollController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 15 | 3C06284F45B52D67B5DD5798021DC0CA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE25DD04263CA735DBC0065D686C708D /* Cocoa.framework */; }; 16 | 48F9B4BE7D313578EDE6DFD98E5A8B36 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B0C89EDC2EC27D60F4934F3C043A7D91 /* Foundation.framework */; }; 17 | 5280632999EFF5ED80F1A74E397AFB02 /* Pods-TrollDropMobile-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CF22BD436ED3F57E60D1E5C7615C640 /* Pods-TrollDropMobile-dummy.m */; }; 18 | 5939D89C69E70B0380D4B9EED499C758 /* TDKTrollController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1531B5D2D0BF70DDD934FB33DAE4F14B /* TDKTrollController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 19 | 643CC6B8096CCD62433A1524135BB86E /* TrollDropKit-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F5E024D94A52D7689F5BB8063275670F /* TrollDropKit-iOS-dummy.m */; }; 20 | 67C85C447249E8EEF817105650C44014 /* Sharing.h in Headers */ = {isa = PBXBuildFile; fileRef = 27C1C3C56273428BB566A33C26BE25CA /* Sharing.h */; settings = {ATTRIBUTES = (Project, ); }; }; 21 | 6D42567DADDF99CBD26E850BC9AB3531 /* Trollface.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D570745C650E8D715051CA9B41817B7 /* Trollface.h */; settings = {ATTRIBUTES = (Project, ); }; }; 22 | 6E254E76CE211943D31240EF6E1C4FF4 /* Sharing.h in Headers */ = {isa = PBXBuildFile; fileRef = 27C1C3C56273428BB566A33C26BE25CA /* Sharing.h */; settings = {ATTRIBUTES = (Project, ); }; }; 23 | 82434CCE81D5D76F83531F0741A77D03 /* TrollDropKit-OSX-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 76DF68F372BA2E819494AF42357FD996 /* TrollDropKit-OSX-dummy.m */; }; 24 | 8A706CE1A8A6B6F901FAA312E737BE88 /* TDKTrollController.m in Sources */ = {isa = PBXBuildFile; fileRef = 471BC8B11F720A9E6B1EFC57CEAFAF10 /* TDKTrollController.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 25 | 8EC1739927600A9D1EB5602545C4D300 /* Sharing.m in Sources */ = {isa = PBXBuildFile; fileRef = 3137AB9BE00E85847BE6BCE0EABF9504 /* Sharing.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 26 | E87F195582DB5FD5185CAA8E79DC508E /* Trollface.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D570745C650E8D715051CA9B41817B7 /* Trollface.h */; settings = {ATTRIBUTES = (Project, ); }; }; 27 | ED149B832A67D1CFAF19E7BDE53D4CB2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B0C89EDC2EC27D60F4934F3C043A7D91 /* Foundation.framework */; }; 28 | /* End PBXBuildFile section */ 29 | 30 | /* Begin PBXContainerItemProxy section */ 31 | 7A9E851455E4ADB9FBAC89796BD36D7B /* PBXContainerItemProxy */ = { 32 | isa = PBXContainerItemProxy; 33 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 34 | proxyType = 1; 35 | remoteGlobalIDString = D09A210D0834F64F00B2F5F856AF663D; 36 | remoteInfo = "TrollDropKit-OSX"; 37 | }; 38 | E8A06C9C71700FF52B3B6DBB0D782B9D /* PBXContainerItemProxy */ = { 39 | isa = PBXContainerItemProxy; 40 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 41 | proxyType = 1; 42 | remoteGlobalIDString = FF4CF4A14B7A1FE145AAF77749CE6507; 43 | remoteInfo = "TrollDropKit-iOS"; 44 | }; 45 | /* End PBXContainerItemProxy section */ 46 | 47 | /* Begin PBXFileReference section */ 48 | 1531B5D2D0BF70DDD934FB33DAE4F14B /* TDKTrollController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TDKTrollController.h; sourceTree = ""; }; 49 | 1CBF75246AF2BF0866F77C25F2B572DA /* libPods-TrollDrop.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-TrollDrop.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 50 | 1EAE7381709E155ACAFE6317164CCCC2 /* Pods-TrollDropMobile-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-TrollDropMobile-acknowledgements.markdown"; sourceTree = ""; }; 51 | 27C1C3C56273428BB566A33C26BE25CA /* Sharing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Sharing.h; sourceTree = ""; }; 52 | 2D665C248D04C81EF879C09240AEA7F4 /* Pods-TrollDrop-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-TrollDrop-resources.sh"; sourceTree = ""; }; 53 | 2E369395C7CD71F249B010465FEEFD2E /* Pods-TrollDrop-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-TrollDrop-acknowledgements.plist"; sourceTree = ""; }; 54 | 3137AB9BE00E85847BE6BCE0EABF9504 /* Sharing.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = Sharing.m; sourceTree = ""; }; 55 | 3F82463F5FFD8629BDEEEE3119166904 /* TrollDropKit-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "TrollDropKit-iOS-prefix.pch"; path = "../TrollDropKit-iOS/TrollDropKit-iOS-prefix.pch"; sourceTree = ""; }; 56 | 4065487740598FA9097CD029BFD2C861 /* Pods-TrollDrop.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-TrollDrop.debug.xcconfig"; sourceTree = ""; }; 57 | 471BC8B11F720A9E6B1EFC57CEAFAF10 /* TDKTrollController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = TDKTrollController.m; sourceTree = ""; }; 58 | 4856FBEC6DDE00D4F9F29B4BBD04AB14 /* libTrollDropKit-iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libTrollDropKit-iOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 59 | 5170AE00B4B3350B42DD253712F2559D /* Pods-TrollDropMobile-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-TrollDropMobile-frameworks.sh"; sourceTree = ""; }; 60 | 58D696EA3EA222568DA6FB36A5726969 /* Pods-TrollDrop.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-TrollDrop.release.xcconfig"; sourceTree = ""; }; 61 | 60168DC8262DCA06819B2670D0840C7D /* TrollDropKit-OSX-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TrollDropKit-OSX-prefix.pch"; sourceTree = ""; }; 62 | 74CF5EBB006626DE1202AD33CCB15B57 /* libTrollDropKit-OSX.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libTrollDropKit-OSX.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 63 | 7670C1B93AA2B6DB15821D1DEBECF100 /* Pods-TrollDrop-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-TrollDrop-dummy.m"; sourceTree = ""; }; 64 | 76DF68F372BA2E819494AF42357FD996 /* TrollDropKit-OSX-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "TrollDropKit-OSX-dummy.m"; sourceTree = ""; }; 65 | 7D570745C650E8D715051CA9B41817B7 /* Trollface.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Trollface.h; sourceTree = ""; }; 66 | 8248C5F0AE0BD992397502CF86DD95A5 /* libPods-TrollDropMobile.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-TrollDropMobile.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 67 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 68 | 9B8ED3D1CBDA51095827D5AC88562FDA /* Pods-TrollDropMobile.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-TrollDropMobile.debug.xcconfig"; sourceTree = ""; }; 69 | 9CF22BD436ED3F57E60D1E5C7615C640 /* Pods-TrollDropMobile-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-TrollDropMobile-dummy.m"; sourceTree = ""; }; 70 | A7B5C5EDB36DC056864E617183B52890 /* Pods-TrollDrop-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-TrollDrop-frameworks.sh"; sourceTree = ""; }; 71 | B0C89EDC2EC27D60F4934F3C043A7D91 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 72 | BF64CBA3ACB0A17C914208C8368CF879 /* TrollDropKit-OSX.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "TrollDropKit-OSX.xcconfig"; sourceTree = ""; }; 73 | CA3D8080C1944544B2A7ACEFCC05900E /* Pods-TrollDropMobile.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-TrollDropMobile.release.xcconfig"; sourceTree = ""; }; 74 | D4A39521D83CBBF191CFAF74D1464F44 /* Pods-TrollDropMobile-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-TrollDropMobile-acknowledgements.plist"; sourceTree = ""; }; 75 | DE25DD04263CA735DBC0065D686C708D /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; 76 | E457B3AC61751CEEA4BA8F4E633F573E /* Pods-TrollDropMobile-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-TrollDropMobile-resources.sh"; sourceTree = ""; }; 77 | EE6086F536B38BEA6B39665985AB79CC /* TrollDropKit-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "TrollDropKit-iOS.xcconfig"; path = "../TrollDropKit-iOS/TrollDropKit-iOS.xcconfig"; sourceTree = ""; }; 78 | F4784A34B42B770079FD5F5A9C42D1E1 /* Pods-TrollDrop-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-TrollDrop-acknowledgements.markdown"; sourceTree = ""; }; 79 | F5E024D94A52D7689F5BB8063275670F /* TrollDropKit-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "TrollDropKit-iOS-dummy.m"; path = "../TrollDropKit-iOS/TrollDropKit-iOS-dummy.m"; sourceTree = ""; }; 80 | /* End PBXFileReference section */ 81 | 82 | /* Begin PBXFrameworksBuildPhase section */ 83 | 4365FFD7A57E4F2E8433A8C7A9E1386C /* Frameworks */ = { 84 | isa = PBXFrameworksBuildPhase; 85 | buildActionMask = 2147483647; 86 | files = ( 87 | ED149B832A67D1CFAF19E7BDE53D4CB2 /* Foundation.framework in Frameworks */, 88 | ); 89 | runOnlyForDeploymentPostprocessing = 0; 90 | }; 91 | 9BC9B015F07E4E26EA8A48B0E84F7BCA /* Frameworks */ = { 92 | isa = PBXFrameworksBuildPhase; 93 | buildActionMask = 2147483647; 94 | files = ( 95 | 130681723F548000581B2CB9EECE6F8F /* Cocoa.framework in Frameworks */, 96 | ); 97 | runOnlyForDeploymentPostprocessing = 0; 98 | }; 99 | AF66D70E3FB368F90F25328BB73A2094 /* Frameworks */ = { 100 | isa = PBXFrameworksBuildPhase; 101 | buildActionMask = 2147483647; 102 | files = ( 103 | 48F9B4BE7D313578EDE6DFD98E5A8B36 /* Foundation.framework in Frameworks */, 104 | ); 105 | runOnlyForDeploymentPostprocessing = 0; 106 | }; 107 | D952D7AFACCA7AFEACCE821A2AAE0E86 /* Frameworks */ = { 108 | isa = PBXFrameworksBuildPhase; 109 | buildActionMask = 2147483647; 110 | files = ( 111 | 3C06284F45B52D67B5DD5798021DC0CA /* Cocoa.framework in Frameworks */, 112 | ); 113 | runOnlyForDeploymentPostprocessing = 0; 114 | }; 115 | /* End PBXFrameworksBuildPhase section */ 116 | 117 | /* Begin PBXGroup section */ 118 | 097CF7791EB6F38EA598B2FFCA306B25 /* Classes */ = { 119 | isa = PBXGroup; 120 | children = ( 121 | 27C1C3C56273428BB566A33C26BE25CA /* Sharing.h */, 122 | 3137AB9BE00E85847BE6BCE0EABF9504 /* Sharing.m */, 123 | 1531B5D2D0BF70DDD934FB33DAE4F14B /* TDKTrollController.h */, 124 | 471BC8B11F720A9E6B1EFC57CEAFAF10 /* TDKTrollController.m */, 125 | 7D570745C650E8D715051CA9B41817B7 /* Trollface.h */, 126 | ); 127 | path = Classes; 128 | sourceTree = ""; 129 | }; 130 | 2BC7E6749AFBCEC59F2E8CC958BC663F /* Products */ = { 131 | isa = PBXGroup; 132 | children = ( 133 | 1CBF75246AF2BF0866F77C25F2B572DA /* libPods-TrollDrop.a */, 134 | 8248C5F0AE0BD992397502CF86DD95A5 /* libPods-TrollDropMobile.a */, 135 | 4856FBEC6DDE00D4F9F29B4BBD04AB14 /* libTrollDropKit-iOS.a */, 136 | 74CF5EBB006626DE1202AD33CCB15B57 /* libTrollDropKit-OSX.a */, 137 | ); 138 | name = Products; 139 | sourceTree = ""; 140 | }; 141 | 3853DE022332E61F561BAB12A98090F6 /* Development Pods */ = { 142 | isa = PBXGroup; 143 | children = ( 144 | 5FD3F189664BA13C3FCE95E8A445A3FE /* TrollDropKit */, 145 | ); 146 | name = "Development Pods"; 147 | sourceTree = ""; 148 | }; 149 | 3AEF7D761E8EA8419BB4A7000AB770CB /* Frameworks */ = { 150 | isa = PBXGroup; 151 | children = ( 152 | DEA55AE7EB4A1B09C009B82BA492BD02 /* iOS */, 153 | 9304B30CB87FDB77B6CEE9FB6B800855 /* OS X */, 154 | ); 155 | name = Frameworks; 156 | sourceTree = ""; 157 | }; 158 | 3F0C50BE0FB9CBEEBE6A7B2DE19E2BE5 /* Pods-TrollDropMobile */ = { 159 | isa = PBXGroup; 160 | children = ( 161 | 1EAE7381709E155ACAFE6317164CCCC2 /* Pods-TrollDropMobile-acknowledgements.markdown */, 162 | D4A39521D83CBBF191CFAF74D1464F44 /* Pods-TrollDropMobile-acknowledgements.plist */, 163 | 9CF22BD436ED3F57E60D1E5C7615C640 /* Pods-TrollDropMobile-dummy.m */, 164 | 5170AE00B4B3350B42DD253712F2559D /* Pods-TrollDropMobile-frameworks.sh */, 165 | E457B3AC61751CEEA4BA8F4E633F573E /* Pods-TrollDropMobile-resources.sh */, 166 | 9B8ED3D1CBDA51095827D5AC88562FDA /* Pods-TrollDropMobile.debug.xcconfig */, 167 | CA3D8080C1944544B2A7ACEFCC05900E /* Pods-TrollDropMobile.release.xcconfig */, 168 | ); 169 | name = "Pods-TrollDropMobile"; 170 | path = "Target Support Files/Pods-TrollDropMobile"; 171 | sourceTree = ""; 172 | }; 173 | 5FD3F189664BA13C3FCE95E8A445A3FE /* TrollDropKit */ = { 174 | isa = PBXGroup; 175 | children = ( 176 | 097CF7791EB6F38EA598B2FFCA306B25 /* Classes */, 177 | 9E1EE6DDD59792D415DC2AF328BDB2A3 /* Support Files */, 178 | ); 179 | name = TrollDropKit; 180 | path = ../..; 181 | sourceTree = ""; 182 | }; 183 | 711864B544F6C7CE2C3E8D68BA1B0607 /* Targets Support Files */ = { 184 | isa = PBXGroup; 185 | children = ( 186 | 9C923D813F91826FCECD45DAFE93EC26 /* Pods-TrollDrop */, 187 | 3F0C50BE0FB9CBEEBE6A7B2DE19E2BE5 /* Pods-TrollDropMobile */, 188 | ); 189 | name = "Targets Support Files"; 190 | sourceTree = ""; 191 | }; 192 | 7DB346D0F39D3F0E887471402A8071AB = { 193 | isa = PBXGroup; 194 | children = ( 195 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 196 | 3853DE022332E61F561BAB12A98090F6 /* Development Pods */, 197 | 3AEF7D761E8EA8419BB4A7000AB770CB /* Frameworks */, 198 | 2BC7E6749AFBCEC59F2E8CC958BC663F /* Products */, 199 | 711864B544F6C7CE2C3E8D68BA1B0607 /* Targets Support Files */, 200 | ); 201 | sourceTree = ""; 202 | }; 203 | 9304B30CB87FDB77B6CEE9FB6B800855 /* OS X */ = { 204 | isa = PBXGroup; 205 | children = ( 206 | DE25DD04263CA735DBC0065D686C708D /* Cocoa.framework */, 207 | ); 208 | name = "OS X"; 209 | sourceTree = ""; 210 | }; 211 | 9C923D813F91826FCECD45DAFE93EC26 /* Pods-TrollDrop */ = { 212 | isa = PBXGroup; 213 | children = ( 214 | F4784A34B42B770079FD5F5A9C42D1E1 /* Pods-TrollDrop-acknowledgements.markdown */, 215 | 2E369395C7CD71F249B010465FEEFD2E /* Pods-TrollDrop-acknowledgements.plist */, 216 | 7670C1B93AA2B6DB15821D1DEBECF100 /* Pods-TrollDrop-dummy.m */, 217 | A7B5C5EDB36DC056864E617183B52890 /* Pods-TrollDrop-frameworks.sh */, 218 | 2D665C248D04C81EF879C09240AEA7F4 /* Pods-TrollDrop-resources.sh */, 219 | 4065487740598FA9097CD029BFD2C861 /* Pods-TrollDrop.debug.xcconfig */, 220 | 58D696EA3EA222568DA6FB36A5726969 /* Pods-TrollDrop.release.xcconfig */, 221 | ); 222 | name = "Pods-TrollDrop"; 223 | path = "Target Support Files/Pods-TrollDrop"; 224 | sourceTree = ""; 225 | }; 226 | 9E1EE6DDD59792D415DC2AF328BDB2A3 /* Support Files */ = { 227 | isa = PBXGroup; 228 | children = ( 229 | EE6086F536B38BEA6B39665985AB79CC /* TrollDropKit-iOS.xcconfig */, 230 | F5E024D94A52D7689F5BB8063275670F /* TrollDropKit-iOS-dummy.m */, 231 | 3F82463F5FFD8629BDEEEE3119166904 /* TrollDropKit-iOS-prefix.pch */, 232 | BF64CBA3ACB0A17C914208C8368CF879 /* TrollDropKit-OSX.xcconfig */, 233 | 76DF68F372BA2E819494AF42357FD996 /* TrollDropKit-OSX-dummy.m */, 234 | 60168DC8262DCA06819B2670D0840C7D /* TrollDropKit-OSX-prefix.pch */, 235 | ); 236 | name = "Support Files"; 237 | path = "Example/Pods/Target Support Files/TrollDropKit-OSX"; 238 | sourceTree = ""; 239 | }; 240 | DEA55AE7EB4A1B09C009B82BA492BD02 /* iOS */ = { 241 | isa = PBXGroup; 242 | children = ( 243 | B0C89EDC2EC27D60F4934F3C043A7D91 /* Foundation.framework */, 244 | ); 245 | name = iOS; 246 | sourceTree = ""; 247 | }; 248 | /* End PBXGroup section */ 249 | 250 | /* Begin PBXHeadersBuildPhase section */ 251 | 8FAF79E9EC6C3BF50793A3A88A3982B2 /* Headers */ = { 252 | isa = PBXHeadersBuildPhase; 253 | buildActionMask = 2147483647; 254 | files = ( 255 | 6E254E76CE211943D31240EF6E1C4FF4 /* Sharing.h in Headers */, 256 | 32A8E71B1BD6147D64528C6DBD91DAAB /* TDKTrollController.h in Headers */, 257 | 6D42567DADDF99CBD26E850BC9AB3531 /* Trollface.h in Headers */, 258 | ); 259 | runOnlyForDeploymentPostprocessing = 0; 260 | }; 261 | A05C254E0A714D343FEF50DB11409906 /* Headers */ = { 262 | isa = PBXHeadersBuildPhase; 263 | buildActionMask = 2147483647; 264 | files = ( 265 | 67C85C447249E8EEF817105650C44014 /* Sharing.h in Headers */, 266 | 5939D89C69E70B0380D4B9EED499C758 /* TDKTrollController.h in Headers */, 267 | E87F195582DB5FD5185CAA8E79DC508E /* Trollface.h in Headers */, 268 | ); 269 | runOnlyForDeploymentPostprocessing = 0; 270 | }; 271 | /* End PBXHeadersBuildPhase section */ 272 | 273 | /* Begin PBXNativeTarget section */ 274 | A1CC7C209DB8584C3730C5C2367F3EF3 /* Pods-TrollDrop */ = { 275 | isa = PBXNativeTarget; 276 | buildConfigurationList = D0A7A8E7810C90768C262263AAEC663D /* Build configuration list for PBXNativeTarget "Pods-TrollDrop" */; 277 | buildPhases = ( 278 | 031D54A482631EEBAFC8FB7EA3D54027 /* Sources */, 279 | D952D7AFACCA7AFEACCE821A2AAE0E86 /* Frameworks */, 280 | ); 281 | buildRules = ( 282 | ); 283 | dependencies = ( 284 | 1B21A1D67A1F36111E75AF7DDD98B40B /* PBXTargetDependency */, 285 | ); 286 | name = "Pods-TrollDrop"; 287 | productName = "Pods-TrollDrop"; 288 | productReference = 1CBF75246AF2BF0866F77C25F2B572DA /* libPods-TrollDrop.a */; 289 | productType = "com.apple.product-type.library.static"; 290 | }; 291 | D09A210D0834F64F00B2F5F856AF663D /* TrollDropKit-OSX */ = { 292 | isa = PBXNativeTarget; 293 | buildConfigurationList = 12D9E73525BB606FC953075AAE24DF20 /* Build configuration list for PBXNativeTarget "TrollDropKit-OSX" */; 294 | buildPhases = ( 295 | C9F876BA1F14DA9D25795326818438F4 /* Sources */, 296 | 9BC9B015F07E4E26EA8A48B0E84F7BCA /* Frameworks */, 297 | 8FAF79E9EC6C3BF50793A3A88A3982B2 /* Headers */, 298 | ); 299 | buildRules = ( 300 | ); 301 | dependencies = ( 302 | ); 303 | name = "TrollDropKit-OSX"; 304 | productName = "TrollDropKit-OSX"; 305 | productReference = 74CF5EBB006626DE1202AD33CCB15B57 /* libTrollDropKit-OSX.a */; 306 | productType = "com.apple.product-type.library.static"; 307 | }; 308 | F84631080BD04FB38AB045AA7608DF9E /* Pods-TrollDropMobile */ = { 309 | isa = PBXNativeTarget; 310 | buildConfigurationList = AE8DDDB31E96470E8C48DCAF33BEC237 /* Build configuration list for PBXNativeTarget "Pods-TrollDropMobile" */; 311 | buildPhases = ( 312 | D02ECEC5B88D20803586BF54CDD26B9F /* Sources */, 313 | AF66D70E3FB368F90F25328BB73A2094 /* Frameworks */, 314 | ); 315 | buildRules = ( 316 | ); 317 | dependencies = ( 318 | 39421BAEF9114E676251FBFB98F3FFF9 /* PBXTargetDependency */, 319 | ); 320 | name = "Pods-TrollDropMobile"; 321 | productName = "Pods-TrollDropMobile"; 322 | productReference = 8248C5F0AE0BD992397502CF86DD95A5 /* libPods-TrollDropMobile.a */; 323 | productType = "com.apple.product-type.library.static"; 324 | }; 325 | FF4CF4A14B7A1FE145AAF77749CE6507 /* TrollDropKit-iOS */ = { 326 | isa = PBXNativeTarget; 327 | buildConfigurationList = 17A0E4EC28B3B8ED6201B542F17F20D2 /* Build configuration list for PBXNativeTarget "TrollDropKit-iOS" */; 328 | buildPhases = ( 329 | 7D239AA1C071ECFCF78DB3F49F045577 /* Sources */, 330 | 4365FFD7A57E4F2E8433A8C7A9E1386C /* Frameworks */, 331 | A05C254E0A714D343FEF50DB11409906 /* Headers */, 332 | ); 333 | buildRules = ( 334 | ); 335 | dependencies = ( 336 | ); 337 | name = "TrollDropKit-iOS"; 338 | productName = "TrollDropKit-iOS"; 339 | productReference = 4856FBEC6DDE00D4F9F29B4BBD04AB14 /* libTrollDropKit-iOS.a */; 340 | productType = "com.apple.product-type.library.static"; 341 | }; 342 | /* End PBXNativeTarget section */ 343 | 344 | /* Begin PBXProject section */ 345 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 346 | isa = PBXProject; 347 | attributes = { 348 | LastSwiftUpdateCheck = 0730; 349 | LastUpgradeCheck = 0700; 350 | }; 351 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 352 | compatibilityVersion = "Xcode 3.2"; 353 | developmentRegion = English; 354 | hasScannedForEncodings = 0; 355 | knownRegions = ( 356 | en, 357 | ); 358 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 359 | productRefGroup = 2BC7E6749AFBCEC59F2E8CC958BC663F /* Products */; 360 | projectDirPath = ""; 361 | projectRoot = ""; 362 | targets = ( 363 | A1CC7C209DB8584C3730C5C2367F3EF3 /* Pods-TrollDrop */, 364 | F84631080BD04FB38AB045AA7608DF9E /* Pods-TrollDropMobile */, 365 | FF4CF4A14B7A1FE145AAF77749CE6507 /* TrollDropKit-iOS */, 366 | D09A210D0834F64F00B2F5F856AF663D /* TrollDropKit-OSX */, 367 | ); 368 | }; 369 | /* End PBXProject section */ 370 | 371 | /* Begin PBXSourcesBuildPhase section */ 372 | 031D54A482631EEBAFC8FB7EA3D54027 /* Sources */ = { 373 | isa = PBXSourcesBuildPhase; 374 | buildActionMask = 2147483647; 375 | files = ( 376 | 06346BF9955137D7ACC12118E4AC4AC1 /* Pods-TrollDrop-dummy.m in Sources */, 377 | ); 378 | runOnlyForDeploymentPostprocessing = 0; 379 | }; 380 | 7D239AA1C071ECFCF78DB3F49F045577 /* Sources */ = { 381 | isa = PBXSourcesBuildPhase; 382 | buildActionMask = 2147483647; 383 | files = ( 384 | 0AFA5C0ED1F6B8F534DD52803C6DF244 /* Sharing.m in Sources */, 385 | 02F3F3EBDCB8E5FC540E2A40C8C439B6 /* TDKTrollController.m in Sources */, 386 | 643CC6B8096CCD62433A1524135BB86E /* TrollDropKit-iOS-dummy.m in Sources */, 387 | ); 388 | runOnlyForDeploymentPostprocessing = 0; 389 | }; 390 | C9F876BA1F14DA9D25795326818438F4 /* Sources */ = { 391 | isa = PBXSourcesBuildPhase; 392 | buildActionMask = 2147483647; 393 | files = ( 394 | 8EC1739927600A9D1EB5602545C4D300 /* Sharing.m in Sources */, 395 | 8A706CE1A8A6B6F901FAA312E737BE88 /* TDKTrollController.m in Sources */, 396 | 82434CCE81D5D76F83531F0741A77D03 /* TrollDropKit-OSX-dummy.m in Sources */, 397 | ); 398 | runOnlyForDeploymentPostprocessing = 0; 399 | }; 400 | D02ECEC5B88D20803586BF54CDD26B9F /* Sources */ = { 401 | isa = PBXSourcesBuildPhase; 402 | buildActionMask = 2147483647; 403 | files = ( 404 | 5280632999EFF5ED80F1A74E397AFB02 /* Pods-TrollDropMobile-dummy.m in Sources */, 405 | ); 406 | runOnlyForDeploymentPostprocessing = 0; 407 | }; 408 | /* End PBXSourcesBuildPhase section */ 409 | 410 | /* Begin PBXTargetDependency section */ 411 | 1B21A1D67A1F36111E75AF7DDD98B40B /* PBXTargetDependency */ = { 412 | isa = PBXTargetDependency; 413 | name = "TrollDropKit-OSX"; 414 | target = D09A210D0834F64F00B2F5F856AF663D /* TrollDropKit-OSX */; 415 | targetProxy = 7A9E851455E4ADB9FBAC89796BD36D7B /* PBXContainerItemProxy */; 416 | }; 417 | 39421BAEF9114E676251FBFB98F3FFF9 /* PBXTargetDependency */ = { 418 | isa = PBXTargetDependency; 419 | name = "TrollDropKit-iOS"; 420 | target = FF4CF4A14B7A1FE145AAF77749CE6507 /* TrollDropKit-iOS */; 421 | targetProxy = E8A06C9C71700FF52B3B6DBB0D782B9D /* PBXContainerItemProxy */; 422 | }; 423 | /* End PBXTargetDependency section */ 424 | 425 | /* Begin XCBuildConfiguration section */ 426 | 12F8C4D52B0AEC0380420F71203705E7 /* Debug */ = { 427 | isa = XCBuildConfiguration; 428 | buildSettings = { 429 | ALWAYS_SEARCH_USER_PATHS = NO; 430 | CLANG_ANALYZER_NONNULL = YES; 431 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 432 | CLANG_CXX_LIBRARY = "libc++"; 433 | CLANG_ENABLE_MODULES = YES; 434 | CLANG_ENABLE_OBJC_ARC = YES; 435 | CLANG_WARN_BOOL_CONVERSION = YES; 436 | CLANG_WARN_CONSTANT_CONVERSION = YES; 437 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 438 | CLANG_WARN_EMPTY_BODY = YES; 439 | CLANG_WARN_ENUM_CONVERSION = YES; 440 | CLANG_WARN_INT_CONVERSION = YES; 441 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 442 | CLANG_WARN_UNREACHABLE_CODE = YES; 443 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 444 | COPY_PHASE_STRIP = NO; 445 | ENABLE_TESTABILITY = YES; 446 | GCC_C_LANGUAGE_STANDARD = gnu99; 447 | GCC_DYNAMIC_NO_PIC = NO; 448 | GCC_OPTIMIZATION_LEVEL = 0; 449 | GCC_PREPROCESSOR_DEFINITIONS = ( 450 | "POD_CONFIGURATION_DEBUG=1", 451 | "DEBUG=1", 452 | "$(inherited)", 453 | ); 454 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 455 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 456 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 457 | GCC_WARN_UNDECLARED_SELECTOR = YES; 458 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 459 | GCC_WARN_UNUSED_FUNCTION = YES; 460 | GCC_WARN_UNUSED_VARIABLE = YES; 461 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 462 | MACOSX_DEPLOYMENT_TARGET = 10.7; 463 | ONLY_ACTIVE_ARCH = YES; 464 | STRIP_INSTALLED_PRODUCT = NO; 465 | SYMROOT = "${SRCROOT}/../build"; 466 | }; 467 | name = Debug; 468 | }; 469 | 1C8F20DB658C96728846519EF2000BD4 /* Release */ = { 470 | isa = XCBuildConfiguration; 471 | baseConfigurationReference = EE6086F536B38BEA6B39665985AB79CC /* TrollDropKit-iOS.xcconfig */; 472 | buildSettings = { 473 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 474 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 475 | ENABLE_STRICT_OBJC_MSGSEND = YES; 476 | GCC_NO_COMMON_BLOCKS = YES; 477 | GCC_PREFIX_HEADER = "Target Support Files/TrollDropKit-iOS/TrollDropKit-iOS-prefix.pch"; 478 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 479 | MTL_ENABLE_DEBUG_INFO = NO; 480 | OTHER_LDFLAGS = ""; 481 | OTHER_LIBTOOLFLAGS = ""; 482 | PRIVATE_HEADERS_FOLDER_PATH = ""; 483 | PRODUCT_NAME = "$(TARGET_NAME)"; 484 | PUBLIC_HEADERS_FOLDER_PATH = ""; 485 | SDKROOT = iphoneos; 486 | SKIP_INSTALL = YES; 487 | }; 488 | name = Release; 489 | }; 490 | 204B9DCB3B19A6A5340F065E61EF4C9A /* Release */ = { 491 | isa = XCBuildConfiguration; 492 | baseConfigurationReference = 58D696EA3EA222568DA6FB36A5726969 /* Pods-TrollDrop.release.xcconfig */; 493 | buildSettings = { 494 | CODE_SIGN_IDENTITY = "-"; 495 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 496 | ENABLE_STRICT_OBJC_MSGSEND = YES; 497 | EXECUTABLE_PREFIX = lib; 498 | GCC_NO_COMMON_BLOCKS = YES; 499 | MACH_O_TYPE = staticlib; 500 | MACOSX_DEPLOYMENT_TARGET = 10.7; 501 | MTL_ENABLE_DEBUG_INFO = NO; 502 | OTHER_LDFLAGS = ""; 503 | OTHER_LIBTOOLFLAGS = ""; 504 | PODS_ROOT = "$(SRCROOT)"; 505 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 506 | PRODUCT_NAME = "$(TARGET_NAME)"; 507 | SDKROOT = macosx; 508 | SKIP_INSTALL = YES; 509 | }; 510 | name = Release; 511 | }; 512 | 475087AC1821F6A5C17926EB62C22D36 /* Debug */ = { 513 | isa = XCBuildConfiguration; 514 | baseConfigurationReference = BF64CBA3ACB0A17C914208C8368CF879 /* TrollDropKit-OSX.xcconfig */; 515 | buildSettings = { 516 | CODE_SIGN_IDENTITY = "-"; 517 | DEBUG_INFORMATION_FORMAT = dwarf; 518 | ENABLE_STRICT_OBJC_MSGSEND = YES; 519 | EXECUTABLE_PREFIX = lib; 520 | GCC_NO_COMMON_BLOCKS = YES; 521 | GCC_PREFIX_HEADER = "Target Support Files/TrollDropKit-OSX/TrollDropKit-OSX-prefix.pch"; 522 | MACOSX_DEPLOYMENT_TARGET = 10.7; 523 | MTL_ENABLE_DEBUG_INFO = YES; 524 | OTHER_LDFLAGS = ""; 525 | OTHER_LIBTOOLFLAGS = ""; 526 | PRIVATE_HEADERS_FOLDER_PATH = ""; 527 | PRODUCT_NAME = "$(TARGET_NAME)"; 528 | PUBLIC_HEADERS_FOLDER_PATH = ""; 529 | SDKROOT = macosx; 530 | }; 531 | name = Debug; 532 | }; 533 | 61FD146E2E0D0C87AF94942A42B48045 /* Release */ = { 534 | isa = XCBuildConfiguration; 535 | buildSettings = { 536 | ALWAYS_SEARCH_USER_PATHS = NO; 537 | CLANG_ANALYZER_NONNULL = YES; 538 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 539 | CLANG_CXX_LIBRARY = "libc++"; 540 | CLANG_ENABLE_MODULES = YES; 541 | CLANG_ENABLE_OBJC_ARC = YES; 542 | CLANG_WARN_BOOL_CONVERSION = YES; 543 | CLANG_WARN_CONSTANT_CONVERSION = YES; 544 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 545 | CLANG_WARN_EMPTY_BODY = YES; 546 | CLANG_WARN_ENUM_CONVERSION = YES; 547 | CLANG_WARN_INT_CONVERSION = YES; 548 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 549 | CLANG_WARN_UNREACHABLE_CODE = YES; 550 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 551 | COPY_PHASE_STRIP = YES; 552 | ENABLE_NS_ASSERTIONS = NO; 553 | GCC_C_LANGUAGE_STANDARD = gnu99; 554 | GCC_PREPROCESSOR_DEFINITIONS = ( 555 | "POD_CONFIGURATION_RELEASE=1", 556 | "$(inherited)", 557 | ); 558 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 559 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 560 | GCC_WARN_UNDECLARED_SELECTOR = YES; 561 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 562 | GCC_WARN_UNUSED_FUNCTION = YES; 563 | GCC_WARN_UNUSED_VARIABLE = YES; 564 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 565 | MACOSX_DEPLOYMENT_TARGET = 10.7; 566 | STRIP_INSTALLED_PRODUCT = NO; 567 | SYMROOT = "${SRCROOT}/../build"; 568 | VALIDATE_PRODUCT = YES; 569 | }; 570 | name = Release; 571 | }; 572 | 783A3348834ACB74B23DA508BD510954 /* Release */ = { 573 | isa = XCBuildConfiguration; 574 | baseConfigurationReference = BF64CBA3ACB0A17C914208C8368CF879 /* TrollDropKit-OSX.xcconfig */; 575 | buildSettings = { 576 | CODE_SIGN_IDENTITY = "-"; 577 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 578 | ENABLE_STRICT_OBJC_MSGSEND = YES; 579 | EXECUTABLE_PREFIX = lib; 580 | GCC_NO_COMMON_BLOCKS = YES; 581 | GCC_PREFIX_HEADER = "Target Support Files/TrollDropKit-OSX/TrollDropKit-OSX-prefix.pch"; 582 | MACOSX_DEPLOYMENT_TARGET = 10.7; 583 | MTL_ENABLE_DEBUG_INFO = NO; 584 | OTHER_LDFLAGS = ""; 585 | OTHER_LIBTOOLFLAGS = ""; 586 | PRIVATE_HEADERS_FOLDER_PATH = ""; 587 | PRODUCT_NAME = "$(TARGET_NAME)"; 588 | PUBLIC_HEADERS_FOLDER_PATH = ""; 589 | SDKROOT = macosx; 590 | }; 591 | name = Release; 592 | }; 593 | 8E5854D1C42FBE0476E576369B3DCFFC /* Release */ = { 594 | isa = XCBuildConfiguration; 595 | baseConfigurationReference = CA3D8080C1944544B2A7ACEFCC05900E /* Pods-TrollDropMobile.release.xcconfig */; 596 | buildSettings = { 597 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 598 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 599 | ENABLE_STRICT_OBJC_MSGSEND = YES; 600 | GCC_NO_COMMON_BLOCKS = YES; 601 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 602 | MACH_O_TYPE = staticlib; 603 | MTL_ENABLE_DEBUG_INFO = NO; 604 | OTHER_LDFLAGS = ""; 605 | OTHER_LIBTOOLFLAGS = ""; 606 | PODS_ROOT = "$(SRCROOT)"; 607 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 608 | PRODUCT_NAME = "$(TARGET_NAME)"; 609 | SDKROOT = iphoneos; 610 | SKIP_INSTALL = YES; 611 | }; 612 | name = Release; 613 | }; 614 | C45EC8F85671821192276318DED75B51 /* Debug */ = { 615 | isa = XCBuildConfiguration; 616 | baseConfigurationReference = EE6086F536B38BEA6B39665985AB79CC /* TrollDropKit-iOS.xcconfig */; 617 | buildSettings = { 618 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 619 | DEBUG_INFORMATION_FORMAT = dwarf; 620 | ENABLE_STRICT_OBJC_MSGSEND = YES; 621 | GCC_NO_COMMON_BLOCKS = YES; 622 | GCC_PREFIX_HEADER = "Target Support Files/TrollDropKit-iOS/TrollDropKit-iOS-prefix.pch"; 623 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 624 | MTL_ENABLE_DEBUG_INFO = YES; 625 | OTHER_LDFLAGS = ""; 626 | OTHER_LIBTOOLFLAGS = ""; 627 | PRIVATE_HEADERS_FOLDER_PATH = ""; 628 | PRODUCT_NAME = "$(TARGET_NAME)"; 629 | PUBLIC_HEADERS_FOLDER_PATH = ""; 630 | SDKROOT = iphoneos; 631 | SKIP_INSTALL = YES; 632 | }; 633 | name = Debug; 634 | }; 635 | C6DD2D0009A1B4EFBC3C4DB59D28123D /* Debug */ = { 636 | isa = XCBuildConfiguration; 637 | baseConfigurationReference = 9B8ED3D1CBDA51095827D5AC88562FDA /* Pods-TrollDropMobile.debug.xcconfig */; 638 | buildSettings = { 639 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 640 | DEBUG_INFORMATION_FORMAT = dwarf; 641 | ENABLE_STRICT_OBJC_MSGSEND = YES; 642 | GCC_NO_COMMON_BLOCKS = YES; 643 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 644 | MACH_O_TYPE = staticlib; 645 | MTL_ENABLE_DEBUG_INFO = YES; 646 | OTHER_LDFLAGS = ""; 647 | OTHER_LIBTOOLFLAGS = ""; 648 | PODS_ROOT = "$(SRCROOT)"; 649 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 650 | PRODUCT_NAME = "$(TARGET_NAME)"; 651 | SDKROOT = iphoneos; 652 | SKIP_INSTALL = YES; 653 | }; 654 | name = Debug; 655 | }; 656 | D9CD54F561FFC548259B272AA20A8091 /* Debug */ = { 657 | isa = XCBuildConfiguration; 658 | baseConfigurationReference = 4065487740598FA9097CD029BFD2C861 /* Pods-TrollDrop.debug.xcconfig */; 659 | buildSettings = { 660 | CODE_SIGN_IDENTITY = "-"; 661 | DEBUG_INFORMATION_FORMAT = dwarf; 662 | ENABLE_STRICT_OBJC_MSGSEND = YES; 663 | EXECUTABLE_PREFIX = lib; 664 | GCC_NO_COMMON_BLOCKS = YES; 665 | MACH_O_TYPE = staticlib; 666 | MACOSX_DEPLOYMENT_TARGET = 10.7; 667 | MTL_ENABLE_DEBUG_INFO = YES; 668 | OTHER_LDFLAGS = ""; 669 | OTHER_LIBTOOLFLAGS = ""; 670 | PODS_ROOT = "$(SRCROOT)"; 671 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 672 | PRODUCT_NAME = "$(TARGET_NAME)"; 673 | SDKROOT = macosx; 674 | SKIP_INSTALL = YES; 675 | }; 676 | name = Debug; 677 | }; 678 | /* End XCBuildConfiguration section */ 679 | 680 | /* Begin XCConfigurationList section */ 681 | 12D9E73525BB606FC953075AAE24DF20 /* Build configuration list for PBXNativeTarget "TrollDropKit-OSX" */ = { 682 | isa = XCConfigurationList; 683 | buildConfigurations = ( 684 | 475087AC1821F6A5C17926EB62C22D36 /* Debug */, 685 | 783A3348834ACB74B23DA508BD510954 /* Release */, 686 | ); 687 | defaultConfigurationIsVisible = 0; 688 | defaultConfigurationName = Release; 689 | }; 690 | 17A0E4EC28B3B8ED6201B542F17F20D2 /* Build configuration list for PBXNativeTarget "TrollDropKit-iOS" */ = { 691 | isa = XCConfigurationList; 692 | buildConfigurations = ( 693 | C45EC8F85671821192276318DED75B51 /* Debug */, 694 | 1C8F20DB658C96728846519EF2000BD4 /* Release */, 695 | ); 696 | defaultConfigurationIsVisible = 0; 697 | defaultConfigurationName = Release; 698 | }; 699 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 700 | isa = XCConfigurationList; 701 | buildConfigurations = ( 702 | 12F8C4D52B0AEC0380420F71203705E7 /* Debug */, 703 | 61FD146E2E0D0C87AF94942A42B48045 /* Release */, 704 | ); 705 | defaultConfigurationIsVisible = 0; 706 | defaultConfigurationName = Release; 707 | }; 708 | AE8DDDB31E96470E8C48DCAF33BEC237 /* Build configuration list for PBXNativeTarget "Pods-TrollDropMobile" */ = { 709 | isa = XCConfigurationList; 710 | buildConfigurations = ( 711 | C6DD2D0009A1B4EFBC3C4DB59D28123D /* Debug */, 712 | 8E5854D1C42FBE0476E576369B3DCFFC /* Release */, 713 | ); 714 | defaultConfigurationIsVisible = 0; 715 | defaultConfigurationName = Release; 716 | }; 717 | D0A7A8E7810C90768C262263AAEC663D /* Build configuration list for PBXNativeTarget "Pods-TrollDrop" */ = { 718 | isa = XCConfigurationList; 719 | buildConfigurations = ( 720 | D9CD54F561FFC548259B272AA20A8091 /* Debug */, 721 | 204B9DCB3B19A6A5340F065E61EF4C9A /* Release */, 722 | ); 723 | defaultConfigurationIsVisible = 0; 724 | defaultConfigurationName = Release; 725 | }; 726 | /* End XCConfigurationList section */ 727 | }; 728 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 729 | } 730 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/TrollDropKit-OSX.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 45 | 46 | 52 | 53 | 55 | 56 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/TrollDropKit-iOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 45 | 46 | 52 | 53 | 55 | 56 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TrollDrop/Pods-TrollDrop-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## TrollDropKit 5 | 6 | The MIT License (MIT) 7 | 8 | Copyright (c) 2016 Alexsander Akers 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | 28 | Generated by CocoaPods - https://cocoapods.org 29 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TrollDrop/Pods-TrollDrop-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | The MIT License (MIT) 18 | 19 | Copyright (c) 2016 Alexsander Akers 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in all 29 | copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | SOFTWARE. 38 | 39 | Title 40 | TrollDropKit 41 | Type 42 | PSGroupSpecifier 43 | 44 | 45 | FooterText 46 | Generated by CocoaPods - https://cocoapods.org 47 | Title 48 | 49 | Type 50 | PSGroupSpecifier 51 | 52 | 53 | StringsTable 54 | Acknowledgements 55 | Title 56 | Acknowledgements 57 | 58 | 59 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TrollDrop/Pods-TrollDrop-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_TrollDrop : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_TrollDrop 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TrollDrop/Pods-TrollDrop-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TrollDrop/Pods-TrollDrop-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | *) 22 | TARGET_DEVICE_ARGS="--target-device mac" 23 | ;; 24 | esac 25 | 26 | realpath() { 27 | DIRECTORY="$(cd "${1%/*}" && pwd)" 28 | FILENAME="${1##*/}" 29 | echo "$DIRECTORY/$FILENAME" 30 | } 31 | 32 | install_resource() 33 | { 34 | if [[ "$1" = /* ]] ; then 35 | RESOURCE_PATH="$1" 36 | else 37 | RESOURCE_PATH="${PODS_ROOT}/$1" 38 | fi 39 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 40 | cat << EOM 41 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 42 | EOM 43 | exit 1 44 | fi 45 | case $RESOURCE_PATH in 46 | *.storyboard) 47 | echo "ibtool --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 48 | ibtool --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 49 | ;; 50 | *.xib) 51 | echo "ibtool --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT}" 52 | ibtool --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" 53 | ;; 54 | *.framework) 55 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 57 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 58 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 59 | ;; 60 | *.xcdatamodel) 61 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 62 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 63 | ;; 64 | *.xcdatamodeld) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 67 | ;; 68 | *.xcmappingmodel) 69 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 70 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 71 | ;; 72 | *.xcassets) 73 | ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") 74 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 75 | ;; 76 | *) 77 | echo "$RESOURCE_PATH" 78 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 79 | ;; 80 | esac 81 | } 82 | 83 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 86 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 87 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | fi 89 | rm -f "$RESOURCES_TO_COPY" 90 | 91 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 92 | then 93 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 94 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 95 | while read line; do 96 | if [[ $line != "`realpath $PODS_ROOT`*" ]]; then 97 | XCASSET_FILES+=("$line") 98 | fi 99 | done <<<"$OTHER_XCASSETS" 100 | 101 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 102 | fi 103 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TrollDrop/Pods-TrollDrop.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/TrollDropKit" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/TrollDropKit-OSX" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/TrollDropKit" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"TrollDropKit-OSX" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TrollDrop/Pods-TrollDrop.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/TrollDropKit" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/TrollDropKit-OSX" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/TrollDropKit" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"TrollDropKit-OSX" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TrollDropMobile/Pods-TrollDropMobile-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## TrollDropKit 5 | 6 | The MIT License (MIT) 7 | 8 | Copyright (c) 2016 Alexsander Akers 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | 28 | Generated by CocoaPods - https://cocoapods.org 29 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TrollDropMobile/Pods-TrollDropMobile-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | The MIT License (MIT) 18 | 19 | Copyright (c) 2016 Alexsander Akers 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in all 29 | copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | SOFTWARE. 38 | 39 | Title 40 | TrollDropKit 41 | Type 42 | PSGroupSpecifier 43 | 44 | 45 | FooterText 46 | Generated by CocoaPods - https://cocoapods.org 47 | Title 48 | 49 | Type 50 | PSGroupSpecifier 51 | 52 | 53 | StringsTable 54 | Acknowledgements 55 | Title 56 | Acknowledgements 57 | 58 | 59 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TrollDropMobile/Pods-TrollDropMobile-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_TrollDropMobile : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_TrollDropMobile 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TrollDropMobile/Pods-TrollDropMobile-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TrollDropMobile/Pods-TrollDropMobile-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | *) 22 | TARGET_DEVICE_ARGS="--target-device mac" 23 | ;; 24 | esac 25 | 26 | realpath() { 27 | DIRECTORY="$(cd "${1%/*}" && pwd)" 28 | FILENAME="${1##*/}" 29 | echo "$DIRECTORY/$FILENAME" 30 | } 31 | 32 | install_resource() 33 | { 34 | if [[ "$1" = /* ]] ; then 35 | RESOURCE_PATH="$1" 36 | else 37 | RESOURCE_PATH="${PODS_ROOT}/$1" 38 | fi 39 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 40 | cat << EOM 41 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 42 | EOM 43 | exit 1 44 | fi 45 | case $RESOURCE_PATH in 46 | *.storyboard) 47 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 48 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 49 | ;; 50 | *.xib) 51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT}" 52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" 53 | ;; 54 | *.framework) 55 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 57 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 58 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 59 | ;; 60 | *.xcdatamodel) 61 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 62 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 63 | ;; 64 | *.xcdatamodeld) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 67 | ;; 68 | *.xcmappingmodel) 69 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 70 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 71 | ;; 72 | *.xcassets) 73 | ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") 74 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 75 | ;; 76 | *) 77 | echo "$RESOURCE_PATH" 78 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 79 | ;; 80 | esac 81 | } 82 | 83 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 86 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 87 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | fi 89 | rm -f "$RESOURCES_TO_COPY" 90 | 91 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 92 | then 93 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 94 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 95 | while read line; do 96 | if [[ $line != "`realpath $PODS_ROOT`*" ]]; then 97 | XCASSET_FILES+=("$line") 98 | fi 99 | done <<<"$OTHER_XCASSETS" 100 | 101 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 102 | fi 103 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TrollDropMobile/Pods-TrollDropMobile.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/TrollDropKit" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/TrollDropKit-iOS" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/TrollDropKit" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"TrollDropKit-iOS" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TrollDropMobile/Pods-TrollDropMobile.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/TrollDropKit" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/TrollDropKit-iOS" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/TrollDropKit" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"TrollDropKit-iOS" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/TrollDropKit-OSX/TrollDropKit-OSX-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_TrollDropKit_OSX : NSObject 3 | @end 4 | @implementation PodsDummy_TrollDropKit_OSX 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/TrollDropKit-OSX/TrollDropKit-OSX-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/TrollDropKit-OSX/TrollDropKit-OSX.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/TrollDropKit-OSX 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/TrollDropKit" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/TrollDropKit" 4 | PODS_BUILD_DIR = $BUILD_DIR 5 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 8 | SKIP_INSTALL = YES 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/TrollDropKit-iOS/TrollDropKit-iOS-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_TrollDropKit_iOS : NSObject 3 | @end 4 | @implementation PodsDummy_TrollDropKit_iOS 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/TrollDropKit-iOS/TrollDropKit-iOS-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/TrollDropKit-iOS/TrollDropKit-iOS.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/TrollDropKit-iOS 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/TrollDropKit" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/TrollDropKit" 4 | PODS_BUILD_DIR = $BUILD_DIR 5 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 8 | SKIP_INSTALL = YES 9 | -------------------------------------------------------------------------------- /Example/TrollDrop.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 51E022A344ACEB3B271F64B7 /* libPods-TrollDrop.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6A11DBEA5125FDC9E86587A0 /* libPods-TrollDrop.a */; }; 11 | 838DD04C1CDD3BC0007B3038 /* trollface.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 838DD04B1CDD3BC0007B3038 /* trollface.jpg */; }; 12 | 83A551041CDD361700DAA79A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 83A551031CDD361700DAA79A /* main.m */; }; 13 | 83A551071CDD361700DAA79A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 83A551061CDD361700DAA79A /* AppDelegate.m */; }; 14 | 83A5510D1CDD361700DAA79A /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 83A5510B1CDD361700DAA79A /* Main.storyboard */; }; 15 | 83A5510F1CDD361700DAA79A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 83A5510E1CDD361700DAA79A /* Assets.xcassets */; }; 16 | 83A551121CDD361700DAA79A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 83A551101CDD361700DAA79A /* LaunchScreen.storyboard */; }; 17 | 83BE69B61CDCEC2B009973BE /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 83BE69B51CDCEC2B009973BE /* main.m */; }; 18 | C43EEBA9EB72B51D68912E06 /* libPods-TrollDropMobile.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 889FF2B54B7DE66DBA515D30 /* libPods-TrollDropMobile.a */; }; 19 | /* End PBXBuildFile section */ 20 | 21 | /* Begin PBXCopyFilesBuildPhase section */ 22 | 83BE69B01CDCEC2B009973BE /* CopyFiles */ = { 23 | isa = PBXCopyFilesBuildPhase; 24 | buildActionMask = 2147483647; 25 | dstPath = /usr/share/man/man1/; 26 | dstSubfolderSpec = 0; 27 | files = ( 28 | ); 29 | runOnlyForDeploymentPostprocessing = 1; 30 | }; 31 | /* End PBXCopyFilesBuildPhase section */ 32 | 33 | /* Begin PBXFileReference section */ 34 | 5B44DD30D3C2E41A33C3F689 /* Pods-TrollDrop.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TrollDrop.debug.xcconfig"; path = "Pods/Target Support Files/Pods-TrollDrop/Pods-TrollDrop.debug.xcconfig"; sourceTree = ""; }; 35 | 6A11DBEA5125FDC9E86587A0 /* libPods-TrollDrop.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-TrollDrop.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 36 | 838DD04B1CDD3BC0007B3038 /* trollface.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = trollface.jpg; sourceTree = ""; }; 37 | 83A551001CDD361700DAA79A /* TrollDrop.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TrollDrop.app; sourceTree = BUILT_PRODUCTS_DIR; }; 38 | 83A551031CDD361700DAA79A /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 39 | 83A551051CDD361700DAA79A /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 40 | 83A551061CDD361700DAA79A /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 41 | 83A5510C1CDD361700DAA79A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 42 | 83A5510E1CDD361700DAA79A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 43 | 83A551111CDD361700DAA79A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 44 | 83A551131CDD361700DAA79A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 45 | 83BE69B21CDCEC2B009973BE /* trolldrop */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = trolldrop; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | 83BE69B51CDCEC2B009973BE /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 47 | 889FF2B54B7DE66DBA515D30 /* libPods-TrollDropMobile.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-TrollDropMobile.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 48 | 9AA0634B34AF428E8E59E97F /* Pods-TrollDropMobile.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TrollDropMobile.debug.xcconfig"; path = "Pods/Target Support Files/Pods-TrollDropMobile/Pods-TrollDropMobile.debug.xcconfig"; sourceTree = ""; }; 49 | A5D67E024C12B0E510B1E5DC /* Pods-TrollDropMobile.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TrollDropMobile.release.xcconfig"; path = "Pods/Target Support Files/Pods-TrollDropMobile/Pods-TrollDropMobile.release.xcconfig"; sourceTree = ""; }; 50 | B17A7D106D05E3FB30F95CD3 /* Pods-TrollDrop.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TrollDrop.release.xcconfig"; path = "Pods/Target Support Files/Pods-TrollDrop/Pods-TrollDrop.release.xcconfig"; sourceTree = ""; }; 51 | /* End PBXFileReference section */ 52 | 53 | /* Begin PBXFrameworksBuildPhase section */ 54 | 83A550FD1CDD361700DAA79A /* Frameworks */ = { 55 | isa = PBXFrameworksBuildPhase; 56 | buildActionMask = 2147483647; 57 | files = ( 58 | C43EEBA9EB72B51D68912E06 /* libPods-TrollDropMobile.a in Frameworks */, 59 | ); 60 | runOnlyForDeploymentPostprocessing = 0; 61 | }; 62 | 83BE69AF1CDCEC2B009973BE /* Frameworks */ = { 63 | isa = PBXFrameworksBuildPhase; 64 | buildActionMask = 2147483647; 65 | files = ( 66 | 51E022A344ACEB3B271F64B7 /* libPods-TrollDrop.a in Frameworks */, 67 | ); 68 | runOnlyForDeploymentPostprocessing = 0; 69 | }; 70 | /* End PBXFrameworksBuildPhase section */ 71 | 72 | /* Begin PBXGroup section */ 73 | 652D4E4C6745750437AEE33D /* Pods */ = { 74 | isa = PBXGroup; 75 | children = ( 76 | 5B44DD30D3C2E41A33C3F689 /* Pods-TrollDrop.debug.xcconfig */, 77 | B17A7D106D05E3FB30F95CD3 /* Pods-TrollDrop.release.xcconfig */, 78 | 9AA0634B34AF428E8E59E97F /* Pods-TrollDropMobile.debug.xcconfig */, 79 | A5D67E024C12B0E510B1E5DC /* Pods-TrollDropMobile.release.xcconfig */, 80 | ); 81 | name = Pods; 82 | sourceTree = ""; 83 | }; 84 | 83A551011CDD361700DAA79A /* TrollDropMobile */ = { 85 | isa = PBXGroup; 86 | children = ( 87 | 83A551051CDD361700DAA79A /* AppDelegate.h */, 88 | 83A551061CDD361700DAA79A /* AppDelegate.m */, 89 | 83A551021CDD361700DAA79A /* Supporting Files */, 90 | ); 91 | path = TrollDropMobile; 92 | sourceTree = ""; 93 | }; 94 | 83A551021CDD361700DAA79A /* Supporting Files */ = { 95 | isa = PBXGroup; 96 | children = ( 97 | 83A5510E1CDD361700DAA79A /* Assets.xcassets */, 98 | 83A551131CDD361700DAA79A /* Info.plist */, 99 | 83A551101CDD361700DAA79A /* LaunchScreen.storyboard */, 100 | 83A551031CDD361700DAA79A /* main.m */, 101 | 83A5510B1CDD361700DAA79A /* Main.storyboard */, 102 | 838DD04B1CDD3BC0007B3038 /* trollface.jpg */, 103 | ); 104 | name = "Supporting Files"; 105 | sourceTree = ""; 106 | }; 107 | 83BE69A91CDCEC2B009973BE = { 108 | isa = PBXGroup; 109 | children = ( 110 | 83BE69B41CDCEC2B009973BE /* TrollDrop */, 111 | 83A551011CDD361700DAA79A /* TrollDropMobile */, 112 | 83BE69B31CDCEC2B009973BE /* Products */, 113 | 652D4E4C6745750437AEE33D /* Pods */, 114 | C7FF73820A326D1143D641A3 /* Frameworks */, 115 | ); 116 | sourceTree = ""; 117 | }; 118 | 83BE69B31CDCEC2B009973BE /* Products */ = { 119 | isa = PBXGroup; 120 | children = ( 121 | 83BE69B21CDCEC2B009973BE /* trolldrop */, 122 | 83A551001CDD361700DAA79A /* TrollDrop.app */, 123 | ); 124 | name = Products; 125 | sourceTree = ""; 126 | }; 127 | 83BE69B41CDCEC2B009973BE /* TrollDrop */ = { 128 | isa = PBXGroup; 129 | children = ( 130 | 83BE69B51CDCEC2B009973BE /* main.m */, 131 | ); 132 | path = TrollDrop; 133 | sourceTree = ""; 134 | }; 135 | C7FF73820A326D1143D641A3 /* Frameworks */ = { 136 | isa = PBXGroup; 137 | children = ( 138 | 6A11DBEA5125FDC9E86587A0 /* libPods-TrollDrop.a */, 139 | 889FF2B54B7DE66DBA515D30 /* libPods-TrollDropMobile.a */, 140 | ); 141 | name = Frameworks; 142 | sourceTree = ""; 143 | }; 144 | /* End PBXGroup section */ 145 | 146 | /* Begin PBXNativeTarget section */ 147 | 83A550FF1CDD361700DAA79A /* TrollDropMobile */ = { 148 | isa = PBXNativeTarget; 149 | buildConfigurationList = 83A551141CDD361700DAA79A /* Build configuration list for PBXNativeTarget "TrollDropMobile" */; 150 | buildPhases = ( 151 | C7374C5E861B8F90C0697F47 /* 📦 Check Pods Manifest.lock */, 152 | 83A550FC1CDD361700DAA79A /* Sources */, 153 | 83A550FD1CDD361700DAA79A /* Frameworks */, 154 | 83A550FE1CDD361700DAA79A /* Resources */, 155 | BAA0A8AA127BC91F34BBF7DD /* 📦 Embed Pods Frameworks */, 156 | F23A08E5E83F5DD62D4A132F /* 📦 Copy Pods Resources */, 157 | ); 158 | buildRules = ( 159 | ); 160 | dependencies = ( 161 | ); 162 | name = TrollDropMobile; 163 | productName = TrollDrop; 164 | productReference = 83A551001CDD361700DAA79A /* TrollDrop.app */; 165 | productType = "com.apple.product-type.application"; 166 | }; 167 | 83BE69B11CDCEC2B009973BE /* TrollDrop */ = { 168 | isa = PBXNativeTarget; 169 | buildConfigurationList = 83BE69B91CDCEC2B009973BE /* Build configuration list for PBXNativeTarget "TrollDrop" */; 170 | buildPhases = ( 171 | 8A14DF990CBAE2074D851522 /* 📦 Check Pods Manifest.lock */, 172 | 83BE69AE1CDCEC2B009973BE /* Sources */, 173 | 83BE69AF1CDCEC2B009973BE /* Frameworks */, 174 | 83BE69B01CDCEC2B009973BE /* CopyFiles */, 175 | 30F715B6A60F635673251F66 /* 📦 Copy Pods Resources */, 176 | ); 177 | buildRules = ( 178 | ); 179 | dependencies = ( 180 | ); 181 | name = TrollDrop; 182 | productName = TrollDrop; 183 | productReference = 83BE69B21CDCEC2B009973BE /* trolldrop */; 184 | productType = "com.apple.product-type.tool"; 185 | }; 186 | /* End PBXNativeTarget section */ 187 | 188 | /* Begin PBXProject section */ 189 | 83BE69AA1CDCEC2B009973BE /* Project object */ = { 190 | isa = PBXProject; 191 | attributes = { 192 | LastUpgradeCheck = 0730; 193 | ORGANIZATIONNAME = "Pandamonia LLC"; 194 | TargetAttributes = { 195 | 83A550FF1CDD361700DAA79A = { 196 | CreatedOnToolsVersion = 7.3.1; 197 | }; 198 | 83BE69B11CDCEC2B009973BE = { 199 | CreatedOnToolsVersion = 7.3.1; 200 | }; 201 | }; 202 | }; 203 | buildConfigurationList = 83BE69AD1CDCEC2B009973BE /* Build configuration list for PBXProject "TrollDrop" */; 204 | compatibilityVersion = "Xcode 3.2"; 205 | developmentRegion = English; 206 | hasScannedForEncodings = 0; 207 | knownRegions = ( 208 | en, 209 | Base, 210 | ); 211 | mainGroup = 83BE69A91CDCEC2B009973BE; 212 | productRefGroup = 83BE69B31CDCEC2B009973BE /* Products */; 213 | projectDirPath = ""; 214 | projectRoot = ""; 215 | targets = ( 216 | 83BE69B11CDCEC2B009973BE /* TrollDrop */, 217 | 83A550FF1CDD361700DAA79A /* TrollDropMobile */, 218 | ); 219 | }; 220 | /* End PBXProject section */ 221 | 222 | /* Begin PBXResourcesBuildPhase section */ 223 | 83A550FE1CDD361700DAA79A /* Resources */ = { 224 | isa = PBXResourcesBuildPhase; 225 | buildActionMask = 2147483647; 226 | files = ( 227 | 838DD04C1CDD3BC0007B3038 /* trollface.jpg in Resources */, 228 | 83A551121CDD361700DAA79A /* LaunchScreen.storyboard in Resources */, 229 | 83A5510F1CDD361700DAA79A /* Assets.xcassets in Resources */, 230 | 83A5510D1CDD361700DAA79A /* Main.storyboard in Resources */, 231 | ); 232 | runOnlyForDeploymentPostprocessing = 0; 233 | }; 234 | /* End PBXResourcesBuildPhase section */ 235 | 236 | /* Begin PBXShellScriptBuildPhase section */ 237 | 30F715B6A60F635673251F66 /* 📦 Copy Pods Resources */ = { 238 | isa = PBXShellScriptBuildPhase; 239 | buildActionMask = 2147483647; 240 | files = ( 241 | ); 242 | inputPaths = ( 243 | ); 244 | name = "📦 Copy Pods Resources"; 245 | outputPaths = ( 246 | ); 247 | runOnlyForDeploymentPostprocessing = 0; 248 | shellPath = /bin/sh; 249 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-TrollDrop/Pods-TrollDrop-resources.sh\"\n"; 250 | showEnvVarsInLog = 0; 251 | }; 252 | 8A14DF990CBAE2074D851522 /* 📦 Check Pods Manifest.lock */ = { 253 | isa = PBXShellScriptBuildPhase; 254 | buildActionMask = 2147483647; 255 | files = ( 256 | ); 257 | inputPaths = ( 258 | ); 259 | name = "📦 Check Pods Manifest.lock"; 260 | outputPaths = ( 261 | ); 262 | runOnlyForDeploymentPostprocessing = 0; 263 | shellPath = /bin/sh; 264 | 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"; 265 | showEnvVarsInLog = 0; 266 | }; 267 | BAA0A8AA127BC91F34BBF7DD /* 📦 Embed Pods Frameworks */ = { 268 | isa = PBXShellScriptBuildPhase; 269 | buildActionMask = 2147483647; 270 | files = ( 271 | ); 272 | inputPaths = ( 273 | ); 274 | name = "📦 Embed Pods Frameworks"; 275 | outputPaths = ( 276 | ); 277 | runOnlyForDeploymentPostprocessing = 0; 278 | shellPath = /bin/sh; 279 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-TrollDropMobile/Pods-TrollDropMobile-frameworks.sh\"\n"; 280 | showEnvVarsInLog = 0; 281 | }; 282 | C7374C5E861B8F90C0697F47 /* 📦 Check Pods Manifest.lock */ = { 283 | isa = PBXShellScriptBuildPhase; 284 | buildActionMask = 2147483647; 285 | files = ( 286 | ); 287 | inputPaths = ( 288 | ); 289 | name = "📦 Check Pods Manifest.lock"; 290 | outputPaths = ( 291 | ); 292 | runOnlyForDeploymentPostprocessing = 0; 293 | shellPath = /bin/sh; 294 | 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"; 295 | showEnvVarsInLog = 0; 296 | }; 297 | F23A08E5E83F5DD62D4A132F /* 📦 Copy Pods Resources */ = { 298 | isa = PBXShellScriptBuildPhase; 299 | buildActionMask = 2147483647; 300 | files = ( 301 | ); 302 | inputPaths = ( 303 | ); 304 | name = "📦 Copy Pods Resources"; 305 | outputPaths = ( 306 | ); 307 | runOnlyForDeploymentPostprocessing = 0; 308 | shellPath = /bin/sh; 309 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-TrollDropMobile/Pods-TrollDropMobile-resources.sh\"\n"; 310 | showEnvVarsInLog = 0; 311 | }; 312 | /* End PBXShellScriptBuildPhase section */ 313 | 314 | /* Begin PBXSourcesBuildPhase section */ 315 | 83A550FC1CDD361700DAA79A /* Sources */ = { 316 | isa = PBXSourcesBuildPhase; 317 | buildActionMask = 2147483647; 318 | files = ( 319 | 83A551071CDD361700DAA79A /* AppDelegate.m in Sources */, 320 | 83A551041CDD361700DAA79A /* main.m in Sources */, 321 | ); 322 | runOnlyForDeploymentPostprocessing = 0; 323 | }; 324 | 83BE69AE1CDCEC2B009973BE /* Sources */ = { 325 | isa = PBXSourcesBuildPhase; 326 | buildActionMask = 2147483647; 327 | files = ( 328 | 83BE69B61CDCEC2B009973BE /* main.m in Sources */, 329 | ); 330 | runOnlyForDeploymentPostprocessing = 0; 331 | }; 332 | /* End PBXSourcesBuildPhase section */ 333 | 334 | /* Begin PBXVariantGroup section */ 335 | 83A5510B1CDD361700DAA79A /* Main.storyboard */ = { 336 | isa = PBXVariantGroup; 337 | children = ( 338 | 83A5510C1CDD361700DAA79A /* Base */, 339 | ); 340 | name = Main.storyboard; 341 | sourceTree = ""; 342 | }; 343 | 83A551101CDD361700DAA79A /* LaunchScreen.storyboard */ = { 344 | isa = PBXVariantGroup; 345 | children = ( 346 | 83A551111CDD361700DAA79A /* Base */, 347 | ); 348 | name = LaunchScreen.storyboard; 349 | sourceTree = ""; 350 | }; 351 | /* End PBXVariantGroup section */ 352 | 353 | /* Begin XCBuildConfiguration section */ 354 | 83A551151CDD361700DAA79A /* Debug */ = { 355 | isa = XCBuildConfiguration; 356 | baseConfigurationReference = 9AA0634B34AF428E8E59E97F /* Pods-TrollDropMobile.debug.xcconfig */; 357 | buildSettings = { 358 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 359 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 360 | INFOPLIST_FILE = TrollDropMobile/Info.plist; 361 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 362 | PRODUCT_BUNDLE_IDENTIFIER = us.pandamonia.TrollDrop; 363 | PRODUCT_NAME = TrollDrop; 364 | SDKROOT = iphoneos; 365 | TARGETED_DEVICE_FAMILY = "1,2"; 366 | }; 367 | name = Debug; 368 | }; 369 | 83A551161CDD361700DAA79A /* Release */ = { 370 | isa = XCBuildConfiguration; 371 | baseConfigurationReference = A5D67E024C12B0E510B1E5DC /* Pods-TrollDropMobile.release.xcconfig */; 372 | buildSettings = { 373 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 374 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 375 | INFOPLIST_FILE = TrollDropMobile/Info.plist; 376 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 377 | PRODUCT_BUNDLE_IDENTIFIER = us.pandamonia.TrollDrop; 378 | PRODUCT_NAME = TrollDrop; 379 | SDKROOT = iphoneos; 380 | TARGETED_DEVICE_FAMILY = "1,2"; 381 | VALIDATE_PRODUCT = YES; 382 | }; 383 | name = Release; 384 | }; 385 | 83BE69B71CDCEC2B009973BE /* Debug */ = { 386 | isa = XCBuildConfiguration; 387 | buildSettings = { 388 | ALWAYS_SEARCH_USER_PATHS = NO; 389 | CLANG_ANALYZER_NONNULL = YES; 390 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 391 | CLANG_CXX_LIBRARY = "libc++"; 392 | CLANG_ENABLE_MODULES = YES; 393 | CLANG_ENABLE_OBJC_ARC = YES; 394 | CLANG_WARN_BOOL_CONVERSION = YES; 395 | CLANG_WARN_CONSTANT_CONVERSION = YES; 396 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 397 | CLANG_WARN_EMPTY_BODY = YES; 398 | CLANG_WARN_ENUM_CONVERSION = YES; 399 | CLANG_WARN_INT_CONVERSION = YES; 400 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 401 | CLANG_WARN_UNREACHABLE_CODE = YES; 402 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 403 | CODE_SIGN_IDENTITY = "-"; 404 | COPY_PHASE_STRIP = NO; 405 | DEBUG_INFORMATION_FORMAT = dwarf; 406 | ENABLE_STRICT_OBJC_MSGSEND = YES; 407 | ENABLE_TESTABILITY = YES; 408 | GCC_C_LANGUAGE_STANDARD = gnu99; 409 | GCC_DYNAMIC_NO_PIC = NO; 410 | GCC_NO_COMMON_BLOCKS = YES; 411 | GCC_OPTIMIZATION_LEVEL = 0; 412 | GCC_PREPROCESSOR_DEFINITIONS = ( 413 | "DEBUG=1", 414 | "$(inherited)", 415 | ); 416 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 417 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 418 | GCC_WARN_UNDECLARED_SELECTOR = YES; 419 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 420 | GCC_WARN_UNUSED_FUNCTION = YES; 421 | GCC_WARN_UNUSED_VARIABLE = YES; 422 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 423 | MACOSX_DEPLOYMENT_TARGET = 10.7; 424 | MTL_ENABLE_DEBUG_INFO = YES; 425 | ONLY_ACTIVE_ARCH = YES; 426 | SDKROOT = macosx; 427 | }; 428 | name = Debug; 429 | }; 430 | 83BE69B81CDCEC2B009973BE /* Release */ = { 431 | isa = XCBuildConfiguration; 432 | buildSettings = { 433 | ALWAYS_SEARCH_USER_PATHS = NO; 434 | CLANG_ANALYZER_NONNULL = YES; 435 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 436 | CLANG_CXX_LIBRARY = "libc++"; 437 | CLANG_ENABLE_MODULES = YES; 438 | CLANG_ENABLE_OBJC_ARC = YES; 439 | CLANG_WARN_BOOL_CONVERSION = YES; 440 | CLANG_WARN_CONSTANT_CONVERSION = YES; 441 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 442 | CLANG_WARN_EMPTY_BODY = YES; 443 | CLANG_WARN_ENUM_CONVERSION = YES; 444 | CLANG_WARN_INT_CONVERSION = YES; 445 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 446 | CLANG_WARN_UNREACHABLE_CODE = YES; 447 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 448 | CODE_SIGN_IDENTITY = "-"; 449 | COPY_PHASE_STRIP = NO; 450 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 451 | ENABLE_NS_ASSERTIONS = NO; 452 | ENABLE_STRICT_OBJC_MSGSEND = YES; 453 | GCC_C_LANGUAGE_STANDARD = gnu99; 454 | GCC_NO_COMMON_BLOCKS = YES; 455 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 456 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 457 | GCC_WARN_UNDECLARED_SELECTOR = YES; 458 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 459 | GCC_WARN_UNUSED_FUNCTION = YES; 460 | GCC_WARN_UNUSED_VARIABLE = YES; 461 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 462 | MACOSX_DEPLOYMENT_TARGET = 10.7; 463 | MTL_ENABLE_DEBUG_INFO = NO; 464 | SDKROOT = macosx; 465 | }; 466 | name = Release; 467 | }; 468 | 83BE69BA1CDCEC2B009973BE /* Debug */ = { 469 | isa = XCBuildConfiguration; 470 | baseConfigurationReference = 5B44DD30D3C2E41A33C3F689 /* Pods-TrollDrop.debug.xcconfig */; 471 | buildSettings = { 472 | PRODUCT_NAME = trolldrop; 473 | }; 474 | name = Debug; 475 | }; 476 | 83BE69BB1CDCEC2B009973BE /* Release */ = { 477 | isa = XCBuildConfiguration; 478 | baseConfigurationReference = B17A7D106D05E3FB30F95CD3 /* Pods-TrollDrop.release.xcconfig */; 479 | buildSettings = { 480 | PRODUCT_NAME = trolldrop; 481 | }; 482 | name = Release; 483 | }; 484 | /* End XCBuildConfiguration section */ 485 | 486 | /* Begin XCConfigurationList section */ 487 | 83A551141CDD361700DAA79A /* Build configuration list for PBXNativeTarget "TrollDropMobile" */ = { 488 | isa = XCConfigurationList; 489 | buildConfigurations = ( 490 | 83A551151CDD361700DAA79A /* Debug */, 491 | 83A551161CDD361700DAA79A /* Release */, 492 | ); 493 | defaultConfigurationIsVisible = 0; 494 | defaultConfigurationName = Release; 495 | }; 496 | 83BE69AD1CDCEC2B009973BE /* Build configuration list for PBXProject "TrollDrop" */ = { 497 | isa = XCConfigurationList; 498 | buildConfigurations = ( 499 | 83BE69B71CDCEC2B009973BE /* Debug */, 500 | 83BE69B81CDCEC2B009973BE /* Release */, 501 | ); 502 | defaultConfigurationIsVisible = 0; 503 | defaultConfigurationName = Release; 504 | }; 505 | 83BE69B91CDCEC2B009973BE /* Build configuration list for PBXNativeTarget "TrollDrop" */ = { 506 | isa = XCConfigurationList; 507 | buildConfigurations = ( 508 | 83BE69BA1CDCEC2B009973BE /* Debug */, 509 | 83BE69BB1CDCEC2B009973BE /* Release */, 510 | ); 511 | defaultConfigurationIsVisible = 0; 512 | defaultConfigurationName = Release; 513 | }; 514 | /* End XCConfigurationList section */ 515 | }; 516 | rootObject = 83BE69AA1CDCEC2B009973BE /* Project object */; 517 | } 518 | -------------------------------------------------------------------------------- /Example/TrollDrop.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/TrollDrop.xcodeproj/xcshareddata/xcschemes/TrollDrop.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /Example/TrollDrop.xcodeproj/xcshareddata/xcschemes/TrollDropMobile.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /Example/TrollDrop.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/TrollDrop/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // TrollDrop 4 | // 5 | // Created by Alexsander Akers on 5/6/16. 6 | // Copyright © 2016 Pandamonia LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | static BOOL shouldKeepRunning = YES; 13 | 14 | static void terminationHandler(int signum) { 15 | shouldKeepRunning = NO; 16 | } 17 | 18 | static void configureHandlers() { 19 | struct sigaction action; 20 | memset(&action, 0, sizeof(struct sigaction)); 21 | action.sa_handler = terminationHandler; 22 | 23 | if (sigaction(SIGINT, &action, NULL) < 0) { 24 | perror("sigaction"); 25 | } 26 | 27 | if (sigaction(SIGTERM, &action, NULL) < 0) { 28 | perror("sigaction"); 29 | } 30 | } 31 | 32 | int main(int argc, const char *argv[]) { 33 | configureHandlers(); 34 | 35 | NS_VALID_UNTIL_END_OF_SCOPE TDKTrollController *trollController = [[TDKTrollController alloc] init]; 36 | 37 | printf("Begin the trolling...\n"); 38 | [trollController start]; 39 | 40 | NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; 41 | while (shouldKeepRunning && [runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]); 42 | 43 | [trollController stop]; 44 | printf("Trolling stopped.\n"); 45 | 46 | return 0; 47 | } 48 | -------------------------------------------------------------------------------- /Example/TrollDropMobile/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // TrollDrop 4 | // 5 | // Created by Alexsander Akers on 5/6/16. 6 | // Copyright © 2016 Pandamonia LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | @end 16 | 17 | -------------------------------------------------------------------------------- /Example/TrollDropMobile/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // TrollDrop 4 | // 5 | // Created by Alexsander Akers on 5/6/16. 6 | // Copyright © 2016 Pandamonia LLC. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | #import 12 | 13 | @interface AppDelegate () 14 | 15 | @property (nonatomic, readonly, strong) TDKTrollController *trollController; 16 | 17 | @end 18 | 19 | @implementation AppDelegate 20 | 21 | - (instancetype)init 22 | { 23 | self = [super init]; 24 | if (self) { 25 | _trollController = [[TDKTrollController alloc] init]; 26 | } 27 | 28 | return self; 29 | } 30 | 31 | #pragma mark - App Delegate 32 | 33 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 34 | { 35 | [self.trollController start]; 36 | return YES; 37 | } 38 | 39 | - (void)applicationWillEnterForeground:(UIApplication *)application 40 | { 41 | [self.trollController start]; 42 | } 43 | 44 | - (void)applicationDidEnterBackground:(UIApplication *)application 45 | { 46 | [self.trollController stop]; 47 | } 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /Example/TrollDropMobile/Assets.xcassets/AppIcon.appiconset/AppIcon60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a2/TrollDropKit/149dab551eb9fbee654658655263b5114d11095c/Example/TrollDropMobile/Assets.xcassets/AppIcon.appiconset/AppIcon60x60@2x.png -------------------------------------------------------------------------------- /Example/TrollDropMobile/Assets.xcassets/AppIcon.appiconset/AppIcon60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a2/TrollDropKit/149dab551eb9fbee654658655263b5114d11095c/Example/TrollDropMobile/Assets.xcassets/AppIcon.appiconset/AppIcon60x60@3x.png -------------------------------------------------------------------------------- /Example/TrollDropMobile/Assets.xcassets/AppIcon.appiconset/AppIcon76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a2/TrollDropKit/149dab551eb9fbee654658655263b5114d11095c/Example/TrollDropMobile/Assets.xcassets/AppIcon.appiconset/AppIcon76x76.png -------------------------------------------------------------------------------- /Example/TrollDropMobile/Assets.xcassets/AppIcon.appiconset/AppIcon76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a2/TrollDropKit/149dab551eb9fbee654658655263b5114d11095c/Example/TrollDropMobile/Assets.xcassets/AppIcon.appiconset/AppIcon76x76@2x.png -------------------------------------------------------------------------------- /Example/TrollDropMobile/Assets.xcassets/AppIcon.appiconset/AppIcon83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a2/TrollDropKit/149dab551eb9fbee654658655263b5114d11095c/Example/TrollDropMobile/Assets.xcassets/AppIcon.appiconset/AppIcon83.5x83.5@2x.png -------------------------------------------------------------------------------- /Example/TrollDropMobile/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "size" : "60x60", 25 | "idiom" : "iphone", 26 | "filename" : "AppIcon60x60@2x.png", 27 | "scale" : "2x" 28 | }, 29 | { 30 | "size" : "60x60", 31 | "idiom" : "iphone", 32 | "filename" : "AppIcon60x60@3x.png", 33 | "scale" : "3x" 34 | }, 35 | { 36 | "idiom" : "ipad", 37 | "size" : "29x29", 38 | "scale" : "1x" 39 | }, 40 | { 41 | "idiom" : "ipad", 42 | "size" : "29x29", 43 | "scale" : "2x" 44 | }, 45 | { 46 | "idiom" : "ipad", 47 | "size" : "40x40", 48 | "scale" : "1x" 49 | }, 50 | { 51 | "idiom" : "ipad", 52 | "size" : "40x40", 53 | "scale" : "2x" 54 | }, 55 | { 56 | "size" : "76x76", 57 | "idiom" : "ipad", 58 | "filename" : "AppIcon76x76.png", 59 | "scale" : "1x" 60 | }, 61 | { 62 | "size" : "76x76", 63 | "idiom" : "ipad", 64 | "filename" : "AppIcon76x76@2x.png", 65 | "scale" : "2x" 66 | }, 67 | { 68 | "size" : "83.5x83.5", 69 | "idiom" : "ipad", 70 | "filename" : "AppIcon83.5x83.5@2x.png", 71 | "scale" : "2x" 72 | } 73 | ], 74 | "info" : { 75 | "version" : 1, 76 | "author" : "xcode" 77 | } 78 | } -------------------------------------------------------------------------------- /Example/TrollDropMobile/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /Example/TrollDropMobile/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /Example/TrollDropMobile/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /Example/TrollDropMobile/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // TrollDrop 4 | // 5 | // Created by Alexsander Akers on 5/6/16. 6 | // Copyright © 2016 Pandamonia LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Example/TrollDropMobile/trollface.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a2/TrollDropKit/149dab551eb9fbee654658655263b5114d11095c/Example/TrollDropMobile/trollface.jpg -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Alexsander Akers 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TrollDropKit -------------------------------------------------------------------------------- /TrollDropKit.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = "TrollDropKit" 3 | s.version = "0.3.0" 4 | s.summary = "Send trollfaces via AirDrop to nearby devices." 5 | s.description = "Scans for nearby devices with AirDrop enabled and sends them a trollface image (or a file of your choice)." 6 | s.homepage = "https://github.com/a2/TrollDropKit" 7 | s.license = "MIT" 8 | s.author = { "Alexsander Akers" => "me@a2.io" } 9 | s.social_media_url = "https://twitter.com/a2" 10 | s.source = { :git => "https://github.com/a2/TrollDropKit.git", :tag => "#{s.version}" } 11 | s.source_files = "Classes", "Classes/**/*.{h,m}" 12 | s.public_header_files = "Classes/TDKTrollController.h" 13 | s.ios.deployment_target = "7.0" 14 | s.tvos.deployment_target = "9.0" 15 | s.osx.deployment_target = "10.7" 16 | s.requires_arc = true 17 | end 18 | --------------------------------------------------------------------------------