├── .gitignore ├── .travis.yml ├── Classes ├── TWWatchdogInspector.h ├── TWWatchdogInspector.m ├── TWWatchdogInspectorViewController.h └── TWWatchdogInspectorViewController.m ├── Gemfile ├── Gemfile.lock ├── LICENSE ├── README.md ├── README_objc.md ├── SwiftExample ├── Podfile ├── Podfile.lock ├── Pods │ ├── Local Podspecs │ │ └── WatchdogInspector.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ └── project.pbxproj │ └── Target Support Files │ │ ├── Pods-SwiftExample │ │ ├── Info.plist │ │ ├── Pods-SwiftExample-acknowledgements.markdown │ │ ├── Pods-SwiftExample-acknowledgements.plist │ │ ├── Pods-SwiftExample-dummy.m │ │ ├── Pods-SwiftExample-frameworks.sh │ │ ├── Pods-SwiftExample-resources.sh │ │ ├── Pods-SwiftExample-umbrella.h │ │ ├── Pods-SwiftExample.debug.xcconfig │ │ ├── Pods-SwiftExample.modulemap │ │ └── Pods-SwiftExample.release.xcconfig │ │ ├── Pods-SwiftExampleTests │ │ ├── Info.plist │ │ ├── Pods-SwiftExampleTests-acknowledgements.markdown │ │ ├── Pods-SwiftExampleTests-acknowledgements.plist │ │ ├── Pods-SwiftExampleTests-dummy.m │ │ ├── Pods-SwiftExampleTests-frameworks.sh │ │ ├── Pods-SwiftExampleTests-resources.sh │ │ ├── Pods-SwiftExampleTests-umbrella.h │ │ ├── Pods-SwiftExampleTests.debug.xcconfig │ │ ├── Pods-SwiftExampleTests.modulemap │ │ └── Pods-SwiftExampleTests.release.xcconfig │ │ ├── Pods-SwiftExample_tvOS │ │ ├── Info.plist │ │ ├── Pods-SwiftExample_tvOS-acknowledgements.markdown │ │ ├── Pods-SwiftExample_tvOS-acknowledgements.plist │ │ ├── Pods-SwiftExample_tvOS-dummy.m │ │ ├── Pods-SwiftExample_tvOS-frameworks.sh │ │ ├── Pods-SwiftExample_tvOS-resources.sh │ │ ├── Pods-SwiftExample_tvOS-umbrella.h │ │ ├── Pods-SwiftExample_tvOS.debug.xcconfig │ │ ├── Pods-SwiftExample_tvOS.modulemap │ │ └── Pods-SwiftExample_tvOS.release.xcconfig │ │ ├── WatchdogInspector-iOS10.2 │ │ ├── Info.plist │ │ ├── WatchdogInspector-iOS10.2-dummy.m │ │ ├── WatchdogInspector-iOS10.2-prefix.pch │ │ ├── WatchdogInspector-iOS10.2-umbrella.h │ │ ├── WatchdogInspector-iOS10.2.modulemap │ │ └── WatchdogInspector-iOS10.2.xcconfig │ │ ├── WatchdogInspector-iOS9.2 │ │ ├── Info.plist │ │ ├── WatchdogInspector-iOS9.2-dummy.m │ │ ├── WatchdogInspector-iOS9.2-prefix.pch │ │ ├── WatchdogInspector-iOS9.2-umbrella.h │ │ ├── WatchdogInspector-iOS9.2.modulemap │ │ └── WatchdogInspector-iOS9.2.xcconfig │ │ └── WatchdogInspector-tvOS10.2 │ │ ├── Info.plist │ │ ├── WatchdogInspector-tvOS10.2-dummy.m │ │ ├── WatchdogInspector-tvOS10.2-prefix.pch │ │ ├── WatchdogInspector-tvOS10.2-umbrella.h │ │ ├── WatchdogInspector-tvOS10.2.modulemap │ │ └── WatchdogInspector-tvOS10.2.xcconfig ├── SwiftExample.xcodeproj │ ├── project.pbxproj │ └── xcshareddata │ │ └── xcschemes │ │ └── SwiftExample.xcscheme ├── SwiftExample │ ├── AppDelegate.swift │ ├── ViewController.swift │ ├── iOS Resources │ │ ├── Assets.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ └── LaunchImage.launchimage │ │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ └── Info.plist │ └── tvOS Resources │ │ ├── Assets.xcassets │ │ ├── App Icon & Top Shelf Image.brandassets │ │ │ ├── App Icon - App Store.imagestack │ │ │ │ ├── Back.imagestacklayer │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Contents.json │ │ │ │ ├── Contents.json │ │ │ │ ├── Front.imagestacklayer │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Contents.json │ │ │ │ └── Middle.imagestacklayer │ │ │ │ │ ├── Content.imageset │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Contents.json │ │ │ ├── App Icon.imagestack │ │ │ │ ├── Back.imagestacklayer │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Contents.json │ │ │ │ ├── Contents.json │ │ │ │ ├── Front.imagestacklayer │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Contents.json │ │ │ │ └── Middle.imagestacklayer │ │ │ │ │ ├── Content.imageset │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ ├── Top Shelf Image Wide.imageset │ │ │ │ └── Contents.json │ │ │ └── Top Shelf Image.imageset │ │ │ │ └── Contents.json │ │ ├── Contents.json │ │ └── Launch Image.launchimage │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ └── Main.storyboard │ │ └── Info.plist └── SwiftExampleTests │ ├── Info.plist │ └── WatchdogInspectorTests.swift ├── WatchdogInspector.podspec ├── WatchdogInspector ├── WatchdogInspector-tvOS │ ├── Info.plist │ └── WatchdogInspector_tvOS.h ├── WatchdogInspector.xcodeproj │ ├── project.pbxproj │ └── xcshareddata │ │ └── xcschemes │ │ └── WatchdogInspector.xcscheme └── WatchdogInspector │ ├── Info.plist │ └── WatchdogInspector.h └── screencast.gif /.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 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | osx_image: xcode7.3 2 | language: objective-c 3 | before_install: 4 | - bundle install 5 | - cd SwiftExample && bundle exec pod install 6 | script: xcodebuild clean test -workspace SwiftExample.xcworkspace -scheme SwiftExample -destination platform='iOS Simulator',name='iPhone 5s' -sdk iphonesimulator | xcpretty -t -c 7 | -------------------------------------------------------------------------------- /Classes/TWWatchdogInspector.h: -------------------------------------------------------------------------------- 1 | // 2 | // TWWatchdogInspector.h 3 | // Tapwork GmbH 4 | // 5 | // Created by Christian Menschel on 25/01/16. 6 | // 7 | // 8 | 9 | #import 10 | 11 | @interface TWWatchdogInspector : NSObject 12 | 13 | /** 14 | * Starts the WatchdogInspector 15 | */ 16 | + (void)start; 17 | 18 | /** 19 | * Stops the WatchdogInspector 20 | */ 21 | + (void)stop; 22 | 23 | /** 24 | * Check for activity 25 | * @return YES If WatchdogInspector is running 26 | * 27 | */ 28 | + (BOOL)isRunning; 29 | 30 | /** 31 | * If the mainthread stalls longer than this given time, 32 | * an exception will be thrown. 33 | * Default is 3 seconds 34 | * @param time The timeout in seconds for mainthread stalling. 35 | */ 36 | + (void)setStallingThreshhold:(NSTimeInterval)time; 37 | 38 | /** 39 | * Tell WatchdogInspector if you want to disable or enable 40 | * the stalling exceptions. 41 | * Default is YES (turned on) 42 | * @param enable If you want to enable or disable the stalling exceptions. 43 | */ 44 | + (void)setEnableMainthreadStallingException:(BOOL)enable; 45 | 46 | /** 47 | * Set the update time interval for the background thread timer. 48 | * The background thread timer counts the frames that have been set 49 | * by the main thread in that time interval 50 | * The update interval should not below 0.5 seconds for performance reasons. 51 | * Default is 2 seconds 52 | * @param time The interval to measure the frames 53 | */ 54 | + (void)setUpdateWatchdogInterval:(NSTimeInterval)time; 55 | 56 | /** 57 | * Turn off or on the NSLogs for framerate in fps 58 | * 59 | * Default is on; 60 | * @param useLogs - Turn on to use NSLogs 61 | */ 62 | + (void)setUseLogs:(BOOL)useLogs; 63 | 64 | @end 65 | -------------------------------------------------------------------------------- /Classes/TWWatchdogInspector.m: -------------------------------------------------------------------------------- 1 | // 2 | // TWWatchdogInspector.m 3 | // Tapwork GmbH 4 | // 5 | // Created by Christian Menschel on 25/01/16. 6 | // 7 | // 8 | 9 | #import "TWWatchdogInspector.h" 10 | #include 11 | #import 12 | #import "TWWatchdogInspectorViewController.h" 13 | 14 | static const double kBestWatchdogFramerate = 60.0; 15 | static NSString *const kExceptionName = @"TWWatchdogInspectorStallingTimeout"; 16 | 17 | static UIWindow *kInspectorWindow = nil; 18 | 19 | static CFTimeInterval updateWatchdogInterval = 2.0; 20 | static CFTimeInterval watchdogMaximumStallingTimeInterval = 3.0; 21 | static BOOL enableWatchdogStallingException = YES; 22 | static int numberOfFrames = 0; 23 | static BOOL useLogs = YES; 24 | static CFTimeInterval lastMainThreadEntryTime = 0; 25 | static dispatch_source_t watchdogTimer = NULL; 26 | static CFRunLoopTimerRef mainthreadTimer = NULL; 27 | static CFRunLoopObserverRef kObserverRef = NULL; 28 | 29 | static void mainthreadTimerCallback(CFRunLoopTimerRef timer, void *info) 30 | { 31 | numberOfFrames++; 32 | } 33 | 34 | @implementation TWWatchdogInspector 35 | 36 | #pragma mark - Public methods 37 | 38 | + (void)start 39 | { 40 | if (useLogs) { 41 | NSLog(@"Start WatchdogInspector"); 42 | } 43 | [self addRunLoopObserver]; 44 | [self addWatchdogTimer]; 45 | [self addMainThreadWatchdogCounter]; 46 | if (!kInspectorWindow) { 47 | [self setupStatusView]; 48 | } 49 | } 50 | 51 | + (void)stop 52 | { 53 | if (useLogs) { 54 | NSLog(@"Stop WatchdogInspector"); 55 | } 56 | if (watchdogTimer) { 57 | dispatch_source_cancel(watchdogTimer); 58 | watchdogTimer = NULL; 59 | } 60 | 61 | if (mainthreadTimer) { 62 | CFRunLoopTimerInvalidate(mainthreadTimer); 63 | mainthreadTimer = NULL; 64 | } 65 | 66 | if (kObserverRef) { 67 | CFRunLoopRemoveObserver(CFRunLoopGetMain(), kObserverRef, kCFRunLoopCommonModes); 68 | CFRelease(kObserverRef); 69 | kObserverRef = NULL; 70 | } 71 | [self resetCountValues]; 72 | [kInspectorWindow setHidden:YES]; 73 | kInspectorWindow = nil; 74 | } 75 | 76 | + (BOOL)isRunning 77 | { 78 | return (watchdogTimer != NULL); 79 | } 80 | 81 | + (void)setStallingThreshhold:(NSTimeInterval)time 82 | { 83 | watchdogMaximumStallingTimeInterval = time; 84 | } 85 | 86 | + (void)setEnableMainthreadStallingException:(BOOL)enable 87 | { 88 | enableWatchdogStallingException = enable; 89 | } 90 | 91 | + (void)setUpdateWatchdogInterval:(NSTimeInterval)time 92 | { 93 | updateWatchdogInterval = time; 94 | } 95 | 96 | + (void)setUseLogs:(BOOL)use 97 | { 98 | useLogs = use; 99 | } 100 | 101 | #pragma mark - Private methods 102 | 103 | + (void)addMainThreadWatchdogCounter 104 | { 105 | CFRunLoopRef runLoop = CFRunLoopGetMain(); 106 | CFRunLoopTimerContext timerContext = {0, NULL, NULL, NULL, NULL}; 107 | CFTimeInterval updateWatchdog = 1/kBestWatchdogFramerate; 108 | CFRunLoopTimerRef timer = CFRunLoopTimerCreate(kCFAllocatorDefault, 109 | 0, 110 | updateWatchdog, 111 | 0, 112 | 0, 113 | &mainthreadTimerCallback, 114 | &timerContext); 115 | 116 | CFRunLoopAddTimer(runLoop, timer, kCFRunLoopCommonModes); 117 | mainthreadTimer = timer; 118 | } 119 | 120 | + (void)addWatchdogTimer 121 | { 122 | watchdogTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)); 123 | if (watchdogTimer) { 124 | dispatch_source_set_timer(watchdogTimer, dispatch_walltime(NULL, 0), updateWatchdogInterval * NSEC_PER_SEC, (updateWatchdogInterval * NSEC_PER_SEC) / 10); 125 | dispatch_source_set_event_handler(watchdogTimer, ^{ 126 | double fps = numberOfFrames/updateWatchdogInterval; 127 | numberOfFrames = 0; 128 | if (useLogs) { 129 | NSLog(@"fps %.2f", fps); 130 | } 131 | [self throwExceptionForStallingIfNeeded]; 132 | dispatch_async(dispatch_get_main_queue(), ^{ 133 | [((TWWatchdogInspectorViewController *)kInspectorWindow.rootViewController) updateFPS:fps]; 134 | }); 135 | }); 136 | dispatch_resume(watchdogTimer); 137 | } 138 | } 139 | 140 | + (void)addRunLoopObserver 141 | { 142 | kObserverRef = CFRunLoopObserverCreateWithHandler(NULL, kCFRunLoopAllActivities, 143 | YES, 144 | 0, 145 | ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) 146 | { 147 | if (activity == kCFRunLoopAfterWaiting) { 148 | lastMainThreadEntryTime = CACurrentMediaTime(); 149 | } else if (activity == kCFRunLoopBeforeTimers) { 150 | [self throwExceptionForStallingIfNeeded]; 151 | } 152 | }); 153 | CFRunLoopAddObserver(CFRunLoopGetMain(), kObserverRef, kCFRunLoopCommonModes); 154 | } 155 | 156 | + (void)throwExceptionForStallingIfNeeded 157 | { 158 | if (enableWatchdogStallingException) { 159 | CFTimeInterval time = CACurrentMediaTime() - lastMainThreadEntryTime; 160 | if (time > watchdogMaximumStallingTimeInterval && lastMainThreadEntryTime > 0) { 161 | NSString *reason = [NSString stringWithFormat:@"Watchdog timeout: Mainthread stalled for %.2f seconds", time]; 162 | NSException *excetopion = [NSException exceptionWithName:kExceptionName 163 | reason:reason 164 | userInfo:nil]; 165 | [excetopion raise]; 166 | } 167 | } 168 | } 169 | 170 | + (void)resetCountValues { 171 | lastMainThreadEntryTime = 0; 172 | numberOfFrames = 0; 173 | } 174 | 175 | #pragma mark - UI Updates 176 | 177 | + (void)setupStatusView 178 | { 179 | #if TARGET_OS_IOS 180 | CGRect statusBarFrame = [UIApplication sharedApplication].statusBarFrame; 181 | #elif TARGET_OS_TV 182 | CGRect statusBarFrame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height / 54); 183 | #endif 184 | CGSize size = statusBarFrame.size; 185 | CGRect frame = CGRectMake(0, 0, size.width, size.height); 186 | UIWindow *window = [[UIWindow alloc] initWithFrame:frame]; 187 | window.rootViewController = [[TWWatchdogInspectorViewController alloc] init]; 188 | [window setHidden:NO]; 189 | #if TARGET_OS_IOS 190 | window.windowLevel = UIWindowLevelStatusBar + 50; 191 | #elif TARGET_OS_TV 192 | window.windowLevel = UIWindowLevelNormal + 50; 193 | #endif 194 | kInspectorWindow = window; 195 | } 196 | 197 | #pragma mark - Life Cycle 198 | 199 | - (void)dealloc 200 | { 201 | [[self class] stop]; 202 | } 203 | 204 | @end 205 | -------------------------------------------------------------------------------- /Classes/TWWatchdogInspectorViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // TWWatchdogInspectorViewController.h 3 | // Pods 4 | // 5 | // Created by Christian Menschel on 10/02/16. 6 | // 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface TWWatchdogInspectorViewController : UIViewController 14 | 15 | - (void)updateFPS:(double)fps; 16 | - (void)updateStallingTime:(NSTimeInterval)stallingTime; 17 | 18 | 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /Classes/TWWatchdogInspectorViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // TWWatchdogInspectorViewController.m 3 | // Pods 4 | // 5 | // Created by Christian Menschel on 10/02/16. 6 | // 7 | // 8 | 9 | #import "TWWatchdogInspectorViewController.h" 10 | 11 | static const double kBestFrameRate = 60.0; 12 | static const CGFloat kBarViewWidth = 10.0; 13 | static const CGFloat kBarViewPaddingX = 8.0; 14 | static const NSTimeInterval kBarViewAnimationDuration = 2.0; 15 | static const CGFloat kLabelWidth = 150.0; 16 | static NSTimeInterval lastUpdateFPSTIme = 0.0; 17 | 18 | @interface TWWatchdogInspectorViewController () 19 | @property (nonatomic, nonnull) UILabel *fpsLabel; 20 | @property (nonatomic, nonnull) UILabel *timeLabel; 21 | @property (nonatomic, nonnull) NSHashTable *barViews; 22 | @end 23 | 24 | @implementation TWWatchdogInspectorViewController 25 | 26 | #pragma mark - View Life Cycle 27 | 28 | - (void)loadView { 29 | [super loadView]; 30 | self.view.backgroundColor = [UIColor lightGrayColor]; 31 | 32 | UILabel *fpsLabel = [[UILabel alloc] init]; 33 | fpsLabel.backgroundColor = [UIColor clearColor]; 34 | fpsLabel.font = [UIFont boldSystemFontOfSize:14]; 35 | [self.view addSubview:fpsLabel]; 36 | _fpsLabel = fpsLabel; 37 | 38 | UILabel *timeLabel = [[UILabel alloc] init]; 39 | timeLabel.backgroundColor = [UIColor clearColor]; 40 | timeLabel.font = [UIFont boldSystemFontOfSize:14]; 41 | [self.view addSubview:timeLabel]; 42 | _timeLabel = timeLabel; 43 | _barViews = [NSHashTable weakObjectsHashTable]; 44 | } 45 | 46 | #pragma mark - Layout 47 | 48 | - (void)viewWillLayoutSubviews 49 | { 50 | [super viewWillLayoutSubviews]; 51 | 52 | self.fpsLabel.frame = CGRectMake(4, 0, kLabelWidth, self.view.bounds.size.height); 53 | self.timeLabel.frame = CGRectMake(CGRectGetMaxX(_fpsLabel.frame), 0, kLabelWidth, self.view.bounds.size.height); 54 | } 55 | 56 | #pragma mark - Public methods 57 | 58 | - (void)updateFPS:(double)fps 59 | { 60 | if (fps > 0) { 61 | self.fpsLabel.text = [NSString stringWithFormat:@"fps: %.2f", fps]; 62 | } else { 63 | self.fpsLabel.text = nil; 64 | } 65 | [self updateColorWithFPS:fps]; 66 | [self addBarWithFPS:fps]; 67 | lastUpdateFPSTIme = [NSDate timeIntervalSinceReferenceDate]; 68 | } 69 | 70 | - (void)updateStallingTime:(NSTimeInterval)stallingTime 71 | { 72 | if (stallingTime > 0) { 73 | self.timeLabel.text = [NSString stringWithFormat:@"Stalling: %.2f Sec", stallingTime]; 74 | } else { 75 | self.timeLabel.text = nil; 76 | } 77 | } 78 | 79 | #pragma mark - Private methods 80 | 81 | - (void)updateColorWithFPS:(double)fps 82 | { 83 | //fade from green to red 84 | double n = 1 - (fps/kBestFrameRate); 85 | double red = (255 * n); 86 | double green = (255 * (1 - n)/2); 87 | double blue = 0; 88 | UIColor *color = [UIColor colorWithRed:red/255.0 green:green/255.0 blue:blue/255.0 alpha:1.0]; 89 | if (fps == 0.0) { 90 | color = [UIColor lightGrayColor]; 91 | } 92 | 93 | [UIView animateWithDuration:0.2 animations:^{ 94 | self.view.layer.backgroundColor = color.CGColor; 95 | }]; 96 | } 97 | 98 | - (void)addBarWithFPS:(double)fps 99 | { 100 | NSTimeInterval duration = kBarViewAnimationDuration; 101 | if (lastUpdateFPSTIme > 0) { 102 | duration = [NSDate timeIntervalSinceReferenceDate] - lastUpdateFPSTIme; 103 | } 104 | CGFloat xPos = self.view.bounds.size.width; 105 | CGFloat height = self.view.bounds.size.height * (fps / kBestFrameRate); 106 | CGFloat yPos = self.view.bounds.size.height - height; 107 | UIView *barView = [[UIView alloc] initWithFrame:CGRectMake(xPos, yPos, kBarViewWidth, height)]; 108 | barView.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.2]; 109 | [self.view addSubview:barView]; 110 | [self.barViews addObject:barView]; 111 | 112 | [self.view bringSubviewToFront:self.fpsLabel]; 113 | [self.view bringSubviewToFront:self.timeLabel]; 114 | for (UIView *barView in self.barViews) { 115 | [barView.layer removeAllAnimations]; 116 | CGRect rect = barView.frame; 117 | rect.origin.x = rect.origin.x - rect.size.width - kBarViewPaddingX; 118 | [UIView animateWithDuration:duration animations:^{ 119 | barView.frame = rect; 120 | } completion:^(BOOL finished) { 121 | if (finished) { 122 | [self removeBarViewIfNeeded:barView]; 123 | } 124 | }]; 125 | } 126 | } 127 | 128 | - (void)removeBarViewIfNeeded:(UIView *)barView 129 | { 130 | if (CGRectGetMaxX(barView.frame) <= -kBarViewPaddingX) { 131 | [barView removeFromSuperview]; 132 | } 133 | } 134 | 135 | @end 136 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'http://www.rubygems.org' 2 | 3 | gem "cocoapods", '~> 1.0' 4 | gem "xcpretty" 5 | gem 'rake' 6 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: http://www.rubygems.org/ 3 | specs: 4 | CFPropertyList (3.0.0) 5 | activesupport (4.2.10) 6 | i18n (~> 0.7) 7 | minitest (~> 5.1) 8 | thread_safe (~> 0.3, >= 0.3.4) 9 | tzinfo (~> 1.1) 10 | atomos (0.1.3) 11 | claide (1.0.2) 12 | cocoapods (1.5.3) 13 | activesupport (>= 4.0.2, < 5) 14 | claide (>= 1.0.2, < 2.0) 15 | cocoapods-core (= 1.5.3) 16 | cocoapods-deintegrate (>= 1.0.2, < 2.0) 17 | cocoapods-downloader (>= 1.2.0, < 2.0) 18 | cocoapods-plugins (>= 1.0.0, < 2.0) 19 | cocoapods-search (>= 1.0.0, < 2.0) 20 | cocoapods-stats (>= 1.0.0, < 2.0) 21 | cocoapods-trunk (>= 1.3.0, < 2.0) 22 | cocoapods-try (>= 1.1.0, < 2.0) 23 | colored2 (~> 3.1) 24 | escape (~> 0.0.4) 25 | fourflusher (~> 2.0.1) 26 | gh_inspector (~> 1.0) 27 | molinillo (~> 0.6.5) 28 | nap (~> 1.0) 29 | ruby-macho (~> 1.1) 30 | xcodeproj (>= 1.5.7, < 2.0) 31 | cocoapods-core (1.5.3) 32 | activesupport (>= 4.0.2, < 6) 33 | fuzzy_match (~> 2.0.4) 34 | nap (~> 1.0) 35 | cocoapods-deintegrate (1.0.2) 36 | cocoapods-downloader (1.2.1) 37 | cocoapods-plugins (1.0.0) 38 | nap 39 | cocoapods-search (1.0.0) 40 | cocoapods-stats (1.0.0) 41 | cocoapods-trunk (1.3.0) 42 | nap (>= 0.8, < 2.0) 43 | netrc (~> 0.11) 44 | cocoapods-try (1.1.0) 45 | colored2 (3.1.2) 46 | concurrent-ruby (1.0.5) 47 | escape (0.0.4) 48 | fourflusher (2.0.1) 49 | fuzzy_match (2.0.4) 50 | gh_inspector (1.1.3) 51 | i18n (0.9.5) 52 | concurrent-ruby (~> 1.0) 53 | minitest (5.11.3) 54 | molinillo (0.6.6) 55 | nanaimo (0.2.6) 56 | nap (1.1.0) 57 | netrc (0.11.0) 58 | rake (12.3.1) 59 | rouge (2.0.7) 60 | ruby-macho (1.2.0) 61 | thread_safe (0.3.6) 62 | tzinfo (1.2.5) 63 | thread_safe (~> 0.1) 64 | xcodeproj (1.5.9) 65 | CFPropertyList (>= 2.3.3, < 4.0) 66 | atomos (~> 0.1.2) 67 | claide (>= 1.0.2, < 2.0) 68 | colored2 (~> 3.1) 69 | nanaimo (~> 0.2.5) 70 | xcpretty (0.2.8) 71 | rouge (~> 2.0.7) 72 | 73 | PLATFORMS 74 | ruby 75 | 76 | DEPENDENCIES 77 | cocoapods (~> 1.0) 78 | rake 79 | xcpretty 80 | 81 | BUNDLED WITH 82 | 1.16.1 83 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 TAPWORK GmbH Christian Menschel 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 | # WatchdogInspector 2 | #### Shows your current framerate (fps) in the status bar of your iOS app 3 | ##### Be a good citizen! Don't block your main thread! 4 | [![Build Status](https://api.travis-ci.org/tapwork/WatchdogInspector.svg?style=flat)](https://travis-ci.org/tapwork/WatchdogInspector) 5 | [![Cocoapods Version](http://img.shields.io/cocoapods/v/WatchdogInspector.svg?style=flat)](https://github.com/tapwork/WatchdogInspector/blob/master/WatchdogInspector.podspec) 6 | [![](http://img.shields.io/cocoapods/l/WatchdogInspector.svg?style=flat)](https://github.com/tapwork/WatchdogInspector/blob/master/LICENSE) 7 | [![CocoaPods Platform](http://img.shields.io/cocoapods/p/WatchdogInspector.svg?style=flat)]() 8 | [![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) 9 | [![Twitter](https://img.shields.io/badge/twitter-@cmenschel-blue.svg?style=flat)](http://twitter.com/cmenschel) 10 | 11 | WatchdogInspector counts your app's framerate and displays the fps in the status bar. 12 | The coloured status bar lets you know when your framerate drops below 60 fps. 13 | If everything is fine your status bar gets happy and will stay green. 14 | To detect unwanted main thread stalls you can set a custom watchdog timeout. 15 | 16 | ## Features 17 | * Status bar displays the current framerate in fps (measured every 2 seconds) 18 | * Colours the status bar from green (good fps) to red (bad fps) 19 | * Custom watchdog timeout: Exception when main thread stalls for a defined time 20 | 21 | ![screencast](screencast.gif) 22 | 23 | ## Install 24 | #### CocoaPods 25 | ```ruby 26 | pod "WatchdogInspector" 27 | ``` 28 | and run `pod install` 29 | You can see the example project how to setup and run `WatchdogInspector` 30 | Make sure that you **don't** use `WatchdogInspector` in production. 31 | 32 | #### Carthage 33 | You can use [Carthage](https://github.com/Carthage/Carthage). 34 | Specify in Cartfile: 35 | 36 | ```ruby 37 | github "tapwork/WatchdogInspector" 38 | ``` 39 | 40 | ## Usage 41 | ##### [Objective-C](README_objc.md) | Swift 42 | #### Start 43 | After launch or whenever you want. 44 | ```Swift 45 | import WatchdogInspector 46 | func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 47 | TWWatchdogInspector.start() 48 | return true 49 | } 50 | ``` 51 | #### Stop 52 | To stop it just call 53 | ```Swift 54 | TWWatchdogInspector.stop() 55 | ``` 56 | #### Main Thread Stalling Exceptions 57 | You can set a custom watchdog timeout for stalling exceptions (Default: 3 seconds) 58 | ```Swift 59 | TWWatchdogInspector.setStallingThreshhold(10.0) 60 | ``` 61 | You could also disable the Main Thread exceptions 62 | ```Swift 63 | TWWatchdogInspector.setEnableMainthreadStallingException(false) 64 | ``` 65 | #### Logging 66 | To log all measured framerates you can log them in the console by calling (Default: on) 67 | ```Swift 68 | TWWatchdogInspector.setUseLogs(true) 69 | ``` 70 | 71 | ## How it works 72 | There are basically two timers running to measure the framerate. 73 | 74 | 1. The background thread timer fires every 2 seconds to count how many frames were set by the main thread. Ideally the result would be 120 frames in 2 seconds to get 60 fps. The background timer resets the frames counter every event. He also sends the measured fps to the status bar on the main thread. 75 | 76 | 2. The main thread timer should fire every 1/60 second (60 fps is optimum for a smooth animation) to increment the frames counter. If the main thread is blocked and can't run every 1/60 second the framerate will drop the 60 fps. 77 | 78 | There is also a run loop observer running to detect main thread stalls for a defined timeout. If the timeout has been reached an exception will be thrown. 79 | 80 | ## Related projects 81 | * [HeapInspector](https://github.com/tapwork/HeapInspector-for-iOS) 82 | Find memory issues & leaks in your iOS app 83 | 84 | ## Author 85 | * [Christian Menschel](http://github.com/tapwork) ([@cmenschel](https://twitter.com/cmenschel)) 86 | 87 | ## License 88 | [MIT](LICENSE) 89 | -------------------------------------------------------------------------------- /README_objc.md: -------------------------------------------------------------------------------- 1 | # WatchdogInspector 2 | #### Shows your current framerate (fps) in the status bar of your iOS app 3 | ##### Be a good citizen! Don't block your main thread! 4 | [![Build Status](https://api.travis-ci.org/tapwork/WatchdogInspector.svg?style=flat)](https://travis-ci.org/tapwork/WatchdogInspector) 5 | [![Cocoapods Version](http://img.shields.io/cocoapods/v/WatchdogInspector.svg?style=flat)](https://github.com/tapwork/WatchdogInspector/blob/master/WatchdogInspector.podspec) 6 | [![](http://img.shields.io/cocoapods/l/WatchdogInspector.svg?style=flat)](https://github.com/tapwork/WatchdogInspector/blob/master/LICENSE) 7 | [![CocoaPods Platform](http://img.shields.io/cocoapods/p/WatchdogInspector.svg?style=flat)]() 8 | [![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) 9 | [![Twitter](https://img.shields.io/badge/twitter-@cmenschel-blue.svg?style=flat)](http://twitter.com/cmenschel) 10 | 11 | WatchdogInspector counts your app's framerate and displays the fps in the status bar. 12 | The coloured status bar lets you know when your framerate drops below 60 fps. 13 | If everything is fine your status bar gets happy and will stay green. 14 | To detect unwanted main thread stalls you can set a custom watchdog timeout. 15 | 16 | ## Features 17 | * Status bar displays the current framerate in fps (measured every 2 seconds) 18 | * Colours the status bar from green (good fps) to red (bad fps) 19 | * Custom watchdog timeout: Exception when main thread stalls for a defined time 20 | 21 | ![screencast](screencast.gif) 22 | 23 | ## Install 24 | #### CocoaPods 25 | ```ruby 26 | pod "WatchdogInspector" 27 | ``` 28 | and run `pod install` 29 | You can see the example project how to setup and run `WatchdogInspector` 30 | Make sure that you **don't** use `WatchdogInspector` in production. 31 | 32 | #### Carthage 33 | You can use [Carthage](https://github.com/Carthage/Carthage). 34 | Specify in Cartfile: 35 | 36 | ```ruby 37 | github "tapwork/WatchdogInspector" 38 | ``` 39 | 40 | ## Usage 41 | ##### Objective-C | [Swift](README.md) 42 | Start `WatchdogInspector` after launch or whenever you want. 43 | ```Objective-C 44 | #import 45 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 46 | [TWWatchdogInspector start]; 47 | return YES; 48 | } 49 | ``` 50 | 51 | #### Stop 52 | To stop it just call 53 | ```Objective-C 54 | [TWWatchdogInspector stop] 55 | ``` 56 | #### Main Thread Stalling Exceptions 57 | You can set a custom watchdog timeout for stalling exceptions (Default: 3 seconds) 58 | ```Objective-C 59 | [TWWatchdogInspector setStallingThreshhold:10.0]; 60 | ``` 61 | You could also disable the Main Thread exceptions 62 | ```Objective-C 63 | [TWWatchdogInspector setEnableMainthreadStallingException:NO]; 64 | ``` 65 | 66 | #### Logging 67 | To log all measured framerates you can log them in the console by calling (Default: on) 68 | ```Objective-C 69 | [TWWatchdogInspector setUseLogs:YES]; 70 | ``` 71 | 72 | ## How it works 73 | There are basically two timers running to measure the framerate. 74 | 75 | 1. The background thread timer fires every 2 seconds to count how many frames were set by the main thread. Ideally the result would be 120 frames in 2 seconds to get 60 fps. The background timer resets the frames counter every event. He also sends the measured fps to the status bar on the main thread. 76 | 77 | 2. The main thread timer should fire every 1/60 second (60 fps is optimum for a smooth animation) to increment the frames counter. If the main thread is blocked and can't run every 1/60 second the framerate will drop the 60 fps. 78 | 79 | There is also a run loop observer running to detect main thread stalls for a defined timeout. If the timeout has been reached an exception will be thrown. 80 | 81 | ## Related projects 82 | * [HeapInspector](https://github.com/tapwork/HeapInspector-for-iOS) 83 | Find memory issues & leaks in your iOS app 84 | 85 | ## Author 86 | * [Christian Menschel](http://github.com/tapwork) ([@cmenschel](https://twitter.com/cmenschel)) 87 | 88 | ## License 89 | [MIT](LICENSE) 90 | -------------------------------------------------------------------------------- /SwiftExample/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | target "SwiftExample" do 4 | pod 'WatchdogInspector', :path => "../WatchdogInspector.podspec" 5 | end 6 | 7 | target "SwiftExampleTests" do 8 | pod 'WatchdogInspector', :path => "../WatchdogInspector.podspec" 9 | end 10 | 11 | target "SwiftExample_tvOS" do 12 | pod 'WatchdogInspector', :path => "../WatchdogInspector.podspec" 13 | end 14 | -------------------------------------------------------------------------------- /SwiftExample/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - WatchdogInspector (1.3.0) 3 | 4 | DEPENDENCIES: 5 | - WatchdogInspector (from `../WatchdogInspector.podspec`) 6 | 7 | EXTERNAL SOURCES: 8 | WatchdogInspector: 9 | :path: "../WatchdogInspector.podspec" 10 | 11 | SPEC CHECKSUMS: 12 | WatchdogInspector: 1495917a93764ac454995fca62552472a3eaac00 13 | 14 | PODFILE CHECKSUM: 2b06df6ad5dc10642faa67d9bff5a0cf969b38f8 15 | 16 | COCOAPODS: 1.5.3 17 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Local Podspecs/WatchdogInspector.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "WatchdogInspector", 3 | "version": "1.3.0", 4 | "license": { 5 | "type": "MIT", 6 | "file": "LICENSE" 7 | }, 8 | "summary": "Shows the current framerate (fps) in the status bar of your iOS app", 9 | "description": "WatchdogInspector displays the current framerate of your iOS app in the device's status bar. Whenever your framerate drops your status bar will get red. If everything is fine your status bar is happy and is green. To detect unwanted main thread stalls you can set a custom watchdog timeout.", 10 | "homepage": "https://github.com/tapwork/WatchdogInspector", 11 | "social_media_url": "https://twitter.com/cmenschel", 12 | "authors": { 13 | "Christian Menschel": "christian@tapwork.de" 14 | }, 15 | "source": { 16 | "git": "https://github.com/tapwork/WatchdogInspector.git", 17 | "tag": "1.3.0" 18 | }, 19 | "platforms": { 20 | "ios": "8.0", 21 | "tvos": "10.2" 22 | }, 23 | "source_files": "Classes/**.{h,m}", 24 | "requires_arc": true 25 | } 26 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - WatchdogInspector (1.3.0) 3 | 4 | DEPENDENCIES: 5 | - WatchdogInspector (from `../WatchdogInspector.podspec`) 6 | 7 | EXTERNAL SOURCES: 8 | WatchdogInspector: 9 | :path: "../WatchdogInspector.podspec" 10 | 11 | SPEC CHECKSUMS: 12 | WatchdogInspector: 1495917a93764ac454995fca62552472a3eaac00 13 | 14 | PODFILE CHECKSUM: 2b06df6ad5dc10642faa67d9bff5a0cf969b38f8 15 | 16 | COCOAPODS: 1.5.3 17 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExample/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExample/Pods-SwiftExample-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## WatchdogInspector 5 | 6 | The MIT License (MIT) 7 | 8 | Copyright (c) 2016 TAPWORK GmbH Christian Menschel 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 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExample/Pods-SwiftExample-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 TAPWORK GmbH Christian Menschel 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 | License 40 | MIT 41 | Title 42 | WatchdogInspector 43 | Type 44 | PSGroupSpecifier 45 | 46 | 47 | FooterText 48 | Generated by CocoaPods - https://cocoapods.org 49 | Title 50 | 51 | Type 52 | PSGroupSpecifier 53 | 54 | 55 | StringsTable 56 | Acknowledgements 57 | Title 58 | Acknowledgements 59 | 60 | 61 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExample/Pods-SwiftExample-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_SwiftExample : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_SwiftExample 5 | @end 6 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExample/Pods-SwiftExample-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 7 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # frameworks to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 13 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 14 | 15 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 16 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 17 | 18 | # Used as a return value for each invocation of `strip_invalid_archs` function. 19 | STRIP_BINARY_RETVAL=0 20 | 21 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 22 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 23 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 24 | 25 | # Copies and strips a vendored framework 26 | install_framework() 27 | { 28 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 29 | local source="${BUILT_PRODUCTS_DIR}/$1" 30 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 31 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 32 | elif [ -r "$1" ]; then 33 | local source="$1" 34 | fi 35 | 36 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 37 | 38 | if [ -L "${source}" ]; then 39 | echo "Symlinked..." 40 | source="$(readlink "${source}")" 41 | fi 42 | 43 | # Use filter instead of exclude so missing patterns don't throw errors. 44 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 45 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 46 | 47 | local basename 48 | basename="$(basename -s .framework "$1")" 49 | binary="${destination}/${basename}.framework/${basename}" 50 | if ! [ -r "$binary" ]; then 51 | binary="${destination}/${basename}" 52 | fi 53 | 54 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 55 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 56 | strip_invalid_archs "$binary" 57 | fi 58 | 59 | # Resign the code if required by the build settings to avoid unstable apps 60 | code_sign_if_enabled "${destination}/$(basename "$1")" 61 | 62 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 63 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 64 | local swift_runtime_libs 65 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 66 | for lib in $swift_runtime_libs; do 67 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 68 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 69 | code_sign_if_enabled "${destination}/${lib}" 70 | done 71 | fi 72 | } 73 | 74 | # Copies and strips a vendored dSYM 75 | install_dsym() { 76 | local source="$1" 77 | if [ -r "$source" ]; then 78 | # Copy the dSYM into a the targets temp dir. 79 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 80 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 81 | 82 | local basename 83 | basename="$(basename -s .framework.dSYM "$source")" 84 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 85 | 86 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 87 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 88 | strip_invalid_archs "$binary" 89 | fi 90 | 91 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 92 | # Move the stripped file into its final destination. 93 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 94 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 95 | else 96 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 97 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 98 | fi 99 | fi 100 | } 101 | 102 | # Signs a framework with the provided identity 103 | code_sign_if_enabled() { 104 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 105 | # Use the current code_sign_identitiy 106 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 107 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 108 | 109 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 110 | code_sign_cmd="$code_sign_cmd &" 111 | fi 112 | echo "$code_sign_cmd" 113 | eval "$code_sign_cmd" 114 | fi 115 | } 116 | 117 | # Strip invalid architectures 118 | strip_invalid_archs() { 119 | binary="$1" 120 | # Get architectures for current target binary 121 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 122 | # Intersect them with the architectures we are building for 123 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 124 | # If there are no archs supported by this binary then warn the user 125 | if [[ -z "$intersected_archs" ]]; then 126 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 127 | STRIP_BINARY_RETVAL=0 128 | return 129 | fi 130 | stripped="" 131 | for arch in $binary_archs; do 132 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 133 | # Strip non-valid architectures in-place 134 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 135 | stripped="$stripped $arch" 136 | fi 137 | done 138 | if [[ "$stripped" ]]; then 139 | echo "Stripped $binary of architectures:$stripped" 140 | fi 141 | STRIP_BINARY_RETVAL=1 142 | } 143 | 144 | 145 | if [[ "$CONFIGURATION" == "Debug" ]]; then 146 | install_framework "${BUILT_PRODUCTS_DIR}/WatchdogInspector-iOS10.2/WatchdogInspector.framework" 147 | fi 148 | if [[ "$CONFIGURATION" == "Release" ]]; then 149 | install_framework "${BUILT_PRODUCTS_DIR}/WatchdogInspector-iOS10.2/WatchdogInspector.framework" 150 | fi 151 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 152 | wait 153 | fi 154 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExample/Pods-SwiftExample-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then 7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # resources to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 13 | 14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 15 | > "$RESOURCES_TO_COPY" 16 | 17 | XCASSET_FILES=() 18 | 19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 22 | 23 | case "${TARGETED_DEVICE_FAMILY:-}" in 24 | 1,2) 25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 26 | ;; 27 | 1) 28 | TARGET_DEVICE_ARGS="--target-device iphone" 29 | ;; 30 | 2) 31 | TARGET_DEVICE_ARGS="--target-device ipad" 32 | ;; 33 | 3) 34 | TARGET_DEVICE_ARGS="--target-device tv" 35 | ;; 36 | 4) 37 | TARGET_DEVICE_ARGS="--target-device watch" 38 | ;; 39 | *) 40 | TARGET_DEVICE_ARGS="--target-device mac" 41 | ;; 42 | esac 43 | 44 | install_resource() 45 | { 46 | if [[ "$1" = /* ]] ; then 47 | RESOURCE_PATH="$1" 48 | else 49 | RESOURCE_PATH="${PODS_ROOT}/$1" 50 | fi 51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 52 | cat << EOM 53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 54 | EOM 55 | exit 1 56 | fi 57 | case $RESOURCE_PATH in 58 | *.storyboard) 59 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 60 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 61 | ;; 62 | *.xib) 63 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 64 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 65 | ;; 66 | *.framework) 67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 71 | ;; 72 | *.xcdatamodel) 73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 75 | ;; 76 | *.xcdatamodeld) 77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 79 | ;; 80 | *.xcmappingmodel) 81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 83 | ;; 84 | *.xcassets) 85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 87 | ;; 88 | *) 89 | echo "$RESOURCE_PATH" || true 90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 91 | ;; 92 | esac 93 | } 94 | 95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 100 | fi 101 | rm -f "$RESOURCES_TO_COPY" 102 | 103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] 104 | then 105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 107 | while read line; do 108 | if [[ $line != "${PODS_ROOT}*" ]]; then 109 | XCASSET_FILES+=("$line") 110 | fi 111 | done <<<"$OTHER_XCASSETS" 112 | 113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then 114 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 115 | else 116 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" 117 | fi 118 | fi 119 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExample/Pods-SwiftExample-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_SwiftExampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_SwiftExampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExample/Pods-SwiftExample.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/WatchdogInspector-iOS10.2" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/WatchdogInspector-iOS10.2/WatchdogInspector.framework/Headers" 5 | OTHER_LDFLAGS = $(inherited) -framework "WatchdogInspector" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExample/Pods-SwiftExample.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_SwiftExample { 2 | umbrella header "Pods-SwiftExample-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExample/Pods-SwiftExample.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/WatchdogInspector-iOS10.2" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/WatchdogInspector-iOS10.2/WatchdogInspector.framework/Headers" 5 | OTHER_LDFLAGS = $(inherited) -framework "WatchdogInspector" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExampleTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExampleTests/Pods-SwiftExampleTests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## WatchdogInspector 5 | 6 | The MIT License (MIT) 7 | 8 | Copyright (c) 2016 TAPWORK GmbH Christian Menschel 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 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExampleTests/Pods-SwiftExampleTests-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 TAPWORK GmbH Christian Menschel 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 | License 40 | MIT 41 | Title 42 | WatchdogInspector 43 | Type 44 | PSGroupSpecifier 45 | 46 | 47 | FooterText 48 | Generated by CocoaPods - https://cocoapods.org 49 | Title 50 | 51 | Type 52 | PSGroupSpecifier 53 | 54 | 55 | StringsTable 56 | Acknowledgements 57 | Title 58 | Acknowledgements 59 | 60 | 61 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExampleTests/Pods-SwiftExampleTests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_SwiftExampleTests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_SwiftExampleTests 5 | @end 6 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExampleTests/Pods-SwiftExampleTests-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 7 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # frameworks to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 13 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 14 | 15 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 16 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 17 | 18 | # Used as a return value for each invocation of `strip_invalid_archs` function. 19 | STRIP_BINARY_RETVAL=0 20 | 21 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 22 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 23 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 24 | 25 | # Copies and strips a vendored framework 26 | install_framework() 27 | { 28 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 29 | local source="${BUILT_PRODUCTS_DIR}/$1" 30 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 31 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 32 | elif [ -r "$1" ]; then 33 | local source="$1" 34 | fi 35 | 36 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 37 | 38 | if [ -L "${source}" ]; then 39 | echo "Symlinked..." 40 | source="$(readlink "${source}")" 41 | fi 42 | 43 | # Use filter instead of exclude so missing patterns don't throw errors. 44 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 45 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 46 | 47 | local basename 48 | basename="$(basename -s .framework "$1")" 49 | binary="${destination}/${basename}.framework/${basename}" 50 | if ! [ -r "$binary" ]; then 51 | binary="${destination}/${basename}" 52 | fi 53 | 54 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 55 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 56 | strip_invalid_archs "$binary" 57 | fi 58 | 59 | # Resign the code if required by the build settings to avoid unstable apps 60 | code_sign_if_enabled "${destination}/$(basename "$1")" 61 | 62 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 63 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 64 | local swift_runtime_libs 65 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 66 | for lib in $swift_runtime_libs; do 67 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 68 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 69 | code_sign_if_enabled "${destination}/${lib}" 70 | done 71 | fi 72 | } 73 | 74 | # Copies and strips a vendored dSYM 75 | install_dsym() { 76 | local source="$1" 77 | if [ -r "$source" ]; then 78 | # Copy the dSYM into a the targets temp dir. 79 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 80 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 81 | 82 | local basename 83 | basename="$(basename -s .framework.dSYM "$source")" 84 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 85 | 86 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 87 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 88 | strip_invalid_archs "$binary" 89 | fi 90 | 91 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 92 | # Move the stripped file into its final destination. 93 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 94 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 95 | else 96 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 97 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 98 | fi 99 | fi 100 | } 101 | 102 | # Signs a framework with the provided identity 103 | code_sign_if_enabled() { 104 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 105 | # Use the current code_sign_identitiy 106 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 107 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 108 | 109 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 110 | code_sign_cmd="$code_sign_cmd &" 111 | fi 112 | echo "$code_sign_cmd" 113 | eval "$code_sign_cmd" 114 | fi 115 | } 116 | 117 | # Strip invalid architectures 118 | strip_invalid_archs() { 119 | binary="$1" 120 | # Get architectures for current target binary 121 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 122 | # Intersect them with the architectures we are building for 123 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 124 | # If there are no archs supported by this binary then warn the user 125 | if [[ -z "$intersected_archs" ]]; then 126 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 127 | STRIP_BINARY_RETVAL=0 128 | return 129 | fi 130 | stripped="" 131 | for arch in $binary_archs; do 132 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 133 | # Strip non-valid architectures in-place 134 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 135 | stripped="$stripped $arch" 136 | fi 137 | done 138 | if [[ "$stripped" ]]; then 139 | echo "Stripped $binary of architectures:$stripped" 140 | fi 141 | STRIP_BINARY_RETVAL=1 142 | } 143 | 144 | 145 | if [[ "$CONFIGURATION" == "Debug" ]]; then 146 | install_framework "${BUILT_PRODUCTS_DIR}/WatchdogInspector-iOS9.2/WatchdogInspector.framework" 147 | fi 148 | if [[ "$CONFIGURATION" == "Release" ]]; then 149 | install_framework "${BUILT_PRODUCTS_DIR}/WatchdogInspector-iOS9.2/WatchdogInspector.framework" 150 | fi 151 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 152 | wait 153 | fi 154 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExampleTests/Pods-SwiftExampleTests-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then 7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # resources to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 13 | 14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 15 | > "$RESOURCES_TO_COPY" 16 | 17 | XCASSET_FILES=() 18 | 19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 22 | 23 | case "${TARGETED_DEVICE_FAMILY:-}" in 24 | 1,2) 25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 26 | ;; 27 | 1) 28 | TARGET_DEVICE_ARGS="--target-device iphone" 29 | ;; 30 | 2) 31 | TARGET_DEVICE_ARGS="--target-device ipad" 32 | ;; 33 | 3) 34 | TARGET_DEVICE_ARGS="--target-device tv" 35 | ;; 36 | 4) 37 | TARGET_DEVICE_ARGS="--target-device watch" 38 | ;; 39 | *) 40 | TARGET_DEVICE_ARGS="--target-device mac" 41 | ;; 42 | esac 43 | 44 | install_resource() 45 | { 46 | if [[ "$1" = /* ]] ; then 47 | RESOURCE_PATH="$1" 48 | else 49 | RESOURCE_PATH="${PODS_ROOT}/$1" 50 | fi 51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 52 | cat << EOM 53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 54 | EOM 55 | exit 1 56 | fi 57 | case $RESOURCE_PATH in 58 | *.storyboard) 59 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 60 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 61 | ;; 62 | *.xib) 63 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 64 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 65 | ;; 66 | *.framework) 67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 71 | ;; 72 | *.xcdatamodel) 73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 75 | ;; 76 | *.xcdatamodeld) 77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 79 | ;; 80 | *.xcmappingmodel) 81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 83 | ;; 84 | *.xcassets) 85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 87 | ;; 88 | *) 89 | echo "$RESOURCE_PATH" || true 90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 91 | ;; 92 | esac 93 | } 94 | 95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 100 | fi 101 | rm -f "$RESOURCES_TO_COPY" 102 | 103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] 104 | then 105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 107 | while read line; do 108 | if [[ $line != "${PODS_ROOT}*" ]]; then 109 | XCASSET_FILES+=("$line") 110 | fi 111 | done <<<"$OTHER_XCASSETS" 112 | 113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then 114 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 115 | else 116 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" 117 | fi 118 | fi 119 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExampleTests/Pods-SwiftExampleTests-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_SwiftExampleTestsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_SwiftExampleTestsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExampleTests/Pods-SwiftExampleTests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/WatchdogInspector-iOS9.2" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/WatchdogInspector-iOS9.2/WatchdogInspector.framework/Headers" 5 | OTHER_LDFLAGS = $(inherited) -framework "WatchdogInspector" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExampleTests/Pods-SwiftExampleTests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_SwiftExampleTests { 2 | umbrella header "Pods-SwiftExampleTests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExampleTests/Pods-SwiftExampleTests.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/WatchdogInspector-iOS9.2" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/WatchdogInspector-iOS9.2/WatchdogInspector.framework/Headers" 5 | OTHER_LDFLAGS = $(inherited) -framework "WatchdogInspector" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExample_tvOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExample_tvOS/Pods-SwiftExample_tvOS-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## WatchdogInspector 5 | 6 | The MIT License (MIT) 7 | 8 | Copyright (c) 2016 TAPWORK GmbH Christian Menschel 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 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExample_tvOS/Pods-SwiftExample_tvOS-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 TAPWORK GmbH Christian Menschel 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 | License 40 | MIT 41 | Title 42 | WatchdogInspector 43 | Type 44 | PSGroupSpecifier 45 | 46 | 47 | FooterText 48 | Generated by CocoaPods - https://cocoapods.org 49 | Title 50 | 51 | Type 52 | PSGroupSpecifier 53 | 54 | 55 | StringsTable 56 | Acknowledgements 57 | Title 58 | Acknowledgements 59 | 60 | 61 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExample_tvOS/Pods-SwiftExample_tvOS-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_SwiftExample_tvOS : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_SwiftExample_tvOS 5 | @end 6 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExample_tvOS/Pods-SwiftExample_tvOS-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 7 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # frameworks to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 13 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 14 | 15 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 16 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 17 | 18 | # Used as a return value for each invocation of `strip_invalid_archs` function. 19 | STRIP_BINARY_RETVAL=0 20 | 21 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 22 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 23 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 24 | 25 | # Copies and strips a vendored framework 26 | install_framework() 27 | { 28 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 29 | local source="${BUILT_PRODUCTS_DIR}/$1" 30 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 31 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 32 | elif [ -r "$1" ]; then 33 | local source="$1" 34 | fi 35 | 36 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 37 | 38 | if [ -L "${source}" ]; then 39 | echo "Symlinked..." 40 | source="$(readlink "${source}")" 41 | fi 42 | 43 | # Use filter instead of exclude so missing patterns don't throw errors. 44 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 45 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 46 | 47 | local basename 48 | basename="$(basename -s .framework "$1")" 49 | binary="${destination}/${basename}.framework/${basename}" 50 | if ! [ -r "$binary" ]; then 51 | binary="${destination}/${basename}" 52 | fi 53 | 54 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 55 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 56 | strip_invalid_archs "$binary" 57 | fi 58 | 59 | # Resign the code if required by the build settings to avoid unstable apps 60 | code_sign_if_enabled "${destination}/$(basename "$1")" 61 | 62 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 63 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 64 | local swift_runtime_libs 65 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 66 | for lib in $swift_runtime_libs; do 67 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 68 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 69 | code_sign_if_enabled "${destination}/${lib}" 70 | done 71 | fi 72 | } 73 | 74 | # Copies and strips a vendored dSYM 75 | install_dsym() { 76 | local source="$1" 77 | if [ -r "$source" ]; then 78 | # Copy the dSYM into a the targets temp dir. 79 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 80 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 81 | 82 | local basename 83 | basename="$(basename -s .framework.dSYM "$source")" 84 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 85 | 86 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 87 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 88 | strip_invalid_archs "$binary" 89 | fi 90 | 91 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 92 | # Move the stripped file into its final destination. 93 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 94 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 95 | else 96 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 97 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 98 | fi 99 | fi 100 | } 101 | 102 | # Signs a framework with the provided identity 103 | code_sign_if_enabled() { 104 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 105 | # Use the current code_sign_identitiy 106 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 107 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 108 | 109 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 110 | code_sign_cmd="$code_sign_cmd &" 111 | fi 112 | echo "$code_sign_cmd" 113 | eval "$code_sign_cmd" 114 | fi 115 | } 116 | 117 | # Strip invalid architectures 118 | strip_invalid_archs() { 119 | binary="$1" 120 | # Get architectures for current target binary 121 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 122 | # Intersect them with the architectures we are building for 123 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 124 | # If there are no archs supported by this binary then warn the user 125 | if [[ -z "$intersected_archs" ]]; then 126 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 127 | STRIP_BINARY_RETVAL=0 128 | return 129 | fi 130 | stripped="" 131 | for arch in $binary_archs; do 132 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 133 | # Strip non-valid architectures in-place 134 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 135 | stripped="$stripped $arch" 136 | fi 137 | done 138 | if [[ "$stripped" ]]; then 139 | echo "Stripped $binary of architectures:$stripped" 140 | fi 141 | STRIP_BINARY_RETVAL=1 142 | } 143 | 144 | 145 | if [[ "$CONFIGURATION" == "Debug" ]]; then 146 | install_framework "${BUILT_PRODUCTS_DIR}/WatchdogInspector-tvOS10.2/WatchdogInspector.framework" 147 | fi 148 | if [[ "$CONFIGURATION" == "Release" ]]; then 149 | install_framework "${BUILT_PRODUCTS_DIR}/WatchdogInspector-tvOS10.2/WatchdogInspector.framework" 150 | fi 151 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 152 | wait 153 | fi 154 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExample_tvOS/Pods-SwiftExample_tvOS-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then 7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # resources to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 13 | 14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 15 | > "$RESOURCES_TO_COPY" 16 | 17 | XCASSET_FILES=() 18 | 19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 22 | 23 | case "${TARGETED_DEVICE_FAMILY:-}" in 24 | 1,2) 25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 26 | ;; 27 | 1) 28 | TARGET_DEVICE_ARGS="--target-device iphone" 29 | ;; 30 | 2) 31 | TARGET_DEVICE_ARGS="--target-device ipad" 32 | ;; 33 | 3) 34 | TARGET_DEVICE_ARGS="--target-device tv" 35 | ;; 36 | 4) 37 | TARGET_DEVICE_ARGS="--target-device watch" 38 | ;; 39 | *) 40 | TARGET_DEVICE_ARGS="--target-device mac" 41 | ;; 42 | esac 43 | 44 | install_resource() 45 | { 46 | if [[ "$1" = /* ]] ; then 47 | RESOURCE_PATH="$1" 48 | else 49 | RESOURCE_PATH="${PODS_ROOT}/$1" 50 | fi 51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 52 | cat << EOM 53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 54 | EOM 55 | exit 1 56 | fi 57 | case $RESOURCE_PATH in 58 | *.storyboard) 59 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 60 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 61 | ;; 62 | *.xib) 63 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 64 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 65 | ;; 66 | *.framework) 67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 71 | ;; 72 | *.xcdatamodel) 73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 75 | ;; 76 | *.xcdatamodeld) 77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 79 | ;; 80 | *.xcmappingmodel) 81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 83 | ;; 84 | *.xcassets) 85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 87 | ;; 88 | *) 89 | echo "$RESOURCE_PATH" || true 90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 91 | ;; 92 | esac 93 | } 94 | 95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 100 | fi 101 | rm -f "$RESOURCES_TO_COPY" 102 | 103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] 104 | then 105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 107 | while read line; do 108 | if [[ $line != "${PODS_ROOT}*" ]]; then 109 | XCASSET_FILES+=("$line") 110 | fi 111 | done <<<"$OTHER_XCASSETS" 112 | 113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then 114 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 115 | else 116 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" 117 | fi 118 | fi 119 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExample_tvOS/Pods-SwiftExample_tvOS-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_SwiftExample_tvOSVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_SwiftExample_tvOSVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExample_tvOS/Pods-SwiftExample_tvOS.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/WatchdogInspector-tvOS10.2" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/WatchdogInspector-tvOS10.2/WatchdogInspector.framework/Headers" 5 | OTHER_LDFLAGS = $(inherited) -framework "WatchdogInspector" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExample_tvOS/Pods-SwiftExample_tvOS.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_SwiftExample_tvOS { 2 | umbrella header "Pods-SwiftExample_tvOS-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/Pods-SwiftExample_tvOS/Pods-SwiftExample_tvOS.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/WatchdogInspector-tvOS10.2" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/WatchdogInspector-tvOS10.2/WatchdogInspector.framework/Headers" 5 | OTHER_LDFLAGS = $(inherited) -framework "WatchdogInspector" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/WatchdogInspector-iOS10.2/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.3.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/WatchdogInspector-iOS10.2/WatchdogInspector-iOS10.2-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_WatchdogInspector_iOS10_2 : NSObject 3 | @end 4 | @implementation PodsDummy_WatchdogInspector_iOS10_2 5 | @end 6 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/WatchdogInspector-iOS10.2/WatchdogInspector-iOS10.2-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/WatchdogInspector-iOS10.2/WatchdogInspector-iOS10.2-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "TWWatchdogInspector.h" 14 | #import "TWWatchdogInspectorViewController.h" 15 | 16 | FOUNDATION_EXPORT double WatchdogInspectorVersionNumber; 17 | FOUNDATION_EXPORT const unsigned char WatchdogInspectorVersionString[]; 18 | 19 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/WatchdogInspector-iOS10.2/WatchdogInspector-iOS10.2.modulemap: -------------------------------------------------------------------------------- 1 | framework module WatchdogInspector { 2 | umbrella header "WatchdogInspector-iOS10.2-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/WatchdogInspector-iOS10.2/WatchdogInspector-iOS10.2.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/WatchdogInspector-iOS10.2 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | PODS_BUILD_DIR = ${BUILD_DIR} 4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_ROOT = ${SRCROOT} 6 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 7 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 8 | SKIP_INSTALL = YES 9 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/WatchdogInspector-iOS9.2/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.3.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/WatchdogInspector-iOS9.2/WatchdogInspector-iOS9.2-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_WatchdogInspector_iOS9_2 : NSObject 3 | @end 4 | @implementation PodsDummy_WatchdogInspector_iOS9_2 5 | @end 6 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/WatchdogInspector-iOS9.2/WatchdogInspector-iOS9.2-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/WatchdogInspector-iOS9.2/WatchdogInspector-iOS9.2-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "TWWatchdogInspector.h" 14 | #import "TWWatchdogInspectorViewController.h" 15 | 16 | FOUNDATION_EXPORT double WatchdogInspectorVersionNumber; 17 | FOUNDATION_EXPORT const unsigned char WatchdogInspectorVersionString[]; 18 | 19 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/WatchdogInspector-iOS9.2/WatchdogInspector-iOS9.2.modulemap: -------------------------------------------------------------------------------- 1 | framework module WatchdogInspector { 2 | umbrella header "WatchdogInspector-iOS9.2-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/WatchdogInspector-iOS9.2/WatchdogInspector-iOS9.2.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/WatchdogInspector-iOS9.2 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | PODS_BUILD_DIR = ${BUILD_DIR} 4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_ROOT = ${SRCROOT} 6 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 7 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 8 | SKIP_INSTALL = YES 9 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/WatchdogInspector-tvOS10.2/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.3.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/WatchdogInspector-tvOS10.2/WatchdogInspector-tvOS10.2-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_WatchdogInspector_tvOS10_2 : NSObject 3 | @end 4 | @implementation PodsDummy_WatchdogInspector_tvOS10_2 5 | @end 6 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/WatchdogInspector-tvOS10.2/WatchdogInspector-tvOS10.2-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/WatchdogInspector-tvOS10.2/WatchdogInspector-tvOS10.2-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "TWWatchdogInspector.h" 14 | #import "TWWatchdogInspectorViewController.h" 15 | 16 | FOUNDATION_EXPORT double WatchdogInspectorVersionNumber; 17 | FOUNDATION_EXPORT const unsigned char WatchdogInspectorVersionString[]; 18 | 19 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/WatchdogInspector-tvOS10.2/WatchdogInspector-tvOS10.2.modulemap: -------------------------------------------------------------------------------- 1 | framework module WatchdogInspector { 2 | umbrella header "WatchdogInspector-tvOS10.2-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftExample/Pods/Target Support Files/WatchdogInspector-tvOS10.2/WatchdogInspector-tvOS10.2.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/WatchdogInspector-tvOS10.2 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | PODS_BUILD_DIR = ${BUILD_DIR} 4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_ROOT = ${SRCROOT} 6 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 7 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 8 | SKIP_INSTALL = YES 9 | -------------------------------------------------------------------------------- /SwiftExample/SwiftExample.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 52F680361C88413D0049100A /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52F680351C88413D0049100A /* AppDelegate.swift */; }; 11 | 52F680381C88413D0049100A /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52F680371C88413D0049100A /* ViewController.swift */; }; 12 | 52F6803B1C88413D0049100A /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 52F680391C88413D0049100A /* Main.storyboard */; }; 13 | 52F6803D1C88413D0049100A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 52F6803C1C88413D0049100A /* Assets.xcassets */; }; 14 | 52F680401C88413D0049100A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 52F6803E1C88413D0049100A /* LaunchScreen.storyboard */; }; 15 | 57ACA6C4B3BF5FF8CE32FBAD /* Pods_SwiftExample.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0643C6C327AF47102FAE677C /* Pods_SwiftExample.framework */; }; 16 | 7E59E3454ABA19045AA4BA59 /* Pods_SwiftExample_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD8A2BE4575692F551310824 /* Pods_SwiftExample_tvOS.framework */; }; 17 | D154ED3B212428BE0011A546 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52F680351C88413D0049100A /* AppDelegate.swift */; }; 18 | D154ED3C212428C60011A546 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52F680371C88413D0049100A /* ViewController.swift */; }; 19 | D15DD9CF211C67B4007E85A5 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D15DD9CD211C67B4007E85A5 /* Main.storyboard */; }; 20 | D15DD9D1211C67B5007E85A5 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D15DD9D0211C67B5007E85A5 /* Assets.xcassets */; }; 21 | DAB1A8C11C8D700100DB140C /* WatchdogInspectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAB1A8C01C8D700100DB140C /* WatchdogInspectorTests.swift */; }; 22 | F86274D66FBBB36AC5474F75 /* Pods_SwiftExampleTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D5DEBE26DEF71DAFD3FA322 /* Pods_SwiftExampleTests.framework */; }; 23 | /* End PBXBuildFile section */ 24 | 25 | /* Begin PBXContainerItemProxy section */ 26 | DAB1A8BA1C8D6FBF00DB140C /* PBXContainerItemProxy */ = { 27 | isa = PBXContainerItemProxy; 28 | containerPortal = 52F6802A1C88413D0049100A /* Project object */; 29 | proxyType = 1; 30 | remoteGlobalIDString = 52F680311C88413D0049100A; 31 | remoteInfo = SwiftExample; 32 | }; 33 | /* End PBXContainerItemProxy section */ 34 | 35 | /* Begin PBXFileReference section */ 36 | 0643C6C327AF47102FAE677C /* Pods_SwiftExample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwiftExample.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 37 | 306A6AA7EA9B167AA3E0C4D1 /* Pods-SwiftExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftExample.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftExample/Pods-SwiftExample.release.xcconfig"; sourceTree = ""; }; 38 | 52F680321C88413D0049100A /* SwiftExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwiftExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 39 | 52F680351C88413D0049100A /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 40 | 52F680371C88413D0049100A /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 41 | 52F6803A1C88413D0049100A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 42 | 52F6803C1C88413D0049100A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 43 | 52F6803F1C88413D0049100A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 44 | 52F680411C88413D0049100A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 45 | 64A0C3D0F39E5B19E7BA3249 /* Pods-SwiftExample_tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftExample_tvOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftExample_tvOS/Pods-SwiftExample_tvOS.release.xcconfig"; sourceTree = ""; }; 46 | 7EDBC9C8A22052B4396C13A5 /* Pods-SwiftExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftExample.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftExample/Pods-SwiftExample.debug.xcconfig"; sourceTree = ""; }; 47 | 8D5DEBE26DEF71DAFD3FA322 /* Pods_SwiftExampleTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwiftExampleTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 48 | BC796F89CCE87EBD09CCC330 /* Pods-SwiftExampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftExampleTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftExampleTests/Pods-SwiftExampleTests.release.xcconfig"; sourceTree = ""; }; 49 | BD8A2BE4575692F551310824 /* Pods_SwiftExample_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwiftExample_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 50 | CDBB5E80011649238DD4C434 /* Pods-SwiftExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftExampleTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftExampleTests/Pods-SwiftExampleTests.debug.xcconfig"; sourceTree = ""; }; 51 | D15DD9C7211C67B3007E85A5 /* SwiftExample_tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwiftExample_tvOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; 52 | D15DD9CE211C67B4007E85A5 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 53 | D15DD9D0211C67B5007E85A5 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 54 | D15DD9D2211C67B5007E85A5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 55 | D9FEAB5CC30FF27D46B00753 /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 56 | DAB1A8B51C8D6FBF00DB140C /* SwiftExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwiftExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 57 | DAB1A8B91C8D6FBF00DB140C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 58 | DAB1A8C01C8D700100DB140C /* WatchdogInspectorTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WatchdogInspectorTests.swift; sourceTree = ""; }; 59 | DC608DC6D0AEF3680CD74456 /* Pods-SwiftExample_tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftExample_tvOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftExample_tvOS/Pods-SwiftExample_tvOS.debug.xcconfig"; sourceTree = ""; }; 60 | /* End PBXFileReference section */ 61 | 62 | /* Begin PBXFrameworksBuildPhase section */ 63 | 52F6802F1C88413D0049100A /* Frameworks */ = { 64 | isa = PBXFrameworksBuildPhase; 65 | buildActionMask = 2147483647; 66 | files = ( 67 | 57ACA6C4B3BF5FF8CE32FBAD /* Pods_SwiftExample.framework in Frameworks */, 68 | ); 69 | runOnlyForDeploymentPostprocessing = 0; 70 | }; 71 | D15DD9C4211C67B3007E85A5 /* Frameworks */ = { 72 | isa = PBXFrameworksBuildPhase; 73 | buildActionMask = 2147483647; 74 | files = ( 75 | 7E59E3454ABA19045AA4BA59 /* Pods_SwiftExample_tvOS.framework in Frameworks */, 76 | ); 77 | runOnlyForDeploymentPostprocessing = 0; 78 | }; 79 | DAB1A8B21C8D6FBF00DB140C /* Frameworks */ = { 80 | isa = PBXFrameworksBuildPhase; 81 | buildActionMask = 2147483647; 82 | files = ( 83 | F86274D66FBBB36AC5474F75 /* Pods_SwiftExampleTests.framework in Frameworks */, 84 | ); 85 | runOnlyForDeploymentPostprocessing = 0; 86 | }; 87 | /* End PBXFrameworksBuildPhase section */ 88 | 89 | /* Begin PBXGroup section */ 90 | 3E4A0504B6B109A2363166EE /* Frameworks */ = { 91 | isa = PBXGroup; 92 | children = ( 93 | D9FEAB5CC30FF27D46B00753 /* Pods.framework */, 94 | 8D5DEBE26DEF71DAFD3FA322 /* Pods_SwiftExampleTests.framework */, 95 | 0643C6C327AF47102FAE677C /* Pods_SwiftExample.framework */, 96 | BD8A2BE4575692F551310824 /* Pods_SwiftExample_tvOS.framework */, 97 | ); 98 | name = Frameworks; 99 | sourceTree = ""; 100 | }; 101 | 52F680291C88413D0049100A = { 102 | isa = PBXGroup; 103 | children = ( 104 | 52F680341C88413D0049100A /* SwiftExample */, 105 | DAB1A8B61C8D6FBF00DB140C /* SwiftExampleTests */, 106 | 52F680331C88413D0049100A /* Products */, 107 | 3E4A0504B6B109A2363166EE /* Frameworks */, 108 | 6B4E1D96D66A41A26002FD56 /* Pods */, 109 | ); 110 | sourceTree = ""; 111 | }; 112 | 52F680331C88413D0049100A /* Products */ = { 113 | isa = PBXGroup; 114 | children = ( 115 | 52F680321C88413D0049100A /* SwiftExample.app */, 116 | DAB1A8B51C8D6FBF00DB140C /* SwiftExampleTests.xctest */, 117 | D15DD9C7211C67B3007E85A5 /* SwiftExample_tvOS.app */, 118 | ); 119 | name = Products; 120 | sourceTree = ""; 121 | }; 122 | 52F680341C88413D0049100A /* SwiftExample */ = { 123 | isa = PBXGroup; 124 | children = ( 125 | D154ED3A2124286F0011A546 /* iOS Resources */, 126 | D15DD9C8211C67B4007E85A5 /* tvOS Resources */, 127 | 52F680351C88413D0049100A /* AppDelegate.swift */, 128 | 52F680371C88413D0049100A /* ViewController.swift */, 129 | ); 130 | path = SwiftExample; 131 | sourceTree = ""; 132 | }; 133 | 6B4E1D96D66A41A26002FD56 /* Pods */ = { 134 | isa = PBXGroup; 135 | children = ( 136 | CDBB5E80011649238DD4C434 /* Pods-SwiftExampleTests.debug.xcconfig */, 137 | BC796F89CCE87EBD09CCC330 /* Pods-SwiftExampleTests.release.xcconfig */, 138 | 7EDBC9C8A22052B4396C13A5 /* Pods-SwiftExample.debug.xcconfig */, 139 | 306A6AA7EA9B167AA3E0C4D1 /* Pods-SwiftExample.release.xcconfig */, 140 | DC608DC6D0AEF3680CD74456 /* Pods-SwiftExample_tvOS.debug.xcconfig */, 141 | 64A0C3D0F39E5B19E7BA3249 /* Pods-SwiftExample_tvOS.release.xcconfig */, 142 | ); 143 | name = Pods; 144 | sourceTree = ""; 145 | }; 146 | D154ED3A2124286F0011A546 /* iOS Resources */ = { 147 | isa = PBXGroup; 148 | children = ( 149 | 52F680391C88413D0049100A /* Main.storyboard */, 150 | 52F6803C1C88413D0049100A /* Assets.xcassets */, 151 | 52F6803E1C88413D0049100A /* LaunchScreen.storyboard */, 152 | 52F680411C88413D0049100A /* Info.plist */, 153 | ); 154 | path = "iOS Resources"; 155 | sourceTree = ""; 156 | }; 157 | D15DD9C8211C67B4007E85A5 /* tvOS Resources */ = { 158 | isa = PBXGroup; 159 | children = ( 160 | D15DD9CD211C67B4007E85A5 /* Main.storyboard */, 161 | D15DD9D0211C67B5007E85A5 /* Assets.xcassets */, 162 | D15DD9D2211C67B5007E85A5 /* Info.plist */, 163 | ); 164 | path = "tvOS Resources"; 165 | sourceTree = ""; 166 | }; 167 | DAB1A8B61C8D6FBF00DB140C /* SwiftExampleTests */ = { 168 | isa = PBXGroup; 169 | children = ( 170 | DAB1A8B91C8D6FBF00DB140C /* Info.plist */, 171 | DAB1A8C01C8D700100DB140C /* WatchdogInspectorTests.swift */, 172 | ); 173 | path = SwiftExampleTests; 174 | sourceTree = ""; 175 | }; 176 | /* End PBXGroup section */ 177 | 178 | /* Begin PBXNativeTarget section */ 179 | 52F680311C88413D0049100A /* SwiftExample */ = { 180 | isa = PBXNativeTarget; 181 | buildConfigurationList = 52F680441C88413D0049100A /* Build configuration list for PBXNativeTarget "SwiftExample" */; 182 | buildPhases = ( 183 | 9FBEBAA62BAFE2403FFA3FE9 /* [CP] Check Pods Manifest.lock */, 184 | 52F6802E1C88413D0049100A /* Sources */, 185 | 52F6802F1C88413D0049100A /* Frameworks */, 186 | 52F680301C88413D0049100A /* Resources */, 187 | 2C5A2424E81D8B029794219E /* [CP] Embed Pods Frameworks */, 188 | ); 189 | buildRules = ( 190 | ); 191 | dependencies = ( 192 | ); 193 | name = SwiftExample; 194 | productName = SwiftExample; 195 | productReference = 52F680321C88413D0049100A /* SwiftExample.app */; 196 | productType = "com.apple.product-type.application"; 197 | }; 198 | D15DD9C6211C67B3007E85A5 /* SwiftExample_tvOS */ = { 199 | isa = PBXNativeTarget; 200 | buildConfigurationList = D15DD9D5211C67B5007E85A5 /* Build configuration list for PBXNativeTarget "SwiftExample_tvOS" */; 201 | buildPhases = ( 202 | F496054A339F973A4F8738CA /* [CP] Check Pods Manifest.lock */, 203 | D15DD9C3211C67B3007E85A5 /* Sources */, 204 | D15DD9C4211C67B3007E85A5 /* Frameworks */, 205 | D15DD9C5211C67B3007E85A5 /* Resources */, 206 | 544F71827FA499983476EB83 /* [CP] Embed Pods Frameworks */, 207 | ); 208 | buildRules = ( 209 | ); 210 | dependencies = ( 211 | ); 212 | name = SwiftExample_tvOS; 213 | productName = SwiftExample_tvOS; 214 | productReference = D15DD9C7211C67B3007E85A5 /* SwiftExample_tvOS.app */; 215 | productType = "com.apple.product-type.application"; 216 | }; 217 | DAB1A8B41C8D6FBF00DB140C /* SwiftExampleTests */ = { 218 | isa = PBXNativeTarget; 219 | buildConfigurationList = DAB1A8BE1C8D6FBF00DB140C /* Build configuration list for PBXNativeTarget "SwiftExampleTests" */; 220 | buildPhases = ( 221 | CB27CD1938D5B62C6AFDBF36 /* [CP] Check Pods Manifest.lock */, 222 | DAB1A8B11C8D6FBF00DB140C /* Sources */, 223 | DAB1A8B21C8D6FBF00DB140C /* Frameworks */, 224 | DAB1A8B31C8D6FBF00DB140C /* Resources */, 225 | 1174C46D53B287282AE7B07E /* [CP] Embed Pods Frameworks */, 226 | ); 227 | buildRules = ( 228 | ); 229 | dependencies = ( 230 | DAB1A8BB1C8D6FBF00DB140C /* PBXTargetDependency */, 231 | ); 232 | name = SwiftExampleTests; 233 | productName = SwiftExampleTests; 234 | productReference = DAB1A8B51C8D6FBF00DB140C /* SwiftExampleTests.xctest */; 235 | productType = "com.apple.product-type.bundle.unit-test"; 236 | }; 237 | /* End PBXNativeTarget section */ 238 | 239 | /* Begin PBXProject section */ 240 | 52F6802A1C88413D0049100A /* Project object */ = { 241 | isa = PBXProject; 242 | attributes = { 243 | LastSwiftUpdateCheck = 1000; 244 | LastUpgradeCheck = 1000; 245 | ORGANIZATIONNAME = TAPWORK; 246 | TargetAttributes = { 247 | 52F680311C88413D0049100A = { 248 | CreatedOnToolsVersion = 7.2.1; 249 | DevelopmentTeam = 3F89ZY3P47; 250 | LastSwiftMigration = 0900; 251 | }; 252 | D15DD9C6211C67B3007E85A5 = { 253 | CreatedOnToolsVersion = 10.0; 254 | DevelopmentTeam = 3F89ZY3P47; 255 | LastSwiftMigration = 1000; 256 | ProvisioningStyle = Automatic; 257 | }; 258 | DAB1A8B41C8D6FBF00DB140C = { 259 | CreatedOnToolsVersion = 7.2.1; 260 | LastSwiftMigration = 0900; 261 | TestTargetID = 52F680311C88413D0049100A; 262 | }; 263 | }; 264 | }; 265 | buildConfigurationList = 52F6802D1C88413D0049100A /* Build configuration list for PBXProject "SwiftExample" */; 266 | compatibilityVersion = "Xcode 3.2"; 267 | developmentRegion = English; 268 | hasScannedForEncodings = 0; 269 | knownRegions = ( 270 | en, 271 | Base, 272 | ); 273 | mainGroup = 52F680291C88413D0049100A; 274 | productRefGroup = 52F680331C88413D0049100A /* Products */; 275 | projectDirPath = ""; 276 | projectRoot = ""; 277 | targets = ( 278 | 52F680311C88413D0049100A /* SwiftExample */, 279 | D15DD9C6211C67B3007E85A5 /* SwiftExample_tvOS */, 280 | DAB1A8B41C8D6FBF00DB140C /* SwiftExampleTests */, 281 | ); 282 | }; 283 | /* End PBXProject section */ 284 | 285 | /* Begin PBXResourcesBuildPhase section */ 286 | 52F680301C88413D0049100A /* Resources */ = { 287 | isa = PBXResourcesBuildPhase; 288 | buildActionMask = 2147483647; 289 | files = ( 290 | 52F680401C88413D0049100A /* LaunchScreen.storyboard in Resources */, 291 | 52F6803D1C88413D0049100A /* Assets.xcassets in Resources */, 292 | 52F6803B1C88413D0049100A /* Main.storyboard in Resources */, 293 | ); 294 | runOnlyForDeploymentPostprocessing = 0; 295 | }; 296 | D15DD9C5211C67B3007E85A5 /* Resources */ = { 297 | isa = PBXResourcesBuildPhase; 298 | buildActionMask = 2147483647; 299 | files = ( 300 | D15DD9D1211C67B5007E85A5 /* Assets.xcassets in Resources */, 301 | D15DD9CF211C67B4007E85A5 /* Main.storyboard in Resources */, 302 | ); 303 | runOnlyForDeploymentPostprocessing = 0; 304 | }; 305 | DAB1A8B31C8D6FBF00DB140C /* Resources */ = { 306 | isa = PBXResourcesBuildPhase; 307 | buildActionMask = 2147483647; 308 | files = ( 309 | ); 310 | runOnlyForDeploymentPostprocessing = 0; 311 | }; 312 | /* End PBXResourcesBuildPhase section */ 313 | 314 | /* Begin PBXShellScriptBuildPhase section */ 315 | 1174C46D53B287282AE7B07E /* [CP] Embed Pods Frameworks */ = { 316 | isa = PBXShellScriptBuildPhase; 317 | buildActionMask = 2147483647; 318 | files = ( 319 | ); 320 | inputPaths = ( 321 | "${SRCROOT}/Pods/Target Support Files/Pods-SwiftExampleTests/Pods-SwiftExampleTests-frameworks.sh", 322 | "${BUILT_PRODUCTS_DIR}/WatchdogInspector-iOS9.2/WatchdogInspector.framework", 323 | ); 324 | name = "[CP] Embed Pods Frameworks"; 325 | outputPaths = ( 326 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WatchdogInspector.framework", 327 | ); 328 | runOnlyForDeploymentPostprocessing = 0; 329 | shellPath = /bin/sh; 330 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SwiftExampleTests/Pods-SwiftExampleTests-frameworks.sh\"\n"; 331 | showEnvVarsInLog = 0; 332 | }; 333 | 2C5A2424E81D8B029794219E /* [CP] Embed Pods Frameworks */ = { 334 | isa = PBXShellScriptBuildPhase; 335 | buildActionMask = 2147483647; 336 | files = ( 337 | ); 338 | inputPaths = ( 339 | "${SRCROOT}/Pods/Target Support Files/Pods-SwiftExample/Pods-SwiftExample-frameworks.sh", 340 | "${BUILT_PRODUCTS_DIR}/WatchdogInspector-iOS10.2/WatchdogInspector.framework", 341 | ); 342 | name = "[CP] Embed Pods Frameworks"; 343 | outputPaths = ( 344 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WatchdogInspector.framework", 345 | ); 346 | runOnlyForDeploymentPostprocessing = 0; 347 | shellPath = /bin/sh; 348 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SwiftExample/Pods-SwiftExample-frameworks.sh\"\n"; 349 | showEnvVarsInLog = 0; 350 | }; 351 | 544F71827FA499983476EB83 /* [CP] Embed Pods Frameworks */ = { 352 | isa = PBXShellScriptBuildPhase; 353 | buildActionMask = 2147483647; 354 | files = ( 355 | ); 356 | inputPaths = ( 357 | "${SRCROOT}/Pods/Target Support Files/Pods-SwiftExample_tvOS/Pods-SwiftExample_tvOS-frameworks.sh", 358 | "${BUILT_PRODUCTS_DIR}/WatchdogInspector-tvOS10.2/WatchdogInspector.framework", 359 | ); 360 | name = "[CP] Embed Pods Frameworks"; 361 | outputPaths = ( 362 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WatchdogInspector.framework", 363 | ); 364 | runOnlyForDeploymentPostprocessing = 0; 365 | shellPath = /bin/sh; 366 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SwiftExample_tvOS/Pods-SwiftExample_tvOS-frameworks.sh\"\n"; 367 | showEnvVarsInLog = 0; 368 | }; 369 | 9FBEBAA62BAFE2403FFA3FE9 /* [CP] Check Pods Manifest.lock */ = { 370 | isa = PBXShellScriptBuildPhase; 371 | buildActionMask = 2147483647; 372 | files = ( 373 | ); 374 | inputPaths = ( 375 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 376 | "${PODS_ROOT}/Manifest.lock", 377 | ); 378 | name = "[CP] Check Pods Manifest.lock"; 379 | outputPaths = ( 380 | "$(DERIVED_FILE_DIR)/Pods-SwiftExample-checkManifestLockResult.txt", 381 | ); 382 | runOnlyForDeploymentPostprocessing = 0; 383 | shellPath = /bin/sh; 384 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 385 | showEnvVarsInLog = 0; 386 | }; 387 | CB27CD1938D5B62C6AFDBF36 /* [CP] Check Pods Manifest.lock */ = { 388 | isa = PBXShellScriptBuildPhase; 389 | buildActionMask = 2147483647; 390 | files = ( 391 | ); 392 | inputPaths = ( 393 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 394 | "${PODS_ROOT}/Manifest.lock", 395 | ); 396 | name = "[CP] Check Pods Manifest.lock"; 397 | outputPaths = ( 398 | "$(DERIVED_FILE_DIR)/Pods-SwiftExampleTests-checkManifestLockResult.txt", 399 | ); 400 | runOnlyForDeploymentPostprocessing = 0; 401 | shellPath = /bin/sh; 402 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 403 | showEnvVarsInLog = 0; 404 | }; 405 | F496054A339F973A4F8738CA /* [CP] Check Pods Manifest.lock */ = { 406 | isa = PBXShellScriptBuildPhase; 407 | buildActionMask = 2147483647; 408 | files = ( 409 | ); 410 | inputPaths = ( 411 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 412 | "${PODS_ROOT}/Manifest.lock", 413 | ); 414 | name = "[CP] Check Pods Manifest.lock"; 415 | outputPaths = ( 416 | "$(DERIVED_FILE_DIR)/Pods-SwiftExample_tvOS-checkManifestLockResult.txt", 417 | ); 418 | runOnlyForDeploymentPostprocessing = 0; 419 | shellPath = /bin/sh; 420 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 421 | showEnvVarsInLog = 0; 422 | }; 423 | /* End PBXShellScriptBuildPhase section */ 424 | 425 | /* Begin PBXSourcesBuildPhase section */ 426 | 52F6802E1C88413D0049100A /* Sources */ = { 427 | isa = PBXSourcesBuildPhase; 428 | buildActionMask = 2147483647; 429 | files = ( 430 | 52F680381C88413D0049100A /* ViewController.swift in Sources */, 431 | 52F680361C88413D0049100A /* AppDelegate.swift in Sources */, 432 | ); 433 | runOnlyForDeploymentPostprocessing = 0; 434 | }; 435 | D15DD9C3211C67B3007E85A5 /* Sources */ = { 436 | isa = PBXSourcesBuildPhase; 437 | buildActionMask = 2147483647; 438 | files = ( 439 | D154ED3C212428C60011A546 /* ViewController.swift in Sources */, 440 | D154ED3B212428BE0011A546 /* AppDelegate.swift in Sources */, 441 | ); 442 | runOnlyForDeploymentPostprocessing = 0; 443 | }; 444 | DAB1A8B11C8D6FBF00DB140C /* Sources */ = { 445 | isa = PBXSourcesBuildPhase; 446 | buildActionMask = 2147483647; 447 | files = ( 448 | DAB1A8C11C8D700100DB140C /* WatchdogInspectorTests.swift in Sources */, 449 | ); 450 | runOnlyForDeploymentPostprocessing = 0; 451 | }; 452 | /* End PBXSourcesBuildPhase section */ 453 | 454 | /* Begin PBXTargetDependency section */ 455 | DAB1A8BB1C8D6FBF00DB140C /* PBXTargetDependency */ = { 456 | isa = PBXTargetDependency; 457 | target = 52F680311C88413D0049100A /* SwiftExample */; 458 | targetProxy = DAB1A8BA1C8D6FBF00DB140C /* PBXContainerItemProxy */; 459 | }; 460 | /* End PBXTargetDependency section */ 461 | 462 | /* Begin PBXVariantGroup section */ 463 | 52F680391C88413D0049100A /* Main.storyboard */ = { 464 | isa = PBXVariantGroup; 465 | children = ( 466 | 52F6803A1C88413D0049100A /* Base */, 467 | ); 468 | name = Main.storyboard; 469 | sourceTree = ""; 470 | }; 471 | 52F6803E1C88413D0049100A /* LaunchScreen.storyboard */ = { 472 | isa = PBXVariantGroup; 473 | children = ( 474 | 52F6803F1C88413D0049100A /* Base */, 475 | ); 476 | name = LaunchScreen.storyboard; 477 | sourceTree = ""; 478 | }; 479 | D15DD9CD211C67B4007E85A5 /* Main.storyboard */ = { 480 | isa = PBXVariantGroup; 481 | children = ( 482 | D15DD9CE211C67B4007E85A5 /* Base */, 483 | ); 484 | name = Main.storyboard; 485 | sourceTree = ""; 486 | }; 487 | /* End PBXVariantGroup section */ 488 | 489 | /* Begin XCBuildConfiguration section */ 490 | 52F680421C88413D0049100A /* Debug */ = { 491 | isa = XCBuildConfiguration; 492 | buildSettings = { 493 | ALWAYS_SEARCH_USER_PATHS = NO; 494 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 495 | CLANG_CXX_LIBRARY = "libc++"; 496 | CLANG_ENABLE_MODULES = YES; 497 | CLANG_ENABLE_OBJC_ARC = YES; 498 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 499 | CLANG_WARN_BOOL_CONVERSION = YES; 500 | CLANG_WARN_COMMA = YES; 501 | CLANG_WARN_CONSTANT_CONVERSION = YES; 502 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 503 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 504 | CLANG_WARN_EMPTY_BODY = YES; 505 | CLANG_WARN_ENUM_CONVERSION = YES; 506 | CLANG_WARN_INFINITE_RECURSION = YES; 507 | CLANG_WARN_INT_CONVERSION = YES; 508 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 509 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 510 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 511 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 512 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 513 | CLANG_WARN_STRICT_PROTOTYPES = YES; 514 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 515 | CLANG_WARN_UNREACHABLE_CODE = YES; 516 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 517 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 518 | COPY_PHASE_STRIP = NO; 519 | DEBUG_INFORMATION_FORMAT = dwarf; 520 | ENABLE_STRICT_OBJC_MSGSEND = YES; 521 | ENABLE_TESTABILITY = YES; 522 | GCC_C_LANGUAGE_STANDARD = gnu99; 523 | GCC_DYNAMIC_NO_PIC = NO; 524 | GCC_NO_COMMON_BLOCKS = YES; 525 | GCC_OPTIMIZATION_LEVEL = 0; 526 | GCC_PREPROCESSOR_DEFINITIONS = ( 527 | "DEBUG=1", 528 | "$(inherited)", 529 | ); 530 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 531 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 532 | GCC_WARN_UNDECLARED_SELECTOR = YES; 533 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 534 | GCC_WARN_UNUSED_FUNCTION = YES; 535 | GCC_WARN_UNUSED_VARIABLE = YES; 536 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 537 | MTL_ENABLE_DEBUG_INFO = YES; 538 | ONLY_ACTIVE_ARCH = YES; 539 | SDKROOT = iphoneos; 540 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 541 | SWIFT_VERSION = ""; 542 | TARGETED_DEVICE_FAMILY = "1,2"; 543 | }; 544 | name = Debug; 545 | }; 546 | 52F680431C88413D0049100A /* Release */ = { 547 | isa = XCBuildConfiguration; 548 | buildSettings = { 549 | ALWAYS_SEARCH_USER_PATHS = NO; 550 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 551 | CLANG_CXX_LIBRARY = "libc++"; 552 | CLANG_ENABLE_MODULES = YES; 553 | CLANG_ENABLE_OBJC_ARC = YES; 554 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 555 | CLANG_WARN_BOOL_CONVERSION = YES; 556 | CLANG_WARN_COMMA = YES; 557 | CLANG_WARN_CONSTANT_CONVERSION = YES; 558 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 559 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 560 | CLANG_WARN_EMPTY_BODY = YES; 561 | CLANG_WARN_ENUM_CONVERSION = YES; 562 | CLANG_WARN_INFINITE_RECURSION = YES; 563 | CLANG_WARN_INT_CONVERSION = YES; 564 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 565 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 566 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 567 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 568 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 569 | CLANG_WARN_STRICT_PROTOTYPES = YES; 570 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 571 | CLANG_WARN_UNREACHABLE_CODE = YES; 572 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 573 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 574 | COPY_PHASE_STRIP = NO; 575 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 576 | ENABLE_NS_ASSERTIONS = NO; 577 | ENABLE_STRICT_OBJC_MSGSEND = YES; 578 | GCC_C_LANGUAGE_STANDARD = gnu99; 579 | GCC_NO_COMMON_BLOCKS = YES; 580 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 581 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 582 | GCC_WARN_UNDECLARED_SELECTOR = YES; 583 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 584 | GCC_WARN_UNUSED_FUNCTION = YES; 585 | GCC_WARN_UNUSED_VARIABLE = YES; 586 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 587 | MTL_ENABLE_DEBUG_INFO = NO; 588 | SDKROOT = iphoneos; 589 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 590 | SWIFT_VERSION = ""; 591 | TARGETED_DEVICE_FAMILY = "1,2"; 592 | VALIDATE_PRODUCT = YES; 593 | }; 594 | name = Release; 595 | }; 596 | 52F680451C88413D0049100A /* Debug */ = { 597 | isa = XCBuildConfiguration; 598 | baseConfigurationReference = 7EDBC9C8A22052B4396C13A5 /* Pods-SwiftExample.debug.xcconfig */; 599 | buildSettings = { 600 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 601 | DEVELOPMENT_TEAM = 3F89ZY3P47; 602 | INFOPLIST_FILE = "SwiftExample/iOS Resources/Info.plist"; 603 | IPHONEOS_DEPLOYMENT_TARGET = 10.2; 604 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 605 | PRODUCT_BUNDLE_IDENTIFIER = "eu.notsobright.Video-App"; 606 | PRODUCT_NAME = "$(TARGET_NAME)"; 607 | SWIFT_SWIFT3_OBJC_INFERENCE = Default; 608 | SWIFT_VERSION = 4.0; 609 | }; 610 | name = Debug; 611 | }; 612 | 52F680461C88413D0049100A /* Release */ = { 613 | isa = XCBuildConfiguration; 614 | baseConfigurationReference = 306A6AA7EA9B167AA3E0C4D1 /* Pods-SwiftExample.release.xcconfig */; 615 | buildSettings = { 616 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 617 | DEVELOPMENT_TEAM = 3F89ZY3P47; 618 | INFOPLIST_FILE = "SwiftExample/iOS Resources/Info.plist"; 619 | IPHONEOS_DEPLOYMENT_TARGET = 10.2; 620 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 621 | PRODUCT_BUNDLE_IDENTIFIER = "eu.notsobright.Video-App"; 622 | PRODUCT_NAME = "$(TARGET_NAME)"; 623 | SWIFT_SWIFT3_OBJC_INFERENCE = Default; 624 | SWIFT_VERSION = 4.0; 625 | }; 626 | name = Release; 627 | }; 628 | D15DD9D3211C67B5007E85A5 /* Debug */ = { 629 | isa = XCBuildConfiguration; 630 | baseConfigurationReference = DC608DC6D0AEF3680CD74456 /* Pods-SwiftExample_tvOS.debug.xcconfig */; 631 | buildSettings = { 632 | ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; 633 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 634 | CLANG_ANALYZER_NONNULL = YES; 635 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 636 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 637 | CLANG_ENABLE_OBJC_WEAK = YES; 638 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 639 | CLANG_WARN_COMMA = YES; 640 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 641 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 642 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 643 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 644 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 645 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 646 | CLANG_WARN_STRICT_PROTOTYPES = YES; 647 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 648 | CODE_SIGN_STYLE = Automatic; 649 | DEVELOPMENT_TEAM = 3F89ZY3P47; 650 | GCC_C_LANGUAGE_STANDARD = gnu11; 651 | INFOPLIST_FILE = "SwiftExample/tvOS Resources/Info.plist"; 652 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 653 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 654 | MTL_FAST_MATH = YES; 655 | PRODUCT_BUNDLE_IDENTIFIER = "eu.notsobright.Video-App"; 656 | PRODUCT_NAME = "$(TARGET_NAME)"; 657 | SDKROOT = appletvos; 658 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 659 | SWIFT_VERSION = 4.0; 660 | TARGETED_DEVICE_FAMILY = 3; 661 | TVOS_DEPLOYMENT_TARGET = 10.2; 662 | }; 663 | name = Debug; 664 | }; 665 | D15DD9D4211C67B5007E85A5 /* Release */ = { 666 | isa = XCBuildConfiguration; 667 | baseConfigurationReference = 64A0C3D0F39E5B19E7BA3249 /* Pods-SwiftExample_tvOS.release.xcconfig */; 668 | buildSettings = { 669 | ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; 670 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 671 | CLANG_ANALYZER_NONNULL = YES; 672 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 673 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 674 | CLANG_ENABLE_OBJC_WEAK = YES; 675 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 676 | CLANG_WARN_COMMA = YES; 677 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 678 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 679 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 680 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 681 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 682 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 683 | CLANG_WARN_STRICT_PROTOTYPES = YES; 684 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 685 | CODE_SIGN_STYLE = Automatic; 686 | DEVELOPMENT_TEAM = 3F89ZY3P47; 687 | GCC_C_LANGUAGE_STANDARD = gnu11; 688 | INFOPLIST_FILE = "SwiftExample/tvOS Resources/Info.plist"; 689 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 690 | MTL_FAST_MATH = YES; 691 | PRODUCT_BUNDLE_IDENTIFIER = "eu.notsobright.Video-App"; 692 | PRODUCT_NAME = "$(TARGET_NAME)"; 693 | SDKROOT = appletvos; 694 | SWIFT_VERSION = 4.0; 695 | TARGETED_DEVICE_FAMILY = 3; 696 | TVOS_DEPLOYMENT_TARGET = 10.2; 697 | }; 698 | name = Release; 699 | }; 700 | DAB1A8BC1C8D6FBF00DB140C /* Debug */ = { 701 | isa = XCBuildConfiguration; 702 | baseConfigurationReference = CDBB5E80011649238DD4C434 /* Pods-SwiftExampleTests.debug.xcconfig */; 703 | buildSettings = { 704 | BUNDLE_LOADER = "$(TEST_HOST)"; 705 | CLANG_ENABLE_MODULES = YES; 706 | INFOPLIST_FILE = SwiftExampleTests/Info.plist; 707 | IPHONEOS_DEPLOYMENT_TARGET = 9.2; 708 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 709 | PRODUCT_BUNDLE_IDENTIFIER = TW.SwiftExampleTests; 710 | PRODUCT_NAME = "$(TARGET_NAME)"; 711 | SWIFT_OBJC_BRIDGING_HEADER = ""; 712 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 713 | SWIFT_SWIFT3_OBJC_INFERENCE = On; 714 | SWIFT_VERSION = 4.0; 715 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SwiftExample.app/SwiftExample"; 716 | }; 717 | name = Debug; 718 | }; 719 | DAB1A8BD1C8D6FBF00DB140C /* Release */ = { 720 | isa = XCBuildConfiguration; 721 | baseConfigurationReference = BC796F89CCE87EBD09CCC330 /* Pods-SwiftExampleTests.release.xcconfig */; 722 | buildSettings = { 723 | BUNDLE_LOADER = "$(TEST_HOST)"; 724 | CLANG_ENABLE_MODULES = YES; 725 | INFOPLIST_FILE = SwiftExampleTests/Info.plist; 726 | IPHONEOS_DEPLOYMENT_TARGET = 9.2; 727 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 728 | PRODUCT_BUNDLE_IDENTIFIER = TW.SwiftExampleTests; 729 | PRODUCT_NAME = "$(TARGET_NAME)"; 730 | SWIFT_OBJC_BRIDGING_HEADER = ""; 731 | SWIFT_SWIFT3_OBJC_INFERENCE = On; 732 | SWIFT_VERSION = 4.0; 733 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SwiftExample.app/SwiftExample"; 734 | }; 735 | name = Release; 736 | }; 737 | /* End XCBuildConfiguration section */ 738 | 739 | /* Begin XCConfigurationList section */ 740 | 52F6802D1C88413D0049100A /* Build configuration list for PBXProject "SwiftExample" */ = { 741 | isa = XCConfigurationList; 742 | buildConfigurations = ( 743 | 52F680421C88413D0049100A /* Debug */, 744 | 52F680431C88413D0049100A /* Release */, 745 | ); 746 | defaultConfigurationIsVisible = 0; 747 | defaultConfigurationName = Release; 748 | }; 749 | 52F680441C88413D0049100A /* Build configuration list for PBXNativeTarget "SwiftExample" */ = { 750 | isa = XCConfigurationList; 751 | buildConfigurations = ( 752 | 52F680451C88413D0049100A /* Debug */, 753 | 52F680461C88413D0049100A /* Release */, 754 | ); 755 | defaultConfigurationIsVisible = 0; 756 | defaultConfigurationName = Release; 757 | }; 758 | D15DD9D5211C67B5007E85A5 /* Build configuration list for PBXNativeTarget "SwiftExample_tvOS" */ = { 759 | isa = XCConfigurationList; 760 | buildConfigurations = ( 761 | D15DD9D3211C67B5007E85A5 /* Debug */, 762 | D15DD9D4211C67B5007E85A5 /* Release */, 763 | ); 764 | defaultConfigurationIsVisible = 0; 765 | defaultConfigurationName = Release; 766 | }; 767 | DAB1A8BE1C8D6FBF00DB140C /* Build configuration list for PBXNativeTarget "SwiftExampleTests" */ = { 768 | isa = XCConfigurationList; 769 | buildConfigurations = ( 770 | DAB1A8BC1C8D6FBF00DB140C /* Debug */, 771 | DAB1A8BD1C8D6FBF00DB140C /* Release */, 772 | ); 773 | defaultConfigurationIsVisible = 0; 774 | defaultConfigurationName = Release; 775 | }; 776 | /* End XCConfigurationList section */ 777 | }; 778 | rootObject = 52F6802A1C88413D0049100A /* Project object */; 779 | } 780 | -------------------------------------------------------------------------------- /SwiftExample/SwiftExample.xcodeproj/xcshareddata/xcschemes/SwiftExample.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 66 | 72 | 73 | 74 | 75 | 76 | 77 | 83 | 85 | 91 | 92 | 93 | 94 | 96 | 97 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // SwiftExample 4 | // 5 | // Created by Christian Menschel on 03/03/16. 6 | // Copyright © 2016 TAPWORK. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import WatchdogInspector 11 | 12 | @UIApplicationMain 13 | class AppDelegate: UIResponder, UIApplicationDelegate { 14 | 15 | var window: UIWindow? 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 18 | TWWatchdogInspector.start() 19 | return true 20 | } 21 | 22 | func applicationWillResignActive(_ application: UIApplication) { 23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 24 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 25 | } 26 | 27 | func applicationDidEnterBackground(_ application: UIApplication) { 28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 30 | } 31 | 32 | func applicationWillEnterForeground(_ application: UIApplication) { 33 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 34 | } 35 | 36 | func applicationDidBecomeActive(_ application: UIApplication) { 37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 38 | } 39 | 40 | func applicationWillTerminate(_ application: UIApplication) { 41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 42 | } 43 | 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // SwiftExample 4 | // 5 | // Created by Christian Menschel on 03/03/16. 6 | // Copyright © 2016 TAPWORK. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ViewController: UITableViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | self.edgesForExtendedLayout = UIRectEdge() 16 | } 17 | 18 | override func numberOfSections(in tableView: UITableView) -> Int { 19 | return 1 20 | } 21 | 22 | override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 23 | return 100 24 | } 25 | 26 | override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 27 | let cell = tableView.dequeueReusableCell(withIdentifier: "CELL", for: indexPath) 28 | cell.textLabel?.text = "Row \(indexPath.row)" 29 | Thread.sleep(forTimeInterval: 0.03) 30 | 31 | return cell 32 | } 33 | } 34 | 35 | -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/iOS Resources/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/iOS Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/iOS Resources/Assets.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "portrait", 5 | "idiom" : "iphone", 6 | "extent" : "full-screen", 7 | "minimum-system-version" : "11.0", 8 | "subtype" : "2436h", 9 | "scale" : "3x" 10 | }, 11 | { 12 | "orientation" : "landscape", 13 | "idiom" : "iphone", 14 | "extent" : "full-screen", 15 | "minimum-system-version" : "11.0", 16 | "subtype" : "2436h", 17 | "scale" : "3x" 18 | }, 19 | { 20 | "orientation" : "portrait", 21 | "idiom" : "iphone", 22 | "extent" : "full-screen", 23 | "minimum-system-version" : "8.0", 24 | "subtype" : "736h", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "orientation" : "landscape", 29 | "idiom" : "iphone", 30 | "extent" : "full-screen", 31 | "minimum-system-version" : "8.0", 32 | "subtype" : "736h", 33 | "scale" : "3x" 34 | }, 35 | { 36 | "orientation" : "portrait", 37 | "idiom" : "iphone", 38 | "extent" : "full-screen", 39 | "minimum-system-version" : "8.0", 40 | "subtype" : "667h", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "orientation" : "portrait", 45 | "idiom" : "iphone", 46 | "extent" : "full-screen", 47 | "minimum-system-version" : "7.0", 48 | "scale" : "2x" 49 | }, 50 | { 51 | "orientation" : "portrait", 52 | "idiom" : "iphone", 53 | "extent" : "full-screen", 54 | "minimum-system-version" : "7.0", 55 | "subtype" : "retina4", 56 | "scale" : "2x" 57 | }, 58 | { 59 | "orientation" : "portrait", 60 | "idiom" : "ipad", 61 | "extent" : "full-screen", 62 | "minimum-system-version" : "7.0", 63 | "scale" : "1x" 64 | }, 65 | { 66 | "orientation" : "landscape", 67 | "idiom" : "ipad", 68 | "extent" : "full-screen", 69 | "minimum-system-version" : "7.0", 70 | "scale" : "1x" 71 | }, 72 | { 73 | "orientation" : "portrait", 74 | "idiom" : "ipad", 75 | "extent" : "full-screen", 76 | "minimum-system-version" : "7.0", 77 | "scale" : "2x" 78 | }, 79 | { 80 | "orientation" : "landscape", 81 | "idiom" : "ipad", 82 | "extent" : "full-screen", 83 | "minimum-system-version" : "7.0", 84 | "scale" : "2x" 85 | }, 86 | { 87 | "orientation" : "portrait", 88 | "idiom" : "iphone", 89 | "extent" : "full-screen", 90 | "scale" : "1x" 91 | }, 92 | { 93 | "orientation" : "portrait", 94 | "idiom" : "iphone", 95 | "extent" : "full-screen", 96 | "scale" : "2x" 97 | }, 98 | { 99 | "orientation" : "portrait", 100 | "idiom" : "iphone", 101 | "extent" : "full-screen", 102 | "subtype" : "retina4", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "orientation" : "portrait", 107 | "idiom" : "ipad", 108 | "extent" : "to-status-bar", 109 | "scale" : "1x" 110 | }, 111 | { 112 | "orientation" : "portrait", 113 | "idiom" : "ipad", 114 | "extent" : "full-screen", 115 | "scale" : "1x" 116 | }, 117 | { 118 | "orientation" : "landscape", 119 | "idiom" : "ipad", 120 | "extent" : "to-status-bar", 121 | "scale" : "1x" 122 | }, 123 | { 124 | "orientation" : "landscape", 125 | "idiom" : "ipad", 126 | "extent" : "full-screen", 127 | "scale" : "1x" 128 | }, 129 | { 130 | "orientation" : "portrait", 131 | "idiom" : "ipad", 132 | "extent" : "to-status-bar", 133 | "scale" : "2x" 134 | }, 135 | { 136 | "orientation" : "portrait", 137 | "idiom" : "ipad", 138 | "extent" : "full-screen", 139 | "scale" : "2x" 140 | }, 141 | { 142 | "orientation" : "landscape", 143 | "idiom" : "ipad", 144 | "extent" : "to-status-bar", 145 | "scale" : "2x" 146 | }, 147 | { 148 | "orientation" : "landscape", 149 | "idiom" : "ipad", 150 | "extent" : "full-screen", 151 | "scale" : "2x" 152 | } 153 | ], 154 | "info" : { 155 | "version" : 1, 156 | "author" : "xcode" 157 | } 158 | } -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/iOS Resources/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 | -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/iOS Resources/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 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/iOS Resources/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 | -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/tvOS Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv" 5 | } 6 | ], 7 | "info" : { 8 | "version" : 1, 9 | "author" : "xcode" 10 | } 11 | } -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/tvOS Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/tvOS Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "layers" : [ 3 | { 4 | "filename" : "Front.imagestacklayer" 5 | }, 6 | { 7 | "filename" : "Middle.imagestacklayer" 8 | }, 9 | { 10 | "filename" : "Back.imagestacklayer" 11 | } 12 | ], 13 | "info" : { 14 | "version" : 1, 15 | "author" : "xcode" 16 | } 17 | } -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/tvOS Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv" 5 | } 6 | ], 7 | "info" : { 8 | "version" : 1, 9 | "author" : "xcode" 10 | } 11 | } -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/tvOS Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/tvOS Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv" 5 | } 6 | ], 7 | "info" : { 8 | "version" : 1, 9 | "author" : "xcode" 10 | } 11 | } -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/tvOS Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/tvOS Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "version" : 1, 14 | "author" : "xcode" 15 | } 16 | } -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/tvOS Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/tvOS Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "layers" : [ 3 | { 4 | "filename" : "Front.imagestacklayer" 5 | }, 6 | { 7 | "filename" : "Middle.imagestacklayer" 8 | }, 9 | { 10 | "filename" : "Back.imagestacklayer" 11 | } 12 | ], 13 | "info" : { 14 | "version" : 1, 15 | "author" : "xcode" 16 | } 17 | } -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/tvOS Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "version" : 1, 14 | "author" : "xcode" 15 | } 16 | } -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/tvOS Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/tvOS Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "version" : 1, 14 | "author" : "xcode" 15 | } 16 | } -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/tvOS Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/tvOS Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "assets" : [ 3 | { 4 | "size" : "1280x768", 5 | "idiom" : "tv", 6 | "filename" : "App Icon - App Store.imagestack", 7 | "role" : "primary-app-icon" 8 | }, 9 | { 10 | "size" : "400x240", 11 | "idiom" : "tv", 12 | "filename" : "App Icon.imagestack", 13 | "role" : "primary-app-icon" 14 | }, 15 | { 16 | "size" : "2320x720", 17 | "idiom" : "tv", 18 | "filename" : "Top Shelf Image Wide.imageset", 19 | "role" : "top-shelf-image-wide" 20 | }, 21 | { 22 | "size" : "1920x720", 23 | "idiom" : "tv", 24 | "filename" : "Top Shelf Image.imageset", 25 | "role" : "top-shelf-image" 26 | } 27 | ], 28 | "info" : { 29 | "version" : 1, 30 | "author" : "xcode" 31 | } 32 | } -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/tvOS Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "idiom" : "tv-marketing", 13 | "scale" : "1x" 14 | }, 15 | { 16 | "idiom" : "tv-marketing", 17 | "scale" : "2x" 18 | } 19 | ], 20 | "info" : { 21 | "version" : 1, 22 | "author" : "xcode" 23 | } 24 | } -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/tvOS Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "idiom" : "tv-marketing", 13 | "scale" : "1x" 14 | }, 15 | { 16 | "idiom" : "tv-marketing", 17 | "scale" : "2x" 18 | } 19 | ], 20 | "info" : { 21 | "version" : 1, 22 | "author" : "xcode" 23 | } 24 | } -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/tvOS Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/tvOS Resources/Assets.xcassets/Launch Image.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "landscape", 5 | "idiom" : "tv", 6 | "extent" : "full-screen", 7 | "minimum-system-version" : "11.0", 8 | "scale" : "2x" 9 | }, 10 | { 11 | "orientation" : "landscape", 12 | "idiom" : "tv", 13 | "extent" : "full-screen", 14 | "minimum-system-version" : "9.0", 15 | "scale" : "1x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/tvOS Resources/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 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /SwiftExample/SwiftExample/tvOS Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | SwiftExample 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | arm64 30 | 31 | UIUserInterfaceStyle 32 | Automatic 33 | 34 | 35 | -------------------------------------------------------------------------------- /SwiftExample/SwiftExampleTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /SwiftExample/SwiftExampleTests/WatchdogInspectorTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WatchdogInspectorTests.swift 3 | // SwiftExample 4 | // 5 | // Created by Christian Menschel on 07/03/16. 6 | // Copyright © 2016 TAPWORK. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | import WatchdogInspector 11 | 12 | class WatchdogInspectorTests: XCTestCase { 13 | 14 | func testIsRunning() { 15 | TWWatchdogInspector.start() 16 | XCTAssertTrue(TWWatchdogInspector.isRunning()) 17 | } 18 | 19 | func testIsNotRunning() { 20 | TWWatchdogInspector.start() 21 | TWWatchdogInspector.stop() 22 | XCTAssertFalse(TWWatchdogInspector.isRunning()) 23 | } 24 | 25 | func testToggleStart() { 26 | TWWatchdogInspector.start() 27 | TWWatchdogInspector.stop() 28 | TWWatchdogInspector.start() 29 | XCTAssertTrue(TWWatchdogInspector.isRunning()) 30 | } 31 | 32 | func testWindow() { 33 | TWWatchdogInspector.start() 34 | let window = UIApplication.shared.windows.last 35 | XCTAssertTrue(window?.rootViewController is TWWatchdogInspectorViewController) 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /WatchdogInspector.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'WatchdogInspector' 3 | s.version = '1.3.0' 4 | s.license = { :type => "MIT", :file => "LICENSE" } 5 | s.summary = 'Shows the current framerate (fps) in the status bar of your iOS app' 6 | s.description = 'WatchdogInspector displays the current framerate of your iOS app in the device\'s status bar. Whenever your framerate drops your status bar will get red. If everything is fine your status bar is happy and is green. To detect unwanted main thread stalls you can set a custom watchdog timeout.' 7 | s.homepage = 'https://github.com/tapwork/WatchdogInspector' 8 | s.social_media_url = 'https://twitter.com/cmenschel' 9 | s.authors = { 'Christian Menschel' => 'christian@tapwork.de' } 10 | s.source = { 11 | :git => 'https://github.com/tapwork/WatchdogInspector.git', 12 | :tag => s.version.to_s 13 | } 14 | s.ios.deployment_target = '8.0' 15 | s.tvos.deployment_target = '10.2' 16 | s.source_files = 'Classes/**.{h,m}' 17 | s.requires_arc = true 18 | end 19 | -------------------------------------------------------------------------------- /WatchdogInspector/WatchdogInspector-tvOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /WatchdogInspector/WatchdogInspector-tvOS/WatchdogInspector_tvOS.h: -------------------------------------------------------------------------------- 1 | // 2 | // WatchdogInspector_tvOS.h 3 | // WatchdogInspector-tvOS 4 | // 5 | // Created by Michele Dall'Agata on 09/08/2018. 6 | // Copyright © 2018 TAPWORK GmbH. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for WatchdogInspector_tvOS. 12 | FOUNDATION_EXPORT double WatchdogInspector_tvOSVersionNumber; 13 | 14 | //! Project version string for WatchdogInspector_tvOS. 15 | FOUNDATION_EXPORT const unsigned char WatchdogInspector_tvOSVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | #import "TWWatchdogInspector.h" 21 | -------------------------------------------------------------------------------- /WatchdogInspector/WatchdogInspector.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | D14D9978211C428B004DC052 /* WatchdogInspector_tvOS.h in Headers */ = {isa = PBXBuildFile; fileRef = D14D9976211C428B004DC052 /* WatchdogInspector_tvOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11 | D14D997C211C42FC004DC052 /* TWWatchdogInspector.h in Headers */ = {isa = PBXBuildFile; fileRef = DAB25AAF1E38A5F900317996 /* TWWatchdogInspector.h */; settings = {ATTRIBUTES = (Public, ); }; }; 12 | D14D997D211C42FC004DC052 /* TWWatchdogInspector.m in Sources */ = {isa = PBXBuildFile; fileRef = DAB25AB01E38A5F900317996 /* TWWatchdogInspector.m */; }; 13 | D14D997E211C42FC004DC052 /* TWWatchdogInspectorViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = DAB25AB11E38A5F900317996 /* TWWatchdogInspectorViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 14 | D14D997F211C42FC004DC052 /* TWWatchdogInspectorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DAB25AB21E38A5F900317996 /* TWWatchdogInspectorViewController.m */; }; 15 | DAB25AA91E38A5D500317996 /* WatchdogInspector.h in Headers */ = {isa = PBXBuildFile; fileRef = DAB25AA71E38A5D500317996 /* WatchdogInspector.h */; settings = {ATTRIBUTES = (Public, ); }; }; 16 | DAB25AB31E38A5F900317996 /* TWWatchdogInspector.h in Sources */ = {isa = PBXBuildFile; fileRef = DAB25AAF1E38A5F900317996 /* TWWatchdogInspector.h */; }; 17 | DAB25AB41E38A5F900317996 /* TWWatchdogInspector.m in Sources */ = {isa = PBXBuildFile; fileRef = DAB25AB01E38A5F900317996 /* TWWatchdogInspector.m */; }; 18 | DAB25AB51E38A5F900317996 /* TWWatchdogInspectorViewController.h in Sources */ = {isa = PBXBuildFile; fileRef = DAB25AB11E38A5F900317996 /* TWWatchdogInspectorViewController.h */; }; 19 | DAB25AB61E38A5F900317996 /* TWWatchdogInspectorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DAB25AB21E38A5F900317996 /* TWWatchdogInspectorViewController.m */; }; 20 | DD529AD11F9DC810006424F3 /* TWWatchdogInspector.h in Headers */ = {isa = PBXBuildFile; fileRef = DAB25AAF1E38A5F900317996 /* TWWatchdogInspector.h */; settings = {ATTRIBUTES = (Public, ); }; }; 21 | /* End PBXBuildFile section */ 22 | 23 | /* Begin PBXFileReference section */ 24 | D14D9974211C428B004DC052 /* WatchdogInspector_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WatchdogInspector_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 25 | D14D9976211C428B004DC052 /* WatchdogInspector_tvOS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WatchdogInspector_tvOS.h; sourceTree = ""; }; 26 | D14D9977211C428B004DC052 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 27 | DAB25AA41E38A5D500317996 /* WatchdogInspector.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WatchdogInspector.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 28 | DAB25AA71E38A5D500317996 /* WatchdogInspector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WatchdogInspector.h; sourceTree = ""; }; 29 | DAB25AA81E38A5D500317996 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 30 | DAB25AAF1E38A5F900317996 /* TWWatchdogInspector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TWWatchdogInspector.h; path = ../../Classes/TWWatchdogInspector.h; sourceTree = ""; }; 31 | DAB25AB01E38A5F900317996 /* TWWatchdogInspector.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = TWWatchdogInspector.m; path = ../../Classes/TWWatchdogInspector.m; sourceTree = ""; }; 32 | DAB25AB11E38A5F900317996 /* TWWatchdogInspectorViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TWWatchdogInspectorViewController.h; path = ../../Classes/TWWatchdogInspectorViewController.h; sourceTree = ""; }; 33 | DAB25AB21E38A5F900317996 /* TWWatchdogInspectorViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = TWWatchdogInspectorViewController.m; path = ../../Classes/TWWatchdogInspectorViewController.m; sourceTree = ""; }; 34 | /* End PBXFileReference section */ 35 | 36 | /* Begin PBXFrameworksBuildPhase section */ 37 | D14D9971211C428B004DC052 /* Frameworks */ = { 38 | isa = PBXFrameworksBuildPhase; 39 | buildActionMask = 2147483647; 40 | files = ( 41 | ); 42 | runOnlyForDeploymentPostprocessing = 0; 43 | }; 44 | DAB25AA01E38A5D500317996 /* Frameworks */ = { 45 | isa = PBXFrameworksBuildPhase; 46 | buildActionMask = 2147483647; 47 | files = ( 48 | ); 49 | runOnlyForDeploymentPostprocessing = 0; 50 | }; 51 | /* End PBXFrameworksBuildPhase section */ 52 | 53 | /* Begin PBXGroup section */ 54 | D14D9975211C428B004DC052 /* WatchdogInspector-tvOS */ = { 55 | isa = PBXGroup; 56 | children = ( 57 | D14D9976211C428B004DC052 /* WatchdogInspector_tvOS.h */, 58 | D14D9977211C428B004DC052 /* Info.plist */, 59 | ); 60 | path = "WatchdogInspector-tvOS"; 61 | sourceTree = ""; 62 | }; 63 | DAB25A9A1E38A5D500317996 = { 64 | isa = PBXGroup; 65 | children = ( 66 | DAB25AA61E38A5D500317996 /* WatchdogInspector */, 67 | D14D9975211C428B004DC052 /* WatchdogInspector-tvOS */, 68 | DAB25AA51E38A5D500317996 /* Products */, 69 | ); 70 | sourceTree = ""; 71 | }; 72 | DAB25AA51E38A5D500317996 /* Products */ = { 73 | isa = PBXGroup; 74 | children = ( 75 | DAB25AA41E38A5D500317996 /* WatchdogInspector.framework */, 76 | D14D9974211C428B004DC052 /* WatchdogInspector_tvOS.framework */, 77 | ); 78 | name = Products; 79 | sourceTree = ""; 80 | }; 81 | DAB25AA61E38A5D500317996 /* WatchdogInspector */ = { 82 | isa = PBXGroup; 83 | children = ( 84 | DAB25AAF1E38A5F900317996 /* TWWatchdogInspector.h */, 85 | DAB25AB01E38A5F900317996 /* TWWatchdogInspector.m */, 86 | DAB25AB11E38A5F900317996 /* TWWatchdogInspectorViewController.h */, 87 | DAB25AB21E38A5F900317996 /* TWWatchdogInspectorViewController.m */, 88 | DAB25AA71E38A5D500317996 /* WatchdogInspector.h */, 89 | DAB25AA81E38A5D500317996 /* Info.plist */, 90 | ); 91 | path = WatchdogInspector; 92 | sourceTree = ""; 93 | }; 94 | /* End PBXGroup section */ 95 | 96 | /* Begin PBXHeadersBuildPhase section */ 97 | D14D996F211C428B004DC052 /* Headers */ = { 98 | isa = PBXHeadersBuildPhase; 99 | buildActionMask = 2147483647; 100 | files = ( 101 | D14D9978211C428B004DC052 /* WatchdogInspector_tvOS.h in Headers */, 102 | D14D997C211C42FC004DC052 /* TWWatchdogInspector.h in Headers */, 103 | D14D997E211C42FC004DC052 /* TWWatchdogInspectorViewController.h in Headers */, 104 | ); 105 | runOnlyForDeploymentPostprocessing = 0; 106 | }; 107 | DAB25AA11E38A5D500317996 /* Headers */ = { 108 | isa = PBXHeadersBuildPhase; 109 | buildActionMask = 2147483647; 110 | files = ( 111 | DAB25AA91E38A5D500317996 /* WatchdogInspector.h in Headers */, 112 | DD529AD11F9DC810006424F3 /* TWWatchdogInspector.h in Headers */, 113 | ); 114 | runOnlyForDeploymentPostprocessing = 0; 115 | }; 116 | /* End PBXHeadersBuildPhase section */ 117 | 118 | /* Begin PBXNativeTarget section */ 119 | D14D9973211C428B004DC052 /* WatchdogInspector-tvOS */ = { 120 | isa = PBXNativeTarget; 121 | buildConfigurationList = D14D997B211C428B004DC052 /* Build configuration list for PBXNativeTarget "WatchdogInspector-tvOS" */; 122 | buildPhases = ( 123 | D14D996F211C428B004DC052 /* Headers */, 124 | D14D9970211C428B004DC052 /* Sources */, 125 | D14D9971211C428B004DC052 /* Frameworks */, 126 | D14D9972211C428B004DC052 /* Resources */, 127 | ); 128 | buildRules = ( 129 | ); 130 | dependencies = ( 131 | ); 132 | name = "WatchdogInspector-tvOS"; 133 | productName = "WatchdogInspector-tvOS"; 134 | productReference = D14D9974211C428B004DC052 /* WatchdogInspector_tvOS.framework */; 135 | productType = "com.apple.product-type.framework"; 136 | }; 137 | DAB25AA31E38A5D500317996 /* WatchdogInspector */ = { 138 | isa = PBXNativeTarget; 139 | buildConfigurationList = DAB25AAC1E38A5D500317996 /* Build configuration list for PBXNativeTarget "WatchdogInspector" */; 140 | buildPhases = ( 141 | DAB25A9F1E38A5D500317996 /* Sources */, 142 | DAB25AA01E38A5D500317996 /* Frameworks */, 143 | DAB25AA11E38A5D500317996 /* Headers */, 144 | DAB25AA21E38A5D500317996 /* Resources */, 145 | ); 146 | buildRules = ( 147 | ); 148 | dependencies = ( 149 | ); 150 | name = WatchdogInspector; 151 | productName = WatchdogInspector; 152 | productReference = DAB25AA41E38A5D500317996 /* WatchdogInspector.framework */; 153 | productType = "com.apple.product-type.framework"; 154 | }; 155 | /* End PBXNativeTarget section */ 156 | 157 | /* Begin PBXProject section */ 158 | DAB25A9B1E38A5D500317996 /* Project object */ = { 159 | isa = PBXProject; 160 | attributes = { 161 | LastUpgradeCheck = 1000; 162 | ORGANIZATIONNAME = "TAPWORK GmbH"; 163 | TargetAttributes = { 164 | D14D9973211C428B004DC052 = { 165 | CreatedOnToolsVersion = 10.0; 166 | ProvisioningStyle = Automatic; 167 | }; 168 | DAB25AA31E38A5D500317996 = { 169 | CreatedOnToolsVersion = 8.2.1; 170 | ProvisioningStyle = Automatic; 171 | }; 172 | }; 173 | }; 174 | buildConfigurationList = DAB25A9E1E38A5D500317996 /* Build configuration list for PBXProject "WatchdogInspector" */; 175 | compatibilityVersion = "Xcode 3.2"; 176 | developmentRegion = English; 177 | hasScannedForEncodings = 0; 178 | knownRegions = ( 179 | en, 180 | ); 181 | mainGroup = DAB25A9A1E38A5D500317996; 182 | productRefGroup = DAB25AA51E38A5D500317996 /* Products */; 183 | projectDirPath = ""; 184 | projectRoot = ""; 185 | targets = ( 186 | DAB25AA31E38A5D500317996 /* WatchdogInspector */, 187 | D14D9973211C428B004DC052 /* WatchdogInspector-tvOS */, 188 | ); 189 | }; 190 | /* End PBXProject section */ 191 | 192 | /* Begin PBXResourcesBuildPhase section */ 193 | D14D9972211C428B004DC052 /* Resources */ = { 194 | isa = PBXResourcesBuildPhase; 195 | buildActionMask = 2147483647; 196 | files = ( 197 | ); 198 | runOnlyForDeploymentPostprocessing = 0; 199 | }; 200 | DAB25AA21E38A5D500317996 /* Resources */ = { 201 | isa = PBXResourcesBuildPhase; 202 | buildActionMask = 2147483647; 203 | files = ( 204 | ); 205 | runOnlyForDeploymentPostprocessing = 0; 206 | }; 207 | /* End PBXResourcesBuildPhase section */ 208 | 209 | /* Begin PBXSourcesBuildPhase section */ 210 | D14D9970211C428B004DC052 /* Sources */ = { 211 | isa = PBXSourcesBuildPhase; 212 | buildActionMask = 2147483647; 213 | files = ( 214 | D14D997F211C42FC004DC052 /* TWWatchdogInspectorViewController.m in Sources */, 215 | D14D997D211C42FC004DC052 /* TWWatchdogInspector.m in Sources */, 216 | ); 217 | runOnlyForDeploymentPostprocessing = 0; 218 | }; 219 | DAB25A9F1E38A5D500317996 /* Sources */ = { 220 | isa = PBXSourcesBuildPhase; 221 | buildActionMask = 2147483647; 222 | files = ( 223 | DAB25AB31E38A5F900317996 /* TWWatchdogInspector.h in Sources */, 224 | DAB25AB41E38A5F900317996 /* TWWatchdogInspector.m in Sources */, 225 | DAB25AB51E38A5F900317996 /* TWWatchdogInspectorViewController.h in Sources */, 226 | DAB25AB61E38A5F900317996 /* TWWatchdogInspectorViewController.m in Sources */, 227 | ); 228 | runOnlyForDeploymentPostprocessing = 0; 229 | }; 230 | /* End PBXSourcesBuildPhase section */ 231 | 232 | /* Begin XCBuildConfiguration section */ 233 | D14D9979211C428B004DC052 /* Debug */ = { 234 | isa = XCBuildConfiguration; 235 | buildSettings = { 236 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 237 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 238 | CLANG_ENABLE_OBJC_WEAK = YES; 239 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 240 | CLANG_WARN_COMMA = YES; 241 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 242 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 243 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 244 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 245 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 246 | CLANG_WARN_STRICT_PROTOTYPES = YES; 247 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 248 | CODE_SIGN_IDENTITY = ""; 249 | CODE_SIGN_STYLE = Automatic; 250 | DEFINES_MODULE = YES; 251 | DYLIB_COMPATIBILITY_VERSION = 1; 252 | DYLIB_CURRENT_VERSION = 1; 253 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 254 | GCC_C_LANGUAGE_STANDARD = gnu11; 255 | INFOPLIST_FILE = "WatchdogInspector-tvOS/Info.plist"; 256 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 257 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 258 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 259 | MTL_FAST_MATH = YES; 260 | PRODUCT_BUNDLE_IDENTIFIER = "eu.notsobright.WatchdogInspector-tvOS"; 261 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 262 | SDKROOT = appletvos; 263 | SKIP_INSTALL = YES; 264 | SWIFT_VERSION = 4.2; 265 | TARGETED_DEVICE_FAMILY = 3; 266 | TVOS_DEPLOYMENT_TARGET = 10.2; 267 | }; 268 | name = Debug; 269 | }; 270 | D14D997A211C428B004DC052 /* Release */ = { 271 | isa = XCBuildConfiguration; 272 | buildSettings = { 273 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 274 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 275 | CLANG_ENABLE_OBJC_WEAK = YES; 276 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 277 | CLANG_WARN_COMMA = YES; 278 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 279 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 280 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 281 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 282 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 283 | CLANG_WARN_STRICT_PROTOTYPES = YES; 284 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 285 | CODE_SIGN_IDENTITY = ""; 286 | CODE_SIGN_STYLE = Automatic; 287 | DEFINES_MODULE = YES; 288 | DYLIB_COMPATIBILITY_VERSION = 1; 289 | DYLIB_CURRENT_VERSION = 1; 290 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 291 | GCC_C_LANGUAGE_STANDARD = gnu11; 292 | INFOPLIST_FILE = "WatchdogInspector-tvOS/Info.plist"; 293 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 294 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 295 | MTL_FAST_MATH = YES; 296 | PRODUCT_BUNDLE_IDENTIFIER = "eu.notsobright.WatchdogInspector-tvOS"; 297 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 298 | SDKROOT = appletvos; 299 | SKIP_INSTALL = YES; 300 | SWIFT_VERSION = 4.2; 301 | TARGETED_DEVICE_FAMILY = 3; 302 | TVOS_DEPLOYMENT_TARGET = 10.2; 303 | }; 304 | name = Release; 305 | }; 306 | DAB25AAA1E38A5D500317996 /* Debug */ = { 307 | isa = XCBuildConfiguration; 308 | buildSettings = { 309 | ALWAYS_SEARCH_USER_PATHS = NO; 310 | CLANG_ANALYZER_NONNULL = YES; 311 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 312 | CLANG_CXX_LIBRARY = "libc++"; 313 | CLANG_ENABLE_MODULES = YES; 314 | CLANG_ENABLE_OBJC_ARC = YES; 315 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 316 | CLANG_WARN_BOOL_CONVERSION = YES; 317 | CLANG_WARN_COMMA = YES; 318 | CLANG_WARN_CONSTANT_CONVERSION = YES; 319 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 320 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 321 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 322 | CLANG_WARN_EMPTY_BODY = YES; 323 | CLANG_WARN_ENUM_CONVERSION = YES; 324 | CLANG_WARN_INFINITE_RECURSION = YES; 325 | CLANG_WARN_INT_CONVERSION = YES; 326 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 327 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 328 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 329 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 330 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 331 | CLANG_WARN_STRICT_PROTOTYPES = YES; 332 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 333 | CLANG_WARN_UNREACHABLE_CODE = YES; 334 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 335 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 336 | COPY_PHASE_STRIP = NO; 337 | CURRENT_PROJECT_VERSION = 1; 338 | DEBUG_INFORMATION_FORMAT = dwarf; 339 | ENABLE_STRICT_OBJC_MSGSEND = YES; 340 | ENABLE_TESTABILITY = YES; 341 | GCC_C_LANGUAGE_STANDARD = gnu99; 342 | GCC_DYNAMIC_NO_PIC = NO; 343 | GCC_NO_COMMON_BLOCKS = YES; 344 | GCC_OPTIMIZATION_LEVEL = 0; 345 | GCC_PREPROCESSOR_DEFINITIONS = ( 346 | "DEBUG=1", 347 | "$(inherited)", 348 | ); 349 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 350 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 351 | GCC_WARN_UNDECLARED_SELECTOR = YES; 352 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 353 | GCC_WARN_UNUSED_FUNCTION = YES; 354 | GCC_WARN_UNUSED_VARIABLE = YES; 355 | IPHONEOS_DEPLOYMENT_TARGET = 10.2; 356 | MTL_ENABLE_DEBUG_INFO = YES; 357 | ONLY_ACTIVE_ARCH = YES; 358 | SDKROOT = iphoneos; 359 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 360 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 361 | TARGETED_DEVICE_FAMILY = "1,2"; 362 | VERSIONING_SYSTEM = "apple-generic"; 363 | VERSION_INFO_PREFIX = ""; 364 | }; 365 | name = Debug; 366 | }; 367 | DAB25AAB1E38A5D500317996 /* Release */ = { 368 | isa = XCBuildConfiguration; 369 | buildSettings = { 370 | ALWAYS_SEARCH_USER_PATHS = NO; 371 | CLANG_ANALYZER_NONNULL = YES; 372 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 373 | CLANG_CXX_LIBRARY = "libc++"; 374 | CLANG_ENABLE_MODULES = YES; 375 | CLANG_ENABLE_OBJC_ARC = YES; 376 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 377 | CLANG_WARN_BOOL_CONVERSION = YES; 378 | CLANG_WARN_COMMA = YES; 379 | CLANG_WARN_CONSTANT_CONVERSION = YES; 380 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 381 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 382 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 383 | CLANG_WARN_EMPTY_BODY = YES; 384 | CLANG_WARN_ENUM_CONVERSION = YES; 385 | CLANG_WARN_INFINITE_RECURSION = YES; 386 | CLANG_WARN_INT_CONVERSION = YES; 387 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 388 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 389 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 390 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 391 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 392 | CLANG_WARN_STRICT_PROTOTYPES = YES; 393 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 394 | CLANG_WARN_UNREACHABLE_CODE = YES; 395 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 396 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 397 | COPY_PHASE_STRIP = NO; 398 | CURRENT_PROJECT_VERSION = 1; 399 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 400 | ENABLE_NS_ASSERTIONS = NO; 401 | ENABLE_STRICT_OBJC_MSGSEND = YES; 402 | GCC_C_LANGUAGE_STANDARD = gnu99; 403 | GCC_NO_COMMON_BLOCKS = YES; 404 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 405 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 406 | GCC_WARN_UNDECLARED_SELECTOR = YES; 407 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 408 | GCC_WARN_UNUSED_FUNCTION = YES; 409 | GCC_WARN_UNUSED_VARIABLE = YES; 410 | IPHONEOS_DEPLOYMENT_TARGET = 10.2; 411 | MTL_ENABLE_DEBUG_INFO = NO; 412 | SDKROOT = iphoneos; 413 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 414 | TARGETED_DEVICE_FAMILY = "1,2"; 415 | VALIDATE_PRODUCT = YES; 416 | VERSIONING_SYSTEM = "apple-generic"; 417 | VERSION_INFO_PREFIX = ""; 418 | }; 419 | name = Release; 420 | }; 421 | DAB25AAD1E38A5D500317996 /* Debug */ = { 422 | isa = XCBuildConfiguration; 423 | buildSettings = { 424 | CODE_SIGN_IDENTITY = ""; 425 | DEFINES_MODULE = YES; 426 | DYLIB_COMPATIBILITY_VERSION = 1; 427 | DYLIB_CURRENT_VERSION = 1; 428 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 429 | INFOPLIST_FILE = WatchdogInspector/Info.plist; 430 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 431 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 432 | PRODUCT_BUNDLE_IDENTIFIER = de.tapwork.WatchdogInspector; 433 | PRODUCT_NAME = "$(TARGET_NAME)"; 434 | SKIP_INSTALL = YES; 435 | SWIFT_VERSION = 3.0; 436 | }; 437 | name = Debug; 438 | }; 439 | DAB25AAE1E38A5D500317996 /* Release */ = { 440 | isa = XCBuildConfiguration; 441 | buildSettings = { 442 | CODE_SIGN_IDENTITY = ""; 443 | DEFINES_MODULE = YES; 444 | DYLIB_COMPATIBILITY_VERSION = 1; 445 | DYLIB_CURRENT_VERSION = 1; 446 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 447 | INFOPLIST_FILE = WatchdogInspector/Info.plist; 448 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 449 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 450 | PRODUCT_BUNDLE_IDENTIFIER = de.tapwork.WatchdogInspector; 451 | PRODUCT_NAME = "$(TARGET_NAME)"; 452 | SKIP_INSTALL = YES; 453 | SWIFT_VERSION = 3.0; 454 | }; 455 | name = Release; 456 | }; 457 | /* End XCBuildConfiguration section */ 458 | 459 | /* Begin XCConfigurationList section */ 460 | D14D997B211C428B004DC052 /* Build configuration list for PBXNativeTarget "WatchdogInspector-tvOS" */ = { 461 | isa = XCConfigurationList; 462 | buildConfigurations = ( 463 | D14D9979211C428B004DC052 /* Debug */, 464 | D14D997A211C428B004DC052 /* Release */, 465 | ); 466 | defaultConfigurationIsVisible = 0; 467 | defaultConfigurationName = Release; 468 | }; 469 | DAB25A9E1E38A5D500317996 /* Build configuration list for PBXProject "WatchdogInspector" */ = { 470 | isa = XCConfigurationList; 471 | buildConfigurations = ( 472 | DAB25AAA1E38A5D500317996 /* Debug */, 473 | DAB25AAB1E38A5D500317996 /* Release */, 474 | ); 475 | defaultConfigurationIsVisible = 0; 476 | defaultConfigurationName = Release; 477 | }; 478 | DAB25AAC1E38A5D500317996 /* Build configuration list for PBXNativeTarget "WatchdogInspector" */ = { 479 | isa = XCConfigurationList; 480 | buildConfigurations = ( 481 | DAB25AAD1E38A5D500317996 /* Debug */, 482 | DAB25AAE1E38A5D500317996 /* Release */, 483 | ); 484 | defaultConfigurationIsVisible = 0; 485 | defaultConfigurationName = Release; 486 | }; 487 | /* End XCConfigurationList section */ 488 | }; 489 | rootObject = DAB25A9B1E38A5D500317996 /* Project object */; 490 | } 491 | -------------------------------------------------------------------------------- /WatchdogInspector/WatchdogInspector.xcodeproj/xcshareddata/xcschemes/WatchdogInspector.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 70 | 71 | 72 | 73 | 75 | 76 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /WatchdogInspector/WatchdogInspector/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /WatchdogInspector/WatchdogInspector/WatchdogInspector.h: -------------------------------------------------------------------------------- 1 | // 2 | // WatchdogInspector.h 3 | // WatchdogInspector 4 | // 5 | // Created by Christian Menschel on 25.01.2017. 6 | // Copyright © 2017 TAPWORK GmbH. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for WatchdogInspector. 12 | FOUNDATION_EXPORT double WatchdogInspectorVersionNumber; 13 | 14 | //! Project version string for WatchdogInspector. 15 | FOUNDATION_EXPORT const unsigned char WatchdogInspectorVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | #import 21 | -------------------------------------------------------------------------------- /screencast.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tapwork/WatchdogInspector/d80c2e34dea5a4db4a6d449ff419dcd2d6025e37/screencast.gif --------------------------------------------------------------------------------